diff --git a/.claude/skills/api-v2-routes/SKILL.md b/.claude/skills/api-v2-routes/SKILL.md new file mode 100644 index 000000000..2644b4338 --- /dev/null +++ b/.claude/skills/api-v2-routes/SKILL.md @@ -0,0 +1,186 @@ +--- +name: api-v2-routes +description: Use when adding or changing a resource on the Huma-backed /api/v2 API (new endpoints, porting a v1 resource, editing pkg/routes/api/v2/). Covers per-operation Huma handlers, the shared envelopes, error/auth bridging, REST verb conventions, and what's automatic. +user-invocable: true +--- + +# Adding /api/v2 routes for a CRUDable resource + +`/api/v2` is served by [Huma v2](https://github.com/danielgtaylor/huma) mounted on an Echo group via the vendored `pkg/modules/humaecho5` adapter. Unlike v1's generic `WebHandler`, each operation is a typed Huma handler registered explicitly. The handlers are thin: they pull auth off the context, call the same `pkg/web/handler.Do*` functions v1 uses, and translate domain errors into RFC 9457 responses. + +**Reference implementation:** `pkg/routes/api/v2/labels.go` is the canonical example — copy its shape. Shared envelopes live in `pkg/routes/api/v2/types.go`; the auth/error bridge in `pkg/routes/api/v2/errors.go`; config in `pkg/routes/api/v2/huma.go`. + +## Prerequisite: the model must be CRUDable + +v2 handlers call `handler.DoReadAll/DoReadOne/DoCreate/DoUpdate/DoDelete`, which invoke the model's `Can*` methods. If the model isn't already a working v1 resource, do the model work first — invoke the **`crudable`** skill. Permissions are enforced at the model level; **never** re-check them in a v2 handler. + +**Every exposed model field needs a `doc:` tag.** v2's schema is reflected from struct tags at runtime; Huma cannot read the Go doc comments swaggo uses for v1. A field without `doc:"..."` ships with no description in the spec. Add the tag alongside the existing comment (keep both — swaggo still reads the comment for v1, and they should stay in sync): + +```go +// The title of the label. You'll see this one on tasks associated with it. +Title string `json:"title" minLength:"1" maxLength:"250" doc:"The title of the label. You'll see this one on tasks associated with it."` +``` + +These model edits are safe for v1 — swaggo, XORM, and govalidator all ignore the `doc` tag. (Huma *does* read validation tags like `minLength`/`maxLength`/`enum`/`format`, so those carry over without a `doc` tag.) As with operations, a `doc` tag earns its place when it says something the field name and type don't: a format hint ("hex, 6 chars"), a read-only note ("set by the server; ignored on write"), units, or allowed values. "The label description." on a `Description` field is filler. See `pkg/models/label.go` for the reference. + +**Mark server-controlled fields `readOnly:"true"`.** Because the same model struct is the request body *and* the response, fields the client can never set — `id`, `created`, `updated`, `created_by`, and similar server-derived relations/IDs — should carry `readOnly:"true"`. Huma reflects this into the OpenAPI schema (`readOnly: true`), so docs and client generators present the field as response-only and drop it from request examples: + +```go +ID int64 `json:"id" readOnly:"true" doc:"The unique, numeric id of this label."` +CreatedBy *user.User `xorm:"-" json:"created_by" readOnly:"true" doc:"The user who created this label."` +Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this label was created. You cannot change this value."` +``` + +The tag is **documentation only** — Huma does *not* reject these fields if a client sends them on create/update. Actual immutability still comes from the model layer (XORM-managed `created`/`updated`, `created_by` being `xorm:"-"` and set server-side). It's also harmless on v1 (swaggo/XORM/govalidator ignore it). Don't bother tagging fields that are already `json:"-"` (absent from the schema entirely), and skip it on response-only structs like the error model — there it's cosmetic since they never appear as a request body. See `pkg/models/label.go` and `pkg/user/user.go`. + +## Steps + +### 1. Create `pkg/routes/api/v2/.go` + +Define the list-response body, a `RegisterRoutes(api huma.API)` function, and one handler per operation. Mirror `labels.go` exactly: + +```go +// Element type matches what models..ReadAll returns; extra fields +// tagged json:"-" keep the wire shape identical to the plain model. +type fooListBody struct { + Body Paginated[*models.Foo] +} + +func RegisterFooRoutes(api huma.API) { + tags := []string{"foos"} + + Register(api, huma.Operation{ + OperationID: "foos-list", + Summary: "List foos", + Description: "Returns the foos the authenticated user has access to, paginated.", + Method: http.MethodGet, Path: "/foos", Tags: tags, + }, foosList) + Register(api, huma.Operation{OperationID: "foos-read", Summary: "Get a foo", Description: "...", Method: http.MethodGet, Path: "/foos/{id}", Tags: tags}, foosRead) + Register(api, huma.Operation{OperationID: "foos-create", Summary: "Create a foo", Description: "...", Method: http.MethodPost, Path: "/foos", Tags: tags}, foosCreate) + Register(api, huma.Operation{OperationID: "foos-update", Summary: "Update a foo", Description: "...", Method: http.MethodPut, Path: "/foos/{id}", Tags: tags}, foosUpdate) + Register(api, huma.Operation{OperationID: "foos-delete", Summary: "Delete a foo", Description: "...", Method: http.MethodDelete, Path: "/foos/{id}", Tags: tags}, foosDelete) +} +``` + +Use the package's `Register` wrapper, **not** `huma.Register` directly — it sets `DefaultStatus` from the verb (POST → 201, DELETE → 204). Don't spell out `DefaultStatus` unless you need a non-default code. Don't set `Security:` per operation — it's applied globally in `NewAPI`. + +**Every operation needs a `Summary` and `Description`.** v2's OpenAPI spec is generated from these `Operation` fields at runtime — unlike v1's swaggo, Huma cannot read Go doc comments, so anything you don't put in the `Operation` (or in a `doc:` tag, see below) is simply absent from the spec and the docs UI. An operation without them ships undocumented. + +**Make the description document the non-obvious — don't restate the verb+noun.** "Deletes a label" adds nothing over `DELETE /labels/{id}`. Spend the description on what a consumer *can't* infer from the method/path/schema: permission scope ("only the owner may delete it"; "returns only labels you can see, not a global list"), full-replace vs partial (PUT replaces, PATCH merges), read-only/conditional behavior (ETag → `If-None-Match` → 304), side effects (create sets ownership), non-obvious status codes. If the honest description is just the verb+noun, a short summary alone is fine — don't pad. See `labels.go` for the calibration. + +### 2. Write the handlers + +Every handler: pull auth with `authFromCtx(ctx)`, call the matching `handler.Do*`, wrap returned errors in `translateDomainError`. Use the shared envelopes from `types.go` (`singleBody`, `singleReadBody`, `emptyBody`, `ListParams`, `Paginated`/`NewPaginated`). + +- **List** takes `*ListParams` (gives you `page`/`per_page`/`q` for free, already `doc:`-tagged in `types.go` — no need to re-document them) and returns `*fooListBody`. **You must type-assert the `DoReadAll` result to the concrete slice** — `result` is `any`, and a blind cast or a generic wrapper silently serialises `[]` (the "generic-any silent-empty trap"). Return a hard error on mismatch: + ```go + items, ok := result.([]*models.Foo) + if !ok { + return nil, fmt.Errorf("foos.ReadAll returned unexpected type %T", result) + } + return &fooListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil + ``` +- **Extra query params go *directly* on the handler's input struct — not in a shared/embedded helper.** Beyond `ListParams`, if an operation needs its own query params (`expand`, `order_by`, `include_public`, …), declare each as a direct field with its own `query:"…"` tag on that operation's input struct, then bind it onto the model. A shared or embedded struct of query fields silently **fails to bind** under Huma when combined with other query params/embeds — the field arrives empty (hit while implementing Project's `expand`). Flatten them into the input struct. +- **Read** embeds `conditional.Params` in its input. To surface the caller's permission, define a small per-resource response struct that **embeds the model by value** and adds the permission: `type fooReadBody struct { models.Foo; MaxPermission models.Permission \`json:"max_permission" readOnly:"true" doc:"..."\` }`. Go and Huma both promote the embedded model's fields, so the wire shape is flat (model fields + `max_permission`) with no custom marshaler and nothing added to the shared model struct. Capture `DoReadOne`'s returned max permission (it is `0`/`1`/`2` on success — **never discard it as `_`**), build the body, and `return conditionalReadResponse(&in.Params, body, foo.Updated, maxPermission)`. The shared helper (in `types.go`) folds the permission into the ETag (so a share/role change invalidates the cache), applies the conditional precondition (304/412), and returns `*singleReadBody[fooReadBody]`. See `labels.go`/`project_views.go`. (A generic `struct{ T; ... }` is impossible — Go forbids embedding a type parameter — so the per-resource struct is the price of a flat shape without a marshaler.) +- **Create / Update** return `*singleBody[Model]` and set the model's `ID` from the path (URL wins over body). **Update's request body must be the same `fooReadBody` the read returns, not the bare model** — AutoPatch's GET→PUT round trip echoes the read body (max_permission included) into the PUT, and because `max_permission` is a declared `readOnly` property of `fooReadBody`'s schema, Huma accepts and ignores it on write rather than rejecting it. Take `&in.Body.Foo` (the embedded model — value-embedded, so never nil) and ignore the embedded `MaxPermission`. Create stays a bare `Body Model` (AutoPatch only round-trips into PUT). +- **Delete** returns `*emptyBody`. + +### 3. Self-register the resource + +Resources self-register — **you do not edit `pkg/routes/routes.go`**. In your resource file, add an `init()` that hands your registrar to `AddRouteRegistrar`: + +```go +func init() { AddRouteRegistrar(RegisterFooRoutes) } + +func RegisterFooRoutes(api huma.API) { ... } +``` + +`registerAPIRoutesV2` in `routes.go` calls `apiv2.RegisterAll(api)`, which runs every registered registrar (in init/filename order — route order is irrelevant) and then `EnableAutoPatch`. New resources touch zero shared lines, so they never conflict on `routes.go`. + +Notes: + +- **Give each registrar a DISTINCT name.** They share package `apiv2`, so two resources both exporting `RegisterAvatarRoutes` collide and won't compile — that actually happened and the upload one had to be renamed (`RegisterAvatarRoutes` for the binary endpoint vs `RegisterAvatarUploadRoutes` for the upload). Name yours after the specific resource. +- **Config-gated resources check the flag inside the registrar.** `RegisterAll` runs at request-router-setup time, after config is loaded, so a `RegisterFooRoutes` may early-return (or skip individual `Register` calls) based on `config.FooEnabled.GetBool()`. Don't try to gate at `init()` time — config isn't loaded yet. +- **AutoPatch is automatic.** `RegisterAll` calls `EnableAutoPatch` after all registrars — don't call it yourself, and don't register a manual PATCH (see "What's automatic"). + +## REST verb conventions (v2 inverts v1) + +| Operation | v1 | v2 | +|---|---|---| +| create | PUT | **POST** | +| update | POST | **PUT** (and PATCH) | +| read / read-all / delete | GET / GET / DELETE | same | + +## Non-CRUDable / custom routes + +Not everything is plain CRUD — bulk operations, custom actions (`POST /tasks/{id}/duplicate`), sub-resource toggles, RPC-ish endpoints. These still go through Huma and reuse most of the machinery, but two responsibilities move **into your handler** because there's no `handler.Do*` doing them for you: + +1. **Permission enforcement is now yours.** This is the one place the "never check permissions in the handler" rule inverts. With no generic `Do*` to call the model's `Can*`, the handler must do it explicitly — load the relevant entity and call its permission method, then refuse on denial. Mirror the v1 custom-handler shape (`pkg/routes/api/v1/task_attachment.go`): + ```go + func tasksDuplicate(ctx context.Context, in *struct{ ID int64 `path:"id"` }) (*singleBody[models.Task], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + s := db.NewSession() + defer s.Close() + + t := &models.Task{ID: in.ID} + can, err := t.CanUpdate(s, a) // or whichever Can* gates this action + if err != nil { + _ = s.Rollback() + return nil, translateDomainError(err) + } + if !can { + return nil, huma.Error403Forbidden("forbidden") + } + // ... do the work against s ... + if err := s.Commit(); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.Task]{Body: t}, nil + } + ``` +2. **Session / transaction management is now yours.** The `Do*` helpers open and commit their own `xorm.Session`; custom handlers open one with `db.NewSession()`, `defer s.Close()`, and `Commit`/`Rollback` explicitly for anything that writes. + +Otherwise the same rules apply: register with the `Register` wrapper, pull auth via `authFromCtx`, route every error through `translateDomainError`, and reuse the `types.go` envelopes — or define a small body struct when none fits (don't bend a custom response into `singleBody` if it's awkward). + +**Verb choice:** pick by semantics, not the CRUD table. Non-idempotent actions are `POST`. AutoPatch only synthesises PATCH for GET+PUT *pairs*, so standalone custom routes are never touched. + +**Token permissions still automatic, but mind the derived name:** `collectRoutesForAPITokens` keys a route off its prefix-stripped path, so `POST /api/v2/tasks/{id}/duplicate` lands under the `tasks` group as a `duplicate` permission. Single-segment custom paths fall into the `other` group. Name the path so the derived `(group, permission)` reads sensibly — that string is what users grant tokens against. + +## What's automatic — do NOT hand-roll + +- **PATCH** — `EnableAutoPatch` synthesises a JSON-Merge-Patch PATCH for every GET+PUT pair. `RegisterAll` invokes it after all registrars, so it's automatic — don't call `EnableAutoPatch` and don't register PATCH yourself. +- **API token permissions** — `collectRoutesForAPITokens` walks the Echo router after registration, so your new routes land in the v2 token table automatically under the same `(group, permission)` keys as their v1 names. PATCH is intentionally not stored; `CanDoAPIRoute` accepts it as an alias for the stored PUT (see `pkg/models/api_routes.go`). +- **Security schemes** — `JWTKeyAuth` + `APITokenAuth` are declared globally in `NewAPI`. For a public endpoint, set `Security: []map[string][]string{}` on that operation and add its path to `unauthenticatedAPIPaths` in `routes.go`. +- **Error shape** — `translateDomainError` maps any `web.HTTPErrorProcessor` (e.g. `ErrFooDoesNotExist`) onto Huma's status error, producing RFC 9457 `application/problem+json`. Errors without HTTP semantics become 500. +- **OpenAPI spec / Scalar docs / `$schema` URLs** — handled in `huma.go`. Leave `Servers` alone (the relative entry must stay at index 0). + +## Anti-patterns (these get flagged) + +- Re-checking permissions in the handler instead of trusting `handler.Do*` → the model's `Can*`. +- Blind `result.([]*models.Foo)` without the `ok` check, or returning the `any` straight into the envelope — silent empty lists. +- `huma.Register` instead of the package `Register` wrapper (loses the verb-based status). +- Per-operation `Security:` lines (now global) or registering a manual PATCH (AutoPatch does it). +- Returning a raw model error instead of routing it through `translateDomainError` → leaks a 500 instead of the right code. +- Unquoted ETag in the response header. +- Operations without `Summary`/`Description`, or model fields without `doc:` tags — they ship undocumented because Huma can't read Go comments. +- Server-controlled fields (`id`, `created`, `updated`, `created_by`) on a shared input/output model left without `readOnly:"true"` — the docs then present them as writable request fields. + +## Tests (mandatory) + +Mirror the v1 webtest shape so v2 parity is readable side-by-side. Use the `webHandlerTestV2` harness in `pkg/webtests/integrations.go` — it takes the same `urlParams` map as v1's `webHandlerTest`. See `pkg/webtests/huma_label_test.go`: + +- One `Test` covering list/read/create/update/delete, positive + negative (forbidden, nonexistent), mirroring the v1 model test. +- v2-only behaviour (ETag/304, PATCH merge-patch) goes in separate top-level `Test_*` funcs using the `humaRequest`/`humaTokenFor` helpers in `pkg/webtests/huma_helpers_test.go`. +- The RFC 9457 error-body shape is asserted **once** globally in `TestHuma_ErrorShapeIsRFC9457` — don't re-assert the full problem+json shape per resource, just the status code. + +Run with `mage test:filter Test` while iterating. **Caveat:** `mage test:filter` injects `-short`, which makes `pkg/webtests` skip entirely (the suite short-circuits in short mode), so it silently reports success without running your webtest. To actually exercise a single webtest, run it directly: `go test -run '' ./pkg/webtests/`. Save output to a file per the project test-output rule. + +## Related + +- `crudable` skill — the model-layer prerequisite +- `pkg/routes/api/v2/labels.go` — reference resource +- `pkg/routes/api/v2/{types,errors,huma}.go` — shared envelopes, bridge, config +- `pkg/web/handler/core.go` — the `Do*` functions handlers call diff --git a/AGENTS.md b/AGENTS.md index 6cb251b1c..3524dfc60 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,12 +11,24 @@ The project consists of: - `desktop/` – Electron wrapper application - `docs/` – Documentation website +## API Version Policy — new work goes to /api/v2 + +**`/api/v1` is effectively deprecated and frozen.** It still runs and is fully supported for existing clients, but it should not grow. + +- **Every new route goes on `/api/v2`** (the Huma-backed API in `pkg/routes/api/v2/`). This includes new CRUDable entities, new custom/non-CRUD endpoints, and new actions on existing resources. +- **Before adding any v2 route, invoke the `api-v2-routes` skill** — it covers both CRUD and non-CRUD shapes. +- **Touch `/api/v1` only to:** fix a bug, or port an existing resource to v2. Do not add net-new functionality there. +- Models in `pkg/models/` are shared by both APIs — a new entity still gets its model + `Can*` methods (invoke `crudable`); only the HTTP surface differs (v2, not v1). + +If a task says "add an endpoint for X" without naming a version, it means v2. + ## Skills Before writing code in these areas, invoke the matching skill with the `Skill` tool. They are short checklists derived from recurring review feedback — loading them up front avoids rework. - Adding or modifying a model in `pkg/models/` (new CRUD, new or changed `Can*` methods, anything touching permissions): invoke `crudable`. - Creating or editing any file under `pkg/migration/`: invoke `migration`. +- Adding **any** new API route (new entity, custom action, or porting from v1) — all new routes go on the Huma-backed `/api/v2`, editing `pkg/routes/api/v2/`: invoke `api-v2-routes`. See the API Version Policy above. ## Plans and Worktrees @@ -172,11 +184,10 @@ Modern Vue 3 composition API application with TypeScript: ### Adding New Features **Backend Changes:** -1. Create/modify models in `pkg/models/` with proper CRUD and Permissions interfaces as required -2. Add database migration if needed: `mage dev:make-migration ` +1. Create/modify models in `pkg/models/` with proper CRUD and Permissions interfaces as required (invoke the `crudable` skill) +2. Add database migration if needed: `mage dev:make-migration ` (invoke the `migration` skill) 3. Create/update services in `pkg/services/` for complex business logic -4. Add API routes in `pkg/routes/api/v1/` following existing patterns -5. Update Swagger annotations +4. Add API routes on **`/api/v2`** in `pkg/routes/api/v2/` — invoke the `api-v2-routes` skill. Do **not** add new routes to `/api/v1`; it is frozen (see API Version Policy above) **Frontend Changes:** 1. Create TypeScript interfaces in `src/modelTypes/` matching backend models @@ -192,10 +203,11 @@ Modern Vue 3 composition API application with TypeScript: 4. Update TypeScript interfaces in frontend `src/modelTypes/` ### API Development -- All API endpoints follow RESTful conventions under `/api/v1/` -- Use generic web handlers in `pkg/web/handler/` for standard CRUD operations -- Implement proper permissions checking using the Permissions interface -- Add Swagger annotations for automatic documentation generation +- **New endpoints go on `/api/v2`** (Huma-backed, `pkg/routes/api/v2/`). `/api/v1` is frozen — see the API Version Policy near the top. Invoke the `api-v2-routes` skill before writing v2 routes. +- v2 verb conventions differ from v1: POST creates, PUT/PATCH update (v1 used PUT to create, POST to update). +- Both versions reuse the generic `pkg/web/handler/` `Do*` functions for standard CRUD, which enforce permissions via the model's `Can*` methods. +- Implement permission checks at the model level via the Permissions interface — never in the route handler (the exception: non-CRUD v2 actions must call `Can*` explicitly; the skill covers this). +- v2 generates its OpenAPI spec from Go types automatically — no Swagger annotations. v1's swaggo annotations stay as-is but no new ones are needed. ### Testing - Backend: Feature tests alongside source files, web tests in `pkg/webtests/` @@ -250,6 +262,8 @@ In the frontend, all translation strings live in `frontend/src/i18n/lang`. For t You only need to adjust the `en.json` file with the source string. The actual translation happens elsewhere. After adjusting the source string, you need to call the respective translation library with the key. Both are similar, check the existing code to figure it out. +**Do not add a new language from scratch or translate strings into other languages yourself.** Translations are managed through a dedicated workflow. If you are asked to add a new language, translate existing strings, or update translations for non-English locales, point the user to the translation guide instead: https://vikunja.io/docs/translations/ + ## Key Files and Conventions **Configuration:** @@ -261,12 +275,13 @@ After adjusting the source string, you need to call the respective translation l - Go: golangci-lint per `.golangci.yml`; use goimports; wrap errors with `fmt.Errorf("...: %w", err)`; enforce permissions checks in models; never log secrets; do not edit generated `pkg/swagger/*` - Vue: ESLint + TS; single quotes, trailing commas, no semicolons, tab indent; script setup + lang ts; keep services/models in sync with backend - Follow existing patterns for consistency +- **Comments: document the *why*, not the *what* — default to no comment.** Don't write comments that restate the code, a function/struct/field name, or a signature; they're noise the reader skips past (a comment that takes longer to read than the code it describes should be deleted). Only comment a genuinely non-obvious *why* — a gotcha, an invariant, a rejected alternative, a cross-file constraint — in one tight line. Be aggressive about cutting on the first pass, not just when asked. - Before creating a new file, function, or helper, search the codebase (`grep` / `rg`) for existing code that does the same thing. Prefer extending an existing helper over duplicating it. If logic overlaps an existing function significantly, reuse it. **Naming Conventions:** - Go: Standard Go conventions (PascalCase for exports, camelCase for private) - Vue: PascalCase for components, camelCase for composables -- API endpoints: kebab-case in URLs, camelCase in JSON +- API endpoints: kebab-case in URLs, snake_case in JSON **Permissions and Permissions:** - Always implement Permissions interface for new models diff --git a/Dockerfile b/Dockerfile index 8075aeee2..ce2e4aec2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -50,7 +50,7 @@ WORKDIR /app/vikunja ENTRYPOINT [ "/app/vikunja/vikunja" ] EXPOSE 3456 -COPY --from=apibuilder --chown=1000:1000 /tmp /tmp +COPY --from=apibuilder --chown=1000:1000 --chmod=1777 /tmp /tmp USER 1000 diff --git a/build/after-install-openrc.sh b/build/after-install-openrc.sh index c0e01cd03..8c3e9a638 100755 --- a/build/after-install-openrc.sh +++ b/build/after-install-openrc.sh @@ -2,7 +2,7 @@ rc-update add vikunja default # Fix the config to contain proper values -NEW_SECRET=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) +NEW_SECRET=$(head -c 512 /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 32) sed -i "s//$NEW_SECRET/g" /etc/vikunja/config.yml sed -i "s//\/opt\/vikunja\//g" /etc/vikunja/config.yml sed -i "s/path: \"\.\/vikunja.db\"/path: \"\\/opt\/vikunja\/vikunja.db\"/g" /etc/vikunja/config.yml diff --git a/build/after-install.sh b/build/after-install.sh index a8f2840d7..1b6399a49 100644 --- a/build/after-install.sh +++ b/build/after-install.sh @@ -3,7 +3,7 @@ systemctl enable vikunja.service # Fix the config to contain proper values -NEW_SECRET=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) +NEW_SECRET=$(head -c 512 /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 32) sed -i "s//$NEW_SECRET/g" /etc/vikunja/config.yml sed -i "s//\/opt\/vikunja\//g" /etc/vikunja/config.yml sed -i "s/path: \"\.\/vikunja.db\"/path: \"\\/opt\/vikunja\/vikunja.db\"/g" /etc/vikunja/config.yml diff --git a/desktop/icon.png b/desktop/icon.png new file mode 100644 index 000000000..21b9fc4a6 Binary files /dev/null and b/desktop/icon.png differ diff --git a/desktop/main.js b/desktop/main.js index f670f8fe9..ca84f4c1f 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -397,7 +397,11 @@ function toggleQuickEntry() { // ─── System tray ───────────────────────────────────────────────────── function setupTray() { if (!tray) { - const iconPath = path.join(__dirname, 'build', 'icon.png') + // NOTE: load the icon from the app root, not build/. The build/ directory is + // electron-builder's buildResources dir and is NOT packaged into the app, so + // referencing build/icon.png here works in dev but yields an empty tray icon + // in packaged releases (see issue #2668). + const iconPath = path.join(__dirname, 'icon.png') const icon = nativeImage.createFromPath(iconPath).resize({width: 16, height: 16}) tray = new Tray(icon) tray.setToolTip('Vikunja') diff --git a/desktop/package.json b/desktop/package.json index e5025761d..4a2b83f75 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -62,7 +62,7 @@ }, "devDependencies": { "electron": "40.10.2", - "electron-builder": "26.8.1", + "electron-builder": "26.15.2", "unzipper": "0.12.3" }, "dependencies": { diff --git a/desktop/pnpm-lock.yaml b/desktop/pnpm-lock.yaml index 0676b6157..7b7b94c6c 100644 --- a/desktop/pnpm-lock.yaml +++ b/desktop/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: 40.10.2 version: 40.10.2 electron-builder: - specifier: 26.8.1 - version: 26.8.1(electron-builder-squirrel-windows@24.13.3) + specifier: 26.15.2 + version: 26.15.2(electron-builder-squirrel-windows@24.13.3) unzipper: specifier: 0.12.3 version: 0.12.3 @@ -74,8 +74,8 @@ packages: engines: {node: '>=12.0.0'} hasBin: true - '@electron/rebuild@4.0.3': - resolution: {integrity: sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==} + '@electron/rebuild@4.0.4': + resolution: {integrity: sha512-Rzc39XPdk/+/wBG8MfwAHohXflep0ITUfulb6Rgz3R0NeSB1noE+E9/M/cb8ftCAiyDD9PPhLuuWgE1GaInbKg==} engines: {node: '>=22.12.0'} hasBin: true @@ -107,13 +107,27 @@ packages: resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} engines: {node: '>= 10.0.0'} - '@npmcli/agent@3.0.0': - resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} - engines: {node: ^18.17.0 || >=20.5.0} + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} - '@npmcli/fs@4.0.0': - resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} - engines: {node: ^18.17.0 || >=20.5.0} + '@noble/hashes@2.2.0': + resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} + engines: {node: '>= 20.19.0'} + + '@peculiar/asn1-schema@2.7.0': + resolution: {integrity: sha512-W8ZfWzLmQnrcky+eh3tni4IozMdqBDiHWU0N+vve/UGjMaUs8c0L7A2oEdkBXS8rTpWDpK/aoI3DG/L/hxmxPg==} + + '@peculiar/json-schema@1.1.12': + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + + '@peculiar/utils@2.0.3': + resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==} + + '@peculiar/webcrypto@1.7.1': + resolution: {integrity: sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==} + engines: {node: '>=14.18.0'} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -134,9 +148,6 @@ packages: '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/debug@4.1.13': resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} @@ -149,24 +160,15 @@ packages: '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} '@types/node@24.10.9': resolution: {integrity: sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==} - '@types/plist@3.0.2': - resolution: {integrity: sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==} - '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - '@types/verror@1.10.4': - resolution: {integrity: sha512-OjJdqx6QlbyZw9LShPwRW+Kmiegeg3eWNI41MQQKaG3vjdU2L9SRElntM51HmHBY1cu7izxQJ1lMYioQh3XMBg==} - '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -178,9 +180,9 @@ packages: resolution: {integrity: sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==} engines: {node: '>=14.6'} - abbrev@3.0.1: - resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} - engines: {node: ^18.17.0 || >=20.5.0} + abbrev@4.0.0: + resolution: {integrity: sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==} + engines: {node: ^20.17.0 || >=22.9.0} accepts@2.0.0: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} @@ -202,6 +204,9 @@ packages: ajv@6.14.0: resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -221,9 +226,6 @@ packages: app-builder-bin@4.0.0: resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} - app-builder-bin@5.0.0-alpha.12: - resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} - app-builder-lib@24.13.3: resolution: {integrity: sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==} engines: {node: '>=14.0.0'} @@ -231,12 +233,12 @@ packages: dmg-builder: 24.13.3 electron-builder-squirrel-windows: 24.13.3 - app-builder-lib@26.8.1: - resolution: {integrity: sha512-p0Im/Dx5C4tmz8QEE1Yn4MkuPC8PrnlRneMhWJj7BBXQfNTJUshM/bp3lusdEsDbvvfJZpXWnYesgSLvwtM2Zw==} + app-builder-lib@26.15.2: + resolution: {integrity: sha512-3mYfKOjr/ZY7gFESOcq8kylBMgGPpmlQYnpBVit4p6zIg0t/8bkWBILdMMtnjFyN2jllyBf225T8dLlz3D6oBQ==} engines: {node: '>=14.0.0'} peerDependencies: - dmg-builder: 26.8.1 - electron-builder-squirrel-windows: 26.8.1 + dmg-builder: 26.15.2 + electron-builder-squirrel-windows: 26.15.2 archiver-utils@2.1.0: resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} @@ -253,13 +255,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} + asn1js@3.0.10: + resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} + engines: {node: '>=12.0.0'} async-exit-hook@2.0.1: resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} @@ -275,6 +273,9 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} @@ -299,10 +300,6 @@ packages: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} - engines: {node: 18 || 20 || >=22} - brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} @@ -324,23 +321,24 @@ packages: resolution: {integrity: sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==} engines: {node: '>=12.0.0'} - builder-util-runtime@9.5.1: - resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==} + builder-util-runtime@9.7.0: + resolution: {integrity: sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==} engines: {node: '>=12.0.0'} builder-util@24.13.1: resolution: {integrity: sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==} - builder-util@26.8.1: - resolution: {integrity: sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw==} + builder-util@26.15.0: + resolution: {integrity: sha512-dUx+HxVbiNsNQ4mGe1PyoC/tBmsHwBNDLdBuqWCj+rhHFE9lHgrXiGYKAM1uNlznhAaUSyMlms84VeSSr3gOBA==} + engines: {node: '>=14.0.0'} bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cacache@19.0.1: - resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} - engines: {node: ^18.17.0 || >=20.5.0} + bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} @@ -377,18 +375,6 @@ packages: resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} engines: {node: '>=8'} - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -396,10 +382,6 @@ packages: clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -442,9 +424,6 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -457,9 +436,6 @@ packages: resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} engines: {node: '>= 10'} - crc@3.8.0: - resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -477,9 +453,6 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -500,10 +473,6 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} - detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} @@ -513,14 +482,8 @@ packages: dir-compare@4.2.0: resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - dmg-builder@26.8.1: - resolution: {integrity: sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==} - - dmg-license@1.0.11: - resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} - engines: {node: '>=8'} - os: [darwin] - hasBin: true + dmg-builder@26.15.2: + resolution: {integrity: sha512-fMkjRqKyPtsz4Kzu/qGP0BGjqzMCIgp+/7kw/u6YH6lvn/8hvL3c0TXhoFayBoYdpPCnEinnCHztd4bW7/jetA==} dotenv-expand@11.0.6: resolution: {integrity: sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==} @@ -558,16 +521,16 @@ packages: electron-builder-squirrel-windows@24.13.3: resolution: {integrity: sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==} - electron-builder@26.8.1: - resolution: {integrity: sha512-uWhx1r74NGpCagG0ULs/P9Nqv2nsoo+7eo4fLUOB8L8MdWltq9odW/uuLXMFCDGnPafknYLZgjNX0ZIFRzOQAw==} + electron-builder@26.15.2: + resolution: {integrity: sha512-veKM9+dCljaC5A74Pwc0ZWQ9arOHREXWh9hUIf8NGg49ch7x+IB4QhbMzIrV5ONZIXM2OEkaxW11cAPjPtoi4A==} engines: {node: '>=14.0.0'} hasBin: true electron-publish@24.13.1: resolution: {integrity: sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==} - electron-publish@26.8.1: - resolution: {integrity: sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w==} + electron-publish@26.15.1: + resolution: {integrity: sha512-BMgMHOyexWn0UnOC+Afffw0DMrr0yfLp4U8YsLXwoJ3Da7LS7WUnz21teYZqO0gaApE1KgsjREWmbPqvF5JcPg==} electron@40.10.2: resolution: {integrity: sha512-Xj3Hy0Imbu4g0gDIW55w/jJYz94nMO2JRSGYA3LyAn5SwaERCelgZrA21vfH+Bi//SWAWQXddHsMwCqauyMT8g==} @@ -584,9 +547,6 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -643,16 +603,15 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true - extsprintf@1.4.0: - resolution: {integrity: sha512-6NW8DZ8pWBc5NbGYUiqqccj9dXnuSzilZYqprdKJBZsQodGH9IyUoFOGxIWVDcBzHMb8ET24aqx9p66tZEWZkA==} - engines: {'0': node >=0.6.0} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} @@ -711,10 +670,6 @@ packages: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} - fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -815,15 +770,6 @@ packages: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} - iconv-corefoundation@1.1.7: - resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} - engines: {node: ^8.11.2 || >=10} - os: [darwin] - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - iconv-lite@0.7.0: resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} engines: {node: '>=0.10.0'} @@ -831,10 +777,6 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -842,10 +784,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ip-address@10.2.0: - resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} - engines: {node: '>= 12'} - ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -858,17 +796,9 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -887,6 +817,10 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + isexe@4.0.0: + resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==} + engines: {node: '>=20'} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -909,6 +843,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} @@ -954,10 +891,6 @@ packages: lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} @@ -969,10 +902,6 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - make-fetch-happen@14.0.3: - resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} - engines: {node: ^18.17.0 || >=20.5.0} - matcher@3.0.0: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} @@ -1010,10 +939,6 @@ packages: engines: {node: '>=4.0.0'} hasBin: true - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} @@ -1022,10 +947,6 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} - engines: {node: 18 || 20 || >=22} - minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -1033,34 +954,6 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass-collect@2.0.1: - resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass-fetch@4.0.1: - resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} @@ -1080,23 +973,20 @@ packages: resolution: {integrity: sha512-u2EC1CeNe25uVtX3EZbdQ275c74zdZmmpzrHEQh2aIYqoVjlglfUpOX9YY85x1nlBydEKDVaSmMNhR7N82Qj8A==} engines: {node: '>=22.12.0'} - node-addon-api@1.7.2: - resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} - node-api-version@0.2.1: resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} - node-gyp@11.5.0: - resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==} - engines: {node: ^18.17.0 || >=20.5.0} + node-gyp@12.4.0: + resolution: {integrity: sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw==} + engines: {node: ^20.17.0 || >=22.9.0} hasBin: true node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} + nopt@9.0.0: + resolution: {integrity: sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==} + engines: {node: ^20.17.0 || >=22.9.0} hasBin: true normalize-path@3.0.0: @@ -1122,14 +1012,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -1138,10 +1020,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-map@7.0.4: - resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} - engines: {node: '>=18'} - package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -1175,6 +1053,10 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + pkijs@3.4.0: + resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} + engines: {node: '>=16.0.0'} + plist@3.1.0: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} engines: {node: '>=10.4.0'} @@ -1183,9 +1065,9 @@ packages: resolution: {integrity: sha512-ZIfcLJC+7E7FBFnDxm9MPmt7D+DidyQ26lewieO75AdhA2ayMtsJSES0iWzqJQbcVRSrTufQoy0DR94xHue0oA==} engines: {node: '>=10.4.0'} - proc-log@5.0.0: - resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} - engines: {node: ^18.17.0 || >=20.5.0} + proc-log@6.1.0: + resolution: {integrity: sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==} + engines: {node: ^20.17.0 || >=22.9.0} process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -1212,6 +1094,13 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + qs@6.15.2: resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} engines: {node: '>=0.6'} @@ -1250,6 +1139,10 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + resedit@1.7.2: resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} engines: {node: '>=12', npm: '>=6'} @@ -1260,10 +1153,6 @@ packages: responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -1285,16 +1174,9 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sanitize-filename@1.6.3: - resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} - sanitize-filename@1.6.4: resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} - sax@1.4.4: - resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} - engines: {node: '>=11.0.0'} - sax@1.6.0: resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} engines: {node: '>=11.0.0'} @@ -1315,11 +1197,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.8.0: - resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} - engines: {node: '>=10'} - hasBin: true - semver@7.8.1: resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} engines: {node: '>=10'} @@ -1375,22 +1252,6 @@ packages: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -1401,10 +1262,6 @@ packages: sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - ssri@12.0.0: - resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} - engines: {node: ^18.17.0 || >=20.5.0} - stat-mode@1.0.0: resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} engines: {node: '>= 6'} @@ -1447,10 +1304,6 @@ packages: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar@7.5.11: - resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==} - engines: {node: '>=18'} - tar@7.5.15: resolution: {integrity: sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==} engines: {node: '>=18'} @@ -1479,6 +1332,9 @@ packages: truncate-utf8-bytes@1.0.2: resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} @@ -1495,13 +1351,9 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - unique-filename@4.0.0: - resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - unique-slug@5.0.0: - resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} - engines: {node: ^18.17.0 || >=20.5.0} + undici@6.26.0: + resolution: {integrity: sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==} + engines: {node: '>=18.17'} universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -1531,12 +1383,8 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + webcrypto-core@1.9.2: + resolution: {integrity: sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==} which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -1548,6 +1396,11 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true + which@6.0.1: + resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -1606,7 +1459,7 @@ snapshots: dependencies: commander: 5.1.0 glob: 7.2.3 - minimatch: 10.2.4 + minimatch: 10.2.5 '@electron/fuses@1.8.0': dependencies: @@ -1676,25 +1529,18 @@ snapshots: fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 - plist: 3.1.0 + plist: 3.1.1 transitivePeerDependencies: - supports-color - '@electron/rebuild@4.0.3': + '@electron/rebuild@4.0.4': dependencies: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3 - detect-libc: 2.0.3 - got: 11.8.6 - graceful-fs: 4.2.11 node-abi: 4.24.0 node-api-version: 0.2.1 - node-gyp: 11.5.0 - ora: 5.4.1 + node-gyp: 12.4.0 read-binary-file-arch: 1.0.6 - semver: 7.7.4 - tar: 7.5.11 - yargs: 17.7.2 transitivePeerDependencies: - supports-color @@ -1717,8 +1563,8 @@ snapshots: debug: 4.4.3 dir-compare: 4.2.0 fs-extra: 11.3.1 - minimatch: 10.2.4 - plist: 3.1.0 + minimatch: 10.2.5 + plist: 3.1.1 transitivePeerDependencies: - supports-color @@ -1752,19 +1598,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@npmcli/agent@3.0.0': - dependencies: - agent-base: 7.1.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 - lru-cache: 10.4.3 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color + '@noble/hashes@1.4.0': {} - '@npmcli/fs@4.0.0': + '@noble/hashes@2.2.0': {} + + '@peculiar/asn1-schema@2.7.0': dependencies: - semver: 7.8.1 + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/json-schema@1.1.12': + dependencies: + tslib: 2.8.1 + + '@peculiar/utils@2.0.3': + dependencies: + tslib: 2.8.1 + + '@peculiar/webcrypto@1.7.1': + dependencies: + '@peculiar/asn1-schema': 2.7.0 + '@peculiar/json-schema': 1.1.12 + '@peculiar/utils': 2.0.3 + tslib: 2.8.1 + webcrypto-core: 1.9.2 '@pkgjs/parseargs@0.11.0': optional: true @@ -1784,10 +1642,6 @@ snapshots: '@types/node': 24.10.9 '@types/responselike': 1.0.3 - '@types/debug@4.1.12': - dependencies: - '@types/ms': 0.7.34 - '@types/debug@4.1.13': dependencies: '@types/ms': 2.1.0 @@ -1802,27 +1656,16 @@ snapshots: dependencies: '@types/node': 24.10.9 - '@types/ms@0.7.34': {} - '@types/ms@2.1.0': {} '@types/node@24.10.9': dependencies: undici-types: 7.16.0 - '@types/plist@3.0.2': - dependencies: - '@types/node': 24.10.9 - xmlbuilder: 15.1.1 - optional: true - '@types/responselike@1.0.3': dependencies: '@types/node': 24.10.9 - '@types/verror@1.10.4': - optional: true - '@types/yauzl@2.10.3': dependencies: '@types/node': 24.10.9 @@ -1832,7 +1675,7 @@ snapshots: '@xmldom/xmldom@0.9.10': {} - abbrev@3.0.1: {} + abbrev@4.0.0: {} accepts@2.0.0: dependencies: @@ -1858,6 +1701,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -1870,9 +1720,7 @@ snapshots: app-builder-bin@4.0.0: {} - app-builder-bin@5.0.0-alpha.12: {} - - app-builder-lib@24.13.3(dmg-builder@26.8.1)(electron-builder-squirrel-windows@24.13.3): + app-builder-lib@24.13.3(dmg-builder@26.15.2)(electron-builder-squirrel-windows@24.13.3): dependencies: '@develar/schema-utils': 2.6.5 '@electron/notarize': 2.2.1 @@ -1886,9 +1734,9 @@ snapshots: builder-util-runtime: 9.2.4 chromium-pickle-js: 0.2.0 debug: 4.4.3 - dmg-builder: 26.8.1(electron-builder-squirrel-windows@24.13.3) + dmg-builder: 26.15.2(electron-builder-squirrel-windows@24.13.3) ejs: 3.1.10 - electron-builder-squirrel-windows: 24.13.3(dmg-builder@26.8.1) + electron-builder-squirrel-windows: 24.13.3(dmg-builder@26.15.2) electron-publish: 24.13.1 form-data: 4.0.5 fs-extra: 10.1.0 @@ -1906,30 +1754,33 @@ snapshots: transitivePeerDependencies: - supports-color - app-builder-lib@26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@24.13.3): + app-builder-lib@26.15.2(dmg-builder@26.15.2)(electron-builder-squirrel-windows@24.13.3): dependencies: - '@develar/schema-utils': 2.6.5 '@electron/asar': 3.4.1 '@electron/fuses': 1.8.0 '@electron/get': 3.1.0 '@electron/notarize': 2.5.0 '@electron/osx-sign': 1.3.3 - '@electron/rebuild': 4.0.3 + '@electron/rebuild': 4.0.4 '@electron/universal': 2.0.3 '@malept/flatpak-bundler': 0.4.0 + '@noble/hashes': 2.2.0 + '@peculiar/webcrypto': 1.7.1 '@types/fs-extra': 9.0.13 + ajv: 8.20.0 + asn1js: 3.0.10 async-exit-hook: 2.0.1 - builder-util: 26.8.1 - builder-util-runtime: 9.5.1 + builder-util: 26.15.0 + builder-util-runtime: 9.7.0 chromium-pickle-js: 0.2.0 ci-info: 4.3.1 debug: 4.4.3 - dmg-builder: 26.8.1(electron-builder-squirrel-windows@24.13.3) + dmg-builder: 26.15.2(electron-builder-squirrel-windows@24.13.3) dotenv: 16.4.5 dotenv-expand: 11.0.6 ejs: 3.1.10 - electron-builder-squirrel-windows: 24.13.3(dmg-builder@26.8.1) - electron-publish: 26.8.1 + electron-builder-squirrel-windows: 24.13.3(dmg-builder@26.15.2) + electron-publish: 26.15.1 fs-extra: 10.1.0 hosted-git-info: 4.1.0 isbinaryfile: 5.0.7 @@ -1937,14 +1788,16 @@ snapshots: js-yaml: 4.1.1 json5: 2.2.3 lazy-val: 1.0.5 - minimatch: 10.2.4 + minimatch: 10.2.5 + pkijs: 3.4.0 plist: 3.1.0 proper-lockfile: 4.1.2 resedit: 1.7.2 semver: 7.7.4 - tar: 7.5.11 + tar: 7.5.15 temp-file: 3.4.0 tiny-async-pool: 1.3.0 + unzipper: 0.12.3 which: 5.0.0 transitivePeerDependencies: - supports-color @@ -1987,11 +1840,11 @@ snapshots: argparse@2.0.1: {} - assert-plus@1.0.0: - optional: true - - astral-regex@2.0.0: - optional: true + asn1js@3.0.10: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 async-exit-hook@2.0.1: {} @@ -2001,6 +1854,8 @@ snapshots: at-least-node@1.0.0: {} + aws4@1.13.2: {} + balanced-match@4.0.4: {} base64-js@1.5.1: {} @@ -2034,10 +1889,6 @@ snapshots: boolean@3.2.0: optional: true - brace-expansion@5.0.5: - dependencies: - balanced-match: 4.0.4 - brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 @@ -2060,10 +1911,10 @@ snapshots: transitivePeerDependencies: - supports-color - builder-util-runtime@9.5.1: + builder-util-runtime@9.7.0: dependencies: debug: 4.4.3 - sax: 1.4.4 + sax: 1.6.0 transitivePeerDependencies: - supports-color @@ -2088,12 +1939,10 @@ snapshots: transitivePeerDependencies: - supports-color - builder-util@26.8.1: + builder-util@26.15.0: dependencies: - 7zip-bin: 5.2.0 - '@types/debug': 4.1.12 - app-builder-bin: 5.0.0-alpha.12 - builder-util-runtime: 9.5.1 + '@types/debug': 4.1.13 + builder-util-runtime: 9.7.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3 @@ -2101,7 +1950,7 @@ snapshots: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 js-yaml: 4.1.1 - sanitize-filename: 1.6.3 + sanitize-filename: 1.6.4 source-map-support: 0.5.21 stat-mode: 1.0.0 temp-file: 3.4.0 @@ -2111,20 +1960,7 @@ snapshots: bytes@3.1.2: {} - cacache@19.0.1: - dependencies: - '@npmcli/fs': 4.0.0 - fs-minipass: 3.0.3 - glob: 10.5.0 - lru-cache: 10.4.3 - minipass: 7.1.2 - minipass-collect: 2.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 7.0.4 - ssri: 12.0.0 - tar: 7.5.11 - unique-filename: 4.0.0 + bytestreamjs@2.0.1: {} cacheable-lookup@5.0.4: {} @@ -2161,18 +1997,6 @@ snapshots: ci-info@4.3.1: {} - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - - cli-truncate@2.1.0: - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - optional: true - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -2183,8 +2007,6 @@ snapshots: dependencies: mimic-response: 1.0.1 - clone@1.0.4: {} - color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -2219,9 +2041,6 @@ snapshots: cookie@0.7.2: {} - core-util-is@1.0.2: - optional: true - core-util-is@1.0.3: {} crc-32@1.2.2: {} @@ -2231,11 +2050,6 @@ snapshots: crc-32: 1.2.2 readable-stream: 3.6.2 - crc@3.8.0: - dependencies: - buffer: 5.7.1 - optional: true - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -2250,10 +2064,6 @@ snapshots: dependencies: mimic-response: 3.1.0 - defaults@1.0.4: - dependencies: - clone: 1.0.4 - defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -2274,8 +2084,6 @@ snapshots: depd@2.0.0: {} - detect-libc@2.0.3: {} - detect-node@2.1.0: optional: true @@ -2286,34 +2094,19 @@ snapshots: dir-compare@4.2.0: dependencies: - minimatch: 10.2.4 + minimatch: 10.2.5 p-limit: 3.1.0 - dmg-builder@26.8.1(electron-builder-squirrel-windows@24.13.3): + dmg-builder@26.15.2(electron-builder-squirrel-windows@24.13.3): dependencies: - app-builder-lib: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@24.13.3) - builder-util: 26.8.1 + app-builder-lib: 26.15.2(dmg-builder@26.15.2)(electron-builder-squirrel-windows@24.13.3) + builder-util: 26.15.0 fs-extra: 10.1.0 - iconv-lite: 0.6.3 js-yaml: 4.1.1 - optionalDependencies: - dmg-license: 1.0.11 transitivePeerDependencies: - electron-builder-squirrel-windows - supports-color - dmg-license@1.0.11: - dependencies: - '@types/plist': 3.0.2 - '@types/verror': 1.10.4 - ajv: 6.14.0 - crc: 3.8.0 - iconv-corefoundation: 1.1.7 - plist: 3.1.0 - smart-buffer: 4.2.0 - verror: 1.10.0 - optional: true - dotenv-expand@11.0.6: dependencies: dotenv: 16.4.5 @@ -2342,9 +2135,9 @@ snapshots: dependencies: jake: 10.8.7 - electron-builder-squirrel-windows@24.13.3(dmg-builder@26.8.1): + electron-builder-squirrel-windows@24.13.3(dmg-builder@26.15.2): dependencies: - app-builder-lib: 24.13.3(dmg-builder@26.8.1)(electron-builder-squirrel-windows@24.13.3) + app-builder-lib: 24.13.3(dmg-builder@26.15.2)(electron-builder-squirrel-windows@24.13.3) archiver: 5.3.2 builder-util: 24.13.1 fs-extra: 10.1.0 @@ -2352,14 +2145,14 @@ snapshots: - dmg-builder - supports-color - electron-builder@26.8.1(electron-builder-squirrel-windows@24.13.3): + electron-builder@26.15.2(electron-builder-squirrel-windows@24.13.3): dependencies: - app-builder-lib: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@24.13.3) - builder-util: 26.8.1 - builder-util-runtime: 9.5.1 + app-builder-lib: 26.15.2(dmg-builder@26.15.2)(electron-builder-squirrel-windows@24.13.3) + builder-util: 26.15.0 + builder-util-runtime: 9.7.0 chalk: 4.1.2 ci-info: 4.3.1 - dmg-builder: 26.8.1(electron-builder-squirrel-windows@24.13.3) + dmg-builder: 26.15.2(electron-builder-squirrel-windows@24.13.3) fs-extra: 10.1.0 lazy-val: 1.0.5 simple-update-notifier: 2.0.0 @@ -2380,11 +2173,12 @@ snapshots: transitivePeerDependencies: - supports-color - electron-publish@26.8.1: + electron-publish@26.15.1: dependencies: '@types/fs-extra': 9.0.13 - builder-util: 26.8.1 - builder-util-runtime: 9.5.1 + aws4: 1.13.2 + builder-util: 26.15.0 + builder-util-runtime: 9.7.0 chalk: 4.1.2 form-data: 4.0.5 fs-extra: 10.1.0 @@ -2407,11 +2201,6 @@ snapshots: encodeurl@2.0.0: {} - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -2492,13 +2281,12 @@ snapshots: transitivePeerDependencies: - supports-color - extsprintf@1.4.0: - optional: true - fast-deep-equal@3.1.3: {} fast-json-stable-stringify@2.1.0: {} + fast-uri@3.1.2: {} + fd-slicer@1.1.0: dependencies: pend: 1.2.0 @@ -2509,7 +2297,7 @@ snapshots: filelist@1.0.4: dependencies: - minimatch: 10.2.4 + minimatch: 10.2.5 finalhandler@2.1.1: dependencies: @@ -2572,10 +2360,6 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 - fs-minipass@3.0.3: - dependencies: - minipass: 7.1.2 - fs.realpath@1.0.0: {} function-bind@1.1.2: {} @@ -2608,8 +2392,8 @@ snapshots: dependencies: foreground-child: 3.3.0 jackspeak: 3.4.3 - minimatch: 10.2.4 - minipass: 7.1.2 + minimatch: 10.2.5 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -2618,7 +2402,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 10.2.4 + minimatch: 10.2.5 once: 1.4.0 path-is-absolute: 1.0.1 @@ -2628,7 +2412,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.8.0 + semver: 7.8.1 serialize-error: 7.0.1 optional: true @@ -2721,24 +2505,12 @@ snapshots: transitivePeerDependencies: - supports-color - iconv-corefoundation@1.1.7: - dependencies: - cli-truncate: 2.1.0 - node-addon-api: 1.7.2 - optional: true - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - iconv-lite@0.7.0: dependencies: safer-buffer: 2.1.2 ieee754@1.2.1: {} - imurmurhash@0.1.4: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -2746,8 +2518,6 @@ snapshots: inherits@2.0.4: {} - ip-address@10.2.0: {} - ipaddr.js@1.9.1: {} is-ci@3.0.1: @@ -2756,12 +2526,8 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-interactive@1.0.0: {} - is-promise@4.0.0: {} - is-unicode-supported@0.1.0: {} - isarray@1.0.0: {} isbinaryfile@4.0.10: {} @@ -2772,6 +2538,8 @@ snapshots: isexe@3.1.1: {} + isexe@4.0.0: {} + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -2783,7 +2551,7 @@ snapshots: async: 3.2.6 chalk: 4.1.2 filelist: 1.0.4 - minimatch: 10.2.4 + minimatch: 10.2.5 jiti@2.6.1: {} @@ -2795,6 +2563,8 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stringify-safe@5.0.1: optional: true @@ -2838,11 +2608,6 @@ snapshots: lodash@4.18.1: {} - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - lowercase-keys@2.0.0: {} lru-cache@10.4.3: {} @@ -2851,22 +2616,6 @@ snapshots: dependencies: yallist: 4.0.0 - make-fetch-happen@14.0.3: - dependencies: - '@npmcli/agent': 3.0.0 - cacache: 19.0.1 - http-cache-semantics: 4.2.0 - minipass: 7.1.2 - minipass-fetch: 4.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 1.0.0 - proc-log: 5.0.0 - promise-retry: 2.0.1 - ssri: 12.0.0 - transitivePeerDependencies: - - supports-color - matcher@3.0.0: dependencies: escape-string-regexp: 4.0.0 @@ -2892,52 +2641,16 @@ snapshots: mime@2.6.0: {} - mimic-fn@2.1.0: {} - mimic-response@1.0.1: {} mimic-response@3.1.0: {} - minimatch@10.2.4: - dependencies: - brace-expansion: 5.0.5 - minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 minimist@1.2.8: {} - minipass-collect@2.0.1: - dependencies: - minipass: 7.1.2 - - minipass-fetch@4.0.1: - dependencies: - minipass: 7.1.2 - minipass-sized: 1.0.3 - minizlib: 3.1.0 - optionalDependencies: - encoding: 0.1.13 - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@7.1.2: {} - minipass@7.1.3: {} minizlib@3.1.0: @@ -2952,33 +2665,28 @@ snapshots: dependencies: semver: 7.8.1 - node-addon-api@1.7.2: - optional: true - node-api-version@0.2.1: dependencies: semver: 7.8.1 - node-gyp@11.5.0: + node-gyp@12.4.0: dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.3 graceful-fs: 4.2.11 - make-fetch-happen: 14.0.3 - nopt: 8.1.0 - proc-log: 5.0.0 + nopt: 9.0.0 + proc-log: 6.1.0 semver: 7.8.1 - tar: 7.5.11 + tar: 7.5.15 tinyglobby: 0.2.15 - which: 5.0.0 - transitivePeerDependencies: - - supports-color + undici: 6.26.0 + which: 6.0.1 node-int64@0.4.0: {} - nopt@8.1.0: + nopt@9.0.0: dependencies: - abbrev: 3.0.1 + abbrev: 4.0.0 normalize-path@3.0.0: {} @@ -2997,30 +2705,12 @@ snapshots: dependencies: wrappy: 1.0.2 - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - p-cancelable@2.1.1: {} p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - p-map@7.0.4: {} - package-json-from-dist@1.0.1: {} parseurl@1.3.3: {} @@ -3032,7 +2722,7 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 path-to-regexp@8.4.1: {} @@ -3042,6 +2732,15 @@ snapshots: picomatch@4.0.4: {} + pkijs@3.4.0: + dependencies: + '@noble/hashes': 1.4.0 + asn1js: 3.0.10 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + plist@3.1.0: dependencies: '@xmldom/xmldom': 0.8.13 @@ -3054,7 +2753,7 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 - proc-log@5.0.0: {} + proc-log@6.1.0: {} process-nextick-args@2.0.1: {} @@ -3083,6 +2782,12 @@ snapshots: punycode@2.3.1: {} + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.1.5: {} + qs@6.15.2: dependencies: side-channel: 1.1.0 @@ -3135,6 +2840,8 @@ snapshots: require-directory@2.1.1: {} + require-from-string@2.0.2: {} + resedit@1.7.2: dependencies: pe-library: 0.4.1 @@ -3145,11 +2852,6 @@ snapshots: dependencies: lowercase-keys: 2.0.0 - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - retry@0.12.0: {} roarr@2.15.4: @@ -3178,16 +2880,10 @@ snapshots: safer-buffer@2.1.2: {} - sanitize-filename@1.6.3: - dependencies: - truncate-utf8-bytes: 1.0.2 - sanitize-filename@1.6.4: dependencies: truncate-utf8-bytes: 1.0.2 - sax@1.4.4: {} - sax@1.6.0: {} semver-compare@1.0.0: @@ -3199,9 +2895,6 @@ snapshots: semver@7.7.4: {} - semver@7.8.0: - optional: true - semver@7.8.1: {} send@1.2.0: @@ -3276,29 +2969,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.7.4 - - slice-ansi@3.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - optional: true - - smart-buffer@4.2.0: {} - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks@2.8.7: - dependencies: - ip-address: 10.2.0 - smart-buffer: 4.2.0 + semver: 7.8.1 source-map-support@0.5.21: dependencies: @@ -3310,10 +2981,6 @@ snapshots: sprintf-js@1.1.3: optional: true - ssri@12.0.0: - dependencies: - minipass: 7.1.2 - stat-mode@1.0.0: {} statuses@2.0.2: {} @@ -3364,14 +3031,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar@7.5.11: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.3 - minizlib: 3.1.0 - yallist: 5.0.0 - tar@7.5.15: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -3406,6 +3065,8 @@ snapshots: dependencies: utf8-byte-length: 1.0.4 + tslib@2.8.1: {} + type-fest@0.13.1: optional: true @@ -3419,13 +3080,7 @@ snapshots: undici-types@7.16.0: {} - unique-filename@4.0.0: - dependencies: - unique-slug: 5.0.0 - - unique-slug@5.0.0: - dependencies: - imurmurhash: 0.1.4 + undici@6.26.0: {} universalify@0.1.2: {} @@ -3451,16 +3106,13 @@ snapshots: vary@1.1.2: {} - verror@1.10.0: + webcrypto-core@1.9.2: dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.0 - optional: true - - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 + '@peculiar/asn1-schema': 2.7.0 + '@peculiar/json-schema': 1.1.12 + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 which@2.0.2: dependencies: @@ -3470,6 +3122,10 @@ snapshots: dependencies: isexe: 3.1.1 + which@6.0.1: + dependencies: + isexe: 4.0.0 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 diff --git a/frontend/index.html b/frontend/index.html index bf4670943..9ad084d61 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -23,7 +23,6 @@ // It has to be the full url, including the last /api/v1 part and port. // You can change this if your api is not reachable on the same port as the frontend. window.API_URL = '/api/v1' - window.ALLOW_ICON_CHANGES = true diff --git a/frontend/package.json b/frontend/package.json index 6210f46cd..d5204b933 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -77,7 +77,7 @@ "@tiptap/vue-3": "3.17.0", "@vueuse/core": "14.1.0", "@vueuse/router": "14.1.0", - "axios": "1.15.2", + "axios": "1.16.0", "blurhash": "2.0.5", "bulma-css-variables": "0.9.33", "change-case": "5.4.4", @@ -114,35 +114,35 @@ "@tsconfig/node24": "24.0.4", "@types/codemirror": "5.60.17", "@types/is-touch-device": "1.0.3", - "@types/node": "24.12.4", + "@types/node": "24.13.1", "@types/sortablejs": "1.15.9", "@types/ws": "8.18.1", - "@typescript-eslint/eslint-plugin": "8.60.0", - "@typescript-eslint/parser": "8.60.0", + "@typescript-eslint/eslint-plugin": "8.60.1", + "@typescript-eslint/parser": "8.60.1", "@vitejs/plugin-vue": "6.0.7", - "@vue/eslint-config-typescript": "14.7.0", - "@vue/test-utils": "2.4.10", + "@vue/eslint-config-typescript": "14.8.0", + "@vue/test-utils": "2.4.11", "@vue/tsconfig": "0.9.1", "@vueuse/shared": "14.3.0", "autoprefixer": "10.5.0", "browserslist": "4.28.2", - "caniuse-lite": "1.0.30001793", + "caniuse-lite": "1.0.30001797", "csstype": "3.2.3", "esbuild": "0.28.0", "eslint": "9.39.4", "eslint-plugin-depend": "1.5.0", - "eslint-plugin-vue": "10.9.1", - "happy-dom": "20.9.0", + "eslint-plugin-vue": "10.9.2", + "happy-dom": "20.10.2", "histoire": "1.0.0-beta.1", "otplib": "12.0.1", "postcss": "8.5.15", "postcss-easing-gradients": "3.0.1", "postcss-html": "1.8.1", "postcss-preset-env": "11.3.0", - "rollup": "4.60.4", + "rollup": "4.61.1", "rollup-plugin-visualizer": "6.0.11", "sass-embedded": "1.100.0", - "stylelint": "17.12.0", + "stylelint": "17.13.0", "stylelint-config-property-sort-order-smacss": "10.0.0", "stylelint-config-recommended-vue": "1.6.1", "stylelint-config-standard-scss": "17.0.0", @@ -150,12 +150,12 @@ "tailwindcss": "4.3.0", "typescript": "5.9.3", "unplugin-inject-preload": "3.0.0", - "vite": "7.3.3", + "vite": "7.3.5", "vite-plugin-pwa": "1.3.0", "vite-plugin-vue-devtools": "8.1.2", "vite-svg-loader": "5.1.1", - "vitest": "4.1.7", - "vue-tsc": "3.3.2", + "vitest": "4.1.8", + "vue-tsc": "3.3.4", "wait-on": "9.0.10", "workbox-cli": "7.4.1", "ws": "8.21.0" diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 2e75d6a5a..624ffc07d 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -6,7 +6,7 @@ settings: overrides: minimatch: ^10.2.3 - rollup: 4.60.4 + rollup: 4.61.1 basic-ftp: '>=5.2.2' serialize-javascript: ^7.0.5 flatted: ^3.4.1 @@ -35,7 +35,7 @@ importers: version: 3.1.3(@fortawesome/fontawesome-svg-core@7.1.0)(vue@3.5.27(typescript@5.9.3)) '@intlify/unplugin-vue-i18n': specifier: 11.0.3 - version: 11.0.3(@vue/compiler-dom@3.5.27)(eslint@9.39.4(jiti@2.6.1))(rollup@4.60.4)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) + version: 11.0.3(@vue/compiler-dom@3.5.27)(eslint@9.39.4(jiti@2.6.1))(rollup@4.61.1)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) '@kyvg/vue3-notification': specifier: 3.4.2 version: 3.4.2(vue@3.5.27(typescript@5.9.3)) @@ -97,8 +97,8 @@ importers: specifier: 14.1.0 version: 14.1.0(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) axios: - specifier: 1.15.2 - version: 1.15.2 + specifier: 1.16.0 + version: 1.16.0 blurhash: specifier: 2.0.5 version: 2.0.5 @@ -180,10 +180,10 @@ importers: version: 10.4.0 '@histoire/plugin-screenshot': specifier: 1.0.0-beta.1 - version: 1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@24.12.4)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3))(typescript@5.9.3) + version: 1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@24.13.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3))(typescript@5.9.3) '@histoire/plugin-vue': specifier: 1.0.0-beta.1 - version: 1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@24.12.4)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3))(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3)) + version: 1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@24.13.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3))(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3)) '@playwright/test': specifier: 1.58.2 version: 1.58.2 @@ -192,7 +192,7 @@ importers: version: 3.6.1 '@tailwindcss/vite': specifier: 4.3.0 - version: 4.3.0(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + version: 4.3.0(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) '@tsconfig/node24': specifier: 24.0.4 version: 24.0.4 @@ -203,8 +203,8 @@ importers: specifier: 1.0.3 version: 1.0.3 '@types/node': - specifier: 24.12.4 - version: 24.12.4 + specifier: 24.13.1 + version: 24.13.1 '@types/sortablejs': specifier: 1.15.9 version: 1.15.9 @@ -212,20 +212,20 @@ importers: specifier: 8.18.1 version: 8.18.1 '@typescript-eslint/eslint-plugin': - specifier: 8.60.0 - version: 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.60.1 + version: 8.60.1(@typescript-eslint/parser@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.60.0 - version: 8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.60.1 + version: 8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) '@vitejs/plugin-vue': specifier: 6.0.7 - version: 6.0.7(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3)) + version: 6.0.7(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3)) '@vue/eslint-config-typescript': - specifier: 14.7.0 - version: 14.7.0(eslint-plugin-vue@10.9.1(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + specifier: 14.8.0 + version: 14.8.0(eslint-plugin-vue@10.9.2(@typescript-eslint/parser@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) '@vue/test-utils': - specifier: 2.4.10 - version: 2.4.10(@vue/compiler-dom@3.5.27)(@vue/server-renderer@3.5.27(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) + specifier: 2.4.11 + version: 2.4.11(@vue/compiler-dom@3.5.27)(@vue/server-renderer@3.5.27(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) '@vue/tsconfig': specifier: 0.9.1 version: 0.9.1(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)) @@ -239,8 +239,8 @@ importers: specifier: 4.28.2 version: 4.28.2 caniuse-lite: - specifier: 1.0.30001793 - version: 1.0.30001793 + specifier: 1.0.30001797 + version: 1.0.30001797 csstype: specifier: 3.2.3 version: 3.2.3 @@ -254,14 +254,14 @@ importers: specifier: 1.5.0 version: 1.5.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-vue: - specifier: 10.9.1 - version: 10.9.1(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))) + specifier: 10.9.2 + version: 10.9.2(@typescript-eslint/parser@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))) happy-dom: - specifier: 20.9.0 - version: 20.9.0 + specifier: 20.10.2 + version: 20.10.2 histoire: specifier: 1.0.0-beta.1 - version: 1.0.0-beta.1(@types/node@24.12.4)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3) + version: 1.0.0-beta.1(@types/node@24.13.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3) otplib: specifier: 12.0.1 version: 12.0.1 @@ -278,29 +278,29 @@ importers: specifier: 11.3.0 version: 11.3.0(postcss@8.5.14) rollup: - specifier: 4.60.4 - version: 4.60.4 + specifier: 4.61.1 + version: 4.61.1 rollup-plugin-visualizer: specifier: 6.0.11 - version: 6.0.11(rollup@4.60.4) + version: 6.0.11(rollup@4.61.1) sass-embedded: specifier: 1.100.0 version: 1.100.0 stylelint: - specifier: 17.12.0 - version: 17.12.0(typescript@5.9.3) + specifier: 17.13.0 + version: 17.13.0(typescript@5.9.3) stylelint-config-property-sort-order-smacss: specifier: 10.0.0 - version: 10.0.0(stylelint@17.12.0(typescript@5.9.3)) + version: 10.0.0(stylelint@17.13.0(typescript@5.9.3)) stylelint-config-recommended-vue: specifier: 1.6.1 - version: 1.6.1(postcss-html@1.8.1)(stylelint@17.12.0(typescript@5.9.3)) + version: 1.6.1(postcss-html@1.8.1)(stylelint@17.13.0(typescript@5.9.3)) stylelint-config-standard-scss: specifier: 17.0.0 - version: 17.0.0(postcss@8.5.14)(stylelint@17.12.0(typescript@5.9.3)) + version: 17.0.0(postcss@8.5.14)(stylelint@17.13.0(typescript@5.9.3)) stylelint-use-logical: specifier: 2.1.3 - version: 2.1.3(stylelint@17.12.0(typescript@5.9.3)) + version: 2.1.3(stylelint@17.13.0(typescript@5.9.3)) tailwindcss: specifier: 4.3.0 version: 4.3.0 @@ -311,23 +311,23 @@ importers: specifier: 3.0.0 version: 3.0.0 vite: - specifier: 7.3.3 - version: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + specifier: 7.3.5 + version: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) vite-plugin-pwa: specifier: 1.3.0 - version: 1.3.0(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(workbox-build@7.4.1)(workbox-window@7.4.1) + version: 1.3.0(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(workbox-build@7.4.1)(workbox-window@7.4.1) vite-plugin-vue-devtools: specifier: 8.1.2 - version: 8.1.2(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3)) + version: 8.1.2(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3)) vite-svg-loader: specifier: 5.1.1 version: 5.1.1(vue@3.5.27(typescript@5.9.3)) vitest: - specifier: 4.1.7 - version: 4.1.7(@types/node@24.12.4)(happy-dom@20.9.0)(jsdom@27.4.0)(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + specifier: 4.1.8 + version: 4.1.8(@types/node@24.13.1)(happy-dom@20.10.2)(jsdom@27.4.0)(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) vue-tsc: - specifier: 3.3.2 - version: 3.3.2(typescript@5.9.3) + specifier: 3.3.4 + version: 3.3.4(typescript@5.9.3) wait-on: specifier: 9.0.10 version: 9.0.10 @@ -1030,6 +1030,14 @@ packages: css-tree: optional: true + '@csstools/css-syntax-patches-for-csstree@1.1.5': + resolution: {integrity: sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==} + peerDependencies: + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true + '@csstools/css-tokenizer@3.0.4': resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} engines: {node: '>=18'} @@ -2251,7 +2259,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0 '@types/babel__core': ^7.1.9 - rollup: 4.60.4 + rollup: 4.61.1 peerDependenciesMeta: '@types/babel__core': optional: true @@ -2262,7 +2270,7 @@ packages: resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: 4.60.4 + rollup: 4.61.1 peerDependenciesMeta: rollup: optional: true @@ -2271,7 +2279,7 @@ packages: resolution: {integrity: sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: 4.60.4 + rollup: 4.61.1 peerDependenciesMeta: rollup: optional: true @@ -2280,7 +2288,7 @@ packages: resolution: {integrity: sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==} engines: {node: '>=20.0.0'} peerDependencies: - rollup: 4.60.4 + rollup: 4.61.1 peerDependenciesMeta: rollup: optional: true @@ -2289,133 +2297,133 @@ packages: resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: 4.60.4 + rollup: 4.61.1 peerDependenciesMeta: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.60.4': - resolution: {integrity: sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==} + '@rollup/rollup-android-arm-eabi@4.61.1': + resolution: {integrity: sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.60.4': - resolution: {integrity: sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==} + '@rollup/rollup-android-arm64@4.61.1': + resolution: {integrity: sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.4': - resolution: {integrity: sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==} + '@rollup/rollup-darwin-arm64@4.61.1': + resolution: {integrity: sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.4': - resolution: {integrity: sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==} + '@rollup/rollup-darwin-x64@4.61.1': + resolution: {integrity: sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.4': - resolution: {integrity: sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==} + '@rollup/rollup-freebsd-arm64@4.61.1': + resolution: {integrity: sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.4': - resolution: {integrity: sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==} + '@rollup/rollup-freebsd-x64@4.61.1': + resolution: {integrity: sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.4': - resolution: {integrity: sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==} + '@rollup/rollup-linux-arm-gnueabihf@4.61.1': + resolution: {integrity: sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.60.4': - resolution: {integrity: sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==} + '@rollup/rollup-linux-arm-musleabihf@4.61.1': + resolution: {integrity: sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.60.4': - resolution: {integrity: sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==} + '@rollup/rollup-linux-arm64-gnu@4.61.1': + resolution: {integrity: sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.60.4': - resolution: {integrity: sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==} + '@rollup/rollup-linux-arm64-musl@4.61.1': + resolution: {integrity: sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.60.4': - resolution: {integrity: sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==} + '@rollup/rollup-linux-loong64-gnu@4.61.1': + resolution: {integrity: sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.60.4': - resolution: {integrity: sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==} + '@rollup/rollup-linux-loong64-musl@4.61.1': + resolution: {integrity: sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.60.4': - resolution: {integrity: sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==} + '@rollup/rollup-linux-ppc64-gnu@4.61.1': + resolution: {integrity: sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.60.4': - resolution: {integrity: sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==} + '@rollup/rollup-linux-ppc64-musl@4.61.1': + resolution: {integrity: sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.60.4': - resolution: {integrity: sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==} + '@rollup/rollup-linux-riscv64-gnu@4.61.1': + resolution: {integrity: sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.60.4': - resolution: {integrity: sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==} + '@rollup/rollup-linux-riscv64-musl@4.61.1': + resolution: {integrity: sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.60.4': - resolution: {integrity: sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==} + '@rollup/rollup-linux-s390x-gnu@4.61.1': + resolution: {integrity: sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.60.4': - resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==} + '@rollup/rollup-linux-x64-gnu@4.61.1': + resolution: {integrity: sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.60.4': - resolution: {integrity: sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==} + '@rollup/rollup-linux-x64-musl@4.61.1': + resolution: {integrity: sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.60.4': - resolution: {integrity: sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==} + '@rollup/rollup-openbsd-x64@4.61.1': + resolution: {integrity: sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.60.4': - resolution: {integrity: sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==} + '@rollup/rollup-openharmony-arm64@4.61.1': + resolution: {integrity: sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.4': - resolution: {integrity: sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==} + '@rollup/rollup-win32-arm64-msvc@4.61.1': + resolution: {integrity: sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.4': - resolution: {integrity: sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==} + '@rollup/rollup-win32-ia32-msvc@4.61.1': + resolution: {integrity: sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.4': - resolution: {integrity: sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==} + '@rollup/rollup-win32-x64-gnu@4.61.1': + resolution: {integrity: sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.4': - resolution: {integrity: sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==} + '@rollup/rollup-win32-x64-msvc@4.61.1': + resolution: {integrity: sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==} cpu: [x64] os: [win32] @@ -2849,6 +2857,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} @@ -2879,8 +2890,8 @@ packages: '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/node@24.12.4': - resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} + '@types/node@24.13.1': + resolution: {integrity: sha512-RSpUJGmvsJ1ZeBehQZFhIdpsz+bIpES0nIQXko4Ybq+N+kX6XvOq3Jo+iJ82FWLdblFq85AsMikd3m35jgezYg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2912,169 +2923,99 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.56.0': - resolution: {integrity: sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==} + '@typescript-eslint/eslint-plugin@8.60.1': + resolution: {integrity: sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.56.0 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/eslint-plugin@8.60.0': - resolution: {integrity: sha512-QYb/sa74/s7OKMbACMjrYnGspj9Hs5YI5aaffSL65UfeBUzVzBJfVo3oWSpbzPurvm7yaCCo2Lk7lVj610HqKw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.60.0 + '@typescript-eslint/parser': ^8.60.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.56.0': - resolution: {integrity: sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.60.0': - resolution: {integrity: sha512-fcqpj/MyK4sxDPcbe7STNPbpQL4RLZOPWuaTmwZYuc+hJKzRf58yRxfhqGpc6PIq9ZyfSBpfHgmUHmHs0KwHwg==} + '@typescript-eslint/parser@8.60.1': + resolution: {integrity: sha512-A0M6ua6H252bVjPvvtSgl2QA4+ET9S5Mtkb2GDyTxIhH/C4qDItT7RQNO5PhMC6NXGYXOR9dIalcDDgBKT7oFA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.56.0': - resolution: {integrity: sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.58.0': resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.60.0': - resolution: {integrity: sha512-aZu74NNKJeUWqCjDddzdiKaS82dgYgV/vmf+Ui3ZdZejmgfXR/q+pRumgobnQ2cCJTgGTWp4ypiwsuofFubavg==} + '@typescript-eslint/project-service@8.60.1': + resolution: {integrity: sha512-eXkTH2bxmXlqD1RnOPmLZ9ZM9D3VwSx04JOwBnP9RQ+yUA5a2Mu7SfW8uaV2Aon53NJzZlZYuX7tn91Izf+xaw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.56.0': - resolution: {integrity: sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.58.0': resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.60.0': - resolution: {integrity: sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw==} + '@typescript-eslint/scope-manager@8.60.1': + resolution: {integrity: sha512-gvI5OQoptnxQnchOirukCuQ55svJSTuD/4k5+pC267xyBtYry748R9/c3tYUzb/iE6RZfllRz2lVulLCHkTm4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.56.0': - resolution: {integrity: sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.58.0': resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/tsconfig-utils@8.59.4': - resolution: {integrity: sha512-DLCpnKgD4alVxTBSKulK+gU1KCqOgUXfDRDXh2mZgzokQKa/70ax93I2uVO3m/LLvIAtWZIFoiifudmIqAxpMA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/tsconfig-utils@8.60.0': resolution: {integrity: sha512-BZPR3RGYlAXnly6ymAxfkVn5rCbZzQNou0rxv3GfWZ8cTQp+hhVd73khbGLAd8k1TlAPLISH337M+tAgAnaJDQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.56.0': - resolution: {integrity: sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==} + '@typescript-eslint/tsconfig-utils@8.60.1': + resolution: {integrity: sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.60.0': - resolution: {integrity: sha512-SX46wEUtitCpq7AN38HkUU/+zvUpdKf7ephtWAFgckH8O7PQIyL5gvrhQgBLuEYgLfuKWOVvWVskMbuFHAz5xg==} + '@typescript-eslint/type-utils@8.60.1': + resolution: {integrity: sha512-sdwTrpjosW7ANQYJ39ZBF1ZyEMEGVB2UsikrserVM/30a/F1dTLnu9bGxEdosugyu5caigjLrR2qiD11asjI1A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.56.0': - resolution: {integrity: sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.58.0': resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.59.4': - resolution: {integrity: sha512-F1o7WJcCq+bc8dwcO/YsSEOudAH8RDtaOhM6wcAQhcUsFhnWQl81JKy48q1hoxAU0qrzM89+31GYh1515Zde3Q==} + '@typescript-eslint/types@8.60.1': + resolution: {integrity: sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.60.0': - resolution: {integrity: sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.56.0': - resolution: {integrity: sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.58.0': resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/typescript-estree@8.60.0': - resolution: {integrity: sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g==} + '@typescript-eslint/typescript-estree@8.60.1': + resolution: {integrity: sha512-alpRkfG8hlVE5kdJW2GkfgDgXxold3e8e4l6EnmhRmRLbekgAPCCGDVD++sABy9FcgPFroq+uFcCSM1vR57Cew==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.56.0': - resolution: {integrity: sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.58.0': - resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} + '@typescript-eslint/utils@8.60.1': + resolution: {integrity: sha512-h2MPBLoNtjc3qZWfY3Tl51yPorQ2McHn8pJfcMNTcIvrrZrr90Ykffit0yjrPFWQcRcUxzH20+6OcVdW4yHtUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.60.0': - resolution: {integrity: sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/visitor-keys@8.56.0': - resolution: {integrity: sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.58.0': resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.60.0': - resolution: {integrity: sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg==} + '@typescript-eslint/visitor-keys@8.60.1': + resolution: {integrity: sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -3088,11 +3029,11 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 vue: ^3.2.25 - '@vitest/expect@4.1.7': - resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} + '@vitest/expect@4.1.8': + resolution: {integrity: sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==} - '@vitest/mocker@4.1.7': - resolution: {integrity: sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==} + '@vitest/mocker@4.1.8': + resolution: {integrity: sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3102,20 +3043,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.7': - resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==} + '@vitest/pretty-format@4.1.8': + resolution: {integrity: sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==} - '@vitest/runner@4.1.7': - resolution: {integrity: sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==} + '@vitest/runner@4.1.8': + resolution: {integrity: sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==} - '@vitest/snapshot@4.1.7': - resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==} + '@vitest/snapshot@4.1.8': + resolution: {integrity: sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==} - '@vitest/spy@4.1.7': - resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==} + '@vitest/spy@4.1.8': + resolution: {integrity: sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==} - '@vitest/utils@4.1.7': - resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} + '@vitest/utils@4.1.8': + resolution: {integrity: sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==} '@volar/language-core@2.4.28': resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} @@ -3177,8 +3118,8 @@ packages: '@vue/devtools-shared@8.1.2': resolution: {integrity: sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw==} - '@vue/eslint-config-typescript@14.7.0': - resolution: {integrity: sha512-iegbMINVc+seZ/QxtzWiOBozctrHiF2WvGedruu2EbLujg9VuU0FQiNcN2z1ycuaoKKpF4m2qzB5HDEMKbxtIg==} + '@vue/eslint-config-typescript@14.8.0': + resolution: {integrity: sha512-yIquzhXH7ZsrwSSm+rYvoGCRY6wcuF4qBi76e0l7hHLq7YU0f9aC+RcR5fL+XJNfmBZxgX5cVl4sppt4x7ZCBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^9.10.0 || ^10.0.0 @@ -3188,8 +3129,8 @@ packages: typescript: optional: true - '@vue/language-core@3.3.2': - resolution: {integrity: sha512-CLwjSfHlPLhjd2qhuS3tTFtnOIWHXAM5u4X1DxmzlQ8j5bmOYlKCsSusOP7jCRJnlVg0mCTQtHU3vwFvopZGoQ==} + '@vue/language-core@3.3.4': + resolution: {integrity: sha512-IuHqQ5zGGOE7CXP72VX6A42IVeIzYv4WAhO6arej11TRNqtdZfGyH8Yr2FOCaDX0dSQG+JwULLoFHGY1igYVjQ==} '@vue/reactivity@3.5.27': resolution: {integrity: sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==} @@ -3208,8 +3149,8 @@ packages: '@vue/shared@3.5.27': resolution: {integrity: sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==} - '@vue/test-utils@2.4.10': - resolution: {integrity: sha512-SmoZ5EA1kYiAFs9NkYdiFFQF+cSnUwnvlYEbY+DogWQZUiqOm/Y29eSbc5T6yi75SgSF9863SBeXniIEoPajCA==} + '@vue/test-utils@2.4.11': + resolution: {integrity: sha512-GDqaqZsA6m2E5vNzej0aYiIb6BX8xV9pNSbbbXKOfEYwg7ZNblVX8suyqmUBThq8VIrgAJNxn+z72hVtUeiWHA==} peerDependencies: '@vue/compiler-dom': 3.x '@vue/server-renderer': 3.x @@ -3369,11 +3310,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@1.15.2: - resolution: {integrity: sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==} - - axios@1.16.1: - resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==} + axios@1.16.0: + resolution: {integrity: sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==} b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -3484,6 +3422,10 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer-image-size@0.6.4: + resolution: {integrity: sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ==} + engines: {node: '>=4.0'} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -3530,8 +3472,8 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - caniuse-lite@1.0.30001793: - resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} + caniuse-lite@1.0.30001797: + resolution: {integrity: sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==} capture-website@4.2.0: resolution: {integrity: sha512-EmkSn36CXTC8tUsS6aNmvvsdpfVTYYkuRp7U5bV9gcJwcDbqqA5c0Op/iskYPKtDdOkuVp61mjn/LLywX0h7cw==} @@ -4002,6 +3944,10 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} @@ -4054,8 +4000,8 @@ packages: peerDependencies: eslint: '>=8.40.0' - eslint-plugin-vue@10.9.1: - resolution: {integrity: sha512-cHB0Tf4Duvzwecwd/AqWzZvF/QszE13BhjVUpVXWCy9AeMR5GjkAjP3i85vqgLgOuTmkHR1OJ5oMeqLHtuw8zg==} + eslint-plugin-vue@10.9.2: + resolution: {integrity: sha512-4g7ZP3pYcuqd7Zp0pzUKcos0W+RkjBz4EGdhJ92FcYk6v03Ti/GK5NwjgsjxHK+98eXDbHeK7VtX1az7/8doZA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -4418,8 +4364,8 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} - happy-dom@20.9.0: - resolution: {integrity: sha512-GZZ9mKe8r646NUAf/zemnGbjYh4Bt8/MqASJY+pSm5ZDtc3YQox+4gsLI7yi1hba6o+eCsGxpHn5+iEVn31/FQ==} + happy-dom@20.10.2: + resolution: {integrity: sha512-5p9Sxis3eowDJKqx90QCsgbNA02XXqJ59NOHvD4V6cxp+rP4d/xOyVx7uY3hS8hiUbY1VeiFH8lbJ81AyuDVLQ==} engines: {node: '>=20.0.0'} hard-rejection@2.1.0: @@ -4452,16 +4398,12 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hashery@1.4.0: - resolution: {integrity: sha512-Wn2i1In6XFxl8Az55kkgnFRiAlIAushzh26PTjL2AKtQcEfXrcLa7Hn5QOWGZEf3LU057P9TwwZjFyxfS1VuvQ==} - engines: {node: '>=20'} - hashery@1.5.1: resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==} engines: {node: '>=20'} - hasown@2.0.3: - resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} hast-util-to-html@9.0.5: @@ -5882,15 +5824,15 @@ packages: hasBin: true peerDependencies: rolldown: 1.x || ^1.0.0-beta - rollup: 4.60.4 + rollup: 4.61.1 peerDependenciesMeta: rolldown: optional: true rollup: optional: true - rollup@4.60.4: - resolution: {integrity: sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==} + rollup@4.61.1: + resolution: {integrity: sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -6372,8 +6314,8 @@ packages: peerDependencies: stylelint: '>= 11 < 18' - stylelint@17.12.0: - resolution: {integrity: sha512-KIlzWXMHUvgfPUR0R7TK3H80yCIi0uoivUwf+6Az4yrHJD1Q3c1qIkh/H5Z0i/K3QXgtq/UMEkWyBUSUwnpnOg==} + stylelint@17.13.0: + resolution: {integrity: sha512-G1WYzMerp7ihOaIe9VJCHLt12MoAD2QLf1AFerYP37+BCRBUK5UCpq8e/mN+zCIaJPKQcaxhE4WlPmqdiOx/gw==} engines: {node: '>=20.19.0'} hasBin: true @@ -6588,12 +6530,12 @@ packages: typed-query-selector@2.12.0: resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} - typescript-eslint@8.56.0: - resolution: {integrity: sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==} + typescript-eslint@8.60.1: + resolution: {integrity: sha512-6m5hkkRAp8lKvhVpcprAIn5KkehQEh+47oHH2VGnExEh7dhNxXlg6GPAOIu6TxbVQxhebrJDvjl3020ooiWCMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} @@ -6613,8 +6555,8 @@ packages: unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} @@ -6780,8 +6722,8 @@ packages: peerDependencies: vue: '>=3.2.13' - vite@7.3.3: - resolution: {integrity: sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==} + vite@7.3.5: + resolution: {integrity: sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -6820,20 +6762,20 @@ packages: yaml: optional: true - vitest@4.1.7: - resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==} + vitest@4.1.8: + resolution: {integrity: sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.7 - '@vitest/browser-preview': 4.1.7 - '@vitest/browser-webdriverio': 4.1.7 - '@vitest/coverage-istanbul': 4.1.7 - '@vitest/coverage-v8': 4.1.7 - '@vitest/ui': 4.1.7 + '@vitest/browser-playwright': 4.1.8 + '@vitest/browser-preview': 4.1.8 + '@vitest/browser-webdriverio': 4.1.8 + '@vitest/coverage-istanbul': 4.1.8 + '@vitest/coverage-v8': 4.1.8 + '@vitest/ui': 4.1.8 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -6912,8 +6854,8 @@ packages: peerDependencies: vue: ^3.5.0 - vue-tsc@3.3.2: - resolution: {integrity: sha512-n7nQoA3YWW/eiDR8jMiv/uJvlg0uLGs+YgUrsTrf9EZaYSt3tuvMZb5V8+7Mvh/EH5pnY/hoVdgfjH+XcK+wwA==} + vue-tsc@3.3.4: + resolution: {integrity: sha512-XA/JqmQwS2GZmfgpjOEGdrKwaTSEuPwxpHa7/t6f4yiGrJb3gVHTPb9wBfByMNZwQ+xDXs41b8gaS2DKsOozUw==} hasBin: true peerDependencies: typescript: '>=5.0.0' @@ -8076,6 +8018,10 @@ snapshots: optionalDependencies: css-tree: 3.2.1 + '@csstools/css-syntax-patches-for-csstree@1.1.5(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 + '@csstools/css-tokenizer@3.0.4': {} '@csstools/css-tokenizer@4.0.0': {} @@ -8745,17 +8691,17 @@ snapshots: dependencies: '@hapi/hoek': 11.0.7 - '@histoire/app@1.0.0-beta.1(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))': + '@histoire/app@1.0.0-beta.1(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))': dependencies: - '@histoire/controls': 1.0.0-beta.1(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) - '@histoire/shared': 1.0.0-beta.1(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + '@histoire/controls': 1.0.0-beta.1(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + '@histoire/shared': 1.0.0-beta.1(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) '@histoire/vendors': 1.0.0-beta.1 fuse.js: 7.1.0 shiki: 3.2.1 transitivePeerDependencies: - vite - '@histoire/controls@1.0.0-beta.1(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))': + '@histoire/controls@1.0.0-beta.1(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))': dependencies: '@codemirror/commands': 6.8.1 '@codemirror/lang-json': 6.0.1 @@ -8764,17 +8710,17 @@ snapshots: '@codemirror/state': 6.5.2 '@codemirror/theme-one-dark': 6.1.2 '@codemirror/view': 6.36.5 - '@histoire/shared': 1.0.0-beta.1(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + '@histoire/shared': 1.0.0-beta.1(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) '@histoire/vendors': 1.0.0-beta.1 transitivePeerDependencies: - vite - '@histoire/plugin-screenshot@1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@24.12.4)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3))(typescript@5.9.3)': + '@histoire/plugin-screenshot@1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@24.13.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3))(typescript@5.9.3)': dependencies: capture-website: 4.2.0(typescript@5.9.3) defu: 6.1.7 fs-extra: 11.2.0 - histoire: 1.0.0-beta.1(@types/node@24.12.4)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3) + histoire: 1.0.0-beta.1(@types/node@24.13.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3) pathe: 1.1.2 transitivePeerDependencies: - bare-buffer @@ -8783,21 +8729,21 @@ snapshots: - typescript - utf-8-validate - '@histoire/plugin-vue@1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@24.12.4)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3))(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3))': + '@histoire/plugin-vue@1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@24.13.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3))(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3))': dependencies: - '@histoire/controls': 1.0.0-beta.1(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) - '@histoire/shared': 1.0.0-beta.1(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + '@histoire/controls': 1.0.0-beta.1(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + '@histoire/shared': 1.0.0-beta.1(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) '@histoire/vendors': 1.0.0-beta.1 change-case: 5.4.4 globby: 14.1.0 - histoire: 1.0.0-beta.1(@types/node@24.12.4)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3) + histoire: 1.0.0-beta.1(@types/node@24.13.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3) launch-editor: 2.10.0 pathe: 1.1.2 vue: 3.5.27(typescript@5.9.3) transitivePeerDependencies: - vite - '@histoire/shared@1.0.0-beta.1(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))': + '@histoire/shared@1.0.0-beta.1(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))': dependencies: '@histoire/vendors': 1.0.0-beta.1 '@types/fs-extra': 11.0.4 @@ -8805,7 +8751,7 @@ snapshots: chokidar: 4.0.3 pathe: 1.1.2 picocolors: 1.1.1 - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) '@histoire/vendors@1.0.0-beta.1': {} @@ -8848,13 +8794,13 @@ snapshots: '@intlify/shared@11.2.8': {} - '@intlify/unplugin-vue-i18n@11.0.3(@vue/compiler-dom@3.5.27)(eslint@9.39.4(jiti@2.6.1))(rollup@4.60.4)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))': + '@intlify/unplugin-vue-i18n@11.0.3(@vue/compiler-dom@3.5.27)(eslint@9.39.4(jiti@2.6.1))(rollup@4.61.1)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) '@intlify/bundle-utils': 11.0.3(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3))) '@intlify/shared': 11.2.8 '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.2.8)(@vue/compiler-dom@3.5.27)(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) - '@rollup/pluginutils': 5.1.3(rollup@4.60.4) + '@rollup/pluginutils': 5.1.3(rollup@4.61.1) '@typescript-eslint/scope-manager': 8.58.0 '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) debug: 4.4.3 @@ -8929,7 +8875,7 @@ snapshots: '@keyv/bigmap@1.3.1(keyv@5.6.0)': dependencies: - hashery: 1.4.0 + hashery: 1.5.1 hookified: 1.15.1 keyv: 5.6.0 @@ -9111,122 +9057,122 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} - '@rollup/plugin-babel@6.1.0(@babel/core@7.26.0)(rollup@4.60.4)': + '@rollup/plugin-babel@6.1.0(@babel/core@7.26.0)(rollup@4.61.1)': dependencies: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 - '@rollup/pluginutils': 5.1.3(rollup@4.60.4) + '@rollup/pluginutils': 5.1.3(rollup@4.61.1) optionalDependencies: - rollup: 4.60.4 + rollup: 4.61.1 transitivePeerDependencies: - supports-color - '@rollup/plugin-node-resolve@16.0.3(rollup@4.60.4)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.61.1)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.60.4) + '@rollup/pluginutils': 5.1.3(rollup@4.61.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.8 optionalDependencies: - rollup: 4.60.4 + rollup: 4.61.1 - '@rollup/plugin-replace@6.0.3(rollup@4.60.4)': + '@rollup/plugin-replace@6.0.3(rollup@4.61.1)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.60.4) + '@rollup/pluginutils': 5.1.3(rollup@4.61.1) magic-string: 0.30.21 optionalDependencies: - rollup: 4.60.4 + rollup: 4.61.1 - '@rollup/plugin-terser@1.0.0(rollup@4.60.4)': + '@rollup/plugin-terser@1.0.0(rollup@4.61.1)': dependencies: serialize-javascript: 7.0.5 smob: 1.5.0 terser: 5.31.6 optionalDependencies: - rollup: 4.60.4 + rollup: 4.61.1 - '@rollup/pluginutils@5.1.3(rollup@4.60.4)': + '@rollup/pluginutils@5.1.3(rollup@4.61.1)': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: - rollup: 4.60.4 + rollup: 4.61.1 - '@rollup/rollup-android-arm-eabi@4.60.4': + '@rollup/rollup-android-arm-eabi@4.61.1': optional: true - '@rollup/rollup-android-arm64@4.60.4': + '@rollup/rollup-android-arm64@4.61.1': optional: true - '@rollup/rollup-darwin-arm64@4.60.4': + '@rollup/rollup-darwin-arm64@4.61.1': optional: true - '@rollup/rollup-darwin-x64@4.60.4': + '@rollup/rollup-darwin-x64@4.61.1': optional: true - '@rollup/rollup-freebsd-arm64@4.60.4': + '@rollup/rollup-freebsd-arm64@4.61.1': optional: true - '@rollup/rollup-freebsd-x64@4.60.4': + '@rollup/rollup-freebsd-x64@4.61.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.4': + '@rollup/rollup-linux-arm-gnueabihf@4.61.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.4': + '@rollup/rollup-linux-arm-musleabihf@4.61.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.4': + '@rollup/rollup-linux-arm64-gnu@4.61.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.60.4': + '@rollup/rollup-linux-arm64-musl@4.61.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.4': + '@rollup/rollup-linux-loong64-gnu@4.61.1': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.4': + '@rollup/rollup-linux-loong64-musl@4.61.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.4': + '@rollup/rollup-linux-ppc64-gnu@4.61.1': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.4': + '@rollup/rollup-linux-ppc64-musl@4.61.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.4': + '@rollup/rollup-linux-riscv64-gnu@4.61.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.4': + '@rollup/rollup-linux-riscv64-musl@4.61.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.4': + '@rollup/rollup-linux-s390x-gnu@4.61.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.4': + '@rollup/rollup-linux-x64-gnu@4.61.1': optional: true - '@rollup/rollup-linux-x64-musl@4.60.4': + '@rollup/rollup-linux-x64-musl@4.61.1': optional: true - '@rollup/rollup-openbsd-x64@4.60.4': + '@rollup/rollup-openbsd-x64@4.61.1': optional: true - '@rollup/rollup-openharmony-arm64@4.60.4': + '@rollup/rollup-openharmony-arm64@4.61.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.4': + '@rollup/rollup-win32-arm64-msvc@4.61.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.4': + '@rollup/rollup-win32-ia32-msvc@4.61.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.60.4': + '@rollup/rollup-win32-x64-gnu@4.61.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.60.4': + '@rollup/rollup-win32-x64-msvc@4.61.1': optional: true '@sentry-internal/browser-utils@10.36.0': @@ -9433,12 +9379,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 - '@tailwindcss/vite@4.3.0(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))': + '@tailwindcss/vite@4.3.0(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.3.0 '@tailwindcss/oxide': 4.3.0 tailwindcss: 4.3.0 - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) '@tiptap/core@3.17.0(@tiptap/pm@3.17.0)': dependencies: @@ -9665,10 +9611,12 @@ snapshots: '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 24.12.4 + '@types/node': 24.13.1 '@types/hast@3.0.4': dependencies: @@ -9680,7 +9628,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 24.12.4 + '@types/node': 24.13.1 '@types/linkify-it@5.0.0': {} @@ -9697,9 +9645,9 @@ snapshots: '@types/minimist@1.2.5': {} - '@types/node@24.12.4': + '@types/node@24.13.1': dependencies: - undici-types: 7.16.0 + undici-types: 7.18.2 '@types/normalize-package-data@2.4.4': {} @@ -9709,7 +9657,7 @@ snapshots: '@types/tern@0.23.9': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/trusted-types@2.0.7': {} @@ -9721,21 +9669,21 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.12.4 + '@types/node': 24.13.1 '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.12.4 + '@types/node': 24.13.1 optional: true - '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.60.1(@typescript-eslint/parser@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.0 + '@typescript-eslint/parser': 8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.1 + '@typescript-eslint/type-utils': 8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.60.1 eslint: 9.39.4(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -9744,109 +9692,63 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.60.0 - '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.60.0 - eslint: 9.39.4(jiti@2.6.1) - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.0 + '@typescript-eslint/scope-manager': 8.60.1 + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.60.1 debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.60.0 - '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.60.0 - debug: 4.4.3 - eslint: 9.39.4(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.56.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.59.4(typescript@5.9.3) - '@typescript-eslint/types': 8.59.4 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/project-service@8.58.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.59.4(typescript@5.9.3) - '@typescript-eslint/types': 8.59.4 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.60.0(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.60.0(typescript@5.9.3) - '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/types': 8.60.1 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.56.0': + '@typescript-eslint/project-service@8.60.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/visitor-keys': 8.56.0 + '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@5.9.3) + '@typescript-eslint/types': 8.60.1 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color '@typescript-eslint/scope-manager@8.58.0': dependencies: '@typescript-eslint/types': 8.58.0 '@typescript-eslint/visitor-keys': 8.58.0 - '@typescript-eslint/scope-manager@8.60.0': + '@typescript-eslint/scope-manager@8.60.1': dependencies: - '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/visitor-keys': 8.60.0 - - '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/visitor-keys': 8.60.1 '@typescript-eslint/tsconfig-utils@8.58.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.59.4(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.60.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.60.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@5.9.3) @@ -9854,40 +9756,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.39.4(jiti@2.6.1) - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.56.0': {} - '@typescript-eslint/types@8.58.0': {} - '@typescript-eslint/types@8.59.4': {} - - '@typescript-eslint/types@8.60.0': {} - - '@typescript-eslint/typescript-estree@8.56.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.56.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/visitor-keys': 8.56.0 - debug: 4.4.3 - minimatch: 10.2.4 - semver: 7.7.3 - tinyglobby: 0.2.15 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types@8.60.1': {} '@typescript-eslint/typescript-estree@8.58.0(typescript@5.9.3)': dependencies: @@ -9904,12 +9775,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.60.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.60.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.60.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.60.0(typescript@5.9.3) - '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/visitor-keys': 8.60.0 + '@typescript-eslint/project-service': 8.60.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@5.9.3) + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/visitor-keys': 8.60.1 debug: 4.4.3 minimatch: 10.2.4 semver: 7.7.3 @@ -9919,100 +9790,73 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.1 + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@5.9.3) eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.60.0 - '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.56.0': - dependencies: - '@typescript-eslint/types': 8.56.0 - eslint-visitor-keys: 5.0.0 - '@typescript-eslint/visitor-keys@8.58.0': dependencies: '@typescript-eslint/types': 8.58.0 eslint-visitor-keys: 5.0.0 - '@typescript-eslint/visitor-keys@8.60.0': + '@typescript-eslint/visitor-keys@8.60.1': dependencies: - '@typescript-eslint/types': 8.60.0 + '@typescript-eslint/types': 8.60.1 eslint-visitor-keys: 5.0.0 '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-vue@6.0.7(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.7(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) vue: 3.5.27(typescript@5.9.3) - '@vitest/expect@4.1.7': + '@vitest/expect@4.1.8': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.2 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 + '@vitest/spy': 4.1.8 + '@vitest/utils': 4.1.8 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.7(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))': + '@vitest/mocker@4.1.8(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))': dependencies: - '@vitest/spy': 4.1.7 + '@vitest/spy': 4.1.8 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) - '@vitest/pretty-format@4.1.7': + '@vitest/pretty-format@4.1.8': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.7': + '@vitest/runner@4.1.8': dependencies: - '@vitest/utils': 4.1.7 + '@vitest/utils': 4.1.8 pathe: 2.0.3 - '@vitest/snapshot@4.1.7': + '@vitest/snapshot@4.1.8': dependencies: - '@vitest/pretty-format': 4.1.7 - '@vitest/utils': 4.1.7 + '@vitest/pretty-format': 4.1.8 + '@vitest/utils': 4.1.8 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.7': {} + '@vitest/spy@4.1.8': {} - '@vitest/utils@4.1.7': + '@vitest/utils@4.1.8': dependencies: - '@vitest/pretty-format': 4.1.7 + '@vitest/pretty-format': 4.1.8 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -10123,20 +9967,20 @@ snapshots: '@vue/devtools-shared@8.1.2': {} - '@vue/eslint-config-typescript@14.7.0(eslint-plugin-vue@10.9.1(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@vue/eslint-config-typescript@14.8.0(eslint-plugin-vue@10.9.2(@typescript-eslint/parser@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-vue: 10.9.1(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))) + eslint-plugin-vue: 10.9.2(@typescript-eslint/parser@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))) fast-glob: 3.3.3 - typescript-eslint: 8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@2.6.1)) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@vue/language-core@3.3.2': + '@vue/language-core@3.3.4': dependencies: '@volar/language-core': 2.4.28 '@vue/compiler-dom': 3.5.27 @@ -10170,7 +10014,7 @@ snapshots: '@vue/shared@3.5.27': {} - '@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.27)(@vue/server-renderer@3.5.27(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))': + '@vue/test-utils@2.4.11(@vue/compiler-dom@3.5.27)(@vue/server-renderer@3.5.27(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))': dependencies: '@vue/compiler-dom': 3.5.27 js-beautify: 1.15.1 @@ -10309,7 +10153,7 @@ snapshots: autoprefixer@10.5.0(postcss@8.5.14): dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001793 + caniuse-lite: 1.0.30001797 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.14 @@ -10319,7 +10163,7 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - axios@1.15.2: + axios@1.16.0: dependencies: follow-redirects: 1.16.0 form-data: 4.0.5 @@ -10327,16 +10171,6 @@ snapshots: transitivePeerDependencies: - debug - axios@1.16.1: - dependencies: - follow-redirects: 1.16.0 - form-data: 4.0.5 - https-proxy-agent: 5.0.1 - proxy-from-env: 2.1.0 - transitivePeerDependencies: - - debug - - supports-color - b4a@1.6.7: {} babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.26.0): @@ -10438,7 +10272,7 @@ snapshots: browserslist@4.28.2: dependencies: baseline-browser-mapping: 2.10.12 - caniuse-lite: 1.0.30001793 + caniuse-lite: 1.0.30001797 electron-to-chromium: 1.5.329 node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.2) @@ -10447,6 +10281,10 @@ snapshots: buffer-from@1.1.2: {} + buffer-image-size@0.6.4: + dependencies: + '@types/node': 24.13.1 + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -10497,7 +10335,7 @@ snapshots: camelcase@8.0.0: {} - caniuse-lite@1.0.30001793: {} + caniuse-lite@1.0.30001797: {} capture-website@4.2.0(typescript@5.9.3): dependencies: @@ -10924,7 +10762,7 @@ snapshots: data-view-byte-offset: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 es-set-tostringtag: 2.1.0 es-to-primitive: 1.3.0 function.prototype.name: 1.1.8 @@ -10936,7 +10774,7 @@ snapshots: has-property-descriptors: 1.0.2 has-proto: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.3 + hasown: 2.0.4 internal-slot: 1.1.0 is-array-buffer: 3.0.5 is-callable: 1.2.7 @@ -10981,12 +10819,16 @@ snapshots: dependencies: es-errors: 1.3.0 + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 - hasown: 2.0.3 + hasown: 2.0.4 es-to-primitive@1.3.0: dependencies: @@ -11106,7 +10948,7 @@ snapshots: module-replacements: 2.11.0 semver: 7.7.3 - eslint-plugin-vue@10.9.1(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))): + eslint-plugin-vue@10.9.2(@typescript-eslint/parser@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) eslint: 9.39.4(jiti@2.6.1) @@ -11117,7 +10959,7 @@ snapshots: vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@2.6.1)) xml-name-validator: 4.0.0 optionalDependencies: - '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) eslint-scope@8.4.0: dependencies: @@ -11199,7 +11041,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -11344,7 +11186,7 @@ snapshots: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 - hasown: 2.0.3 + hasown: 2.0.4 mime-types: 2.1.35 fraction.js@5.3.4: {} @@ -11378,7 +11220,7 @@ snapshots: call-bound: 1.0.4 define-properties: 1.2.1 functions-have-names: 1.2.3 - hasown: 2.0.3 + hasown: 2.0.4 is-callable: 1.2.7 functions-have-names@1.2.3: {} @@ -11398,12 +11240,12 @@ snapshots: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.3 + hasown: 2.0.4 math-intrinsics: 1.1.0 get-own-enumerable-property-symbols@3.0.2: {} @@ -11411,7 +11253,7 @@ snapshots: get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 get-stream@5.2.0: dependencies: @@ -11520,11 +11362,12 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 - happy-dom@20.9.0: + happy-dom@20.10.2: dependencies: - '@types/node': 24.12.4 + '@types/node': 24.13.1 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 + buffer-image-size: 0.6.4 entities: 7.0.1 whatwg-mimetype: 3.0.0 ws: 8.21.0 @@ -11554,15 +11397,11 @@ snapshots: dependencies: has-symbols: 1.1.0 - hashery@1.4.0: - dependencies: - hookified: 1.15.1 - hashery@1.5.1: dependencies: hookified: 1.15.1 - hasown@2.0.3: + hasown@2.0.4: dependencies: function-bind: 1.1.2 @@ -11586,12 +11425,12 @@ snapshots: highlight.js@11.11.1: {} - histoire@1.0.0-beta.1(@types/node@24.12.4)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3): + histoire@1.0.0-beta.1(@types/node@24.13.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(yaml@2.8.3): dependencies: '@akryum/tinypool': 0.3.1 - '@histoire/app': 1.0.0-beta.1(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) - '@histoire/controls': 1.0.0-beta.1(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) - '@histoire/shared': 1.0.0-beta.1(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + '@histoire/app': 1.0.0-beta.1(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + '@histoire/controls': 1.0.0-beta.1(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + '@histoire/shared': 1.0.0-beta.1(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) '@histoire/vendors': 1.0.0-beta.1 '@types/markdown-it': 14.1.2 birpc: 0.2.19 @@ -11616,8 +11455,8 @@ snapshots: sade: 1.8.1 shiki: 3.2.1 sirv: 3.0.2 - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) - vite-node: 3.2.4(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) transitivePeerDependencies: - '@exodus/crypto' - '@types/node' @@ -11733,7 +11572,7 @@ snapshots: internal-slot@1.1.0: dependencies: es-errors: 1.3.0 - hasown: 2.0.3 + hasown: 2.0.4 side-channel: 1.1.0 ip-address@10.2.0: {} @@ -11771,7 +11610,7 @@ snapshots: is-core-module@2.15.1: dependencies: - hasown: 2.0.3 + hasown: 2.0.4 is-data-view@1.0.2: dependencies: @@ -11857,7 +11696,7 @@ snapshots: call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 - hasown: 2.0.3 + hasown: 2.0.4 is-regexp@1.0.0: {} @@ -12343,7 +12182,7 @@ snapshots: call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 has-symbols: 1.1.0 object-keys: 1.1.1 @@ -13036,7 +12875,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.24.2 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 @@ -13118,44 +12957,44 @@ snapshots: rfdc@1.4.1: {} - rollup-plugin-visualizer@6.0.11(rollup@4.60.4): + rollup-plugin-visualizer@6.0.11(rollup@4.61.1): dependencies: open: 8.4.2 picomatch: 4.0.4 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.60.4 + rollup: 4.61.1 - rollup@4.60.4: + rollup@4.61.1: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.4 - '@rollup/rollup-android-arm64': 4.60.4 - '@rollup/rollup-darwin-arm64': 4.60.4 - '@rollup/rollup-darwin-x64': 4.60.4 - '@rollup/rollup-freebsd-arm64': 4.60.4 - '@rollup/rollup-freebsd-x64': 4.60.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.4 - '@rollup/rollup-linux-arm-musleabihf': 4.60.4 - '@rollup/rollup-linux-arm64-gnu': 4.60.4 - '@rollup/rollup-linux-arm64-musl': 4.60.4 - '@rollup/rollup-linux-loong64-gnu': 4.60.4 - '@rollup/rollup-linux-loong64-musl': 4.60.4 - '@rollup/rollup-linux-ppc64-gnu': 4.60.4 - '@rollup/rollup-linux-ppc64-musl': 4.60.4 - '@rollup/rollup-linux-riscv64-gnu': 4.60.4 - '@rollup/rollup-linux-riscv64-musl': 4.60.4 - '@rollup/rollup-linux-s390x-gnu': 4.60.4 - '@rollup/rollup-linux-x64-gnu': 4.60.4 - '@rollup/rollup-linux-x64-musl': 4.60.4 - '@rollup/rollup-openbsd-x64': 4.60.4 - '@rollup/rollup-openharmony-arm64': 4.60.4 - '@rollup/rollup-win32-arm64-msvc': 4.60.4 - '@rollup/rollup-win32-ia32-msvc': 4.60.4 - '@rollup/rollup-win32-x64-gnu': 4.60.4 - '@rollup/rollup-win32-x64-msvc': 4.60.4 + '@rollup/rollup-android-arm-eabi': 4.61.1 + '@rollup/rollup-android-arm64': 4.61.1 + '@rollup/rollup-darwin-arm64': 4.61.1 + '@rollup/rollup-darwin-x64': 4.61.1 + '@rollup/rollup-freebsd-arm64': 4.61.1 + '@rollup/rollup-freebsd-x64': 4.61.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.61.1 + '@rollup/rollup-linux-arm-musleabihf': 4.61.1 + '@rollup/rollup-linux-arm64-gnu': 4.61.1 + '@rollup/rollup-linux-arm64-musl': 4.61.1 + '@rollup/rollup-linux-loong64-gnu': 4.61.1 + '@rollup/rollup-linux-loong64-musl': 4.61.1 + '@rollup/rollup-linux-ppc64-gnu': 4.61.1 + '@rollup/rollup-linux-ppc64-musl': 4.61.1 + '@rollup/rollup-linux-riscv64-gnu': 4.61.1 + '@rollup/rollup-linux-riscv64-musl': 4.61.1 + '@rollup/rollup-linux-s390x-gnu': 4.61.1 + '@rollup/rollup-linux-x64-gnu': 4.61.1 + '@rollup/rollup-linux-x64-musl': 4.61.1 + '@rollup/rollup-openbsd-x64': 4.61.1 + '@rollup/rollup-openharmony-arm64': 4.61.1 + '@rollup/rollup-win32-arm64-msvc': 4.61.1 + '@rollup/rollup-win32-ia32-msvc': 4.61.1 + '@rollup/rollup-win32-x64-gnu': 4.61.1 + '@rollup/rollup-win32-x64-msvc': 4.61.1 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -13338,7 +13177,7 @@ snapshots: dependencies: dunder-proto: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 shebang-command@2.0.0: dependencies: @@ -13527,7 +13366,7 @@ snapshots: define-data-property: 1.1.4 define-properties: 1.2.1 es-abstract: 1.24.2 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 has-property-descriptors: 1.0.2 string.prototype.trimend@1.0.9: @@ -13535,13 +13374,13 @@ snapshots: call-bind: 1.0.9 call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.9 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 string_decoder@1.3.0: dependencies: @@ -13586,58 +13425,58 @@ snapshots: style-mod@4.1.2: {} - stylelint-config-html@1.1.0(postcss-html@1.8.1)(stylelint@17.12.0(typescript@5.9.3)): + stylelint-config-html@1.1.0(postcss-html@1.8.1)(stylelint@17.13.0(typescript@5.9.3)): dependencies: postcss-html: 1.8.1 - stylelint: 17.12.0(typescript@5.9.3) + stylelint: 17.13.0(typescript@5.9.3) - stylelint-config-property-sort-order-smacss@10.0.0(stylelint@17.12.0(typescript@5.9.3)): + stylelint-config-property-sort-order-smacss@10.0.0(stylelint@17.13.0(typescript@5.9.3)): dependencies: css-property-sort-order-smacss: 2.2.0 - stylelint: 17.12.0(typescript@5.9.3) - stylelint-order: 6.0.4(stylelint@17.12.0(typescript@5.9.3)) + stylelint: 17.13.0(typescript@5.9.3) + stylelint-order: 6.0.4(stylelint@17.13.0(typescript@5.9.3)) - stylelint-config-recommended-scss@17.0.0(postcss@8.5.14)(stylelint@17.12.0(typescript@5.9.3)): + stylelint-config-recommended-scss@17.0.0(postcss@8.5.14)(stylelint@17.13.0(typescript@5.9.3)): dependencies: postcss-scss: 4.0.9(postcss@8.5.14) - stylelint: 17.12.0(typescript@5.9.3) - stylelint-config-recommended: 18.0.0(stylelint@17.12.0(typescript@5.9.3)) - stylelint-scss: 7.0.0(stylelint@17.12.0(typescript@5.9.3)) + stylelint: 17.13.0(typescript@5.9.3) + stylelint-config-recommended: 18.0.0(stylelint@17.13.0(typescript@5.9.3)) + stylelint-scss: 7.0.0(stylelint@17.13.0(typescript@5.9.3)) optionalDependencies: postcss: 8.5.14 - stylelint-config-recommended-vue@1.6.1(postcss-html@1.8.1)(stylelint@17.12.0(typescript@5.9.3)): + stylelint-config-recommended-vue@1.6.1(postcss-html@1.8.1)(stylelint@17.13.0(typescript@5.9.3)): dependencies: postcss-html: 1.8.1 semver: 7.7.3 - stylelint: 17.12.0(typescript@5.9.3) - stylelint-config-html: 1.1.0(postcss-html@1.8.1)(stylelint@17.12.0(typescript@5.9.3)) - stylelint-config-recommended: 18.0.0(stylelint@17.12.0(typescript@5.9.3)) + stylelint: 17.13.0(typescript@5.9.3) + stylelint-config-html: 1.1.0(postcss-html@1.8.1)(stylelint@17.13.0(typescript@5.9.3)) + stylelint-config-recommended: 18.0.0(stylelint@17.13.0(typescript@5.9.3)) - stylelint-config-recommended@18.0.0(stylelint@17.12.0(typescript@5.9.3)): + stylelint-config-recommended@18.0.0(stylelint@17.13.0(typescript@5.9.3)): dependencies: - stylelint: 17.12.0(typescript@5.9.3) + stylelint: 17.13.0(typescript@5.9.3) - stylelint-config-standard-scss@17.0.0(postcss@8.5.14)(stylelint@17.12.0(typescript@5.9.3)): + stylelint-config-standard-scss@17.0.0(postcss@8.5.14)(stylelint@17.13.0(typescript@5.9.3)): dependencies: - stylelint: 17.12.0(typescript@5.9.3) - stylelint-config-recommended-scss: 17.0.0(postcss@8.5.14)(stylelint@17.12.0(typescript@5.9.3)) - stylelint-config-standard: 40.0.0(stylelint@17.12.0(typescript@5.9.3)) + stylelint: 17.13.0(typescript@5.9.3) + stylelint-config-recommended-scss: 17.0.0(postcss@8.5.14)(stylelint@17.13.0(typescript@5.9.3)) + stylelint-config-standard: 40.0.0(stylelint@17.13.0(typescript@5.9.3)) optionalDependencies: postcss: 8.5.14 - stylelint-config-standard@40.0.0(stylelint@17.12.0(typescript@5.9.3)): + stylelint-config-standard@40.0.0(stylelint@17.13.0(typescript@5.9.3)): dependencies: - stylelint: 17.12.0(typescript@5.9.3) - stylelint-config-recommended: 18.0.0(stylelint@17.12.0(typescript@5.9.3)) + stylelint: 17.13.0(typescript@5.9.3) + stylelint-config-recommended: 18.0.0(stylelint@17.13.0(typescript@5.9.3)) - stylelint-order@6.0.4(stylelint@17.12.0(typescript@5.9.3)): + stylelint-order@6.0.4(stylelint@17.13.0(typescript@5.9.3)): dependencies: postcss: 8.5.14 postcss-sorting: 8.0.2(postcss@8.5.14) - stylelint: 17.12.0(typescript@5.9.3) + stylelint: 17.13.0(typescript@5.9.3) - stylelint-scss@7.0.0(stylelint@17.12.0(typescript@5.9.3)): + stylelint-scss@7.0.0(stylelint@17.13.0(typescript@5.9.3)): dependencies: css-tree: 3.2.1 is-plain-object: 5.0.0 @@ -13647,17 +13486,17 @@ snapshots: postcss-resolve-nested-selector: 0.1.6 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - stylelint: 17.12.0(typescript@5.9.3) + stylelint: 17.13.0(typescript@5.9.3) - stylelint-use-logical@2.1.3(stylelint@17.12.0(typescript@5.9.3)): + stylelint-use-logical@2.1.3(stylelint@17.13.0(typescript@5.9.3)): dependencies: - stylelint: 17.12.0(typescript@5.9.3) + stylelint: 17.13.0(typescript@5.9.3) - stylelint@17.12.0(typescript@5.9.3): + stylelint@17.13.0(typescript@5.9.3): dependencies: '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) + '@csstools/css-syntax-patches-for-csstree': 1.1.5(css-tree@3.2.1) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) @@ -13903,12 +13742,12 @@ snapshots: typed-query-selector@2.12.0: {} - typescript-eslint@8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.60.1(@typescript-eslint/parser@8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.60.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -13932,7 +13771,7 @@ snapshots: buffer: 5.7.1 through: 2.3.8 - undici-types@7.16.0: {} + undici-types@7.18.2: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -14058,23 +13897,23 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-dev-rpc@1.1.0(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)): + vite-dev-rpc@1.1.0(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)): dependencies: birpc: 2.6.1 - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) - vite-hot-client: 2.1.0(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite-hot-client: 2.1.0(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) - vite-hot-client@2.1.0(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)): + vite-hot-client@2.1.0(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)): dependencies: - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) - vite-node@3.2.4(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3): + vite-node@3.2.4(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -14089,7 +13928,7 @@ snapshots: - tsx - yaml - vite-plugin-inspect@11.3.3(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)): + vite-plugin-inspect@11.3.3(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)): dependencies: ansis: 4.1.0 debug: 4.4.3 @@ -14099,37 +13938,37 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.2 unplugin-utils: 0.3.0 - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) - vite-dev-rpc: 1.1.0(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite-dev-rpc: 1.1.0(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) transitivePeerDependencies: - supports-color - vite-plugin-pwa@1.3.0(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(workbox-build@7.4.1)(workbox-window@7.4.1): + vite-plugin-pwa@1.3.0(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(workbox-build@7.4.1)(workbox-window@7.4.1): dependencies: debug: 4.4.3 pretty-bytes: 6.1.1 tinyglobby: 0.2.15 - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) workbox-build: 7.4.1 workbox-window: 7.4.1 transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@8.1.2(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3)): + vite-plugin-vue-devtools@8.1.2(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3))(vue@3.5.27(typescript@5.9.3)): dependencies: '@vue/devtools-core': 8.1.2(vue@3.5.27(typescript@5.9.3)) '@vue/devtools-kit': 8.1.2 '@vue/devtools-shared': 8.1.2 sirv: 3.0.2 - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) - vite-plugin-inspect: 11.3.3(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) - vite-plugin-vue-inspector: 6.0.0(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite-plugin-inspect: 11.3.3(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + vite-plugin-vue-inspector: 6.0.0(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) transitivePeerDependencies: - '@nuxt/kit' - supports-color - vue - vite-plugin-vue-inspector@6.0.0(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)): + vite-plugin-vue-inspector@6.0.0(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)): dependencies: '@babel/core': 7.26.0 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) @@ -14140,7 +13979,7 @@ snapshots: '@vue/compiler-dom': 3.5.27 kolorist: 1.8.0 magic-string: 0.30.21 - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -14152,16 +13991,16 @@ snapshots: transitivePeerDependencies: - supports-color - vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3): + vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3): dependencies: esbuild: 0.27.5 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.14 - rollup: 4.60.4 + rollup: 4.61.1 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.12.4 + '@types/node': 24.13.1 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 @@ -14170,15 +14009,15 @@ snapshots: terser: 5.31.6 yaml: 2.8.3 - vitest@4.1.7(@types/node@24.12.4)(happy-dom@20.9.0)(jsdom@27.4.0)(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)): + vitest@4.1.8(@types/node@24.13.1)(happy-dom@20.10.2)(jsdom@27.4.0)(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)): dependencies: - '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) - '@vitest/pretty-format': 4.1.7 - '@vitest/runner': 4.1.7 - '@vitest/snapshot': 4.1.7 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 + '@vitest/expect': 4.1.8 + '@vitest/mocker': 4.1.8(vite@7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.8 + '@vitest/runner': 4.1.8 + '@vitest/snapshot': 4.1.8 + '@vitest/spy': 4.1.8 + '@vitest/utils': 4.1.8 es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 @@ -14190,11 +14029,11 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.3(@types/node@24.12.4)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) + vite: 7.3.5(@types/node@24.13.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.31.6)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.12.4 - happy-dom: 20.9.0 + '@types/node': 24.13.1 + happy-dom: 20.10.2 jsdom: 27.4.0 transitivePeerDependencies: - msw @@ -14247,10 +14086,10 @@ snapshots: '@vue/devtools-api': 6.6.4 vue: 3.5.27(typescript@5.9.3) - vue-tsc@3.3.2(typescript@5.9.3): + vue-tsc@3.3.4(typescript@5.9.3): dependencies: '@volar/typescript': 2.4.28 - '@vue/language-core': 3.3.2 + '@vue/language-core': 3.3.4 typescript: 5.9.3 vue@3.5.27(typescript@5.9.3): @@ -14277,14 +14116,13 @@ snapshots: wait-on@9.0.10: dependencies: - axios: 1.16.1 + axios: 1.16.0 joi: 18.2.1 lodash: 4.18.1 minimist: 1.2.8 rxjs: 7.8.2 transitivePeerDependencies: - debug - - supports-color wcwidth@1.0.1: dependencies: @@ -14399,10 +14237,10 @@ snapshots: '@babel/core': 7.26.0 '@babel/preset-env': 7.26.0(@babel/core@7.26.0) '@babel/runtime': 7.25.4 - '@rollup/plugin-babel': 6.1.0(@babel/core@7.26.0)(rollup@4.60.4) - '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.4) - '@rollup/plugin-replace': 6.0.3(rollup@4.60.4) - '@rollup/plugin-terser': 1.0.0(rollup@4.60.4) + '@rollup/plugin-babel': 6.1.0(@babel/core@7.26.0)(rollup@4.61.1) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.61.1) + '@rollup/plugin-replace': 6.0.3(rollup@4.61.1) + '@rollup/plugin-terser': 1.0.0(rollup@4.61.1) '@trickfilm400/rollup-plugin-off-main-thread': 3.0.0-pre1 ajv: 8.18.0 common-tags: 1.8.2 @@ -14411,7 +14249,7 @@ snapshots: fs-extra: 9.1.0 glob: 11.1.0 pretty-bytes: 5.6.0 - rollup: 4.60.4 + rollup: 4.61.1 source-map: 0.8.0-beta.0 stringify-object: 3.3.0 strip-comments: 2.0.1 diff --git a/frontend/src/components/date/DatepickerWithRange.test.ts b/frontend/src/components/date/DatepickerWithRange.test.ts index 080526957..a165acf1f 100644 --- a/frontend/src/components/date/DatepickerWithRange.test.ts +++ b/frontend/src/components/date/DatepickerWithRange.test.ts @@ -36,4 +36,18 @@ describe('DatepickerWithRange predefined ranges', () => { const last = wrapper.emitted('update:modelValue')?.pop()?.[0] expect(last).toEqual({dateFrom: 'now/M-1M', dateTo: 'now/M'}) }) + + // A cleared range (the Custom option) comes back as null via v-model; the + // modelValue watcher must coerce it, not call null.toISOString(). + it('accepts a null modelValue without crashing', async () => { + const wrapper = mountPicker() + await wrapper.setProps({modelValue: {dateFrom: 'now/w', dateTo: 'now/w+1w'}}) + await wrapper.vm.$nextTick() + expect((wrapper.vm as any).from).toBe('now/w') + + await wrapper.setProps({modelValue: {dateFrom: null, dateTo: null}}) + await wrapper.vm.$nextTick() + expect((wrapper.vm as any).from).toBe('') + expect((wrapper.vm as any).to).toBe('') + }) }) diff --git a/frontend/src/components/date/DatepickerWithRange.vue b/frontend/src/components/date/DatepickerWithRange.vue index 8ef4bc604..75cdaf7f5 100644 --- a/frontend/src/components/date/DatepickerWithRange.vue +++ b/frontend/src/components/date/DatepickerWithRange.vue @@ -114,16 +114,17 @@ import DatemathHelp from '@/components/date/DatemathHelp.vue' import {useFlatpickrLanguage} from '@/helpers/useFlatpickrLanguage' const props = defineProps<{ + // null for a side that's been cleared (the Custom option) — emitted, so accepted too. modelValue: { - dateFrom: Date | string, - dateTo: Date | string, + dateFrom: Date | string | null, + dateTo: Date | string | null, }, }>() const emit = defineEmits<{ 'update:modelValue': [value: { - dateFrom: Date | string, - dateTo: Date | string + dateFrom: Date | string | null, + dateTo: Date | string | null }] }>() @@ -149,8 +150,8 @@ const to = ref('') watch( () => props.modelValue, newValue => { - from.value = typeof newValue.dateFrom === 'string' ? newValue.dateFrom : newValue.dateFrom.toISOString() - to.value = typeof newValue.dateTo === 'string' ? newValue.dateTo : newValue.dateTo.toISOString() + from.value = typeof newValue.dateFrom === 'string' ? newValue.dateFrom : (newValue.dateFrom?.toISOString() ?? '') + to.value = typeof newValue.dateTo === 'string' ? newValue.dateTo : (newValue.dateTo?.toISOString() ?? '') // Only set the date back to flatpickr when it's an actual date. // Otherwise flatpickr runs in an endless loop and slows down the browser. const dateFrom = parseDateOrString(from.value, false) @@ -208,14 +209,22 @@ const customRangeActive = computed(() => { }) const buttonText = computed(() => { - if (from.value !== '' && to.value !== '') { - return t('input.datepickerRange.fromto', { - from: from.value, - to: to.value, - }) + if (from.value === '' || to.value === '') { + return t('task.show.select') } - return t('task.show.select') + // Show the preset's name when the range matches one, rather than the raw datemath. + const preset = Object.entries(DATE_RANGES).find( + ([, range]) => from.value === range[0] && to.value === range[1], + ) + if (preset) { + return t(`input.datepickerRange.ranges.${preset[0]}`) + } + + return t('input.datepickerRange.fromto', { + from: from.value, + to: to.value, + }) }) diff --git a/frontend/src/components/home/AppHeader.vue b/frontend/src/components/home/AppHeader.vue index 24f50e09b..bdffb42bb 100644 --- a/frontend/src/components/home/AppHeader.vue +++ b/frontend/src/components/home/AppHeader.vue @@ -54,7 +54,15 @@ +
+ {{ pageTitle }} +
+ + +
+ +
+
{{ $t('task.detail.dateAndTime') }} + + {{ $t('task.detail.actions.timeTracking') }} + + configStore.isProFeatureEnabled(PRO_FEATURE.TIME_TRACKING)) const kanbanStore = useKanbanStore() const authStore = useAuthStore() const baseStore = useBaseStore() @@ -923,7 +947,12 @@ watch( } try { - const loaded = await taskService.get({id}, {expand: ['reactions', 'comments', 'is_unread', 'buckets']}) + const expand = ['reactions', 'comments', 'is_unread', 'buckets'] + if (timeTrackingEnabled.value) { + // Only request the (server-computed) count when the feature is on. + expand.push('time_entries_count') + } + const loaded = await taskService.get({id}, {expand}) Object.assign(task.value, loaded) taskColor.value = task.value.hexColor setActiveFields() @@ -967,6 +996,7 @@ type FieldType = | 'reminders' | 'repeatAfter' | 'startDate' + | 'timeTracking' const activeFields: { [type in FieldType]: boolean } = reactive({ assignees: false, @@ -982,6 +1012,7 @@ const activeFields: { [type in FieldType]: boolean } = reactive({ reminders: false, repeatAfter: false, startDate: false, + timeTracking: false, }) function setActiveFields() { @@ -992,6 +1023,7 @@ function setActiveFields() { // Set all active fields based on values in the model activeFields.assignees = task.value.assignees.length > 0 activeFields.attachments = task.value.attachments.length > 0 + activeFields.timeTracking = (task.value.timeEntriesCount ?? 0) > 0 activeFields.dueDate = task.value.dueDate !== null activeFields.endDate = task.value.endDate !== null activeFields.labels = task.value.labels.length > 0 diff --git a/frontend/src/views/time-tracking/TimeTracking.vue b/frontend/src/views/time-tracking/TimeTracking.vue new file mode 100644 index 000000000..b785fe9c3 --- /dev/null +++ b/frontend/src/views/time-tracking/TimeTracking.vue @@ -0,0 +1,396 @@ + + + + + diff --git a/frontend/src/views/user/OpenIdAuth.vue b/frontend/src/views/user/OpenIdAuth.vue index b163ba4e5..3d41c4f0f 100644 --- a/frontend/src/views/user/OpenIdAuth.vue +++ b/frontend/src/views/user/OpenIdAuth.vue @@ -90,25 +90,11 @@ function findProvider(providerKey: string): IProvider | undefined { } async function authenticateWithCode() { - // This component gets mounted twice: The first time when the actual auth request hits the frontend, - // the second time after that auth request succeeded and the outer component "content-no-auth" isn't used - // but instead the "content-auth" component is used. Because this component is just a route and thus - // gets mounted as part of a which both the content-auth and content-no-auth components have, - // this re-mounts the component, even if the user is already authenticated. - // To make sure we only try to authenticate the user once, we set this "authenticating" lock in localStorage - // which ensures only one auth request is done at a time. We don't simply check if the user is already - // authenticated to not prevent the whole authentication if some user is already logged in. - if (localStorage.getItem('authenticating')) { - return - } - localStorage.setItem('authenticating', 'true') - errorMessage.value = '' const providerKey = route.params.provider as string if (typeof route.query.error !== 'undefined') { - localStorage.removeItem('authenticating') sessionStorage.removeItem(pendingTotpKey(providerKey)) errorMessage.value = typeof route.query.message !== 'undefined' ? route.query.message as string @@ -118,7 +104,6 @@ async function authenticateWithCode() { const state = localStorage.getItem('state') if (typeof route.query.state === 'undefined' || route.query.state !== state) { - localStorage.removeItem('authenticating') sessionStorage.removeItem(pendingTotpKey(providerKey)) errorMessage.value = t('user.auth.openIdStateError') return @@ -145,8 +130,6 @@ async function authenticateWithCode() { return } errorMessage.value = getErrorText(e) - } finally { - localStorage.removeItem('authenticating') } } diff --git a/frontend/src/views/user/settings/General.vue b/frontend/src/views/user/settings/General.vue index 1d80c46ac..85506797b 100644 --- a/frontend/src/views/user/settings/General.vue +++ b/frontend/src/views/user/settings/General.vue @@ -151,6 +151,16 @@ :options="timeFormatOptions" /> + + +
@@ -306,12 +316,14 @@ import {useTitle} from '@/composables/useTitle' import {useProjectStore} from '@/stores/projects' import {useAuthStore} from '@/stores/auth' +import {useConfigStore} from '@/stores/config' import type {IUserSettings} from '@/modelTypes/IUserSettings' import {isSavedFilter} from '@/services/savedFilter' import {DEFAULT_PROJECT_VIEW_SETTINGS} from '@/modelTypes/IProjectView' import {PRIORITIES} from '@/constants/priorities' import {DATE_DISPLAY} from '@/constants/dateDisplay' import {TIME_FORMAT} from '@/constants/timeFormat' +import {PRO_FEATURE} from '@/constants/proFeatures' import {RELATION_KINDS} from '@/types/IRelationKind' import {isDesktopApp} from '@/helpers/desktopAuth' import ShortcutRecorder from '@/components/misc/ShortcutRecorder.vue' @@ -396,6 +408,8 @@ const languageOptions = computed(() => ) const authStore = useAuthStore() +const configStore = useConfigStore() +const timeTrackingEnabled = computed(() => configStore.isProFeatureEnabled(PRO_FEATURE.TIME_TRACKING)) const settings = ref({ ...authStore.settings, @@ -416,6 +430,7 @@ const settings = ref({ defaultTaskRelationType: authStore.settings.frontendSettings.defaultTaskRelationType ?? 'related', // Clone to escape the store's readonly array type. quickAddDefaultReminders: [...(authStore.settings.frontendSettings.quickAddDefaultReminders ?? [])], + timeTrackingDefaultStart: authStore.settings.frontendSettings.timeTrackingDefaultStart ?? '09:00', }, }) diff --git a/frontend/tests/e2e/time-tracking/time-tracking.spec.ts b/frontend/tests/e2e/time-tracking/time-tracking.spec.ts new file mode 100644 index 000000000..43831b87f --- /dev/null +++ b/frontend/tests/e2e/time-tracking/time-tracking.spec.ts @@ -0,0 +1,323 @@ +import {test, expect} from '../../support/fixtures' +import type {Page, Locator} from '@playwright/test' + +import {ProjectFactory} from '../../factories/project' +import {TaskFactory} from '../../factories/task' +import {TimeEntryFactory} from '../../factories/time_entry' +import {LicenseFactory} from '../../factories/license' +import {UserFactory} from '../../factories/user' +import {UserProjectFactory} from '../../factories/users_project' + +// Pick a project in the form's project picker. Waits for the project store to +// hydrate (the sidebar shows it) before searching so the result is there. +async function selectProject(page: Page, form: Locator, title: string) { + await expect(page.locator('.menu-container').getByText(title)).toBeVisible() + const input = form.locator('.multiselect').first().locator('input') + await input.click() + // pressSequentially (not fill) so the multiselect's @keyup search fires. + await input.pressSequentially(title, {delay: 30}) + await form.locator('.search-result-button').filter({hasText: title}).first().click() +} + +// Pick a task in the form's task picker (the second multiselect, after project). +async function selectTask(form: Locator, title: string) { + const input = form.locator('.multiselect').nth(1).locator('input') + await input.click() + await input.pressSequentially(title, {delay: 30}) + await form.locator('.search-result-button').filter({hasText: title}).first().click() +} + +// Open the time-tracking section on a task detail page. +async function openTaskTimeTracking(page: Page, taskId: number): Promise { + await page.goto(`/tasks/${taskId}`) + await page.locator('[data-cy="taskTrackTimeAction"]').click() + const section = page.locator('.task-time-tracking') + await expect(section).toBeVisible() + return section +} + +test.describe('Time tracking', () => { + test.describe('with the feature licensed', () => { + test.beforeEach(async () => { + await LicenseFactory.enable(['time_tracking']) + }) + + test.afterEach(async () => { + await LicenseFactory.disable() + }) + + test('shows the page and the sidebar entry', async ({authenticatedPage: page}) => { + await page.goto('/') + await expect(page.locator('.menu-container').getByRole('link', {name: 'Time tracking'})).toBeVisible() + + await page.goto('/time-tracking') + await expect(page.locator('[data-cy="addTimeEntry"]')).toBeVisible() + }) + + test('logs a manual time entry', async ({authenticatedPage: page}) => { + await ProjectFactory.create(1, {title: 'E2E tracked project'}, false) + + await page.goto('/time-tracking') + await page.locator('[data-cy="addTimeEntry"]').click() + + const form = page.locator('[data-cy="timeEntryForm"]') + await expect(form).toBeVisible() + + await selectProject(page, form, 'E2E tracked project') + // Smart-fill populates both from and to, so the entry is complete. + await form.locator('[data-cy="smartFill"]').click() + await form.locator('[data-cy="saveTimeEntry"]').click() + + await expect(page.locator('[data-cy="timeEntry"]').filter({hasText: 'E2E tracked project'})).toBeVisible() + }) + + test('saving with an empty To logs a completed entry, not a running timer', async ({authenticatedPage: page}) => { + await ProjectFactory.create(1, {title: 'E2E save project'}, false) + + await page.goto('/time-tracking') + await page.locator('[data-cy="addTimeEntry"]').click() + const form = page.locator('[data-cy="timeEntryForm"]') + await selectProject(page, form, 'E2E save project') + // No smart-fill: leave "To" empty, then Save. + await form.locator('[data-cy="saveTimeEntry"]').click() + + // The entry is completed (no open-ended "…") and no timer started. + const entries = page.locator('[data-cy="timeEntry"]') + await expect(entries).toHaveCount(1) + await expect(entries.first()).not.toContainText('…') + await expect(page.locator('[data-cy="timerBadge"]')).not.toBeVisible() + }) + + test('switching from a task to a project logs against the project', async ({authenticatedPage: page}) => { + await ProjectFactory.create(1, {id: 1, title: 'XOR project'}, false) + await TaskFactory.create(1, {id: 1, title: 'XOR task', project_id: 1}, false) + + await page.goto('/time-tracking') + await page.locator('[data-cy="addTimeEntry"]').click() + const form = page.locator('[data-cy="timeEntryForm"]') + + // Pick a task, then change your mind to a project — the task must be cleared. + await selectTask(form, 'XOR task') + await selectProject(page, form, 'XOR project') + + await form.locator('[data-cy="smartFill"]').click() + await form.locator('[data-cy="saveTimeEntry"]').click() + + const entry = page.locator('[data-cy="timeEntry"]').first() + await expect(entry).toContainText('XOR project') + await expect(entry).not.toContainText('XOR task') + }) + + test('starts a timer and stopping it updates the same entry in the list', async ({authenticatedPage: page}) => { + await ProjectFactory.create(1, {title: 'E2E timer project'}, false) + + await page.goto('/time-tracking') + await page.locator('[data-cy="addTimeEntry"]').click() + + const form = page.locator('[data-cy="timeEntryForm"]') + await selectProject(page, form, 'E2E timer project') + await form.locator('[data-cy="startTimer"]').click() + + const badge = page.locator('[data-cy="timerBadge"]') + await expect(badge).toBeVisible() + + // The running entry is in the list with an open-ended time range. + const entries = page.locator('[data-cy="timeEntry"]') + await expect(entries).toHaveCount(1) + await expect(entries.first()).toContainText('…') + + await badge.locator('[data-cy="stopTimer"]').click() + await expect(badge).not.toBeVisible() + + // The same entry is updated in place — end time set, no longer open-ended. + await expect(entries).toHaveCount(1) + await expect(entries.first()).not.toContainText('…') + }) + + test('does not show another user\'s readable running timer in the header', async ({ + authenticatedPage: page, + currentUser, + }) => { + const [timerOwner] = await UserFactory.create(1, {id: currentUser.id + 100}, false) + const [sharedProject] = await ProjectFactory.create(1, { + id: 1001, + title: 'Shared active timer project', + owner_id: timerOwner.id, + }, false) + await UserProjectFactory.create(1, { + project_id: sharedProject.id, + user_id: currentUser.id, + permission: 0, + }, false) + await TimeEntryFactory.create(1, { + project_id: sharedProject.id, + user_id: timerOwner.id, + end_time: null, + comment: 'other user running timer', + }, false) + + const activeTimerHydrated = page.waitForResponse(response => + response.request().method() === 'GET' && + response.url().includes('/api/v2/time-entries') && + response.url().includes('per_page=1'), + ) + await page.goto('/time-tracking') + await activeTimerHydrated + + await expect(page.locator('[data-cy="timeEntry"]').filter({hasText: 'other user running timer'})).toBeVisible() + await expect(page.locator('[data-cy="timerBadge"]')).not.toBeVisible() + }) + + test('hides edit/delete on entries owned by another user', async ({authenticatedPage: page, currentUser}) => { + const [other] = await UserFactory.create(1, {id: currentUser.id + 100}, false) + const [shared] = await ProjectFactory.create(1, {id: 2001, title: 'Shared log project', owner_id: other.id}, false) + await UserProjectFactory.create(1, {project_id: shared.id, user_id: currentUser.id, permission: 0}, false) + await TimeEntryFactory.create(1, {id: 10, project_id: shared.id, user_id: other.id, comment: 'theirs'}, false) + await TimeEntryFactory.create(1, {id: 11, project_id: shared.id, user_id: currentUser.id, comment: 'mine'}, false) + + await page.goto('/time-tracking') + const theirs = page.locator('[data-cy="timeEntry"]').filter({hasText: 'theirs'}) + const mine = page.locator('[data-cy="timeEntry"]').filter({hasText: 'mine'}) + await expect(theirs).toBeVisible() + await expect(mine).toBeVisible() + + // The current user keeps the controls on their own entry, but not the other's. + await expect(mine.locator('[data-cy="editTimeEntry"]')).toBeVisible() + await expect(theirs.locator('[data-cy="editTimeEntry"]')).toHaveCount(0) + await expect(theirs.locator('[data-cy="deleteTimeEntry"]')).toHaveCount(0) + }) + + test('task detail: logs an entry and toggles the form with the + button', async ({authenticatedPage: page}) => { + await ProjectFactory.create(1, {title: 'P'}, false) + await TaskFactory.create(1, {title: 'Tracked task', project_id: 1}, false) + + const section = await openTaskTimeTracking(page, 1) + const form = section.locator('[data-cy="timeEntryForm"]') + + // No entries yet → the form is shown implicitly. + await expect(form).toBeVisible() + + await form.locator('[data-cy="smartFill"]').click() + await form.locator('[data-cy="saveTimeEntry"]').click() + await expect(section.locator('[data-cy="timeEntry"]')).toHaveCount(1) + + // With an entry, the form collapses behind the + button. + await expect(form).not.toBeVisible() + const addButton = section.locator('[data-cy="addTaskTimeEntry"]') + await expect(addButton).toBeVisible() + await addButton.click() + await expect(form).toBeVisible() + }) + + test('task detail: stopping a timer updates the entry in the list', async ({authenticatedPage: page}) => { + await ProjectFactory.create(1, {title: 'P'}, false) + await TaskFactory.create(1, {title: 'Timed task', project_id: 1}, false) + + const section = await openTaskTimeTracking(page, 1) + await section.locator('[data-cy="timeEntryForm"] [data-cy="startTimer"]').click() + + const badge = page.locator('[data-cy="timerBadge"]') + await expect(badge).toBeVisible() + + const entries = section.locator('[data-cy="timeEntry"]') + await expect(entries).toHaveCount(1) + await expect(entries.first()).toContainText('…') + + await badge.locator('[data-cy="stopTimer"]').click() + await expect(badge).not.toBeVisible() + + await expect(entries).toHaveCount(1) + await expect(entries.first()).not.toContainText('…') + }) + + test('edits an entry from the list', async ({authenticatedPage: page}) => { + await ProjectFactory.create(1, {id: 1, title: 'Edit project'}, false) + await TimeEntryFactory.create(1, {id: 1, project_id: 1, comment: 'original comment'}, false) + + await page.goto('/time-tracking') + const entries = page.locator('[data-cy="timeEntry"]') + await expect(entries).toHaveCount(1) + await expect(entries.first()).toContainText('original comment') + + await entries.first().locator('[data-cy="editTimeEntry"]').click() + const form = page.locator('[data-cy="timeEntryForm"]') + const comment = form.locator('[data-cy="timeEntryComment"]') + await expect(comment).toHaveValue('original comment') + await comment.fill('edited comment') + await form.locator('[data-cy="updateTimeEntry"]').click() + + await expect(entries).toHaveCount(1) + await expect(entries.first()).toContainText('edited comment') + await expect(entries.first()).not.toContainText('original comment') + }) + + test('deletes an entry from the list', async ({authenticatedPage: page}) => { + await ProjectFactory.create(1, {id: 1, title: 'Delete project'}, false) + await TimeEntryFactory.create(1, {id: 1, project_id: 1, comment: 'to be deleted'}, false) + + await page.goto('/time-tracking') + const entries = page.locator('[data-cy="timeEntry"]') + await expect(entries).toHaveCount(1) + + await entries.first().locator('[data-cy="deleteTimeEntry"]').click() + await expect(entries).toHaveCount(0) + }) + + test('filters by project, reflected in the url and restored on reload', async ({authenticatedPage: page}) => { + await ProjectFactory.create(1, {id: 1, title: 'Alpha'}, false) + await ProjectFactory.create(1, {id: 2, title: 'Beta'}, false) + await TimeEntryFactory.create(1, {id: 1, project_id: 1, comment: 'alpha entry'}, false) + await TimeEntryFactory.create(1, {id: 2, project_id: 2, comment: 'beta entry'}, false) + + await page.goto('/time-tracking') + const entries = page.locator('[data-cy="timeEntry"]') + await expect(entries).toHaveCount(2) + + // Narrow to project Alpha in the filter modal. + await page.locator('[data-cy="openTimeTrackingFilters"]').click() + const dialog = page.locator('dialog[open]') + const projectInput = dialog.locator('.multiselect').first().locator('input') + await projectInput.click() + await projectInput.pressSequentially('Alpha', {delay: 30}) + await dialog.locator('.search-result-button').filter({hasText: 'Alpha'}).first().click() + + // The filter is written to the url. + await expect(page).toHaveURL(/[?&]project=1\b/) + + // ...and survives a reload (restored from the url): only Alpha's entry. + await page.reload() + await expect(entries).toHaveCount(1) + await expect(entries.first()).toContainText('Alpha') + await expect(page).toHaveURL(/[?&]project=1\b/) + }) + + test('clearing the date range does not crash the page', async ({authenticatedPage: page}) => { + await page.goto('/time-tracking') + // The default range surfaces as "Today" in the toolbar label. + await expect(page.locator('.time-tracking__range')).toHaveText('Today') + + await page.locator('[data-cy="openTimeTrackingFilters"]').click() + // Open the range popup (its trigger is the first button in the picker) and clear via Custom. + await page.locator('dialog[open] .datepicker-with-range-container').getByRole('button').first().click() + await page.getByRole('button', {name: 'Custom', exact: true}).click() + + // rangeLabel must not call getFullYear on a null date — the page stays alive. + await expect(page.locator('.time-tracking__range')).toHaveText('Select a range') + await expect(page.locator('[data-cy="addTimeEntry"]')).toBeVisible() + }) + }) + + test.describe('without the feature licensed', () => { + test.beforeEach(async () => { + await LicenseFactory.disable() + }) + + test('hides the sidebar entry and blocks the route', async ({authenticatedPage: page}) => { + await page.goto('/') + await expect(page.locator('.menu-container').getByRole('link', {name: 'Time tracking'})).toHaveCount(0) + + await page.goto('/time-tracking') + await expect(page.locator('[data-cy="addTimeEntry"]')).not.toBeVisible() + }) + }) +}) diff --git a/frontend/tests/factories/time_entry.ts b/frontend/tests/factories/time_entry.ts new file mode 100644 index 000000000..0125d2917 --- /dev/null +++ b/frontend/tests/factories/time_entry.ts @@ -0,0 +1,31 @@ +import {Factory} from '../support/factory' + +// Local "YYYY-MM-DD HH:MM:SS" (the format the DB fixtures use), not ISO-with-Z. +// start_time is filtered with datemath day windows that resolve to local time, +// and the comparison is lexical — a UTC-stamped value falls outside "today" +// near midnight. +function sqlDateTime(d: Date): string { + const pad = (n: number) => String(n).padStart(2, '0') + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}` +} + +export class TimeEntryFactory extends Factory { + static table = 'time_entries' + + static factory() { + const now = sqlDateTime(new Date()) + + return { + id: '{increment}', + user_id: 1, + task_id: 0, + project_id: 0, + // Completed by default (end set), within today so the default filter shows it. + start_time: now, + end_time: now, + comment: '', + created: now, + updated: now, + } + } +} diff --git a/go.mod b/go.mod index a0fd3335b..b57df5446 100644 --- a/go.mod +++ b/go.mod @@ -35,10 +35,11 @@ require ( github.com/coder/websocket v1.8.14 github.com/coreos/go-oidc/v3 v3.17.0 github.com/d4l3k/messagediff v1.2.1 + github.com/danielgtaylor/huma/v2 v2.37.3 github.com/disintegration/imaging v1.6.2 github.com/dustinkirkland/golang-petname v0.0.0-20240422154211-76c06c4bde6b github.com/fatih/color v1.18.0 - github.com/gabriel-vasile/mimetype v1.4.12 + github.com/gabriel-vasile/mimetype v1.4.13 github.com/ganigeorgiev/fexpr v0.5.0 github.com/getsentry/sentry-go v0.41.0 github.com/go-ldap/ldap/v3 v3.4.12 @@ -47,6 +48,7 @@ require ( github.com/gocarina/gocsv v0.0.0-20231116093920-b87c2d0e983a github.com/golang-jwt/jwt/v5 v5.3.0 github.com/google/uuid v1.6.0 + github.com/gorilla/feeds v1.2.0 github.com/hashicorp/go-version v1.8.0 github.com/hhsnopek/etag v0.0.0-20171206181245-aea95f647346 github.com/huandu/go-clone/generic v1.7.3 @@ -117,21 +119,24 @@ require ( github.com/boombuler/barcode v1.0.1 // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/clipperhouse/displaywidth v0.6.2 // indirect - github.com/clipperhouse/stringish v0.1.1 // indirect - github.com/clipperhouse/uax29/v2 v2.3.0 // indirect + github.com/clipperhouse/displaywidth v0.11.0 // indirect + github.com/clipperhouse/uax29/v2 v2.7.0 // indirect github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect + github.com/danielgtaylor/mexpr v1.9.1 // indirect + github.com/danielgtaylor/shorthand/v2 v2.2.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/distribution/reference v0.6.0 // indirect github.com/docker/go-connections v0.6.0 // indirect github.com/docker/go-units v0.5.0 // indirect + github.com/evanphx/json-patch/v5 v5.9.11 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/fxamacker/cbor/v2 v2.9.0 // indirect github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 // indirect - github.com/go-chi/chi/v5 v5.2.2 // indirect + github.com/go-chi/chi/v5 v5.2.5 // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -141,10 +146,9 @@ require ( github.com/go-openapi/swag v0.23.0 // indirect github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/goccy/go-json v0.10.5 // indirect - github.com/goccy/go-yaml v1.18.0 // indirect + github.com/goccy/go-yaml v1.19.2 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/gorilla/css v1.0.1 // indirect - github.com/gorilla/feeds v1.2.0 // indirect github.com/huandu/go-clone v1.7.3 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect @@ -153,7 +157,7 @@ require ( github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.19 // indirect + github.com/mattn/go-runewidth v0.0.20 // indirect github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/moby/api v1.53.0 // indirect @@ -186,6 +190,7 @@ require ( github.com/syndtr/goleveldb v1.0.0 // indirect github.com/tj/assert v0.0.3 // indirect github.com/urfave/cli/v2 v2.3.0 // indirect + github.com/x448/float16 v0.8.4 // indirect github.com/yosssi/gohtml v0.0.0-20201013000340-ee4748c638f4 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect @@ -198,7 +203,7 @@ require ( golang.org/x/mod v0.33.0 // indirect golang.org/x/time v0.14.0 // indirect golang.org/x/tools v0.42.0 // indirect - google.golang.org/protobuf v1.36.8 // indirect + google.golang.org/protobuf v1.36.11 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect sigs.k8s.io/yaml v1.3.0 // indirect diff --git a/go.sum b/go.sum index a917d62a4..4804ee5ee 100644 --- a/go.sum +++ b/go.sum @@ -96,12 +96,10 @@ github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0 github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/clipperhouse/displaywidth v0.6.2 h1:ZDpTkFfpHOKte4RG5O/BOyf3ysnvFswpyYrV7z2uAKo= -github.com/clipperhouse/displaywidth v0.6.2/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o= -github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= -github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= -github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= -github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= +github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8= +github.com/clipperhouse/displaywidth v0.11.0/go.mod h1:bkrFNkf81G8HyVqmKGxsPufD3JhNl3dSqnGhOoSD/o0= +github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk= +github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/coder/websocket v1.8.14 h1:9L0p0iKiNOibykf283eHkKUHHrpG7f65OE3BhhO7v9g= github.com/coder/websocket v1.8.14/go.mod h1:NX3SzP+inril6yawo5CQXx8+fk145lPDC6pumgx0mVg= @@ -122,6 +120,12 @@ github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= github.com/d4l3k/messagediff v1.2.1 h1:ZcAIMYsUg0EAp9X+tt8/enBE/Q8Yd5kzPynLyKptt9U= github.com/d4l3k/messagediff v1.2.1/go.mod h1:Oozbb1TVXFac9FtSIxHBMnBCq2qeH/2KkEQxENCrlLo= +github.com/danielgtaylor/huma/v2 v2.37.3 h1:6Av0Vj45Vk5lDxRVfoO2iPlEdvCvwLc7pl5nbqGOkYM= +github.com/danielgtaylor/huma/v2 v2.37.3/go.mod h1:OeHHtCEAaNiuVbAVdYu4IQ0UOmnb4x3yMUOShNlZ53g= +github.com/danielgtaylor/mexpr v1.9.1 h1:nA9bsGRmNlJeVCPFgGf7WhrLuKag/+iWfOaJ03iKFPI= +github.com/danielgtaylor/mexpr v1.9.1/go.mod h1:kAivYNRnBeE/IJinqBvVFvLrX54xX//9zFYwADo4Bc8= +github.com/danielgtaylor/shorthand/v2 v2.2.0 h1:hVsemdRq6v3JocP6YRTfu9rOoghZI9PFmkngdKqzAVQ= +github.com/danielgtaylor/shorthand/v2 v2.2.0/go.mod h1:t5QfaNf7DPru9ZLIIhPQSO7Gyvajm3euw7LxB/MTUqE= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -144,6 +148,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dustinkirkland/golang-petname v0.0.0-20240422154211-76c06c4bde6b h1:+0Xqob+onh+4l9TSWmFyZ4JHqGUiCy5P1muyH8Evfpw= github.com/dustinkirkland/golang-petname v0.0.0-20240422154211-76c06c4bde6b/go.mod h1:8AuBTZBRSFqEYBPYULd+NN474/zZBLP+6WeT5S9xlAc= +github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= +github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= @@ -154,16 +160,18 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -github.com/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw= -github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= +github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= +github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= +github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/ganigeorgiev/fexpr v0.5.0 h1:XA9JxtTE/Xm+g/JFI6RfZEHSiQlk+1glLvRK1Lpv/Tk= github.com/ganigeorgiev/fexpr v0.5.0/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE= github.com/getsentry/sentry-go v0.41.0 h1:q/dQZOlEIb4lhxQSjJhQqtRr3vwrJ6Ahe1C9zv+ryRo= github.com/getsentry/sentry-go v0.41.0/go.mod h1:eRXCoh3uvmjQLY6qu63BjUZnaBu5L5WhMV1RwYO8W5s= github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 h1:BP4M0CvQ4S3TGls2FvczZtj5Re/2ZzkV9VwqPHH/3Bo= github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-chi/chi/v5 v5.2.2 h1:CMwsvRVTbXVytCk1Wd72Zy1LAsAh9GxMmSNWLHCG618= -github.com/go-chi/chi/v5 v5.2.2/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= +github.com/go-chi/chi/v5 v5.2.5 h1:Eg4myHZBjyvJmAFjFvWgrqDTXFyOzjj7YIm3L3mu6Ug= +github.com/go-chi/chi/v5 v5.2.5/go.mod h1:X7Gx4mteadT3eDOMTsXzmI4/rwUpOwBHLpAfupzFJP0= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= @@ -205,8 +213,8 @@ github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGF github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= -github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= +github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= @@ -330,8 +338,8 @@ github.com/jszwedko/go-datemath v0.1.1-0.20230526204004-640a500621d6/go.mod h1:W github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= -github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= +github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/kolaente/caldav-go v3.0.1-0.20260326091743-a55d55891017+incompatible h1:81Hr6g9bunxXhRv4AZv0anKcS1WwHLMgo6wbBjamJlY= github.com/kolaente/caldav-go v3.0.1-0.20260326091743-a55d55891017+incompatible/go.mod h1:y1UhTNI4g0hVymJrI6yJ5/ohy09hNBeU8iJEZjgdDOw= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -380,8 +388,8 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= -github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= +github.com/mattn/go-runewidth v0.0.20 h1:WcT52H91ZUAwy8+HUkdM3THM6gXqXuLJi9O3rjcQQaQ= +github.com/mattn/go-runewidth v0.0.20/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mattn/go-sqlite3 v1.14.33 h1:A5blZ5ulQo2AtayQ9/limgHEkFreKj1Dv226a1K73s0= @@ -534,6 +542,8 @@ github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/wneessen/go-mail v0.7.2 h1:xxPnhZ6IZLSgxShebmZ6DPKh1b6OJcoHfzy7UjOkzS8= github.com/wneessen/go-mail v0.7.2/go.mod h1:+TkW6QP3EVkgTEqHtVmnAE/1MRhmzb8Y9/W3pweuS+k= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/yosssi/gohtml v0.0.0-20201013000340-ee4748c638f4 h1:0sw0nJM544SpsihWx1bkXdYLQDlzRflMgFJQ4Yih9ts= github.com/yosssi/gohtml v0.0.0-20201013000340-ee4748c638f4/go.mod h1:+ccdNT0xMY1dtc5XBxumbYfOUhmduiGudqaDgD2rVRE= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -700,8 +710,8 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= -google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/magefile.go b/magefile.go index 2d546d378..f0b614b72 100644 --- a/magefile.go +++ b/magefile.go @@ -1510,6 +1510,46 @@ func (Generate) ConfigYAML(commented bool) { generateConfigYAMLFromJSON(DefaultConfigYAMLSamplePath, commented) } +// ScalarBundle downloads the Scalar API reference standalone JS bundle into +// pkg/routes/api/v2/scalar/. Version is pinned to match the Scalar version +// used in Huma's internal docs at the time of last update. +func (Generate) ScalarBundle() error { + const ( + version = "1.44.20" + dest = "pkg/routes/api/v2/scalar/scalar.standalone.js" + ) + url := fmt.Sprintf("https://unpkg.com/@scalar/api-reference@%s/dist/browser/standalone.js", version) + + fmt.Printf("Downloading Scalar bundle %s from %s\n", version, url) + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) + defer cancel() + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) //nolint:gosec // This is a dev-only mage task and the URL is hard-coded above. + if err != nil { + return fmt.Errorf("build scalar bundle request: %w", err) + } + resp, err := http.DefaultClient.Do(req) + if err != nil { + return fmt.Errorf("download scalar bundle: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("download scalar bundle: unexpected status %s", resp.Status) + } + + var buf bytes.Buffer + if _, err := io.Copy(&buf, resp.Body); err != nil { + return fmt.Errorf("read scalar bundle body: %w", err) + } + + if err := os.WriteFile(dest, buf.Bytes(), 0o600); err != nil { + return fmt.Errorf("write %s: %w", dest, err) + } + + fmt.Printf("Wrote %d bytes to %s\n", buf.Len(), dest) + return nil +} + func localBranchExists(ctx context.Context, name string) bool { return exec.CommandContext(ctx, "git", "show-ref", "--verify", "--quiet", "refs/heads/"+name).Run() == nil //nolint:gosec // This is a dev-only mage task and the branch name is supplied by the developer running it. } diff --git a/pkg/db/db.go b/pkg/db/db.go index 829dcd997..108ad4245 100644 --- a/pkg/db/db.go +++ b/pkg/db/db.go @@ -525,5 +525,17 @@ func CreateParadeDBIndexes() error { return fmt.Errorf("could not ensure paradedb project index: %w", err) } + // Create ParadeDB index for time_entries (comment search via MultiFieldSearch) + timeEntriesIndexSQL := `CREATE INDEX IF NOT EXISTS idx_time_entries_paradedb ON time_entries USING bm25 (id, comment) + WITH ( + key_field='id', + text_fields='{ + "comment": {"fast": true, "record": "freq"} + }' + )` + if _, err := x.Exec(timeEntriesIndexSQL); err != nil { + return fmt.Errorf("could not ensure paradedb time entry index: %w", err) + } + return nil } diff --git a/pkg/db/fixtures/notifications.yml b/pkg/db/fixtures/notifications.yml index fe51488c7..bb4f90062 100644 --- a/pkg/db/fixtures/notifications.yml +++ b/pkg/db/fixtures/notifications.yml @@ -1 +1,21 @@ -[] +- id: 1 + notifiable_id: 1 + notification: '{"test":"notification one"}' + name: test.notification + subject_id: 1 + read_at: null + created: 2022-01-01 00:00:00 +- id: 2 + notifiable_id: 1 + notification: '{"test":"notification two"}' + name: test.notification + subject_id: 2 + read_at: null + created: 2022-01-02 00:00:00 +- id: 3 + notifiable_id: 2 + notification: '{"test":"other user"}' + name: test.notification + subject_id: 3 + read_at: null + created: 2022-01-03 00:00:00 diff --git a/pkg/db/fixtures/time_entries.yml b/pkg/db/fixtures/time_entries.yml new file mode 100644 index 000000000..a3a0112fb --- /dev/null +++ b/pkg/db/fixtures/time_entries.yml @@ -0,0 +1,36 @@ +- id: 1 + user_id: 1 + task_id: 1 + project_id: 0 + start_time: 2018-12-01 10:00:00 + end_time: 2018-12-01 11:00:00 + comment: Time entry on task 1 + created: 2018-12-01 15:13:12 + updated: 2018-12-02 15:13:12 +- id: 2 + user_id: 1 + task_id: 0 + project_id: 1 + start_time: 2018-12-01 12:00:00 + end_time: 2018-12-01 13:00:00 + comment: Standalone entry on project 1 + created: 2018-12-01 15:13:12 + updated: 2018-12-02 15:13:12 +- id: 3 + user_id: 3 + task_id: 0 + project_id: 3 + start_time: 2018-12-01 12:00:00 + end_time: 2018-12-01 13:00:00 + comment: Standalone entry on project 3 by user3 + created: 2018-12-01 15:13:12 + updated: 2018-12-02 15:13:12 +# Running timer (no end_time) on task 1 by user1 +- id: 4 + user_id: 1 + task_id: 1 + project_id: 0 + start_time: 2018-12-01 14:00:00 + comment: Running timer + created: 2018-12-01 15:13:12 + updated: 2018-12-02 15:13:12 diff --git a/pkg/db/fixtures/webhooks.yml b/pkg/db/fixtures/webhooks.yml index c203cf04a..4ec5687c7 100644 --- a/pkg/db/fixtures/webhooks.yml +++ b/pkg/db/fixtures/webhooks.yml @@ -8,3 +8,36 @@ created_by_id: 1 created: 2024-01-01 00:00:00 updated: 2024-01-01 00:00:00 +# Webhooks 2-4 back the v2 permission matrix: project 9 is shared to user1 +# read-only, 10 write, 11 admin. Update/Delete gate on Project.CanWrite, so the +# read-share webhook (#2) must be forbidden while the write/admin ones pass. +- id: 2 + target_url: "https://example.com/webhook-read-share" + events: '["task.updated"]' + project_id: 9 + created_by_id: 6 + created: 2024-01-01 00:00:00 + updated: 2024-01-01 00:00:00 +- id: 3 + target_url: "https://example.com/webhook-write-share" + events: '["task.updated"]' + project_id: 10 + created_by_id: 6 + created: 2024-01-01 00:00:00 + updated: 2024-01-01 00:00:00 +- id: 4 + target_url: "https://example.com/webhook-admin-share" + events: '["task.updated"]' + project_id: 11 + created_by_id: 6 + created: 2024-01-01 00:00:00 + updated: 2024-01-01 00:00:00 +# Webhook #5 lives in project 2 (owned by user3, not shared to user1) so the +# fully-forbidden update/delete path can be exercised under its real parent. +- id: 5 + target_url: "https://example.com/webhook-forbidden" + events: '["task.updated"]' + project_id: 2 + created_by_id: 3 + created: 2024-01-01 00:00:00 + updated: 2024-01-01 00:00:00 diff --git a/pkg/files/files.go b/pkg/files/files.go index a103a5237..a8d702913 100644 --- a/pkg/files/files.go +++ b/pkg/files/files.go @@ -28,8 +28,6 @@ import ( "code.vikunja.io/api/pkg/config" "code.vikunja.io/api/pkg/db" "code.vikunja.io/api/pkg/log" - "code.vikunja.io/api/pkg/metrics" - "code.vikunja.io/api/pkg/modules/keyvalue" "code.vikunja.io/api/pkg/web" "github.com/c2h5oh/datasize" @@ -205,7 +203,7 @@ func (f *File) Delete(s *xorm.Session) (err error) { return err } - return keyvalue.DecrBy(metrics.FilesCountKey, 1) + return nil } // Save saves a file to storage @@ -214,5 +212,5 @@ func (f *File) Save(fcontent io.ReadSeeker) error { if err != nil { return fmt.Errorf("failed to save file: %w", err) } - return keyvalue.IncrBy(metrics.FilesCountKey, 1) + return nil } diff --git a/pkg/initialize/init.go b/pkg/initialize/init.go index df11ef01f..dca17cb60 100644 --- a/pkg/initialize/init.go +++ b/pkg/initialize/init.go @@ -145,7 +145,6 @@ func FullInit() { // Start processing events go func() { models.RegisterListeners() - user.RegisterListeners() migrationHandler.RegisterListeners() ws.RegisterListeners() err := events.InitEvents() diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go index 00dce43eb..2ff7c1c6d 100644 --- a/pkg/metrics/metrics.go +++ b/pkg/metrics/metrics.go @@ -17,8 +17,9 @@ package metrics import ( - "strconv" + "time" + "code.vikunja.io/api/pkg/db" "code.vikunja.io/api/pkg/log" "code.vikunja.io/api/pkg/modules/keyvalue" @@ -36,6 +37,22 @@ const ( AttachmentsCountKey = `attachments_count` ) +// countCacheTTL is how long a cached entity count is served before it is recomputed +// from the database. The counts are inherently approximate (Prometheus samples them), +// so a short staleness window is fine and keeps the cache self-healing — a missed +// InvalidateCount call costs at most this much staleness, never a permanent drift. +const countCacheTTL = 30 * time.Second + +// countTables maps each count metric key to the database table it counts. +var countTables = map[string]string{ + ProjectCountKey: "projects", + UserCountKey: "users", + TaskCountKey: "tasks", + TeamCountKey: "teams", + FilesCountKey: "files", + AttachmentsCountKey: "task_attachments", +} + var registry *prometheus.Registry func GetRegistry() *prometheus.Registry { @@ -53,7 +70,10 @@ func registerPromMetric(key, description string) { Name: "vikunja_" + key, Help: description, }, func() float64 { - count, _ := GetCount(key) + count, err := GetCount(key) + if err != nil { + log.Errorf("Could not get count for metric %s: %s", key, err) + } return float64(count) })) if err != nil { @@ -65,8 +85,8 @@ func registerPromMetric(key, description string) { func InitMetrics() { GetRegistry() - registerPromMetric(ProjectCountKey, "The number of projects on this instance") - registerPromMetric(UserCountKey, "The total number of shares on this instance") + registerPromMetric(ProjectCountKey, "The total number of projects on this instance") + registerPromMetric(UserCountKey, "The total number of users on this instance") registerPromMetric(TaskCountKey, "The total number of tasks on this instance") registerPromMetric(TeamCountKey, "The total number of teams on this instance") registerPromMetric(FilesCountKey, "The total number of files on this instance") @@ -76,26 +96,31 @@ func InitMetrics() { setupActiveLinkSharesMetric() } -// GetCount returns the current count from keyvalue -func GetCount(key string) (count int64, err error) { - cnt, exists, err := keyvalue.Get(key) - if err != nil { - return 0, err - } - if !exists { +// GetCount returns the current count for the given metric key. The value is counted +// directly from the database and cached for countCacheTTL, so repeated scrapes don't +// hit the database on every request. +func GetCount(key string) (int64, error) { + return keyvalue.RememberFor(key, countCacheTTL, func() (int64, error) { + return countFromDatabase(key) + }) +} + +// countFromDatabase runs a COUNT(*) for the table backing the given metric key. +func countFromDatabase(key string) (int64, error) { + table, has := countTables[key] + if !has { return 0, nil } - if s, is := cnt.(string); is { - count, err = strconv.ParseInt(s, 10, 64) - } else { - count = cnt.(int64) - } + s := db.NewSession() + defer s.Close() - return + return s.Table(table).Count() } -// SetCount sets the project count to a given value -func SetCount(count int64, key string) error { - return keyvalue.Put(key, count) +// InvalidateCount drops the cached count for a key so the next read recomputes it from +// the database. Use it where instant freshness is worth the extra COUNT(*); everywhere +// else the countCacheTTL keeps the value reasonably up to date on its own. +func InvalidateCount(key string) error { + return keyvalue.Del(key) } diff --git a/pkg/migration/20260607132257.go b/pkg/migration/20260607132257.go new file mode 100644 index 000000000..f2a7e76b3 --- /dev/null +++ b/pkg/migration/20260607132257.go @@ -0,0 +1,55 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package migration + +import ( + "time" + + "src.techknowlogick.com/xormigrate" + "xorm.io/xorm" +) + +// Mirrors models.TimeEntry. No partial unique index for the single-active-timer +// rule — MySQL has no filtered indexes; it's enforced in the model instead. +type TimeEntry20260607132257 struct { + ID int64 `xorm:"bigint autoincr not null unique pk"` + UserID int64 `xorm:"bigint not null INDEX"` + TaskID int64 `xorm:"bigint null INDEX"` + ProjectID int64 `xorm:"bigint null INDEX"` + StartTime time.Time `xorm:"not null INDEX"` + EndTime *time.Time `xorm:"null"` + Comment string `xorm:"text null"` + Created time.Time `xorm:"created not null"` + Updated time.Time `xorm:"updated not null"` +} + +func (TimeEntry20260607132257) TableName() string { + return "time_entries" +} + +func init() { + migrations = append(migrations, &xormigrate.Migration{ + ID: "20260607132257", + Description: "Add time_entries table", + Migrate: func(tx *xorm.Engine) error { + return tx.Sync(TimeEntry20260607132257{}) + }, + Rollback: func(tx *xorm.Engine) error { + return tx.DropTables(TimeEntry20260607132257{}) + }, + }) +} diff --git a/pkg/models/api_routes.go b/pkg/models/api_routes.go index 607274092..24a3c747b 100644 --- a/pkg/models/api_routes.go +++ b/pkg/models/api_routes.go @@ -27,8 +27,15 @@ import ( var apiTokenRoutes = map[string]APITokenRoute{} +// apiTokenRoutesV2 holds /api/v2 routes under the same (group, permission) +// keys as v1, so a token granted e.g. labels.read_one authorises both +// versions. CanDoAPIRoute consults both tables; GetAPITokenRoutes (the /routes +// exposure the frontend reads) merges v2-only groups so they're discoverable. +var apiTokenRoutesV2 = map[string]APITokenRoute{} + func init() { apiTokenRoutes = make(map[string]APITokenRoute) + apiTokenRoutesV2 = make(map[string]APITokenRoute) apiTokenRoutes["caldav"] = APITokenRoute{ "access": &RouteDetail{ Path: "/dav/*", @@ -50,8 +57,25 @@ type RouteDetail struct { Method string `json:"method"` } +// isV2Path reports whether the given route path lives under /api/v2. +func isV2Path(path string) bool { + return strings.HasPrefix(path, "/api/v2/") || path == "/api/v2" +} + +// stripAPIVersion removes the /api/v1/ or /api/v2/ prefix so both +// versions normalise to the same token-permission group name. +func stripAPIVersion(path string) string { + if stripped := strings.TrimPrefix(path, "/api/v1/"); stripped != path { + return stripped + } + if stripped := strings.TrimPrefix(path, "/api/v2/"); stripped != path { + return stripped + } + return path +} + func getRouteGroupName(path string) (finalName string, filteredParts []string) { - parts := strings.Split(strings.TrimPrefix(path, "/api/v1/"), "/") + parts := strings.Split(stripAPIVersion(path), "/") filteredParts = []string{} for _, part := range parts { if strings.HasPrefix(part, ":") { @@ -75,6 +99,9 @@ func getRouteGroupName(path string) (finalName string, filteredParts []string) { // getRouteDetail determines the API permission type from the route's HTTP method and path. // In Echo v5, route.Name is auto-generated as METHOD:PATH, so we derive permissions from // the HTTP method and path structure instead of the handler function name. +// +// v1 and v2 have inverted create/update verbs: v1 uses PUT for create and POST +// for update, v2 follows REST conventions (POST create, PUT/PATCH update). func getRouteDetail(route echo.RouteInfo) (method string, detail *RouteDetail) { detail = &RouteDetail{ Path: route.Path, @@ -88,6 +115,7 @@ func getRouteDetail(route echo.RouteInfo) (method string, detail *RouteDetail) { lastPart = pathParts[len(pathParts)-1] } endsWithParam := strings.HasPrefix(lastPart, ":") + v2 := isV2Path(route.Path) switch route.Method { case http.MethodGet: @@ -96,10 +124,21 @@ func getRouteDetail(route echo.RouteInfo) (method string, detail *RouteDetail) { } return "read_all", detail case http.MethodPut: - // PUT is used for creating resources in this codebase + if v2 { + // v2: PUT replaces an existing resource → update. + return "update", detail + } + // v1: PUT is used for creating resources. return "create", detail case http.MethodPost: - // POST is used for updating resources + if v2 { + // v2: POST creates a new resource on the collection. + return "create", detail + } + // v1: POST is used for updating resources. + return "update", detail + case http.MethodPatch: + // Both versions use PATCH for partial updates. return "update", detail case http.MethodDelete: return "delete", detail @@ -108,9 +147,9 @@ func getRouteDetail(route echo.RouteInfo) (method string, detail *RouteDetail) { return "", detail } -func ensureAPITokenRoutesGroup(group string) { - if _, has := apiTokenRoutes[group]; !has { - apiTokenRoutes[group] = make(APITokenRoute) +func ensureAPITokenRoutesGroup(target map[string]APITokenRoute, group string) { + if _, has := target[group]; !has { + target[group] = make(APITokenRoute) } } @@ -144,6 +183,7 @@ func isStandardCRUDRoute(routeGroupName string, routeParts []string, _ string) b "comments": true, "relations": true, "attachments": true, + "time-entries": true, "projects_views": true, "projects_teams": true, "projects_users": true, @@ -183,8 +223,10 @@ func isStandardCRUDRoute(routeGroupName string, routeParts []string, _ string) b return false } -// CollectRoutesForAPITokenUsage gets called for every added APITokenRoute and builds a list of all routes we can use for the api tokens. -// The requiresJWT parameter indicates if this route is protected by JWT authentication. +// CollectRoutesForAPITokenUsage records a route for token authorisation. +// v1 and v2 share group/permission keys derived from the prefix-stripped +// path; v2 entries land in apiTokenRoutesV2 so the v1-only frontend UI is +// unchanged while CanDoAPIRoute consults both tables. func CollectRoutesForAPITokenUsage(route echo.RouteInfo, requiresJWT bool) { if route.Method == "echo_route_not_found" { @@ -205,6 +247,17 @@ func CollectRoutesForAPITokenUsage(route echo.RouteInfo, requiresJWT bool) { return } + target := apiTokenRoutes + if isV2Path(route.Path) { + target = apiTokenRoutesV2 + // AutoPatch's synthesised PATCH and the original PUT both derive the + // "update" permission and would clobber each other on the map. Store + // only PUT; CanDoAPIRoute accepts PATCH as its alias on the same path. + if route.Method == http.MethodPatch { + return + } + } + // Check if this is a standard CRUD route using path-based heuristics // In Echo v5, we can no longer rely on route.Name containing "(*WebHandler)" isCRUD := isStandardCRUDRoute(routeGroupName, routeParts, route.Method) @@ -224,67 +277,67 @@ func CollectRoutesForAPITokenUsage(route echo.RouteInfo, requiresJWT bool) { // Otherwise, we add it to the "other" key. if len(routeParts) == 1 { if routeGroupName == "notifications" && route.Method == http.MethodPost { - ensureAPITokenRoutesGroup("notifications") + ensureAPITokenRoutesGroup(target, "notifications") - apiTokenRoutes["notifications"]["mark_all_as_read"] = routeDetail + target["notifications"]["mark_all_as_read"] = routeDetail return } - ensureAPITokenRoutesGroup("other") + ensureAPITokenRoutesGroup(target, "other") - _, exists := apiTokenRoutes["other"][routeGroupName] + _, exists := target["other"][routeGroupName] if exists { routeGroupName += "_" + strings.ToLower(route.Method) } - apiTokenRoutes["other"][routeGroupName] = routeDetail + target["other"][routeGroupName] = routeDetail return } subkey := strings.Join(routeParts[1:], "_") - if _, has := apiTokenRoutes[routeParts[0]]; !has { - apiTokenRoutes[routeParts[0]] = make(APITokenRoute) + if _, has := target[routeParts[0]]; !has { + target[routeParts[0]] = make(APITokenRoute) } - if _, has := apiTokenRoutes[routeParts[0]][subkey]; has { + if _, has := target[routeParts[0]][subkey]; has { subkey += "_" + strings.ToLower(route.Method) } - apiTokenRoutes[routeParts[0]][subkey] = routeDetail + target[routeParts[0]][subkey] = routeDetail return } if strings.HasSuffix(routeGroupName, "_bulk") { parent := strings.TrimSuffix(routeGroupName, "_bulk") - ensureAPITokenRoutesGroup(parent) + ensureAPITokenRoutesGroup(target, parent) method, routeDetail := getRouteDetail(route) - apiTokenRoutes[parent][method+"_bulk"] = routeDetail + target[parent][method+"_bulk"] = routeDetail return } - _, has := apiTokenRoutes[routeGroupName] + _, has := target[routeGroupName] if !has { - apiTokenRoutes[routeGroupName] = make(APITokenRoute) + target[routeGroupName] = make(APITokenRoute) } method, routeDetail := getRouteDetail(route) if method != "" { - apiTokenRoutes[routeGroupName][method] = routeDetail + target[routeGroupName][method] = routeDetail } // Handle task attachments specially - they use custom handlers not WebHandler if routeGroupName == "tasks_attachments" { // PUT is upload (create), GET with :attachment param is download (read_one) if route.Method == http.MethodPut { - apiTokenRoutes[routeGroupName]["create"] = &RouteDetail{ + target[routeGroupName]["create"] = &RouteDetail{ Path: route.Path, Method: route.Method, } } if route.Method == http.MethodGet && strings.HasSuffix(route.Path, ":attachment") { - apiTokenRoutes[routeGroupName]["read_one"] = &RouteDetail{ + target[routeGroupName]["read_one"] = &RouteDetail{ Path: route.Path, Method: route.Method, } @@ -293,10 +346,30 @@ func CollectRoutesForAPITokenUsage(route echo.RouteInfo, requiresJWT bool) { } -// GetAPITokenRoutes exposes the registered scoped-token routes so tests -// and the /api/v1/routes handler share a single source of truth. +// GetAPITokenRoutes exposes the registered scoped-token routes for the /routes +// handler and tests. v1 is the base; v2-only groups and permissions (a v2-only +// resource like time-entries has no v1 counterpart) are merged in so tokens can +// discover and grant them. Shared (group, permission) keys keep their v1 entry — +// CanDoAPIRoute authorises both versions off the same key regardless. func GetAPITokenRoutes() map[string]APITokenRoute { - return apiTokenRoutes + merged := make(map[string]APITokenRoute, len(apiTokenRoutes)) + for group, perms := range apiTokenRoutes { + merged[group] = make(APITokenRoute, len(perms)) + for perm, rd := range perms { + merged[group][perm] = rd + } + } + for group, perms := range apiTokenRoutesV2 { + if merged[group] == nil { + merged[group] = make(APITokenRoute) + } + for perm, rd := range perms { + if merged[group][perm] == nil { + merged[group][perm] = rd + } + } + } + return merged } // GetAvailableAPIRoutesForToken returns a list of all API routes which are available for token usage. @@ -317,6 +390,10 @@ func GetAvailableAPIRoutesForToken(c *echo.Context) error { // stored (Path, Method) for that permission matches exactly. This closes // GHSA-v479-vf79-mg83 and the wider method/sub-resource confusion it // enabled. The one exception is the tasks.read_all quirk handled below. +// One (group, permission) pair can legitimately match both v1 and v2 +// routes; we walk apiTokenRoutes and apiTokenRoutesV2 in turn. On v2, +// PATCH is accepted as an alias for the stored PUT on the same path +// (AutoPatch collapses both onto the "update" permission). func CanDoAPIRoute(c *echo.Context, token *APIToken) (can bool) { path := c.Path() if path == "" { @@ -327,23 +404,32 @@ func CanDoAPIRoute(c *echo.Context, token *APIToken) (can bool) { method := c.Request().Method for group, perms := range token.APIPermissions { - routes, has := apiTokenRoutes[group] - if !has { - continue - } - for _, p := range perms { - rd := routes[p] - if rd == nil { + tables := []APITokenRoute{apiTokenRoutes[group], apiTokenRoutesV2[group]} + for _, routes := range tables { + if routes == nil { continue } - if rd.Method == method && rd.Path == path { - return true - } - // Two list endpoints share tasks.read_all but only one - // survives collection, so allow either explicitly. - if group == "tasks" && p == "read_all" && method == http.MethodGet && - (path == "/api/v1/tasks" || path == "/api/v1/projects/:project/tasks") { - return true + for _, p := range perms { + rd := routes[p] + if rd == nil { + continue + } + if rd.Method == method && rd.Path == path { + return true + } + // v2: AutoPatch mirrors every PUT as a PATCH on the same + // path. PATCH isn't stored (it would clobber PUT under + // the same "update" key), so accept it as an alias here. + if isV2Path(rd.Path) && rd.Method == http.MethodPut && + method == http.MethodPatch && rd.Path == path { + return true + } + // Two list endpoints share tasks.read_all but only one + // survives collection, so allow either explicitly. + if group == "tasks" && p == "read_all" && method == http.MethodGet && + (path == "/api/v1/tasks" || path == "/api/v1/projects/:project/tasks") { + return true + } } } } @@ -357,15 +443,20 @@ func CanDoAPIRoute(c *echo.Context, token *APIToken) (can bool) { func PermissionsAreValid(permissions APIPermissions) (err error) { for key, methods := range permissions { - routes, has := apiTokenRoutes[key] - if !has { + // A permission is valid if the group exists in either table. v2-only + // resources (no v1 counterpart) live solely in apiTokenRoutesV2, so + // validating against the union lets tokens grant them. CanDoAPIRoute + // already consults both tables when authorising. + v1Routes := apiTokenRoutes[key] + v2Routes := apiTokenRoutesV2[key] + if v1Routes == nil && v2Routes == nil { return &ErrInvalidAPITokenPermission{ Group: key, } } for _, method := range methods { - if routes[method] == nil { + if v1Routes[method] == nil && v2Routes[method] == nil { return &ErrInvalidAPITokenPermission{ Group: key, Permission: method, diff --git a/pkg/models/api_routes_test.go b/pkg/models/api_routes_test.go index 3dd9e7d99..5cc510a98 100644 --- a/pkg/models/api_routes_test.go +++ b/pkg/models/api_routes_test.go @@ -17,6 +17,7 @@ package models import ( + "net/http/httptest" "testing" "github.com/labstack/echo/v5" @@ -54,3 +55,197 @@ func TestCanDoAPIRoute_BulkLabelTask(t *testing.T) { assert.Equal(t, "/api/v1/tasks/:projecttask/labels/bulk", bulkRoute.Path) assert.Equal(t, "POST", bulkRoute.Method) } + +func TestIsV2Path(t *testing.T) { + cases := map[string]bool{ + "/api/v2": true, + "/api/v2/": true, + "/api/v2/labels": true, + "/api/v1/labels": false, + "/api/v1/api/v2": false, // prefix is authoritative + "": false, + "/api/v20/labels": false, // only exact /api/v2 prefix counts + "/api/v2labels": false, + } + for path, want := range cases { + t.Run(path, func(t *testing.T) { + assert.Equal(t, want, isV2Path(path)) + }) + } +} + +func TestStripAPIVersion(t *testing.T) { + cases := map[string]string{ + "/api/v1/labels": "labels", + "/api/v2/labels": "labels", + "/api/v2/labels/42": "labels/42", + "/api/v1/tasks/bulk": "tasks/bulk", + "/api/v3/labels": "/api/v3/labels", // unknown versions pass through + "/labels": "/labels", + "": "", + } + for path, want := range cases { + t.Run(path, func(t *testing.T) { + assert.Equal(t, want, stripAPIVersion(path)) + }) + } +} + +// TestCollectRoutesV2 verifies that /api/v2 routes are stored in the v2 +// shadow table under the same (group, permission) keys their v1 counterparts +// would use. This is what lets a token scoped on `labels.read_one` authorise +// both /api/v1/labels/{id} and /api/v2/labels/{id}. +func TestCollectRoutesV2(t *testing.T) { + apiTokenRoutes = make(map[string]APITokenRoute) + apiTokenRoutesV2 = make(map[string]APITokenRoute) + + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "GET", Path: "/api/v2/labels"}, true) + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "GET", Path: "/api/v2/labels/:id"}, true) + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "POST", Path: "/api/v2/labels"}, true) + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "PUT", Path: "/api/v2/labels/:id"}, true) + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "DELETE", Path: "/api/v2/labels/:id"}, true) + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "PATCH", Path: "/api/v2/labels/:id"}, true) + + // v1 map stays untouched. + assert.Empty(t, apiTokenRoutes, "v2 routes must not land in the v1 table") + + labels, has := apiTokenRoutesV2["labels"] + require.True(t, has, "labels group should exist in v2 table") + assert.Equal(t, "GET", labels["read_all"].Method) + assert.Equal(t, "/api/v2/labels", labels["read_all"].Path) + assert.Equal(t, "GET", labels["read_one"].Method) + assert.Equal(t, "POST", labels["create"].Method) + // PUT is the authoritative update verb for API tokens — PATCH is + // skipped during collection so it doesn't clobber PUT. + assert.Equal(t, "PUT", labels["update"].Method) + assert.Equal(t, "DELETE", labels["delete"].Method) +} + +// TestCollectRoutes_TimeEntriesV2 verifies the v2-only time-entries resource +// lands under a clean "time-entries" group rather than the "other" catch-all, +// so its scopes read sensibly for token clients. +func TestCollectRoutes_TimeEntriesV2(t *testing.T) { + apiTokenRoutes = make(map[string]APITokenRoute) + apiTokenRoutesV2 = make(map[string]APITokenRoute) + + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "GET", Path: "/api/v2/time-entries"}, true) + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "GET", Path: "/api/v2/time-entries/:id"}, true) + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "POST", Path: "/api/v2/time-entries"}, true) + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "PUT", Path: "/api/v2/time-entries/:id"}, true) + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "DELETE", Path: "/api/v2/time-entries/:id"}, true) + + _, isOther := apiTokenRoutesV2["other"] + assert.False(t, isOther, "time-entries CRUD must not fall into the 'other' bucket") + + te, has := apiTokenRoutesV2["time-entries"] + require.True(t, has, "time-entries group should exist in the v2 table") + assert.Equal(t, "GET", te["read_all"].Method) + assert.Equal(t, "/api/v2/time-entries", te["read_all"].Path) + assert.Equal(t, "GET", te["read_one"].Method) + assert.Equal(t, "POST", te["create"].Method) + assert.Equal(t, "PUT", te["update"].Method) + assert.Equal(t, "DELETE", te["delete"].Method) +} + +// TestGetAPITokenRoutes_ExposesV2Only verifies the /routes payload merges +// v2-only groups (time-entries has no v1 counterpart) so token clients can +// discover and grant them, without mutating the v1 table itself. +func TestGetAPITokenRoutes_ExposesV2Only(t *testing.T) { + apiTokenRoutes = make(map[string]APITokenRoute) + apiTokenRoutesV2 = make(map[string]APITokenRoute) + + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "GET", Path: "/api/v1/labels"}, true) + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "GET", Path: "/api/v2/time-entries"}, true) + + routes := GetAPITokenRoutes() + + _, hasLabels := routes["labels"] + assert.True(t, hasLabels, "v1 groups stay exposed") + + te, hasTE := routes["time-entries"] + require.True(t, hasTE, "v2-only time-entries must be exposed via /routes") + assert.Equal(t, "GET", te["read_all"].Method) + + _, v1HasTE := apiTokenRoutes["time-entries"] + assert.False(t, v1HasTE, "the merge must not mutate the v1 table") +} + +// TestGetRouteDetail_V2Verbs verifies the v2 verb mapping: POST→create, +// PUT/PATCH→update. v1 inverts POST and PUT so we need a separate mapping +// path. +func TestGetRouteDetail_V2Verbs(t *testing.T) { + cases := []struct { + method, path, wantPerm string + }{ + {"GET", "/api/v2/labels", "read_all"}, + {"GET", "/api/v2/labels/:id", "read_one"}, + {"POST", "/api/v2/labels", "create"}, + {"PUT", "/api/v2/labels/:id", "update"}, + {"PATCH", "/api/v2/labels/:id", "update"}, + {"DELETE", "/api/v2/labels/:id", "delete"}, + } + for _, c := range cases { + t.Run(c.method+" "+c.path, func(t *testing.T) { + perm, _ := getRouteDetail(echo.RouteInfo{Method: c.method, Path: c.path}) + assert.Equal(t, c.wantPerm, perm) + }) + } +} + +// TestCanDoAPIRoute_V2PatchAliasesPut verifies that a token granted the +// "update" permission on a v2 resource can issue PATCH requests against +// the same path as the stored PUT route. Huma's AutoPatch synthesises +// PATCH for every PUT — the matcher accepts it as an alias so token +// holders aren't forced to use PUT exclusively. +func TestCanDoAPIRoute_V2PatchAliasesPut(t *testing.T) { + apiTokenRoutes = make(map[string]APITokenRoute) + apiTokenRoutesV2 = make(map[string]APITokenRoute) + apiTokenRoutes["caldav"] = APITokenRoute{ + "access": &RouteDetail{Path: "/dav/*", Method: "ANY"}, + } + + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "PUT", Path: "/api/v2/labels/:id"}, true) + CollectRoutesForAPITokenUsage(echo.RouteInfo{Method: "PATCH", Path: "/api/v2/labels/:id"}, true) + + token := &APIToken{ + APIPermissions: APIPermissions{"labels": []string{"update"}}, + } + + e := echo.New() + + t.Run("PUT is allowed (stored verb)", func(t *testing.T) { + req := httptest.NewRequest("PUT", "/api/v2/labels/:id", nil) + c := e.NewContext(req, httptest.NewRecorder()) + assert.True(t, CanDoAPIRoute(c, token)) + }) + + t.Run("PATCH is allowed via alias", func(t *testing.T) { + req := httptest.NewRequest("PATCH", "/api/v2/labels/:id", nil) + c := e.NewContext(req, httptest.NewRecorder()) + assert.True(t, CanDoAPIRoute(c, token)) + }) + + t.Run("PATCH on a different path is rejected", func(t *testing.T) { + req := httptest.NewRequest("PATCH", "/api/v2/projects/:id", nil) + c := e.NewContext(req, httptest.NewRecorder()) + assert.False(t, CanDoAPIRoute(c, token)) + }) + + t.Run("v1 PATCH stays rejected", func(t *testing.T) { + // The alias must not bleed onto v1 — v1 has no AutoPatch and + // never registers PATCH on update routes. + apiTokenRoutes["labels"] = APITokenRoute{ + "update": &RouteDetail{Path: "/api/v1/labels/:id", Method: "POST"}, + } + v1Token := &APIToken{ + APIPermissions: APIPermissions{"labels": []string{"update"}}, + } + req := httptest.NewRequest("PATCH", "/api/v1/labels/:id", nil) + c := e.NewContext(req, httptest.NewRecorder()) + assert.False(t, CanDoAPIRoute(c, v1Token)) + }) +} + +// End-to-end CanDoAPIRoute coverage for /api/v2 is provided by the Label +// integration test in pkg/webtests/huma_label_test.go (see the token-auth +// scenarios in that file) which exercises the full auth pipeline. diff --git a/pkg/models/api_tokens.go b/pkg/models/api_tokens.go index 8bbe48550..410c4ac96 100644 --- a/pkg/models/api_tokens.go +++ b/pkg/models/api_tokens.go @@ -37,26 +37,26 @@ type APIPermissions map[string][]string type APIToken struct { // The unique, numeric id of this api key. - ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"token"` + ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"token" readOnly:"true" doc:"The unique, numeric id of this api key."` // A human-readable name for this token - Title string `xorm:"not null" json:"title" valid:"required"` + Title string `xorm:"not null" json:"title" valid:"required" minLength:"1" doc:"A human-readable name for this token."` // The actual api key. Only visible after creation. - Token string `xorm:"-" json:"token,omitempty"` + Token string `xorm:"-" json:"token,omitempty" readOnly:"true" doc:"The cleartext api key. Returned only once, in the response to creating the token; never readable again."` TokenSalt string `xorm:"not null" json:"-"` TokenHash string `xorm:"not null unique" json:"-"` TokenLastEight string `xorm:"not null index varchar(8)" json:"-"` // The permissions this token has. Possible values are available via the /routes endpoint and consist of the keys of the list from that endpoint. For example, if the token should be able to read all tasks as well as update existing tasks, you should add `{"tasks":["read_all","update"]}`. - APIPermissions APIPermissions `xorm:"json not null permissions" json:"permissions" valid:"required"` + APIPermissions APIPermissions `xorm:"json not null permissions" json:"permissions" valid:"required" doc:"The permissions this token has. Possible values are available via the /routes endpoint and consist of the keys of the list from that endpoint. For example, if the token should be able to read all tasks as well as update existing tasks, you should add {\"tasks\":[\"read_all\",\"update\"]}."` // The date when this key expires. - ExpiresAt time.Time `xorm:"not null" json:"expires_at" valid:"required"` + ExpiresAt time.Time `xorm:"not null" json:"expires_at" valid:"required" doc:"The date when this key expires."` // A timestamp when this api key was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this api key was created. You cannot change this value."` // The user ID of the token owner. When creating a token for a bot user, set this // to the bot's ID. If omitted, defaults to the authenticated user. - OwnerID int64 `xorm:"bigint not null" json:"owner_id,omitempty" query:"owner_id"` + OwnerID int64 `xorm:"bigint not null" json:"owner_id,omitempty" query:"owner_id" doc:"The user ID of the token owner. When creating a token for a bot user, set this to the bot's ID; the bot must be owned by the authenticated user. If omitted, defaults to the authenticated user."` web.Permissions `xorm:"-" json:"-"` web.CRUDable `xorm:"-" json:"-"` diff --git a/pkg/models/bot_users.go b/pkg/models/bot_users.go index efc544987..d2d22ed11 100644 --- a/pkg/models/bot_users.go +++ b/pkg/models/bot_users.go @@ -31,7 +31,7 @@ import ( type BotUser struct { // Status shadows user.User.Status so it is included in JSON responses // (the original has json:"-"). - Status user.Status `xorm:"-" json:"status"` + Status user.Status `xorm:"-" json:"status" doc:"The bot's status: 0=active, 2=disabled. Set to 2 to disable the bot, 0 to re-enable it."` user.User `xorm:"extends"` diff --git a/pkg/models/error.go b/pkg/models/error.go index 92c11fd5f..2f9d652c9 100644 --- a/pkg/models/error.go +++ b/pkg/models/error.go @@ -131,6 +131,13 @@ func (err ValidationHTTPError) GetHTTPCode() int { return err.HTTPCode } +// GetCode returns Vikunja's numeric domain error code. v2's translateDomainError +// reads it to keep the v1 `code` body contract, since this type does not +// implement web.HTTPErrorProcessor (the embedded field shadows the method name). +func (err ValidationHTTPError) GetCode() int { + return err.Code +} + func InvalidFieldError(fields []string) error { return InvalidFieldErrorWithMessage(fields, "Invalid Data") } @@ -2391,3 +2398,201 @@ func (err *ErrOAuthInvalidGrantType) HTTPError() web.HTTPError { Message: "The grant_type is not supported. Use 'authorization_code' or 'refresh_token'.", } } + +// ==================== +// Time Tracking Errors +// ==================== + +// ErrTimeEntryDoesNotExist represents an error where a time entry does not exist +type ErrTimeEntryDoesNotExist struct { + TimeEntryID int64 +} + +// IsErrTimeEntryDoesNotExist checks if an error is ErrTimeEntryDoesNotExist. +func IsErrTimeEntryDoesNotExist(err error) bool { + _, ok := err.(ErrTimeEntryDoesNotExist) + return ok +} + +func (err ErrTimeEntryDoesNotExist) Error() string { + return fmt.Sprintf("Time entry does not exist [TimeEntryID: %v]", err.TimeEntryID) +} + +// ErrCodeTimeEntryDoesNotExist holds the unique world-error code of this error +const ErrCodeTimeEntryDoesNotExist = 18001 + +// HTTPError holds the http error description +func (err ErrTimeEntryDoesNotExist) HTTPError() web.HTTPError { + return web.HTTPError{ + HTTPCode: http.StatusNotFound, + Code: ErrCodeTimeEntryDoesNotExist, + Message: "This time entry does not exist.", + } +} + +// ErrTimeEntryInvalidContainer represents an error where a time entry is attached +// to both a task and a project, or to neither (violating the XOR invariant). +type ErrTimeEntryInvalidContainer struct { + TaskID int64 + ProjectID int64 +} + +// IsErrTimeEntryInvalidContainer checks if an error is ErrTimeEntryInvalidContainer. +func IsErrTimeEntryInvalidContainer(err error) bool { + _, ok := err.(ErrTimeEntryInvalidContainer) + return ok +} + +func (err ErrTimeEntryInvalidContainer) Error() string { + return fmt.Sprintf("Time entry must be attached to exactly one of task or project [TaskID: %v, ProjectID: %v]", err.TaskID, err.ProjectID) +} + +// ErrCodeTimeEntryInvalidContainer holds the unique world-error code of this error +const ErrCodeTimeEntryInvalidContainer = 18002 + +// HTTPError holds the http error description +func (err ErrTimeEntryInvalidContainer) HTTPError() web.HTTPError { + return web.HTTPError{ + HTTPCode: http.StatusBadRequest, + Code: ErrCodeTimeEntryInvalidContainer, + Message: "A time entry must be attached to exactly one of a task or a project.", + } +} + +// ErrInvalidTimeEntryFilterField represents an error where a time entry filter references a non-filterable field +type ErrInvalidTimeEntryFilterField struct { + Field string +} + +// IsErrInvalidTimeEntryFilterField checks if an error is ErrInvalidTimeEntryFilterField. +func IsErrInvalidTimeEntryFilterField(err error) bool { + _, ok := err.(ErrInvalidTimeEntryFilterField) + return ok +} + +func (err ErrInvalidTimeEntryFilterField) Error() string { + return fmt.Sprintf("Time entry filter field is invalid [Field: %s]", err.Field) +} + +// ErrCodeInvalidTimeEntryFilterField holds the unique world-error code of this error +const ErrCodeInvalidTimeEntryFilterField = 18003 + +// HTTPError holds the http error description +func (err ErrInvalidTimeEntryFilterField) HTTPError() web.HTTPError { + return web.HTTPError{ + HTTPCode: http.StatusBadRequest, + Code: ErrCodeInvalidTimeEntryFilterField, + Message: fmt.Sprintf("The time entry filter field '%s' is invalid. Filterable fields are user_id, task_id, project_id, start_time and end_time.", err.Field), + } +} + +// ErrInvalidTimeEntryFilterValue represents an error where a time entry filter value cannot be parsed for its field +type ErrInvalidTimeEntryFilterValue struct { + Field string + Value string +} + +// IsErrInvalidTimeEntryFilterValue checks if an error is ErrInvalidTimeEntryFilterValue. +func IsErrInvalidTimeEntryFilterValue(err error) bool { + _, ok := err.(ErrInvalidTimeEntryFilterValue) + return ok +} + +func (err ErrInvalidTimeEntryFilterValue) Error() string { + return fmt.Sprintf("Time entry filter value is invalid [Field: %s, Value: %s]", err.Field, err.Value) +} + +// ErrCodeInvalidTimeEntryFilterValue holds the unique world-error code of this error +const ErrCodeInvalidTimeEntryFilterValue = 18004 + +// HTTPError holds the http error description +func (err ErrInvalidTimeEntryFilterValue) HTTPError() web.HTTPError { + return web.HTTPError{ + HTTPCode: http.StatusBadRequest, + Code: ErrCodeInvalidTimeEntryFilterValue, + Message: fmt.Sprintf("The value '%s' is not valid for the time entry filter field '%s'.", err.Value, err.Field), + } +} + +// ErrNoRunningTimer represents an error where a user has no running timer to act on +type ErrNoRunningTimer struct { + UserID int64 +} + +// IsErrNoRunningTimer checks if an error is ErrNoRunningTimer. +func IsErrNoRunningTimer(err error) bool { + _, ok := err.(ErrNoRunningTimer) + return ok +} + +func (err ErrNoRunningTimer) Error() string { + return fmt.Sprintf("No running timer [UserID: %d]", err.UserID) +} + +// ErrCodeNoRunningTimer holds the unique world-error code of this error +const ErrCodeNoRunningTimer = 18005 + +// HTTPError holds the http error description +func (err ErrNoRunningTimer) HTTPError() web.HTTPError { + return web.HTTPError{ + HTTPCode: http.StatusNotFound, + Code: ErrCodeNoRunningTimer, + Message: "You do not have a running timer.", + } +} + +// ErrTimeEntryAlreadyEnded represents an error where an update tries to clear the +// end time of an entry that has already ended (reopening it as a running timer). +type ErrTimeEntryAlreadyEnded struct { + TimeEntryID int64 +} + +// IsErrTimeEntryAlreadyEnded checks if an error is ErrTimeEntryAlreadyEnded. +func IsErrTimeEntryAlreadyEnded(err error) bool { + _, ok := err.(ErrTimeEntryAlreadyEnded) + return ok +} + +func (err ErrTimeEntryAlreadyEnded) Error() string { + return fmt.Sprintf("Time entry has already ended and cannot be reopened [TimeEntryID: %v]", err.TimeEntryID) +} + +// ErrCodeTimeEntryAlreadyEnded holds the unique world-error code of this error +const ErrCodeTimeEntryAlreadyEnded = 18006 + +// HTTPError holds the http error description +func (err ErrTimeEntryAlreadyEnded) HTTPError() web.HTTPError { + return web.HTTPError{ + HTTPCode: http.StatusBadRequest, + Code: ErrCodeTimeEntryAlreadyEnded, + Message: "A time entry that has already ended cannot be reopened into a running timer. Start a new timer instead.", + } +} + +// ErrTimeEntryEndBeforeStart represents an error where a time entry's end time +// precedes its start time, which would persist a negative interval. +type ErrTimeEntryEndBeforeStart struct { + TimeEntryID int64 +} + +// IsErrTimeEntryEndBeforeStart checks if an error is ErrTimeEntryEndBeforeStart. +func IsErrTimeEntryEndBeforeStart(err error) bool { + _, ok := err.(ErrTimeEntryEndBeforeStart) + return ok +} + +func (err ErrTimeEntryEndBeforeStart) Error() string { + return fmt.Sprintf("Time entry end time is before its start time [TimeEntryID: %v]", err.TimeEntryID) +} + +// ErrCodeTimeEntryEndBeforeStart holds the unique world-error code of this error +const ErrCodeTimeEntryEndBeforeStart = 18007 + +// HTTPError holds the http error description +func (err ErrTimeEntryEndBeforeStart) HTTPError() web.HTTPError { + return web.HTTPError{ + HTTPCode: http.StatusBadRequest, + Code: ErrCodeTimeEntryEndBeforeStart, + Message: "A time entry's end time cannot be before its start time.", + } +} diff --git a/pkg/models/events.go b/pkg/models/events.go index 937524a1a..fca768388 100644 --- a/pkg/models/events.go +++ b/pkg/models/events.go @@ -362,3 +362,36 @@ type WebhookDeliveryEvent struct { func (w *WebhookDeliveryEvent) Name() string { return "webhook.delivery" } + +// TimeEntryCreatedEvent represents a time entry being created +type TimeEntryCreatedEvent struct { + TimeEntry *TimeEntry `json:"time_entry"` + Doer *user.User `json:"doer"` +} + +// Name defines the name for TimeEntryCreatedEvent +func (e *TimeEntryCreatedEvent) Name() string { + return "time-entry.created" +} + +// TimeEntryUpdatedEvent represents a time entry being updated (including a timer being stopped) +type TimeEntryUpdatedEvent struct { + TimeEntry *TimeEntry `json:"time_entry"` + Doer *user.User `json:"doer"` +} + +// Name defines the name for TimeEntryUpdatedEvent +func (e *TimeEntryUpdatedEvent) Name() string { + return "time-entry.updated" +} + +// TimeEntryDeletedEvent represents a time entry being deleted +type TimeEntryDeletedEvent struct { + TimeEntry *TimeEntry `json:"time_entry"` + Doer *user.User `json:"doer"` +} + +// Name defines the name for TimeEntryDeletedEvent +func (e *TimeEntryDeletedEvent) Name() string { + return "time-entry.deleted" +} diff --git a/pkg/models/label.go b/pkg/models/label.go index 3df013f73..b39e6ae83 100644 --- a/pkg/models/label.go +++ b/pkg/models/label.go @@ -29,22 +29,22 @@ import ( // Label represents a label type Label struct { // The unique, numeric id of this label. - ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"label"` + ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"label" readOnly:"true" doc:"The unique, numeric id of this label."` // The title of the label. You'll see this one on tasks associated with it. - Title string `xorm:"varchar(250) not null" json:"title" valid:"runelength(1|250)" minLength:"1" maxLength:"250"` + Title string `xorm:"varchar(250) not null" json:"title" valid:"runelength(1|250)" minLength:"1" maxLength:"250" doc:"The title of the label. You'll see this one on tasks associated with it."` // The label description. - Description string `xorm:"longtext null" json:"description"` + Description string `xorm:"longtext null" json:"description" doc:"The label description."` // The color this label has in hex format. - HexColor string `xorm:"varchar(6) null" json:"hex_color" valid:"runelength(0|7)" maxLength:"7"` + HexColor string `xorm:"varchar(6) null" json:"hex_color" valid:"runelength(0|7)" maxLength:"7" doc:"The color this label has in hex format."` CreatedByID int64 `xorm:"bigint not null" json:"-"` // The user who created this label - CreatedBy *user.User `xorm:"-" json:"created_by"` + CreatedBy *user.User `xorm:"-" json:"created_by" readOnly:"true" doc:"The user who created this label."` // A timestamp when this label was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this label was created. You cannot change this value."` // A timestamp when this label was last updated. You cannot change this value. - Updated time.Time `xorm:"updated not null" json:"updated"` + Updated time.Time `xorm:"updated not null" json:"updated" readOnly:"true" doc:"A timestamp when this label was last updated. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` diff --git a/pkg/models/label_permissions.go b/pkg/models/label_permissions.go index 1c5df95c1..75468d1bb 100644 --- a/pkg/models/label_permissions.go +++ b/pkg/models/label_permissions.go @@ -107,38 +107,15 @@ func (l *Label) hasAccessToLabel(s *xorm.Session, a web.Auth) (has bool, maxPerm return } - // maxPermission is derived only from label_tasks rows whose task is - // actually accessible. The pre-fix code used Get(ll) against the - // unrestricted LEFT JOIN, so it could return an inaccessible row and - // yield a wrong (or errored) permission. - accessibleTaskIDs := []int64{} - err = s.Table("label_tasks"). - Join("INNER", "tasks", "tasks.id = label_tasks.task_id"). - Where(builder.And( - builder.Eq{"label_tasks.label_id": l.ID}, - accessibleProjects, - )). - Cols("label_tasks.task_id"). - Find(&accessibleTaskIDs) + // Writes and deletes are owner-only (CanUpdate/CanDelete), so the caller's + // max permission is admin for the owner and read for anyone else who can see it. + owner, err := l.isLabelOwner(s, a) if err != nil { return } - - for _, taskID := range accessibleTaskIDs { - t := &Task{ID: taskID} - _, taskPermission, tErr := t.CanRead(s, a) - if tErr != nil { - err = tErr - return - } - if taskPermission > maxPermission { - maxPermission = taskPermission - } - } - - // Creator-branch fallback: access came from created_by_id with no - // accessible task to derive a permission from. - if len(accessibleTaskIDs) == 0 { + if owner { + maxPermission = int(PermissionAdmin) + } else { maxPermission = int(PermissionRead) } diff --git a/pkg/models/label_task.go b/pkg/models/label_task.go index 8a09a3c01..ad8b46c2c 100644 --- a/pkg/models/label_task.go +++ b/pkg/models/label_task.go @@ -36,9 +36,9 @@ type LabelTask struct { ID int64 `xorm:"bigint autoincr not null unique pk" json:"-"` TaskID int64 `xorm:"bigint INDEX not null" json:"-" param:"projecttask"` // The label id you want to associate with a task. - LabelID int64 `xorm:"bigint INDEX not null" json:"label_id" param:"label"` + LabelID int64 `xorm:"bigint INDEX not null" json:"label_id" param:"label" doc:"The id of the label to associate with the task."` // A timestamp when this task was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this label was added to the task. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` diff --git a/pkg/models/label_test.go b/pkg/models/label_test.go index aa73ae647..5320678b3 100644 --- a/pkg/models/label_test.go +++ b/pkg/models/label_test.go @@ -228,7 +228,7 @@ func TestLabel_ReadOne(t *testing.T) { }, auth: &user.User{ID: 1}, assertMaxPermission: true, - wantMaxPermission: int(PermissionRead), + wantMaxPermission: int(PermissionAdmin), }, { name: "Get nonexistant label", @@ -249,8 +249,8 @@ func TestLabel_ReadOne(t *testing.T) { auth: &user.User{ID: 1}, }, { - // Label 4 is attached to tasks in project 1 (user 1 is admin), - // so the accessible-tasks iteration must yield PermissionAdmin. + // Label 4 is owned by user 2; user 1 can read it via a shared task + // but is not the owner, so max permission is read. name: "Get label #4 - other user", fields: fields{ ID: 4, @@ -276,7 +276,7 @@ func TestLabel_ReadOne(t *testing.T) { }, auth: &user.User{ID: 1}, assertMaxPermission: true, - wantMaxPermission: int(PermissionAdmin), + wantMaxPermission: int(PermissionRead), }, { // PoC for GHSA-hj5c-mhh2-g7jq: label 6 is reachable only via task @@ -304,12 +304,12 @@ func TestLabel_ReadOne(t *testing.T) { }, auth: &user.User{ID: 1}, assertMaxPermission: true, - wantMaxPermission: int(PermissionRead), + wantMaxPermission: int(PermissionAdmin), }, { - // Label 8's only label_tasks row points at inaccessible task 34, - // so access must come from the creator branch and the - // maxPermission fallback to PermissionRead must kick in. + // Label 8's only label_tasks row points at inaccessible task 34, so + // access comes from the creator branch; as the owner, user 1's max + // permission is admin. name: "creator can read own label only attached to inaccessible task", fields: fields{ ID: 8, @@ -324,7 +324,7 @@ func TestLabel_ReadOne(t *testing.T) { }, auth: &user.User{ID: 1}, assertMaxPermission: true, - wantMaxPermission: int(PermissionRead), + wantMaxPermission: int(PermissionAdmin), }, { // Non-creator must not be able to read an unattached label owned diff --git a/pkg/models/link_sharing.go b/pkg/models/link_sharing.go index 23a3fd876..b05121be6 100644 --- a/pkg/models/link_sharing.go +++ b/pkg/models/link_sharing.go @@ -45,30 +45,30 @@ const ( // LinkSharing represents a shared project type LinkSharing struct { // The ID of the shared thing - ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"share"` + ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"share" readOnly:"true" doc:"The unique, numeric id of this link share."` // The public id to get this shared project - Hash string `xorm:"varchar(40) not null unique" json:"hash" param:"hash"` + Hash string `xorm:"varchar(40) not null unique" json:"hash" param:"hash" readOnly:"true" doc:"The public hash used to access the shared project. Generated by the server; ignored on write."` // The name of this link share. All actions someone takes while being authenticated with that link will appear with that name. - Name string `xorm:"text null" json:"name"` + Name string `xorm:"text null" json:"name" doc:"The name of this link share. All actions someone takes while authenticated through this link will appear under this name."` // The ID of the shared project ProjectID int64 `xorm:"bigint not null" json:"-" param:"project"` // The permission this project is shared with. 0 = Read only, 1 = Read & Write, 2 = Admin. See the docs for more details. - Permission Permission `xorm:"bigint INDEX not null default 0" json:"permission" valid:"length(0|2)" maximum:"2" default:"0"` + Permission Permission `xorm:"bigint INDEX not null default 0" json:"permission" valid:"length(0|2)" maximum:"2" default:"0" doc:"The permission this project is shared with: 0 = read only, 1 = read & write, 2 = admin."` // The kind of this link. 0 = undefined, 1 = without password, 2 = with password. - SharingType SharingType `xorm:"bigint INDEX not null default 0" json:"sharing_type" valid:"length(0|2)" maximum:"2" default:"0"` + SharingType SharingType `xorm:"bigint INDEX not null default 0" json:"sharing_type" valid:"length(0|2)" maximum:"2" default:"0" readOnly:"true" doc:"The kind of this link, derived from whether a password was set: 0 = undefined, 1 = without password, 2 = with password."` // The password of this link share. You can only set it, not retrieve it after the link share has been created. - Password string `xorm:"text null" json:"password"` + Password string `xorm:"text null" json:"password" writeOnly:"true" doc:"The password protecting this link share. Write-only: it can be set on create but is never returned."` // The user who shared this project - SharedBy *user.User `xorm:"-" json:"shared_by"` + SharedBy *user.User `xorm:"-" json:"shared_by" readOnly:"true" doc:"The user who created this link share."` SharedByID int64 `xorm:"bigint INDEX not null" json:"-"` // A timestamp when this project was shared. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this share was created. You cannot change this value."` // A timestamp when this share was last updated. You cannot change this value. - Updated time.Time `xorm:"updated not null" json:"updated"` + Updated time.Time `xorm:"updated not null" json:"updated" readOnly:"true" doc:"A timestamp when this share was last updated. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` diff --git a/pkg/models/link_sharing_permissions.go b/pkg/models/link_sharing_permissions.go index 359be43d7..8027583ab 100644 --- a/pkg/models/link_sharing_permissions.go +++ b/pkg/models/link_sharing_permissions.go @@ -28,11 +28,24 @@ func (share *LinkSharing) CanRead(s *xorm.Session, a web.Auth) (bool, int, error return false, 0, nil } - l, err := GetProjectByShareHash(s, share.Hash) - if err != nil { - return false, 0, err + // A by-id read carries the parent project but no hash, so resolve the + // project from ProjectID; only fall back to the hash lookup when ProjectID + // is absent (e.g. resolving a share purely by its public hash). + var project *Project + if share.ProjectID != 0 { + var err error + project, err = GetProjectSimpleByID(s, share.ProjectID) + if err != nil { + return false, 0, err + } + } else { + var err error + project, err = GetProjectByShareHash(s, share.Hash) + if err != nil { + return false, 0, err + } } - return l.CanRead(s, a) + return project.CanRead(s, a) } // CanDelete implements the delete permission check for a link share diff --git a/pkg/models/listeners.go b/pkg/models/listeners.go index b0a580c21..83ec34c9b 100644 --- a/pkg/models/listeners.go +++ b/pkg/models/listeners.go @@ -26,8 +26,6 @@ import ( "code.vikunja.io/api/pkg/db" "code.vikunja.io/api/pkg/events" "code.vikunja.io/api/pkg/log" - "code.vikunja.io/api/pkg/metrics" - "code.vikunja.io/api/pkg/modules/keyvalue" "code.vikunja.io/api/pkg/notifications" "code.vikunja.io/api/pkg/user" @@ -38,16 +36,6 @@ import ( // RegisterListeners registers all event listeners func RegisterListeners() { - if config.MetricsEnabled.GetBool() { - events.RegisterListener((&ProjectCreatedEvent{}).Name(), &IncreaseProjectCounter{}) - events.RegisterListener((&ProjectDeletedEvent{}).Name(), &DecreaseProjectCounter{}) - events.RegisterListener((&TaskCreatedEvent{}).Name(), &IncreaseTaskCounter{}) - events.RegisterListener((&TaskDeletedEvent{}).Name(), &DecreaseTaskCounter{}) - events.RegisterListener((&TeamDeletedEvent{}).Name(), &DecreaseTeamCounter{}) - events.RegisterListener((&TeamCreatedEvent{}).Name(), &IncreaseTeamCounter{}) - events.RegisterListener((&TaskAttachmentCreatedEvent{}).Name(), &IncreaseAttachmentCounter{}) - events.RegisterListener((&TaskAttachmentDeletedEvent{}).Name(), &DecreaseAttachmentCounter{}) - } events.RegisterListener((&TaskCommentCreatedEvent{}).Name(), &SendTaskCommentNotification{}) events.RegisterListener((&TaskAssigneeCreatedEvent{}).Name(), &SendTaskAssignedNotification{}) events.RegisterListener((&TaskDeletedEvent{}).Name(), &SendTaskDeletedNotification{}) @@ -99,34 +87,6 @@ func RegisterListeners() { ////// // Task Events -// IncreaseTaskCounter represents a listener -type IncreaseTaskCounter struct { -} - -// Name defines the name for the IncreaseTaskCounter listener -func (s *IncreaseTaskCounter) Name() string { - return "task.counter.increase" -} - -// Handle is executed when the event IncreaseTaskCounter listens on is fired -func (s *IncreaseTaskCounter) Handle(_ *message.Message) (err error) { - return keyvalue.IncrBy(metrics.TaskCountKey, 1) -} - -// DecreaseTaskCounter represents a listener -type DecreaseTaskCounter struct { -} - -// Name defines the name for the DecreaseTaskCounter listener -func (s *DecreaseTaskCounter) Name() string { - return "task.counter.decrease" -} - -// Handle is executed when the event DecreaseTaskCounter listens on is fired -func (s *DecreaseTaskCounter) Handle(_ *message.Message) (err error) { - return keyvalue.DecrBy(metrics.TaskCountKey, 1) -} - func notifyMentionedUsers(sess *xorm.Session, task *Task, text string, n notifications.NotificationWithSubject) (users map[int64]*user.User, err error) { users, err = FindMentionedUsersInText(sess, text) if err != nil { @@ -583,34 +543,6 @@ func (s *HandleTaskUpdateLastUpdated) Handle(msg *message.Message) (err error) { return sess.Commit() } -// IncreaseAttachmentCounter represents a listener -type IncreaseAttachmentCounter struct { -} - -// Name defines the name for the IncreaseAttachmentCounter listener -func (s *IncreaseAttachmentCounter) Name() string { - return "increase.attachment.counter" -} - -// Handle is executed when the event IncreaseAttachmentCounter listens on is fired -func (s *IncreaseAttachmentCounter) Handle(_ *message.Message) (err error) { - return keyvalue.IncrBy(metrics.AttachmentsCountKey, 1) -} - -// DecreaseAttachmentCounter represents a listener -type DecreaseAttachmentCounter struct { -} - -// Name defines the name for the DecreaseAttachmentCounter listener -func (s *DecreaseAttachmentCounter) Name() string { - return "decrease.attachment.counter" -} - -// Handle is executed when the event DecreaseAttachmentCounter listens on is fired -func (s *DecreaseAttachmentCounter) Handle(_ *message.Message) (err error) { - return keyvalue.DecrBy(metrics.AttachmentsCountKey, 1) -} - // UpdateTaskInSavedFilterViews represents a listener type UpdateTaskInSavedFilterViews struct { } @@ -738,28 +670,6 @@ func (l *UpdateTaskInSavedFilterViews) Handle(msg *message.Message) (err error) /////// // Project Event Listeners -type IncreaseProjectCounter struct { -} - -func (s *IncreaseProjectCounter) Name() string { - return "project.counter.increase" -} - -func (s *IncreaseProjectCounter) Handle(_ *message.Message) (err error) { - return keyvalue.IncrBy(metrics.ProjectCountKey, 1) -} - -type DecreaseProjectCounter struct { -} - -func (s *DecreaseProjectCounter) Name() string { - return "project.counter.decrease" -} - -func (s *DecreaseProjectCounter) Handle(_ *message.Message) (err error) { - return keyvalue.DecrBy(metrics.ProjectCountKey, 1) -} - // SendProjectCreatedNotification represents a listener type SendProjectCreatedNotification struct { } @@ -1259,34 +1169,6 @@ func (wl *WebhookListener) Handle(msg *message.Message) (err error) { /////// // Team Events -// IncreaseTeamCounter represents a listener -type IncreaseTeamCounter struct { -} - -// Name defines the name for the IncreaseTeamCounter listener -func (s *IncreaseTeamCounter) Name() string { - return "team.counter.increase" -} - -// Handle is executed when the event IncreaseTeamCounter listens on is fired -func (s *IncreaseTeamCounter) Handle(_ *message.Message) (err error) { - return keyvalue.IncrBy(metrics.TeamCountKey, 1) -} - -// DecreaseTeamCounter represents a listener -type DecreaseTeamCounter struct { -} - -// Name defines the name for the DecreaseTeamCounter listener -func (s *DecreaseTeamCounter) Name() string { - return "team.counter.decrease" -} - -// Handle is executed when the event DecreaseTeamCounter listens on is fired -func (s *DecreaseTeamCounter) Handle(_ *message.Message) (err error) { - return keyvalue.DecrBy(metrics.TeamCountKey, 1) -} - // CleanupTaskAssignmentsAfterTeamRemoval represents a listener type CleanupTaskAssignmentsAfterTeamRemoval struct{} diff --git a/pkg/models/message.go b/pkg/models/message.go index ef51cfc18..48ca786db 100644 --- a/pkg/models/message.go +++ b/pkg/models/message.go @@ -19,5 +19,5 @@ package models // Message is a standard message type Message struct { // A standard message. - Message string `json:"message"` + Message string `json:"message" readOnly:"true" doc:"A human-readable status message returned by the server."` } diff --git a/pkg/models/metrics_count_test.go b/pkg/models/metrics_count_test.go new file mode 100644 index 000000000..c8f64bac6 --- /dev/null +++ b/pkg/models/metrics_count_test.go @@ -0,0 +1,62 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package models + +import ( + "testing" + + "code.vikunja.io/api/pkg/db" + "code.vikunja.io/api/pkg/metrics" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// TestMetricsCountFromDatabase verifies that each metric key counts the right table +// straight from the database. This guards the count key -> table name mapping; the +// caching/expiry/invalidation behaviour itself is covered by the keyvalue RememberFor +// tests. +func TestMetricsCountFromDatabase(t *testing.T) { + cases := map[string]string{ + metrics.UserCountKey: "users", + metrics.ProjectCountKey: "projects", + metrics.TaskCountKey: "tasks", + metrics.TeamCountKey: "teams", + metrics.FilesCountKey: "files", + metrics.AttachmentsCountKey: "task_attachments", + } + + db.LoadAndAssertFixtures(t) + + s := db.NewSession() + defer s.Close() + + for key, table := range cases { + t.Run(table, func(t *testing.T) { + // Drop any value cached by a previous test so we recompute from the DB. + require.NoError(t, metrics.InvalidateCount(key)) + + expected, err := s.Table(table).Count() + require.NoError(t, err) + + count, err := metrics.GetCount(key) + require.NoError(t, err) + assert.Equal(t, expected, count) + assert.Positive(t, count, "fixtures should contain at least one %s", table) + }) + } +} diff --git a/pkg/models/models.go b/pkg/models/models.go index df562ef90..88d98231c 100644 --- a/pkg/models/models.go +++ b/pkg/models/models.go @@ -71,6 +71,7 @@ func GetTables() []interface{} { &TaskUnreadStatus{}, &Session{}, &OAuthCode{}, + &TimeEntry{}, } } diff --git a/pkg/models/notifications_database.go b/pkg/models/notifications_database.go index 3d430b971..aaa71103c 100644 --- a/pkg/models/notifications_database.go +++ b/pkg/models/notifications_database.go @@ -28,7 +28,7 @@ type DatabaseNotifications struct { // Whether or not to mark this notification as read or unread. // True is read, false is unread. - Read bool `xorm:"-" json:"read"` + Read bool `xorm:"-" json:"read" doc:"Set true to mark the notification read, false to mark it unread."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` diff --git a/pkg/models/project.go b/pkg/models/project.go index c860ed062..022f673a5 100644 --- a/pkg/models/project.go +++ b/pkg/models/project.go @@ -38,52 +38,52 @@ import ( // Project represents a project of tasks type Project struct { // The unique, numeric id of this project. - ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"project"` + ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"project" readOnly:"true" doc:"The unique, numeric id of this project."` // The title of the project. You'll see this in the overview. - Title string `xorm:"varchar(250) not null" json:"title" valid:"required,runelength(1|250)" minLength:"1" maxLength:"250"` + Title string `xorm:"varchar(250) not null" json:"title" valid:"required,runelength(1|250)" minLength:"1" maxLength:"250" doc:"The title of the project. You'll see this in the overview."` // The description of the project. - Description string `xorm:"longtext null" json:"description"` + Description string `xorm:"longtext null" json:"description" doc:"The description of the project."` // The unique project short identifier. Used to build task identifiers. - Identifier string `xorm:"varchar(10) null" json:"identifier" valid:"runelength(0|10)" minLength:"0" maxLength:"10"` + Identifier string `xorm:"varchar(10) null" json:"identifier" valid:"runelength(0|10)" minLength:"0" maxLength:"10" doc:"The unique project short identifier. Used to build task identifiers (e.g. PROJ-123)."` // The hex color of this project - HexColor string `xorm:"varchar(6) null" json:"hex_color" valid:"runelength(0|7)" maxLength:"7"` + HexColor string `xorm:"varchar(6) null" json:"hex_color" valid:"runelength(0|7)" maxLength:"7" doc:"The hex color of this project, without the leading #."` OwnerID int64 `xorm:"bigint INDEX not null" json:"-"` - ParentProjectID int64 `xorm:"bigint INDEX null" json:"parent_project_id"` + ParentProjectID int64 `xorm:"bigint INDEX null" json:"parent_project_id" doc:"The id of the parent project. 0 if this is a top-level project."` ParentProject *Project `xorm:"-" json:"-"` // The user who created this project. - Owner *user.User `xorm:"-" json:"owner" valid:"-"` + Owner *user.User `xorm:"-" json:"owner" valid:"-" readOnly:"true" doc:"The user who owns this project. Set by the server; ignored on write."` // Whether a project is archived. - IsArchived bool `xorm:"not null default false" json:"is_archived" query:"is_archived"` + IsArchived bool `xorm:"not null default false" json:"is_archived" query:"is_archived" doc:"Whether the project is archived. Archived projects are read-only."` // The id of the file this project has set as background BackgroundFileID int64 `xorm:"null" json:"-"` // Holds extra information about the background set since some background providers require attribution or similar. If not null, the background can be accessed at /projects/{projectID}/background - BackgroundInformation interface{} `xorm:"-" json:"background_information"` + BackgroundInformation interface{} `xorm:"-" json:"background_information" readOnly:"true" doc:"Extra information about the background (e.g. attribution). When not null, the background is available at /projects/{projectID}/background."` // Contains a very small version of the project background to use as a blurry preview until the actual background is loaded. Check out https://blurha.sh/ to learn how it works. - BackgroundBlurHash string `xorm:"varchar(50) null" json:"background_blur_hash"` + BackgroundBlurHash string `xorm:"varchar(50) null" json:"background_blur_hash" readOnly:"true" doc:"A small BlurHash preview of the project background, shown until the real background loads. See https://blurha.sh/."` // True if a project is a favorite. Favorite projects show up in a separate parent project. This value depends on the user making the call to the api. - IsFavorite bool `xorm:"-" json:"is_favorite"` + IsFavorite bool `xorm:"-" json:"is_favorite" doc:"Whether the project is a favorite of the requesting user. This value is per-user and depends on who makes the call."` // The subscription status for the user reading this project. You can only read this property, use the subscription endpoints to modify it. // Will only returned when retreiving one project. - Subscription *Subscription `xorm:"-" json:"subscription,omitempty"` + Subscription *Subscription `xorm:"-" json:"subscription,omitempty" readOnly:"true" doc:"The requesting user's subscription status for this project. Read-only here; use the subscription endpoints to change it. Only returned when retrieving a single project."` // The position this project has when querying all projects. See the tasks.position property on how to use this. - Position float64 `xorm:"double null" json:"position"` + Position float64 `xorm:"double null" json:"position" doc:"The position of this project when listing all projects. See the tasks.position property for how positions work."` - Views []*ProjectView `xorm:"-" json:"views"` + Views []*ProjectView `xorm:"-" json:"views" readOnly:"true" doc:"The views configured for this project. Managed through the project view endpoints."` Expand ProjectExpandable `xorm:"-" json:"-" query:"expand"` - MaxPermission Permission `xorm:"-" json:"max_permission"` + MaxPermission Permission `xorm:"-" json:"max_permission" readOnly:"true" doc:"The maximum permission the requesting user has on this project (0 = read, 1 = read/write, 2 = admin)."` // A timestamp when this project was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this project was created. You cannot change this value."` // A timestamp when this project was last updated. You cannot change this value. - Updated time.Time `xorm:"updated not null" json:"updated"` + Updated time.Time `xorm:"updated not null" json:"updated" readOnly:"true" doc:"A timestamp when this project was last updated. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` diff --git a/pkg/models/project_team.go b/pkg/models/project_team.go index f67a1fb26..0c9fb6908 100644 --- a/pkg/models/project_team.go +++ b/pkg/models/project_team.go @@ -29,18 +29,18 @@ import ( // TeamProject defines the relation between a team and a project type TeamProject struct { // The unique, numeric id of this project <-> team relation. - ID int64 `xorm:"bigint autoincr not null unique pk" json:"id"` + ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" readOnly:"true" doc:"The unique, numeric id of this project <-> team relation."` // The team id. - TeamID int64 `xorm:"bigint not null INDEX" json:"team_id" param:"team"` + TeamID int64 `xorm:"bigint not null INDEX" json:"team_id" param:"team" doc:"The id of the team that gets access to the project."` // The project id. ProjectID int64 `xorm:"bigint not null INDEX" json:"-" param:"project"` // The permission this team has. 0 = Read only, 1 = Read & Write, 2 = Admin. See the docs for more details. - Permission Permission `xorm:"bigint INDEX not null default 0" json:"permission" valid:"length(0|2)" maximum:"2" default:"0"` + Permission Permission `xorm:"bigint INDEX not null default 0" json:"permission" valid:"length(0|2)" maximum:"2" default:"0" doc:"The permission this team has on the project: 0 = Read only, 1 = Read & Write, 2 = Admin."` // A timestamp when this relation was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this relation was created. You cannot change this value."` // A timestamp when this relation was last updated. You cannot change this value. - Updated time.Time `xorm:"updated not null" json:"updated"` + Updated time.Time `xorm:"updated not null" json:"updated" readOnly:"true" doc:"A timestamp when this relation was last updated. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` @@ -54,7 +54,7 @@ func (*TeamProject) TableName() string { // TeamWithPermission represents a team, combined with permissions. type TeamWithPermission struct { Team `xorm:"extends"` - Permission Permission `json:"permission"` + Permission Permission `json:"permission" readOnly:"true" doc:"The permission this team has on the project: 0 = Read only, 1 = Read & Write, 2 = Admin."` } // Create creates a new team <-> project relation diff --git a/pkg/models/project_users.go b/pkg/models/project_users.go index e57dcd6e9..58ef71c38 100644 --- a/pkg/models/project_users.go +++ b/pkg/models/project_users.go @@ -30,20 +30,20 @@ import ( // ProjectUser represents a project <-> user relation type ProjectUser struct { // The unique, numeric id of this project <-> user relation. - ID int64 `xorm:"bigint autoincr not null unique pk" json:"id"` + ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" readOnly:"true" doc:"The unique, numeric id of this project <-> user relation."` // The username. - Username string `xorm:"-" json:"username" param:"user"` + Username string `xorm:"-" json:"username" param:"user" doc:"The username of the user to share with. On update and delete this comes from the URL path, not the body."` // Used internally to reference the user UserID int64 `xorm:"bigint not null INDEX" json:"-"` // The project id. ProjectID int64 `xorm:"bigint not null INDEX" json:"-" param:"project"` // The permission this user has. 0 = Read only, 1 = Read & Write, 2 = Admin. See the docs for more details. - Permission Permission `xorm:"bigint INDEX not null default 0" json:"permission" valid:"length(0|2)" maximum:"2" default:"0"` + Permission Permission `xorm:"bigint INDEX not null default 0" json:"permission" valid:"length(0|2)" maximum:"2" default:"0" doc:"The permission this user has on the project. 0 = Read only, 1 = Read & Write, 2 = Admin."` // A timestamp when this relation was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this relation was created. You cannot change this value."` // A timestamp when this relation was last updated. You cannot change this value. - Updated time.Time `xorm:"updated not null" json:"updated"` + Updated time.Time `xorm:"updated not null" json:"updated" readOnly:"true" doc:"A timestamp when this relation was last updated. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` @@ -57,7 +57,7 @@ func (*ProjectUser) TableName() string { // UserWithPermission represents a user in combination with the permission it can have on a project type UserWithPermission struct { user.User `xorm:"extends"` - Permission Permission `json:"permission"` + Permission Permission `json:"permission" readOnly:"true" doc:"The permission this user has on the project. 0 = Read only, 1 = Read & Write, 2 = Admin."` } // Create creates a new project <-> user relation diff --git a/pkg/models/project_view.go b/pkg/models/project_view.go index fce6798de..50e20756b 100644 --- a/pkg/models/project_view.go +++ b/pkg/models/project_view.go @@ -23,6 +23,7 @@ import ( "code.vikunja.io/api/pkg/web" + "github.com/danielgtaylor/huma/v2" "xorm.io/xorm" ) @@ -66,6 +67,17 @@ func (p *ProjectViewKind) UnmarshalJSON(bytes []byte) error { return nil } +// Schema lets Huma (/api/v2) reflect this type as a string enum. The custom +// Marshal/UnmarshalJSON above serialize it as a string, but the underlying Go +// type is an int — without this, Huma would generate an integer schema and +// reject the string form clients actually send. +func (*ProjectViewKind) Schema(_ huma.Registry) *huma.Schema { + return &huma.Schema{ + Type: "string", + Enum: []any{"list", "gantt", "table", "kanban"}, + } +} + // NOTE: When adding or changing enum values for ProjectViewKind, // make sure to update the corresponding `enums` tag in the ProjectView struct // to keep the OpenAPI documentation in sync. @@ -123,39 +135,48 @@ func (p *BucketConfigurationModeKind) UnmarshalJSON(bytes []byte) error { return nil } +// Schema lets Huma (/api/v2) reflect this type as a string enum; see the note +// on ProjectViewKind.Schema for why this is needed. +func (*BucketConfigurationModeKind) Schema(_ huma.Registry) *huma.Schema { + return &huma.Schema{ + Type: "string", + Enum: []any{"none", "manual", "filter"}, + } +} + type ProjectViewBucketConfiguration struct { - Title string `json:"title"` - Filter *TaskCollection `json:"filter"` + Title string `json:"title" doc:"The title of the bucket this configuration creates."` + Filter *TaskCollection `json:"filter" doc:"The filter query that decides which tasks land in this bucket. See https://vikunja.io/docs/filters."` } type ProjectView struct { // The unique numeric id of this view - ID int64 `xorm:"autoincr not null unique pk" json:"id" param:"view"` + ID int64 `xorm:"autoincr not null unique pk" json:"id" param:"view" readOnly:"true" doc:"The unique, numeric id of this view. Set by the server."` // The title of this view - Title string `xorm:"varchar(255) not null" json:"title" valid:"required,runelength(1|250)"` + Title string `xorm:"varchar(255) not null" json:"title" valid:"required,runelength(1|250)" minLength:"1" maxLength:"250" doc:"The title of this view."` // The project this view belongs to - ProjectID int64 `xorm:"not null index" json:"project_id" param:"project"` + ProjectID int64 `xorm:"not null index" json:"project_id" param:"project" readOnly:"true" doc:"The project this view belongs to. Taken from the URL path; ignored on write."` // The kind of this view. Can be `list`, `gantt`, `table` or `kanban`. - ViewKind ProjectViewKind `xorm:"not null" json:"view_kind" swaggertype:"string" enums:"list,gantt,table,kanban"` + ViewKind ProjectViewKind `xorm:"not null" json:"view_kind" swaggertype:"string" enums:"list,gantt,table,kanban" doc:"The kind of this view. One of list, gantt, table or kanban."` // The filter query to match tasks by. Check out https://vikunja.io/docs/filters for a full explanation. - Filter *TaskCollection `xorm:"json null default null" query:"filter" json:"filter"` + Filter *TaskCollection `xorm:"json null default null" query:"filter" json:"filter" doc:"The filter query used to match tasks shown in this view. See https://vikunja.io/docs/filters."` // The position of this view in the list. The list of all views will be sorted by this parameter. - Position float64 `xorm:"double null" json:"position"` + Position float64 `xorm:"double null" json:"position" doc:"The position of this view in the project's list of views. Views are sorted ascending by this value."` // The bucket configuration mode. Can be `none`, `manual` or `filter`. `manual` allows to move tasks between buckets as you normally would. `filter` creates buckets based on a filter for each bucket. - BucketConfigurationMode BucketConfigurationModeKind `xorm:"default 0" json:"bucket_configuration_mode" swaggertype:"string" enums:"none,manual,filter,manual"` + BucketConfigurationMode BucketConfigurationModeKind `xorm:"default 0" json:"bucket_configuration_mode" swaggertype:"string" enums:"none,manual,filter" doc:"The bucket configuration mode. One of none, manual or filter. manual lets you move tasks between buckets; filter creates a bucket per filter."` // When the bucket configuration mode is not `manual`, this field holds the options of that configuration. - BucketConfiguration []*ProjectViewBucketConfiguration `xorm:"json" json:"bucket_configuration"` + BucketConfiguration []*ProjectViewBucketConfiguration `xorm:"json" json:"bucket_configuration" doc:"When the bucket configuration mode is filter, holds the title and filter of each bucket."` // The ID of the bucket where new tasks without a bucket are added to. By default, this is the leftmost bucket in a view. - DefaultBucketID int64 `xorm:"bigint INDEX null" json:"default_bucket_id"` + DefaultBucketID int64 `xorm:"bigint INDEX null" json:"default_bucket_id" doc:"The id of the bucket new tasks without a bucket are added to. Defaults to the leftmost bucket."` // If tasks are moved to the done bucket, they are marked as done. If they are marked as done individually, they are moved into the done bucket. - DoneBucketID int64 `xorm:"bigint INDEX null" json:"done_bucket_id"` + DoneBucketID int64 `xorm:"bigint INDEX null" json:"done_bucket_id" doc:"The id of the done bucket. Tasks moved here are marked done, and tasks marked done are moved here."` // A timestamp when this view was updated. You cannot change this value. - Updated time.Time `xorm:"updated not null" json:"updated"` + Updated time.Time `xorm:"updated not null" json:"updated" readOnly:"true" doc:"A timestamp when this view was last updated. You cannot change this value."` // A timestamp when this reaction was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this view was created. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` @@ -248,6 +269,13 @@ func (pv *ProjectView) ReadOne(s *xorm.Session, _ web.Auth) (err error) { // @Failure 500 {object} models.Message "Internal error" // @Router /projects/{project}/views/{id} [delete] func (pv *ProjectView) Delete(s *xorm.Session, _ web.Auth) (err error) { + // Resolve the view under the path project first: the buckets/positions below are deleted by + // view id alone, so without this guard a delete scoped to the wrong parent project would still + // wipe another project's buckets and positions while matching zero project_views rows. + if _, err = GetProjectViewByIDAndProject(s, pv.ID, pv.ProjectID); err != nil { + return err + } + _, err = s. Where("id = ? AND project_id = ?", pv.ID, pv.ProjectID). Delete(&ProjectView{}) @@ -291,6 +319,9 @@ func createProjectView(s *xorm.Session, p *ProjectView, a web.Auth, createBacklo if p.BucketConfigurationMode == BucketConfigurationModeFilter { for _, configuration := range p.BucketConfiguration { + if configuration == nil { + continue + } if configuration.Filter != nil && configuration.Filter.Filter != "" { _, err = getTaskFiltersFromFilterString(configuration.Filter.Filter, configuration.Filter.FilterTimezone) if err != nil { diff --git a/pkg/models/saved_filters.go b/pkg/models/saved_filters.go index 26f99ed48..09f28b518 100644 --- a/pkg/models/saved_filters.go +++ b/pkg/models/saved_filters.go @@ -32,25 +32,25 @@ import ( // SavedFilter represents a saved bunch of filters type SavedFilter struct { // The unique numeric id of this saved filter - ID int64 `xorm:"autoincr not null unique pk" json:"id" param:"filter"` + ID int64 `xorm:"autoincr not null unique pk" json:"id" param:"filter" readOnly:"true" doc:"The unique, numeric id of this saved filter."` // The actual filters this filter contains - Filters *TaskCollection `xorm:"JSON not null" json:"filters" valid:"required"` + Filters *TaskCollection `xorm:"JSON not null" json:"filters" valid:"required" doc:"The task filter query and collection options this saved filter wraps."` // The title of the filter. - Title string `xorm:"varchar(250) not null" json:"title" valid:"required,runelength(1|250)" minLength:"1" maxLength:"250"` + Title string `xorm:"varchar(250) not null" json:"title" valid:"required,runelength(1|250)" minLength:"1" maxLength:"250" doc:"The title of the filter."` // The description of the filter - Description string `xorm:"longtext null" json:"description"` + Description string `xorm:"longtext null" json:"description" doc:"The description of the filter."` OwnerID int64 `xorm:"bigint not null INDEX" json:"-"` // The user who owns this filter - Owner *user.User `xorm:"-" json:"owner" valid:"-"` + Owner *user.User `xorm:"-" json:"owner" valid:"-" readOnly:"true" doc:"The user who owns this filter; set by the server."` // True if the filter is a favorite. Favorite filters show up in a separate parent project together with favorite projects. - IsFavorite bool `xorm:"default false" json:"is_favorite"` + IsFavorite bool `xorm:"default false" json:"is_favorite" doc:"If true, the filter shows up in the Favorites pseudo-project alongside favorite projects."` // A timestamp when this filter was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this filter was created. You cannot change this value."` // A timestamp when this filter was last updated. You cannot change this value. - Updated time.Time `xorm:"updated not null" json:"updated"` + Updated time.Time `xorm:"updated not null" json:"updated" readOnly:"true" doc:"A timestamp when this filter was last updated. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` diff --git a/pkg/models/sessions.go b/pkg/models/sessions.go index 06914279c..9c7a5d1f1 100644 --- a/pkg/models/sessions.go +++ b/pkg/models/sessions.go @@ -36,23 +36,23 @@ import ( // Session represents an active user session with a refresh token. type Session struct { // The session UUID. Embedded in JWTs as the `sid` claim. - ID string `xorm:"varchar(36) not null unique pk" json:"id" param:"session"` + ID string `xorm:"varchar(36) not null unique pk" json:"id" param:"session" readOnly:"true" doc:"The session UUID; embedded in JWTs as the sid claim."` // The owning user. UserID int64 `xorm:"bigint not null index" json:"-"` // SHA-256 hash of the refresh token. Used for lookup on refresh. TokenHash string `xorm:"varchar(64) not null unique index" json:"-"` // The cleartext refresh token. Only populated on session creation, never stored. - RefreshToken string `xorm:"-" json:"refresh_token,omitempty"` + RefreshToken string `xorm:"-" json:"refresh_token,omitempty" readOnly:"true" doc:"The cleartext refresh token; returned only once by the login flow, never on listing."` // User-Agent string from the login request. - DeviceInfo string `xorm:"text" json:"device_info"` + DeviceInfo string `xorm:"text" json:"device_info" readOnly:"true" doc:"User-Agent string captured from the login request."` // IP address from the login request. - IPAddress string `xorm:"varchar(100)" json:"ip_address"` + IPAddress string `xorm:"varchar(100)" json:"ip_address" readOnly:"true" doc:"IP address captured from the login request."` // Whether this is a "remember me" session (controls max refresh lifetime). IsLongSession bool `xorm:"not null default false" json:"-"` // When this session was last refreshed. - LastActive time.Time `xorm:"not null" json:"last_active"` + LastActive time.Time `xorm:"not null" json:"last_active" readOnly:"true" doc:"When this session was last refreshed."` // When this session was created (login time). - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"When this session was created (login time)."` web.Permissions `xorm:"-" json:"-"` web.CRUDable `xorm:"-" json:"-"` diff --git a/pkg/models/setup_tests.go b/pkg/models/setup_tests.go index 66948fc84..15b056faa 100644 --- a/pkg/models/setup_tests.go +++ b/pkg/models/setup_tests.go @@ -59,6 +59,7 @@ func SetupTests() { "task_relations", "task_reminders", "tasks", + "time_entries", "team_projects", "team_members", "teams", diff --git a/pkg/models/subscription.go b/pkg/models/subscription.go index ad664c23f..4afb59ea3 100644 --- a/pkg/models/subscription.go +++ b/pkg/models/subscription.go @@ -96,18 +96,18 @@ const ( // Subscription represents a subscription for an entity type Subscription struct { // The numeric ID of the subscription - ID int64 `xorm:"autoincr not null unique pk" json:"id"` + ID int64 `xorm:"autoincr not null unique pk" json:"id" readOnly:"true" doc:"The numeric id of the subscription."` - EntityType SubscriptionEntityType `xorm:"index not null" json:"entity"` + EntityType SubscriptionEntityType `xorm:"index not null" json:"entity" readOnly:"true" doc:"The kind of entity this subscription is for. Either project or task; derived server-side from the request path."` Entity string `xorm:"-" json:"-" param:"entity"` // The id of the entity to subscribe to. - EntityID int64 `xorm:"bigint index not null" json:"entity_id" param:"entityID"` + EntityID int64 `xorm:"bigint index not null" json:"entity_id" param:"entityID" readOnly:"true" doc:"The numeric id of the subscribed entity; taken from the request path."` // The user who made this subscription UserID int64 `xorm:"bigint index not null" json:"-"` // A timestamp when this subscription was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this subscription was created. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` diff --git a/pkg/models/task_assignees.go b/pkg/models/task_assignees.go index 567341844..6324c5223 100644 --- a/pkg/models/task_assignees.go +++ b/pkg/models/task_assignees.go @@ -32,8 +32,8 @@ import ( type TaskAssginee struct { ID int64 `xorm:"bigint autoincr not null unique pk" json:"-"` TaskID int64 `xorm:"bigint INDEX not null" json:"-" param:"projecttask"` - UserID int64 `xorm:"bigint INDEX not null" json:"user_id" param:"user"` - Created time.Time `xorm:"created not null"` + UserID int64 `xorm:"bigint INDEX not null" json:"user_id" param:"user" doc:"The id of the user to assign to the task. The user must have access to the task's project."` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this assignment was created. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` diff --git a/pkg/models/task_collection.go b/pkg/models/task_collection.go index 4651f72bc..833cc7851 100644 --- a/pkg/models/task_collection.go +++ b/pkg/models/task_collection.go @@ -32,22 +32,20 @@ type TaskCollection struct { ProjectID int64 `param:"project" json:"-"` ProjectViewID int64 `param:"view" json:"-"` - Search string `query:"s" json:"s"` + Search string `query:"s" json:"s" doc:"A search term to match tasks by their title."` // The query parameter to sort by. This is for ex. done, priority, etc. - SortBy []string `query:"sort_by" json:"sort_by"` - SortByArr []string `query:"sort_by[]" json:"-"` + SortBy []string `query:"sort_by" json:"sort_by" doc:"The fields to sort by, for example done or priority."` // The query parameter to order the items by. This can be either asc or desc, with asc being the default. - OrderBy []string `query:"order_by" json:"order_by"` - OrderByArr []string `query:"order_by[]" json:"-"` + OrderBy []string `query:"order_by" json:"order_by" doc:"The order for each sort_by field, either asc or desc. Defaults to asc."` // The filter query to match tasks by. Check out https://vikunja.io/docs/filters for a full explanation. - Filter string `query:"filter" json:"filter"` + Filter string `query:"filter" json:"filter" doc:"The filter query to match tasks by. See https://vikunja.io/docs/filters."` // The time zone which should be used for date match (statements like "now" resolve to different actual times) FilterTimezone string `query:"filter_timezone" json:"-"` // If set to true, the result will also include null values - FilterIncludeNulls bool `query:"filter_include_nulls" json:"filter_include_nulls"` + FilterIncludeNulls bool `query:"filter_include_nulls" json:"filter_include_nulls" doc:"If true, the result also includes tasks whose filtered field is null."` // If set to `subtasks`, Vikunja will fetch only tasks which do not have subtasks and then in a // second step, will fetch all of these subtasks. This may result in more tasks than the @@ -56,8 +54,7 @@ type TaskCollection struct { // If set to `reactions`, the reactions of each task will be present in the response. // If set to `comments`, the first 50 comments of each task will be present in the response. // You can set this multiple times with different values. - Expand []TaskCollectionExpandable `query:"expand" json:"-"` - ExpandArr []TaskCollectionExpandable `query:"expand[]" json:"-"` + Expand []TaskCollectionExpandable `query:"expand" json:"-"` isSavedFilter bool @@ -72,6 +69,7 @@ const TaskCollectionExpandBuckets TaskCollectionExpandable = `buckets` const TaskCollectionExpandReactions TaskCollectionExpandable = `reactions` const TaskCollectionExpandComments TaskCollectionExpandable = `comments` const TaskCollectionExpandCommentCount TaskCollectionExpandable = `comment_count` +const TaskCollectionExpandTimeEntriesCount TaskCollectionExpandable = `time_entries_count` const TaskCollectionExpandIsUnread TaskCollectionExpandable = `is_unread` // Validate validates if the TaskCollectionExpandable value is valid. @@ -87,11 +85,13 @@ func (t TaskCollectionExpandable) Validate() error { return nil case TaskCollectionExpandCommentCount: return nil + case TaskCollectionExpandTimeEntriesCount: + return nil case TaskCollectionExpandIsUnread: return nil } - return InvalidFieldErrorWithMessage([]string{"expand"}, "Expand must be one of the following values: subtasks, buckets, reactions, comments, comment_count, is_unread") + return InvalidFieldErrorWithMessage([]string{"expand"}, "Expand must be one of the following values: subtasks, buckets, reactions, comments, comment_count, time_entries_count, is_unread") } func validateTaskField(fieldName string) error { @@ -107,18 +107,6 @@ func validateTaskField(fieldName string) error { } func getTaskFilterOptsFromCollection(tf *TaskCollection, projectView *ProjectView) (opts *taskSearchOptions, err error) { - if len(tf.SortByArr) > 0 { - tf.SortBy = append(tf.SortBy, tf.SortByArr...) - } - - if len(tf.OrderByArr) > 0 { - tf.OrderBy = append(tf.OrderBy, tf.OrderByArr...) - } - - if len(tf.ExpandArr) > 0 { - tf.Expand = append(tf.Expand, tf.ExpandArr...) - } - var sort = make([]*sortParam, 0, len(tf.SortBy)) for i, s := range tf.SortBy { param := &sortParam{ @@ -272,18 +260,12 @@ func (tf *TaskCollection) ReadAll(s *xorm.Session, a web.Auth, search string, pa // By prepending sort options before the saved ones from the filter, we make sure the supplied sort // options via query take precedence over the rest. - sortby := append(tf.SortBy, tf.SortByArr...) - sortby = append(sortby, sf.Filters.SortBy...) - sortby = append(sortby, sf.Filters.SortByArr...) + sortby := append(tf.SortBy, sf.Filters.SortBy...) - orderby := append(tf.OrderBy, tf.OrderByArr...) - orderby = append(orderby, sf.Filters.OrderBy...) - orderby = append(orderby, sf.Filters.OrderByArr...) + orderby := append(tf.OrderBy, sf.Filters.OrderBy...) sf.Filters.SortBy = sortby - sf.Filters.SortByArr = nil sf.Filters.OrderBy = orderby - sf.Filters.OrderByArr = nil if sf.Filters.FilterTimezone == "" { u, err := user.GetUserByID(s, a.GetID()) @@ -297,8 +279,7 @@ func (tf *TaskCollection) ReadAll(s *xorm.Session, a web.Auth, search string, pa tc.ProjectViewID = tf.ProjectViewID tc.ProjectID = tf.ProjectID tc.isSavedFilter = true - tc.Expand = append(tf.Expand, tf.ExpandArr...) - tc.ExpandArr = nil + tc.Expand = tf.Expand if tf.Filter != "" { if tc.Filter != "" { diff --git a/pkg/models/task_collection_filter.go b/pkg/models/task_collection_filter.go index 7d2970277..6828b0e07 100644 --- a/pkg/models/task_collection_filter.go +++ b/pkg/models/task_collection_filter.go @@ -170,20 +170,16 @@ func parseFilterFromExpression(f fexpr.ExprGroup, loc *time.Location) (filter *t return filter, nil } -func getTaskFiltersFromFilterString(filter string, filterTimezone string) (filters []*taskFilter, err error) { - - if filter == "" { - return - } - +// preprocessFilterString rewrites the human filter syntax (in / not in / like) +// into fexpr sigils and quotes bare values so fexpr.Parse accepts them. Shared +// by every entity that filters with the task grammar. +func preprocessFilterString(filter string) string { filter = strings.ReplaceAll(filter, " not in ", " "+string(fexpr.SignAnyNeq)+" ") filter = strings.ReplaceAll(filter, " in ", " ?= ") filter = strings.ReplaceAll(filter, " like ", " ~ ") - // Regex pattern to match filter expressions re := regexp.MustCompile(`(\w+)\s*(>=|<=|!=|~|\?=|\?!=|=|>|<)\s*([^&|()]+)`) - - filter = re.ReplaceAllStringFunc(filter, func(match string) string { + return re.ReplaceAllStringFunc(filter, func(match string) string { parts := re.FindStringSubmatch(match) if len(parts) != 4 { return match @@ -193,16 +189,24 @@ func getTaskFiltersFromFilterString(filter string, filterTimezone string) (filte comparator := parts[2] value := strings.TrimSpace(parts[3]) - // Check if the value is already quoted + // Already quoted — leave as-is if (strings.HasPrefix(value, "'") && strings.HasSuffix(value, "'")) || (strings.HasPrefix(value, "\"") && strings.HasSuffix(value, "\"")) { return field + " " + comparator + " " + value } - // Quote the value quotedValue := "'" + strings.ReplaceAll(value, "'", "\\'") + "'" return field + " " + comparator + " " + quotedValue }) +} + +func getTaskFiltersFromFilterString(filter string, filterTimezone string) (filters []*taskFilter, err error) { + + if filter == "" { + return + } + + filter = preprocessFilterString(filter) parsedFilter, err := fexpr.Parse(filter) if err != nil { diff --git a/pkg/models/task_comments.go b/pkg/models/task_comments.go index e079f54e0..37cbf7e87 100644 --- a/pkg/models/task_comments.go +++ b/pkg/models/task_comments.go @@ -30,18 +30,18 @@ import ( // TaskComment represents a task comment type TaskComment struct { - ID int64 `xorm:"autoincr pk unique not null" json:"id" param:"commentid"` - Comment string `xorm:"text not null" json:"comment" valid:"dbtext,required"` + ID int64 `xorm:"autoincr pk unique not null" json:"id" param:"commentid" readOnly:"true" doc:"The unique, numeric id of this comment."` + Comment string `xorm:"text not null" json:"comment" valid:"dbtext,required" doc:"The comment text. May contain HTML; mentions are parsed and notify the mentioned users."` AuthorID int64 `xorm:"not null" json:"-"` - Author *user.User `xorm:"-" json:"author"` + Author *user.User `xorm:"-" json:"author" readOnly:"true" doc:"The user who wrote the comment. Set from the authenticated user on create; ignored on write."` TaskID int64 `xorm:"index not null" json:"-" param:"task"` - Reactions ReactionMap `xorm:"-" json:"reactions"` + Reactions ReactionMap `xorm:"-" json:"reactions" readOnly:"true" doc:"The reactions on this comment, keyed by reaction value. Managed through the reactions endpoints, not by writing here."` OrderBy string `xorm:"-" json:"-" query:"order_by"` - Created time.Time `xorm:"created" json:"created"` - Updated time.Time `xorm:"updated" json:"updated"` + Created time.Time `xorm:"created" json:"created" readOnly:"true" doc:"A timestamp when this comment was created. You cannot change this value."` + Updated time.Time `xorm:"updated" json:"updated" readOnly:"true" doc:"A timestamp when this comment was last updated. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` @@ -167,7 +167,7 @@ func (tc *TaskComment) Delete(s *xorm.Session, a web.Auth) error { // @Failure 404 {object} web.HTTPError "The task comment was not found." // @Failure 500 {object} models.Message "Internal error" // @Router /tasks/{taskID}/comments/{commentID} [post] -func (tc *TaskComment) Update(s *xorm.Session, _ web.Auth) error { +func (tc *TaskComment) Update(s *xorm.Session, a web.Auth) error { updated, err := s. ID(tc.ID). Cols("comment"). @@ -185,10 +185,17 @@ func (tc *TaskComment) Update(s *xorm.Session, _ web.Auth) error { return err } + // Resolve the doer from the session, not from tc.Author: the latter is bound + // from the request body and could be omitted (nil) or spoofed. + doer, err := GetUserOrLinkShareUser(s, a) + if err != nil { + return err + } + events.DispatchOnCommit(s, &TaskCommentUpdatedEvent{ Task: &task, Comment: tc, - Doer: tc.Author, + Doer: doer, }) return nil } diff --git a/pkg/models/task_duplicate.go b/pkg/models/task_duplicate.go index 175834c7a..ed737a507 100644 --- a/pkg/models/task_duplicate.go +++ b/pkg/models/task_duplicate.go @@ -32,7 +32,7 @@ type TaskDuplicate struct { TaskID int64 `json:"-" param:"projecttask"` // The duplicated task - Task *Task `json:"duplicated_task,omitempty"` + Task *Task `json:"duplicated_task,omitempty" readOnly:"true" doc:"The newly created duplicate task, populated by the server in the response."` web.Permissions `json:"-"` web.CRUDable `json:"-"` diff --git a/pkg/models/tasks.go b/pkg/models/tasks.go index b7515b40a..c11854b93 100644 --- a/pkg/models/tasks.go +++ b/pkg/models/tasks.go @@ -140,9 +140,11 @@ type Task struct { // Comment count of this task. Only present when fetching tasks with the `expand` parameter set to `comment_count`. CommentCount *int64 `xorm:"-" json:"comment_count,omitempty"` + // Time entry count of this task. Only present when fetching tasks with the `expand` parameter set to `time_entries_count`. + TimeEntriesCount *int64 `xorm:"-" json:"time_entries_count,omitempty"` + // Behaves exactly the same as with the TaskCollection.Expand parameter - Expand []TaskCollectionExpandable `xorm:"-" json:"-" query:"expand"` - ExpandArr []TaskCollectionExpandable `xorm:"-" json:"-" query:"expand[]"` + Expand []TaskCollectionExpandable `xorm:"-" json:"-" query:"expand"` // The position of the task - any task project can be sorted as usual by this parameter. // When accessing tasks via views with buckets, this is primarily used to sort them based on a range. @@ -768,6 +770,11 @@ func addMoreInfoToTasks(s *xorm.Session, taskMap map[int64]*Task, a web.Auth, vi if err != nil { return err } + case TaskCollectionExpandTimeEntriesCount: + err = addTimeEntriesCountToTasks(s, a, taskIDs, taskMap) + if err != nil { + return err + } case TaskCollectionExpandIsUnread: err = addIsUnreadToTasks(s, taskIDs, taskMap, a) if err != nil { @@ -1966,7 +1973,6 @@ func (t *Task) Delete(s *xorm.Session, a web.Auth) (err error) { // @Router /tasks/{id} [get] func (t *Task) ReadOne(s *xorm.Session, a web.Auth) (err error) { - t.Expand = append(t.Expand, t.ExpandArr...) expand := t.Expand if err = t.resolveIDFromProjectAndIndex(s); err != nil { return diff --git a/pkg/models/tasks_permissions.go b/pkg/models/tasks_permissions.go index 71459b13f..c4f07aaa3 100644 --- a/pkg/models/tasks_permissions.go +++ b/pkg/models/tasks_permissions.go @@ -40,7 +40,6 @@ func (t *Task) CanCreate(s *xorm.Session, a web.Auth) (bool, error) { // CanRead determines if a user can read a task func (t *Task) CanRead(s *xorm.Session, a web.Auth) (canRead bool, maxPermission int, err error) { - t.Expand = append(t.Expand, t.ExpandArr...) expand := t.Expand if err = t.resolveIDFromProjectAndIndex(s); err != nil { return diff --git a/pkg/models/team_members.go b/pkg/models/team_members.go index 8dd95d7bb..ac2654214 100644 --- a/pkg/models/team_members.go +++ b/pkg/models/team_members.go @@ -169,6 +169,10 @@ func (tm *TeamMember) Update(s *xorm.Session, _ web.Auth) (err error) { Where("team_id = ? AND user_id = ?", tm.TeamID, tm.UserID). Cols("admin"). Update(ttm) - tm.Admin = ttm.Admin // Since we're returning the updated permissions object + + // Carry the persisted row back onto tm so the response has id/created, keeping Username (xorm:"-"). + username := tm.Username + *tm = *ttm + tm.Username = username return } diff --git a/pkg/models/teams.go b/pkg/models/teams.go index 1ed143590..98c87161c 100644 --- a/pkg/models/teams.go +++ b/pkg/models/teams.go @@ -33,32 +33,35 @@ import ( // Team holds a team object type Team struct { // The unique, numeric id of this team. - ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"team"` + ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"team" readOnly:"true" doc:"The unique, numeric id of this team."` // The name of this team. - Name string `xorm:"varchar(250) not null" json:"name" valid:"required,runelength(1|250)" minLength:"1" maxLength:"250"` + Name string `xorm:"varchar(250) not null" json:"name" valid:"required,runelength(1|250)" minLength:"1" maxLength:"250" doc:"The name of this team."` // The team's description. Description string `xorm:"longtext null" json:"description"` CreatedByID int64 `xorm:"bigint not null INDEX" json:"-"` // The team's external id provided by the openid or ldap provider - ExternalID string `xorm:"varchar(250) null" maxLength:"250" json:"external_id"` + ExternalID string `xorm:"varchar(250) null" maxLength:"250" json:"external_id" readOnly:"true" doc:"The team's external id, set by the openid or ldap provider that created it. Read-only for clients."` // Contains the issuer extracted from the vikunja_groups claim if this team was created through oidc Issuer string `xorm:"text null" json:"-"` // The user who created this team. - CreatedBy *user.User `xorm:"-" json:"created_by"` + CreatedBy *user.User `xorm:"-" json:"created_by" readOnly:"true" doc:"The user who created this team. Set by the server."` // An array of all members in this team. - Members []*TeamUser `xorm:"-" json:"members"` + Members []*TeamUser `xorm:"-" json:"members" readOnly:"true" doc:"All members of this team. Managed through the team members endpoints, not by writing to this field."` // A timestamp when this relation was created. You cannot change this value. - Created time.Time `xorm:"created" json:"created"` + Created time.Time `xorm:"created" json:"created" readOnly:"true" doc:"A timestamp when this team was created. You cannot change this value."` // A timestamp when this relation was last updated. You cannot change this value. - Updated time.Time `xorm:"updated" json:"updated"` + Updated time.Time `xorm:"updated" json:"updated" readOnly:"true" doc:"A timestamp when this team was last updated. You cannot change this value."` // Defines wether the team should be publicly discoverable when sharing a project - IsPublic bool `xorm:"not null default false" json:"is_public"` + IsPublic bool `xorm:"not null default false" json:"is_public" doc:"Whether the team should be publicly discoverable when sharing a project. Only effective if public teams are enabled on the instance."` - // Query parameter controlling whether to include public projects or not - IncludePublic bool `xorm:"-" query:"include_public" json:"include_public"` + // Query-only flag controlling whether public teams the user is not a member + // of are included when listing. It is never part of the request or response + // body (json:"-") — v1 binds it from the query string via the query tag, and + // the v2 list handler takes it as a dedicated query field and sets it here. + IncludePublic bool `xorm:"-" query:"include_public" json:"-"` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` @@ -72,18 +75,18 @@ func (*Team) TableName() string { // TeamMember defines the relationship between a user and a team type TeamMember struct { // The unique, numeric id of this team member relation. - ID int64 `xorm:"bigint autoincr not null unique pk" json:"id"` + ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" readOnly:"true" doc:"The unique, numeric id of this team member relation. Set by the server."` // The team id. TeamID int64 `xorm:"bigint not null INDEX" json:"-" param:"team"` // The username of the member. We use this to prevent automated user id entering. - Username string `xorm:"-" json:"username" param:"user"` + Username string `xorm:"-" json:"username" param:"user" valid:"required" minLength:"1" doc:"The username of the member."` // Used under the hood to manage team members UserID int64 `xorm:"bigint not null INDEX" json:"-"` // Whether or not the member is an admin of the team. See the docs for more about what a team admin can do - Admin bool `xorm:"null" json:"admin"` + Admin bool `xorm:"null" json:"admin" doc:"Whether the member is an admin of the team. Team admins can add and remove members and toggle other members' admin status."` // A timestamp when this relation was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this member was added to the team. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` diff --git a/pkg/models/time_tracking.go b/pkg/models/time_tracking.go new file mode 100644 index 000000000..fc9ee3251 --- /dev/null +++ b/pkg/models/time_tracking.go @@ -0,0 +1,441 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package models + +import ( + "time" + + "code.vikunja.io/api/pkg/db" + "code.vikunja.io/api/pkg/events" + "code.vikunja.io/api/pkg/license" + "code.vikunja.io/api/pkg/user" + "code.vikunja.io/api/pkg/web" + "xorm.io/builder" + "xorm.io/xorm" +) + +// TimeEntry is a single tracked time span attached to either a task or a +// project — exactly one of TaskID / ProjectID is set (XOR). A running live +// timer is just an entry whose EndTime is still null. +// +// v2-only: doc: tags are the schema's source of truth (no v1 swaggo), and it +// implements CRUDable + Permissions because the shared handler.Do* pipeline needs them. +type TimeEntry struct { + ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"timeentry" readOnly:"true" doc:"The unique, numeric id of this time entry."` + + UserID int64 `xorm:"bigint not null INDEX" json:"user_id" readOnly:"true" doc:"The id of the user who logged this time entry. Set by the server."` + + TaskID int64 `xorm:"bigint null INDEX" json:"task_id" doc:"The task this entry is attached to. Exactly one of task_id / project_id must be set."` + ProjectID int64 `xorm:"bigint null INDEX" json:"project_id" doc:"The project this entry is attached to directly. Exactly one of task_id / project_id must be set."` + + StartTime time.Time `xorm:"not null INDEX" json:"start_time" doc:"When the tracked time started."` + EndTime *time.Time `xorm:"null" json:"end_time" doc:"When the tracked time ended. Null means a live timer is still running."` + + Comment string `xorm:"text null" json:"comment" doc:"An optional comment describing the logged time."` + + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this time entry was created. You cannot change this value."` + Updated time.Time `xorm:"updated not null" json:"updated" readOnly:"true" doc:"A timestamp when this time entry was last updated. You cannot change this value."` + + // Filter-only fields (not persisted): set by the v2 list route, read by ReadAll. + Filter string `xorm:"-" json:"-"` + FilterTimezone string `xorm:"-" json:"-"` + + web.CRUDable `xorm:"-" json:"-"` + web.Permissions `xorm:"-" json:"-"` +} + +// TableName is time_entries, not the xorm-default time_entry. +func (*TimeEntry) TableName() string { + return "time_entries" +} + +// --- CRUDable --- + +func (te *TimeEntry) Create(s *xorm.Session, a web.Auth) (err error) { + te.UserID = a.GetID() + + // Starting a new running timer auto-stops the previous one; a completed + // manual entry (EndTime set) must leave the running timer alone. + if te.EndTime == nil { + if _, err = stopRunningTimerForUser(s, te.UserID); err != nil { + return err + } + } + + if te.StartTime.IsZero() { + te.StartTime = time.Now() + } + + if err = te.validateTimes(); err != nil { + return err + } + + if _, err = s.Insert(te); err != nil { + return err + } + + doer, err := user.GetFromAuth(a) + if err != nil { + return err + } + events.DispatchOnCommit(s, &TimeEntryCreatedEvent{TimeEntry: te, Doer: doer}) + return nil +} + +func (te *TimeEntry) ReadOne(_ *xorm.Session, _ web.Auth) (err error) { + // entry got already fetched in CanRead, nothing left to do here + return nil +} + +// stopRunningTimerForUser stops the user's active timer (end_time = now) and +// returns it, or nil if no timer is running. +func stopRunningTimerForUser(s *xorm.Session, userID int64) (*TimeEntry, error) { + running := &TimeEntry{} + exists, err := s.Where("user_id = ? AND end_time IS NULL", userID).Get(running) + if err != nil { + return nil, err + } + if !exists { + return nil, nil + } + if err := running.stop(s); err != nil { + return nil, err + } + + doer, err := user.GetUserByID(s, userID) + if err != nil { + return nil, err + } + events.DispatchOnCommit(s, &TimeEntryUpdatedEvent{TimeEntry: running, Doer: doer}) + return running, nil +} + +// StopRunningTimer stops the authenticated user's active timer and returns it, +// or ErrNoRunningTimer when none is running. The stop time is the server's now. +func StopRunningTimer(s *xorm.Session, a web.Auth) (*TimeEntry, error) { + // Link shares have no time tracking (mirrors the Can* methods). Their id is a + // share id, not a user id, so without this a share whose id collides with a + // user's would stop and read that user's running timer. + if _, isShare := a.(*LinkSharing); isShare { + return nil, ErrGenericForbidden{} + } + + running, err := stopRunningTimerForUser(s, a.GetID()) + if err != nil { + return nil, err + } + if running == nil { + return nil, ErrNoRunningTimer{UserID: a.GetID()} + } + return running, nil +} + +// readableTimeEntriesCond restricts a query to entries the auth can read: a +// standalone entry on an accessible project, or one on a task in such a project. +func readableTimeEntriesCond(a web.Auth) builder.Cond { + return entriesForProjectCond(accessibleProjectIDsSubquery(a, "project_id")) +} + +func (te *TimeEntry) ReadAll(s *xorm.Session, a web.Auth, search string, page int, perPage int) (result any, resultCount int, numberOfTotalItems int64, err error) { + // Link shares have no time-tracking access (mirrors the Can* methods); + // DoReadAll skips the permission check, so it must be guarded here too. + if _, isShareAuth := a.(*LinkSharing); isShareAuth { + return []*TimeEntry{}, 0, 0, nil + } + + cond := readableTimeEntriesCond(a) + if te.TaskID > 0 { + cond = cond.And(builder.Eq{"task_id": te.TaskID}) + } + if te.ProjectID > 0 { + cond = cond.And(entriesForProjectCond(builder.Eq{"project_id": te.ProjectID})) + } + + filterCond, err := timeEntryFilterCond(te.Filter, te.FilterTimezone) + if err != nil { + return nil, 0, 0, err + } + if filterCond != nil { + cond = cond.And(filterCond) + } + + if search != "" { + cond = cond.And(db.MultiFieldSearch([]string{"comment"}, search)) + } + + total, err := s.Where(cond). + Count(&TimeEntry{}) + if err != nil { + return nil, 0, 0, err + } + + entries := []*TimeEntry{} + err = s.Where(cond). + OrderBy("start_time ASC"). + Limit(getLimitFromPageIndex(page, perPage)). + Find(&entries) + return entries, len(entries), total, err +} + +func (te *TimeEntry) Update(s *xorm.Session, a web.Auth) (err error) { + // A completed entry can't be reopened into a running timer via update — that + // would sidestep Create's single-active-timer rule; start a new one instead. + existing, err := getTimeEntryByID(s, te.ID) + if err != nil { + return err + } + if existing.EndTime != nil && te.EndTime == nil { + return ErrTimeEntryAlreadyEnded{TimeEntryID: te.ID} + } + + if err = te.validateTimes(); err != nil { + return err + } + + // task_id / project_id are listed so a reassignment (and the zero value of + // the side being cleared) is written; the XOR was validated in CanUpdate. + _, err = s. + Where("id = ?", te.ID). + Cols("task_id", "project_id", "start_time", "end_time", "comment"). + Update(te) + if err != nil { + return err + } + + // reload: Update wrote only the editable columns + updated, err := getTimeEntryByID(s, te.ID) + if err != nil { + return err + } + *te = *updated + + doer, err := user.GetFromAuth(a) + if err != nil { + return err + } + events.DispatchOnCommit(s, &TimeEntryUpdatedEvent{TimeEntry: te, Doer: doer}) + return nil +} + +func (te *TimeEntry) Delete(s *xorm.Session, a web.Auth) (err error) { + entry, err := getTimeEntryByID(s, te.ID) + if err != nil { + return err + } + if _, err = s.Where("id = ?", te.ID).Delete(&TimeEntry{}); err != nil { + return err + } + + doer, err := user.GetFromAuth(a) + if err != nil { + return err + } + events.DispatchOnCommit(s, &TimeEntryDeletedEvent{TimeEntry: entry, Doer: doer}) + return nil +} + +func getTimeEntryByID(s *xorm.Session, id int64) (*TimeEntry, error) { + entry := &TimeEntry{} + exists, err := s.Where("id = ?", id).Get(entry) + if err != nil { + return nil, err + } + if !exists { + return nil, ErrTimeEntryDoesNotExist{TimeEntryID: id} + } + return entry, nil +} + +func (te *TimeEntry) stop(s *xorm.Session) (err error) { + now := time.Now() + te.EndTime = &now + _, err = s.ID(te.ID).Update(te) + return err +} + +// --- Permissions --- + +// Returns the loaded entry rather than mutating te, so Update keeps its payload. +func (te *TimeEntry) canDoTimeEntry(s *xorm.Session, a web.Auth, fetch bool) (*TimeEntry, bool, int, error) { + entry := &TimeEntry{TaskID: te.TaskID, ProjectID: te.ProjectID} + if fetch { + var err error + entry, err = getTimeEntryByID(s, te.ID) + if err != nil { + return nil, false, -1, err + } + } + + switch { + case entry.TaskID != 0: + task, err := GetTaskByIDSimple(s, entry.TaskID) + if err != nil { + return entry, false, -1, err + } + can, maxPerm, err := task.CanRead(s, a) + return entry, can, maxPerm, err + case entry.ProjectID != 0: + project, _, err := getProjectSimple(s, builder.Eq{"id": entry.ProjectID}) + if err != nil { + return entry, false, -1, err + } + can, maxPerm, err := project.CanRead(s, a) + return entry, can, maxPerm, err + default: + return entry, false, 0, nil + } +} + +func (te *TimeEntry) CanRead(s *xorm.Session, a web.Auth) (bool, int, error) { + if _, isShareAuth := a.(*LinkSharing); isShareAuth { + return false, 0, nil + } + + entry, can, maxPerm, err := te.canDoTimeEntry(s, a, true) + if err != nil { + return false, maxPerm, err + } + *te = *entry // ReadOne is a no-op; populate te here + return can, maxPerm, nil +} + +// validateContainer enforces the XOR invariant: exactly one of task or project. +func (te *TimeEntry) validateContainer() error { + if (te.TaskID == 0) == (te.ProjectID == 0) { + return ErrTimeEntryInvalidContainer{TaskID: te.TaskID, ProjectID: te.ProjectID} + } + return nil +} + +// validateTimes rejects a completed entry whose end precedes its start (a +// negative interval). A null end is a running timer and is always valid; an end +// equal to the start is allowed (a zero-length entry). +func (te *TimeEntry) validateTimes() error { + if te.EndTime != nil && te.EndTime.Before(te.StartTime) { + return ErrTimeEntryEndBeforeStart{TimeEntryID: te.ID} + } + return nil +} + +func (te *TimeEntry) CanCreate(s *xorm.Session, a web.Auth) (bool, error) { + if _, isShareAuth := a.(*LinkSharing); isShareAuth { + return false, nil + } + + if err := te.validateContainer(); err != nil { + return false, err + } + + _, can, _, err := te.canDoTimeEntry(s, a, false) + return can, err +} + +// CanUpdate allows the author to edit their entry, including moving it between +// task / project: on top of the author check it validates the (possibly new) +// container (XOR) and requires read access to it, mirroring create. +func (te *TimeEntry) CanUpdate(s *xorm.Session, a web.Auth) (bool, error) { + if _, isShareAuth := a.(*LinkSharing); isShareAuth { + return false, nil + } + + existing, err := getTimeEntryByID(s, te.ID) + if err != nil { + return false, err + } + if existing.UserID != a.GetID() { + return false, nil + } + + // A request that omits the container keeps the existing one — an entry + // always has exactly one, so "clearing" it is never valid. + if te.TaskID == 0 && te.ProjectID == 0 { + te.TaskID = existing.TaskID + te.ProjectID = existing.ProjectID + } + if err := te.validateContainer(); err != nil { + return false, err + } + + _, canReadContainer, _, err := te.canDoTimeEntry(s, a, false) + return canReadContainer, err +} + +func (te *TimeEntry) CanDelete(s *xorm.Session, a web.Auth) (bool, error) { + return te.canModify(s, a) +} + +// canModify gates delete: read access to the container plus being the author. +func (te *TimeEntry) canModify(s *xorm.Session, a web.Auth) (bool, error) { + if _, isShareAuth := a.(*LinkSharing); isShareAuth { + return false, nil + } + + entry, canRead, _, err := te.canDoTimeEntry(s, a, true) + if err != nil { + return false, err + } + if !canRead { + return false, nil + } + return entry.UserID == a.GetID(), nil +} + +// addTimeEntriesCountToTasks attaches each task's time-entry count for the +// `time_entries_count` expand. Mirrors addCommentCountToTasks, but follows the +// same gates as the time-entry endpoints: the count is left unset (absent) for +// link shares or when the feature is unlicensed, so it can't leak that way. +func addTimeEntriesCountToTasks(s *xorm.Session, a web.Auth, taskIDs []int64, taskMap map[int64]*Task) error { + if _, isShare := a.(*LinkSharing); isShare { + return nil + } + if !license.IsFeatureEnabled(license.FeatureTimeTracking) { + return nil + } + if len(taskIDs) == 0 { + return nil + } + + zero := int64(0) + for _, taskID := range taskIDs { + if task, ok := taskMap[taskID]; ok { + task.TimeEntriesCount = &zero + } + } + + type timeEntriesCount struct { + TaskID int64 `xorm:"task_id"` + Count int64 `xorm:"count"` + } + + counts := []timeEntriesCount{} + if err := s. + Select("task_id, COUNT(*) as count"). + Where(builder.In("task_id", taskIDs)). + GroupBy("task_id"). + Table("time_entries"). + Find(&counts); err != nil { + return err + } + + for _, c := range counts { + if task, ok := taskMap[c.TaskID]; ok { + task.TimeEntriesCount = &c.Count + } + } + + return nil +} diff --git a/pkg/models/time_tracking_filter.go b/pkg/models/time_tracking_filter.go new file mode 100644 index 000000000..ec4c7b68e --- /dev/null +++ b/pkg/models/time_tracking_filter.go @@ -0,0 +1,204 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package models + +import ( + "strconv" + "strings" + "time" + + "code.vikunja.io/api/pkg/config" + + "github.com/ganigeorgiev/fexpr" + "github.com/jszwedko/go-datemath" + "xorm.io/builder" +) + +// entriesForProjectCond matches time entries belonging to a project given a +// predicate over a project_id column: standalone entries whose own project_id +// matches, plus task-attached entries whose task currently lives in a matching +// project. Tasks move between projects, so the project is resolved via the task +// at query time rather than denormalized. Used for both permission scoping and +// the project_id filter. +func entriesForProjectCond(projectIDCond builder.Cond) builder.Cond { + return builder.Or( + projectIDCond, + builder.In("task_id", + builder.Select("id").From("tasks").Where(projectIDCond), + ), + ) +} + +// timeEntryFilterCond parses a task-style filter string into a condition over +// the time_entries table, or nil for an empty filter. Filterable fields: +// user_id, task_id, project_id (ints / in-lists), start_time, end_time (dates, +// datemath, or the literal null for running timers). comment is deliberately +// not filterable — text matching belongs to search. +func timeEntryFilterCond(filter, filterTimezone string) (builder.Cond, error) { + if filter == "" { + return nil, nil + } + + parsed, err := fexpr.Parse(preprocessFilterString(filter)) + if err != nil { + return nil, &ErrInvalidFilterExpression{Expression: filter, ExpressionError: err} + } + + loc := config.GetTimeZone() + if filterTimezone != "" { + loc, err = time.LoadLocation(filterTimezone) + if err != nil { + return nil, &ErrInvalidTimezone{Name: filterTimezone, LoadError: err} + } + } + + return buildTimeEntryFilterCond(parsed, loc) +} + +func buildTimeEntryFilterCond(groups []fexpr.ExprGroup, loc *time.Location) (builder.Cond, error) { + conds := make([]builder.Cond, 0, len(groups)) + joins := make([]taskFilterConcatinator, 0, len(groups)) + + for _, g := range groups { + join := filterConcatAnd + if g.Join == fexpr.JoinOr { + join = filterConcatOr + } + + var ( + cond builder.Cond + err error + ) + switch item := g.Item.(type) { + case []fexpr.ExprGroup: // a parenthesized sub-expression + cond, err = buildTimeEntryFilterCond(item, loc) + case fexpr.Expr: + var comparator taskFilterComparator + comparator, err = getFilterComparatorFromOp(item.Op) + if err == nil { + cond, err = resolveTimeEntryFilter(item.Left.Literal, comparator, item.Right.Literal, loc) + } + } + if err != nil { + return nil, err + } + conds = append(conds, cond) + joins = append(joins, join) + } + + if len(conds) == 0 { + return nil, nil + } + result := conds[0] + for i := 1; i < len(conds); i++ { + if joins[i] == filterConcatOr { + result = builder.Or(result, conds[i]) + continue + } + result = builder.And(result, conds[i]) + } + return result, nil +} + +func resolveTimeEntryFilter(field string, comparator taskFilterComparator, raw string, loc *time.Location) (builder.Cond, error) { + switch field { + case "user_id", "task_id": + value, err := timeEntryIntFilterValue(raw, comparator) + if err != nil { + return nil, ErrInvalidTimeEntryFilterValue{Field: field, Value: raw} + } + return getFilterCond(&taskFilter{field: field, value: value, comparator: comparator, isNumeric: true}, false) + + case "project", "project_id": + value, err := timeEntryIntFilterValue(raw, comparator) + if err != nil { + return nil, ErrInvalidTimeEntryFilterValue{Field: "project_id", Value: raw} + } + // Build membership positively (standalone-in-project OR task-in-project) + // and negate the whole set for != / not in. Negating project_id alone would + // wrongly match task-attached entries, whose own project_id is 0. + positive, negate := comparator, false + if comparator == taskFilterComparatorNotEquals { + positive, negate = taskFilterComparatorEquals, true + } + if comparator == taskFilterComparatorNotIn { + positive, negate = taskFilterComparatorIn, true + } + inner, err := getFilterCond(&taskFilter{field: "project_id", value: value, comparator: positive, isNumeric: true}, false) + if err != nil { + return nil, err + } + cond := entriesForProjectCond(inner) + if negate { + cond = builder.Not{cond} + } + return cond, nil + + case "start_time", "end_time": + if raw == "null" { + return nullTimeFilterCond(field, comparator) + } + value, err := timeEntryTimeFilterValue(raw, loc) + if err != nil { + return nil, ErrInvalidTimeEntryFilterValue{Field: field, Value: raw} + } + return getFilterCond(&taskFilter{field: field, value: value, comparator: comparator}, false) + + default: + return nil, ErrInvalidTimeEntryFilterField{Field: field} + } +} + +// nullTimeFilterCond handles `end_time = null` (running timers) and its negation. +func nullTimeFilterCond(field string, comparator taskFilterComparator) (builder.Cond, error) { + if comparator == taskFilterComparatorEquals { + return &builder.IsNull{field}, nil + } + if comparator == taskFilterComparatorNotEquals { + return &builder.NotNull{field}, nil + } + return nil, ErrInvalidTimeEntryFilterValue{Field: field, Value: "null"} +} + +func timeEntryIntFilterValue(raw string, comparator taskFilterComparator) (any, error) { + if comparator == taskFilterComparatorIn || comparator == taskFilterComparatorNotIn { + parts := strings.Split(raw, ",") + values := make([]int64, 0, len(parts)) + for _, part := range parts { + v, err := strconv.ParseInt(strings.TrimSpace(part), 10, 64) + if err != nil { + return nil, err + } + values = append(values, v) + } + return values, nil + } + return strconv.ParseInt(strings.TrimSpace(raw), 10, 64) +} + +// timeEntryTimeFilterValue mirrors the task filter's date handling: datemath +// (now, now-7d) first, then explicit date formats. +func timeEntryTimeFilterValue(raw string, loc *time.Location) (time.Time, error) { + if loc == nil { + loc = config.GetTimeZone() + } + if expr, err := safeDatemathParse(raw); err == nil { + t := expr.Time(datemath.WithLocation(loc)).In(config.GetTimeZone()) + return adjustDateForMysql(t), nil + } + return parseTimeFromUserInput(raw, loc) +} diff --git a/pkg/models/time_tracking_test.go b/pkg/models/time_tracking_test.go new file mode 100644 index 000000000..91dc90ee6 --- /dev/null +++ b/pkg/models/time_tracking_test.go @@ -0,0 +1,729 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package models + +import ( + "encoding/json" + "testing" + "time" + + "code.vikunja.io/api/pkg/db" + "code.vikunja.io/api/pkg/events" + "code.vikunja.io/api/pkg/license" + "code.vikunja.io/api/pkg/user" + "code.vikunja.io/api/pkg/web" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func timePtr(t time.Time) *time.Time { return &t } + +// Fixture access graph (pkg/db/fixtures): project 1 is owned by user1 only +// (everyone else a stranger); task 1 lives in project 1. Project 3 is owned by +// user3, with user1 and user2 granted read. user4 has access to neither. +// Entries: 1 = user1 on task 1, 2 = user1 on project 1, 3 = user3 on project 3. + +func TestTimeEntry_CanRead(t *testing.T) { + tests := []struct { + name string + entryID int64 + auth web.Auth + wantCan bool + wantErr func(error) bool + }{ + {"owner reads task entry", 1, &user.User{ID: 1}, true, nil}, + {"owner reads project entry", 2, &user.User{ID: 1}, true, nil}, + {"reader reads other user's entry on a shared project", 3, &user.User{ID: 1}, true, nil}, + {"stranger denied on owned project", 1, &user.User{ID: 4}, false, nil}, + {"stranger denied on shared project", 3, &user.User{ID: 4}, false, nil}, + {"link share denied", 1, &LinkSharing{ID: 1, ProjectID: 1}, false, nil}, + {"missing entry is a 404", 999, &user.User{ID: 1}, false, IsErrTimeEntryDoesNotExist}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + can, _, err := (&TimeEntry{ID: tt.entryID}).CanRead(s, tt.auth) + if tt.wantErr != nil { + require.Error(t, err) + assert.True(t, tt.wantErr(err), "unexpected error type: %v", err) + return + } + require.NoError(t, err) + assert.Equal(t, tt.wantCan, can) + }) + } +} + +func TestTimeEntry_CanCreate(t *testing.T) { + tests := []struct { + name string + entry *TimeEntry + auth web.Auth + wantCan bool + wantErr func(error) bool + }{ + {"on a task in an owned project", &TimeEntry{TaskID: 1}, &user.User{ID: 1}, true, nil}, + {"on an owned project", &TimeEntry{ProjectID: 1}, &user.User{ID: 1}, true, nil}, + {"on a readable project", &TimeEntry{ProjectID: 3}, &user.User{ID: 1}, true, nil}, + {"stranger denied", &TimeEntry{ProjectID: 1}, &user.User{ID: 4}, false, nil}, + {"both task and project is invalid", &TimeEntry{TaskID: 1, ProjectID: 1}, &user.User{ID: 1}, false, IsErrTimeEntryInvalidContainer}, + {"neither task nor project is invalid", &TimeEntry{}, &user.User{ID: 1}, false, IsErrTimeEntryInvalidContainer}, + {"link share denied", &TimeEntry{ProjectID: 1}, &LinkSharing{ID: 1, ProjectID: 1}, false, nil}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + can, err := tt.entry.CanCreate(s, tt.auth) + if tt.wantErr != nil { + require.Error(t, err) + assert.True(t, tt.wantErr(err), "unexpected error type: %v", err) + return + } + require.NoError(t, err) + assert.Equal(t, tt.wantCan, can) + }) + } +} + +// Entry 3 is authored by user3; user1 can read project 3 but is not the author, +// so it can read but not modify. +func TestTimeEntry_CanModify(t *testing.T) { + tests := []struct { + name string + entryID int64 + auth web.Auth + wantCan bool + }{ + {"author modifies own entry", 1, &user.User{ID: 1}, true}, + {"author modifies own entry on shared project", 3, &user.User{ID: 3}, true}, + {"reader who is not author cannot modify", 3, &user.User{ID: 1}, false}, + {"stranger cannot modify", 3, &user.User{ID: 4}, false}, + {"link share cannot modify", 1, &LinkSharing{ID: 1, ProjectID: 1}, false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + canUpdate, err := (&TimeEntry{ID: tt.entryID}).CanUpdate(s, tt.auth) + require.NoError(t, err) + assert.Equal(t, tt.wantCan, canUpdate, "CanUpdate") + + canDelete, err := (&TimeEntry{ID: tt.entryID}).CanDelete(s, tt.auth) + require.NoError(t, err) + assert.Equal(t, tt.wantCan, canDelete, "CanDelete") + }) + } +} + +// Guards the data leak: ReadAll must return only entries on tasks/projects the +// caller can read, since DoReadAll runs no permission check. +func TestTimeEntry_ReadAll(t *testing.T) { + tests := []struct { + name string + auth web.Auth + wantIDs []int64 + }{ + {"user sees every readable entry", &user.User{ID: 1}, []int64{1, 2, 3, 4}}, + {"user sees only entries on projects they can read", &user.User{ID: 2}, []int64{3}}, + {"stranger sees nothing", &user.User{ID: 4}, []int64{}}, + {"link share sees nothing", &LinkSharing{ID: 1, ProjectID: 1}, []int64{}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + result, count, total, err := (&TimeEntry{}).ReadAll(s, tt.auth, "", 1, 50) + require.NoError(t, err) + entries, ok := result.([]*TimeEntry) + require.True(t, ok) + + gotIDs := make([]int64, 0, len(entries)) + for _, e := range entries { + gotIDs = append(gotIDs, e.ID) + } + assert.ElementsMatch(t, tt.wantIDs, gotIDs) + assert.Equal(t, len(tt.wantIDs), count) + assert.Equal(t, int64(len(tt.wantIDs)), total) + }) + } +} + +// Filtering reuses the task filter grammar. user1 can read entries 1,2,4 +// (project 1) and 3 (project 3, shared) — the filter only narrows that set. +func TestTimeEntry_ReadAll_Filter(t *testing.T) { + tests := []struct { + name string + filter string + wantIDs []int64 + wantErr bool + }{ + {"by user", "user_id = 3", []int64{3}, false}, + {"by task", "task_id = 1", []int64{1, 4}, false}, + {"by project unions task-attached entries", "project_id = 1", []int64{1, 2, 4}, false}, + {"by project negated", "project_id != 1", []int64{3}, false}, + {"by start time", "start_time > '2018-12-01T11:00:00+00:00'", []int64{2, 3, 4}, false}, + {"running timers via null end_time", "end_time = null", []int64{4}, false}, + {"compound and", "user_id = 1 && end_time = null", []int64{4}, false}, + {"compound or", "user_id = 3 || task_id = 1", []int64{1, 3, 4}, false}, + {"in list", "user_id in 1,3", []int64{1, 2, 3, 4}, false}, + {"comment is not filterable", "comment = whatever", nil, true}, + {"unknown field errors", "bogus = 1", nil, true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + te := &TimeEntry{Filter: tt.filter} + result, _, _, err := te.ReadAll(s, &user.User{ID: 1}, "", 1, 50) + if tt.wantErr { + require.Error(t, err) + return + } + require.NoError(t, err) + entries, ok := result.([]*TimeEntry) + require.True(t, ok) + gotIDs := make([]int64, 0, len(entries)) + for _, e := range entries { + gotIDs = append(gotIDs, e.ID) + } + assert.ElementsMatch(t, tt.wantIDs, gotIDs) + }) + } +} + +// Search matches the entry comment. Comments: 1="Time entry on task 1", +// 2/3 contain "Standalone", 4="Running timer". +func TestTimeEntry_ReadAll_Search(t *testing.T) { + tests := []struct { + name string + search string + wantIDs []int64 + }{ + {"matches a comment", "Running", []int64{4}}, + {"is case-insensitive", "running", []int64{4}}, + {"matches several", "Standalone", []int64{2, 3}}, + {"no match", "nothing matches this", []int64{}}, + {"empty search returns all readable", "", []int64{1, 2, 3, 4}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + result, _, _, err := (&TimeEntry{}).ReadAll(s, &user.User{ID: 1}, tt.search, 1, 50) + require.NoError(t, err) + entries, ok := result.([]*TimeEntry) + require.True(t, ok) + gotIDs := make([]int64, 0, len(entries)) + for _, e := range entries { + gotIDs = append(gotIDs, e.ID) + } + assert.ElementsMatch(t, tt.wantIDs, gotIDs) + }) + } +} + +func TestTimeEntry_Create(t *testing.T) { + t.Run("manual entry keeps its start time and is owned by the caller", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + start := time.Date(2020, 1, 1, 9, 0, 0, 0, time.UTC) + end := time.Date(2020, 1, 1, 10, 0, 0, 0, time.UTC) + te := &TimeEntry{TaskID: 1, StartTime: start, EndTime: &end, Comment: "work"} + require.NoError(t, te.Create(s, &user.User{ID: 1})) + require.NoError(t, s.Commit()) + + assert.Equal(t, int64(1), te.UserID) + assert.True(t, te.StartTime.Equal(start)) + db.AssertExists(t, "time_entries", map[string]interface{}{ + "id": te.ID, + "user_id": 1, + "task_id": 1, + "comment": "work", + }, false) + }) + + t.Run("defaults the start time to now when none is given", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + te := &TimeEntry{TaskID: 1} + require.NoError(t, te.Create(s, &user.User{ID: 1})) + assert.False(t, te.StartTime.IsZero()) + }) + + t.Run("a completed manual entry leaves a running timer alone", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + // entry 4 is user1's running timer + manual := &TimeEntry{ + TaskID: 1, + StartTime: time.Date(2020, 1, 1, 9, 0, 0, 0, time.UTC), + EndTime: timePtr(time.Date(2020, 1, 1, 10, 0, 0, 0, time.UTC)), + } + require.NoError(t, manual.Create(s, &user.User{ID: 1})) + require.NoError(t, s.Commit()) + + running := &TimeEntry{} + exists, err := s.Where("id = ?", 4).Get(running) + require.NoError(t, err) + require.True(t, exists) + assert.Nil(t, running.EndTime, "a manual entry must not stop the running timer") + }) + + t.Run("auto-stops the caller's running timer", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + a := &user.User{ID: 1} + + first := &TimeEntry{TaskID: 1} + require.NoError(t, first.Create(s, a)) + require.Nil(t, first.EndTime, "first timer should be running") + + second := &TimeEntry{TaskID: 1} + require.NoError(t, second.Create(s, a)) + require.NoError(t, s.Commit()) + + reloaded := &TimeEntry{} + exists, err := s.Where("id = ?", first.ID).Get(reloaded) + require.NoError(t, err) + require.True(t, exists) + assert.NotNil(t, reloaded.EndTime, "first timer should have been auto-stopped") + assert.Nil(t, second.EndTime, "second timer should still be running") + }) +} + +// A running timer (no end) must round-trip as a NULL end_time: found by the +// null filter and serialized as JSON null, never the 0001-01-01 zero sentinel. +func TestTimeEntry_RunningTimerEndTimeIsNull(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + a := &user.User{ID: 1} + + te := &TimeEntry{TaskID: 1, StartTime: time.Date(2020, 1, 1, 9, 0, 0, 0, time.UTC)} + require.NoError(t, te.Create(s, a)) + require.NoError(t, s.Commit()) + + reloaded, err := getTimeEntryByID(s, te.ID) + require.NoError(t, err) + + marshalled, err := json.Marshal(reloaded) + require.NoError(t, err) + assert.Contains(t, string(marshalled), `"end_time":null`) + assert.NotContains(t, string(marshalled), "0001-01-01") + + // Stored as NULL, so the null filter matches it (not just the fixtures). + found := &TimeEntry{Filter: "end_time = null"} + result, _, _, err := found.ReadAll(s, a, "", 1, 50) + require.NoError(t, err) + ids := []int64{} + for _, e := range result.([]*TimeEntry) { + ids = append(ids, e.ID) + } + assert.Contains(t, ids, te.ID) +} + +// Regression guard: the permission check must not clobber the update payload. +func TestTimeEntry_Update(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + a := &user.User{ID: 1} + + te := &TimeEntry{ + ID: 1, + TaskID: 1, + StartTime: time.Date(2020, 1, 1, 9, 0, 0, 0, time.UTC), + EndTime: timePtr(time.Date(2020, 1, 1, 10, 0, 0, 0, time.UTC)), + Comment: "updated comment", + } + + can, err := te.CanUpdate(s, a) // the handler calls this before Update + require.NoError(t, err) + require.True(t, can) + require.NoError(t, te.Update(s, a)) + require.NoError(t, s.Commit()) + + assert.Equal(t, "updated comment", te.Comment) + db.AssertExists(t, "time_entries", map[string]interface{}{ + "id": 1, + "comment": "updated comment", + }, false) +} + +func TestTimeEntry_UpdateReassignsContainer(t *testing.T) { + validTimes := func(te *TimeEntry) { + te.StartTime = time.Date(2020, 1, 1, 9, 0, 0, 0, time.UTC) + te.EndTime = timePtr(time.Date(2020, 1, 1, 10, 0, 0, 0, time.UTC)) + } + + t.Run("moves an entry from a task to a project", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + a := &user.User{ID: 1} + + // Entry 1 is on task 1; move it onto project 1 directly. + te := &TimeEntry{ID: 1, ProjectID: 1} + validTimes(te) + + can, err := te.CanUpdate(s, a) + require.NoError(t, err) + require.True(t, can) + require.NoError(t, te.Update(s, a)) + require.NoError(t, s.Commit()) + + db.AssertExists(t, "time_entries", map[string]interface{}{ + "id": 1, + "task_id": 0, + "project_id": 1, + }, false) + }) + + t.Run("rejects an update that sets both task and project", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + _, err := (&TimeEntry{ID: 1, TaskID: 1, ProjectID: 1}).CanUpdate(s, &user.User{ID: 1}) + require.Error(t, err) + assert.True(t, IsErrTimeEntryInvalidContainer(err)) + }) + + t.Run("an omitted container keeps the existing one", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + a := &user.User{ID: 1} + + // Entry 1 is on task 1; update only the comment, no container set. + te := &TimeEntry{ID: 1, Comment: "kept on task"} + validTimes(te) + + can, err := te.CanUpdate(s, a) + require.NoError(t, err) + require.True(t, can) + require.NoError(t, te.Update(s, a)) + require.NoError(t, s.Commit()) + + db.AssertExists(t, "time_entries", map[string]interface{}{ + "id": 1, + "task_id": 1, + "project_id": 0, + "comment": "kept on task", + }, false) + }) +} + +func TestTimeEntry_UpdateReopenGuard(t *testing.T) { + a := &user.User{ID: 1} + someStart := time.Date(2020, 1, 1, 9, 0, 0, 0, time.UTC) + + t.Run("rejects clearing the end of a completed entry", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + // Entry 1 is completed; a nil end would reopen it as a running timer. + te := &TimeEntry{ID: 1, TaskID: 1, StartTime: someStart} // EndTime nil + can, err := te.CanUpdate(s, a) + require.NoError(t, err) + require.True(t, can) + + err = te.Update(s, a) + require.Error(t, err) + assert.True(t, IsErrTimeEntryAlreadyEnded(err), "unexpected error type: %v", err) + }) + + t.Run("allows editing a running entry while it stays running", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + // Entry 4 is user1's running timer; keeping it running (nil end) is fine. + te := &TimeEntry{ID: 4, TaskID: 1, StartTime: someStart, Comment: "edited"} // EndTime nil + can, err := te.CanUpdate(s, a) + require.NoError(t, err) + require.True(t, can) + require.NoError(t, te.Update(s, a)) + }) +} + +func TestTimeEntry_RejectsInvertedInterval(t *testing.T) { + a := &user.User{ID: 1} + start := time.Date(2020, 1, 1, 10, 0, 0, 0, time.UTC) + before := time.Date(2020, 1, 1, 9, 0, 0, 0, time.UTC) + + t.Run("create rejects an end before the start", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + te := &TimeEntry{TaskID: 1, StartTime: start, EndTime: timePtr(before)} + err := te.Create(s, a) + require.Error(t, err) + assert.True(t, IsErrTimeEntryEndBeforeStart(err), "unexpected error type: %v", err) + }) + + t.Run("create allows an end equal to the start", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + te := &TimeEntry{TaskID: 1, StartTime: start, EndTime: timePtr(start)} + require.NoError(t, te.Create(s, a)) + }) + + t.Run("create allows a running timer with no end", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + te := &TimeEntry{TaskID: 1, StartTime: start} // EndTime nil + require.NoError(t, te.Create(s, a)) + }) + + t.Run("update rejects an end before the start", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + // Entry 1 is user1's completed entry. + te := &TimeEntry{ID: 1, TaskID: 1, StartTime: start, EndTime: timePtr(before)} + can, err := te.CanUpdate(s, a) + require.NoError(t, err) + require.True(t, can) + + err = te.Update(s, a) + require.Error(t, err) + assert.True(t, IsErrTimeEntryEndBeforeStart(err), "unexpected error type: %v", err) + }) +} + +func TestTimeEntry_StopRunningTimer(t *testing.T) { + t.Run("stops the caller's running timer and returns it", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + entry, err := StopRunningTimer(s, &user.User{ID: 1}) // entry 4 + require.NoError(t, err) + require.NoError(t, s.Commit()) + + assert.Equal(t, int64(4), entry.ID) + assert.NotNil(t, entry.EndTime) + + reloaded := &TimeEntry{} + _, err = s.Where("id = ?", 4).Get(reloaded) + require.NoError(t, err) + assert.NotNil(t, reloaded.EndTime, "end time should be persisted") + }) + + t.Run("errors when no timer is running", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + _, err := StopRunningTimer(s, &user.User{ID: 2}) // user2 has no entries + require.Error(t, err) + assert.True(t, IsErrNoRunningTimer(err), "unexpected error type: %v", err) + }) + + t.Run("denies a link share and leaves the matching user's timer running", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + // Share id 1 collides with user 1, whose entry 4 is a running timer. + _, err := StopRunningTimer(s, &LinkSharing{ID: 1, ProjectID: 1}) + require.Error(t, err) + assert.True(t, IsErrGenericForbidden(err), "unexpected error type: %v", err) + + running := &TimeEntry{} + exists, err := s.Where("id = ?", 4).Get(running) + require.NoError(t, err) + require.True(t, exists) + assert.Nil(t, running.EndTime, "the user's timer must not have been stopped by a link share") + }) +} + +func TestTimeEntry_Events(t *testing.T) { + u := &user.User{ID: 1} + someStart := time.Date(2020, 1, 1, 9, 0, 0, 0, time.UTC) + someEnd := timePtr(time.Date(2020, 1, 1, 10, 0, 0, 0, time.UTC)) + + t.Run("create dispatches created", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + events.ClearDispatchedEvents() + s := db.NewSession() + defer s.Close() + + te := &TimeEntry{TaskID: 1, StartTime: someStart, EndTime: someEnd} + require.NoError(t, te.Create(s, u)) + require.NoError(t, s.Commit()) + events.DispatchPending(s) + events.AssertDispatched(t, &TimeEntryCreatedEvent{}) + }) + + t.Run("update dispatches updated", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + events.ClearDispatchedEvents() + s := db.NewSession() + defer s.Close() + + te := &TimeEntry{ID: 1, TaskID: 1, StartTime: someStart, EndTime: someEnd, Comment: "edited"} + can, err := te.CanUpdate(s, u) + require.NoError(t, err) + require.True(t, can) + require.NoError(t, te.Update(s, u)) + require.NoError(t, s.Commit()) + events.DispatchPending(s) + events.AssertDispatched(t, &TimeEntryUpdatedEvent{}) + }) + + t.Run("delete dispatches deleted", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + events.ClearDispatchedEvents() + s := db.NewSession() + defer s.Close() + + require.NoError(t, (&TimeEntry{ID: 1}).Delete(s, u)) + require.NoError(t, s.Commit()) + events.DispatchPending(s) + events.AssertDispatched(t, &TimeEntryDeletedEvent{}) + }) + + t.Run("starting a timer dispatches created plus updated for the auto-stopped entry", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + events.ClearDispatchedEvents() + s := db.NewSession() + defer s.Close() + + // entry 4 is user1's running timer; a new running timer auto-stops it + require.NoError(t, (&TimeEntry{TaskID: 1}).Create(s, u)) + require.NoError(t, s.Commit()) + events.DispatchPending(s) + events.AssertDispatched(t, &TimeEntryCreatedEvent{}) + events.AssertDispatched(t, &TimeEntryUpdatedEvent{}) + }) + + t.Run("a completed manual entry dispatches only created", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + events.ClearDispatchedEvents() + s := db.NewSession() + defer s.Close() + + te := &TimeEntry{TaskID: 1, StartTime: someStart, EndTime: someEnd} + require.NoError(t, te.Create(s, u)) + require.NoError(t, s.Commit()) + events.DispatchPending(s) + assert.Equal(t, 1, events.CountDispatchedEvents((&TimeEntryCreatedEvent{}).Name())) + assert.Equal(t, 0, events.CountDispatchedEvents((&TimeEntryUpdatedEvent{}).Name()), "a completed manual entry must not auto-stop") + }) + + t.Run("StopRunningTimer dispatches updated", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + events.ClearDispatchedEvents() + s := db.NewSession() + defer s.Close() + + _, err := StopRunningTimer(s, u) + require.NoError(t, err) + require.NoError(t, s.Commit()) + events.DispatchPending(s) + events.AssertDispatched(t, &TimeEntryUpdatedEvent{}) + }) +} + +func TestTimeEntry_Delete(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + + require.NoError(t, (&TimeEntry{ID: 1}).Delete(s, &user.User{ID: 1})) + require.NoError(t, s.Commit()) + db.AssertMissing(t, "time_entries", map[string]interface{}{"id": 1}) +} + +func TestTimeEntry_TaskCount(t *testing.T) { + u := &user.User{ID: 1} + + t.Run("attaches counts for a licensed, non-share caller", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + license.SetForTests([]license.Feature{license.FeatureTimeTracking}) + defer license.ResetForTests() + + task1 := &Task{ID: 1} // fixtures: time entries 1 and 4 are attached to task 1 + task2 := &Task{ID: 2} // no time entries + taskMap := map[int64]*Task{1: task1, 2: task2} + + require.NoError(t, addTimeEntriesCountToTasks(s, u, []int64{1, 2}, taskMap)) + + require.NotNil(t, task1.TimeEntriesCount) + assert.Equal(t, int64(2), *task1.TimeEntriesCount) + require.NotNil(t, task2.TimeEntriesCount) + assert.Equal(t, int64(0), *task2.TimeEntriesCount) + }) + + t.Run("leaves the count unset for a link share", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + license.SetForTests([]license.Feature{license.FeatureTimeTracking}) + defer license.ResetForTests() + + task1 := &Task{ID: 1} + taskMap := map[int64]*Task{1: task1} + require.NoError(t, addTimeEntriesCountToTasks(s, &LinkSharing{ID: 1}, []int64{1}, taskMap)) + assert.Nil(t, task1.TimeEntriesCount, "link shares must not learn time-entry counts") + }) + + t.Run("leaves the count unset when the feature is unlicensed", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + defer s.Close() + license.ResetForTests() // feature disabled + + task1 := &Task{ID: 1} + taskMap := map[int64]*Task{1: task1} + require.NoError(t, addTimeEntriesCountToTasks(s, u, []int64{1}, taskMap)) + assert.Nil(t, task1.TimeEntriesCount, "an unlicensed instance must not expose counts") + }) +} diff --git a/pkg/models/webhooks.go b/pkg/models/webhooks.go index d7e3787d4..fd7ee8e81 100644 --- a/pkg/models/webhooks.go +++ b/pkg/models/webhooks.go @@ -47,29 +47,29 @@ var webhookClient *http.Client type Webhook struct { // The generated ID of this webhook target - ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"webhook"` + ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"webhook" readOnly:"true" doc:"The generated ID of this webhook target."` // The target URL where the POST request with the webhook payload will be made - TargetURL string `xorm:"not null" valid:"required,url" json:"target_url"` + TargetURL string `xorm:"not null" valid:"required,url" json:"target_url" doc:"The target URL where the POST request with the webhook payload will be made."` // The webhook events which should fire this webhook target - Events []string `xorm:"JSON not null" valid:"required" json:"events"` + Events []string `xorm:"JSON not null" valid:"required" json:"events" doc:"The webhook events which should fire this webhook target. Get the available events from /api/v1/webhooks/events."` // The project ID of the project this webhook target belongs to - ProjectID int64 `xorm:"bigint null index" json:"project_id" param:"project"` + ProjectID int64 `xorm:"bigint null index" json:"project_id" param:"project" readOnly:"true" doc:"The id of the project this webhook target belongs to. Set from the URL, not the body."` // The user ID if this is a user-level webhook (mutually exclusive with ProjectID) - UserID int64 `xorm:"bigint null index" json:"user_id"` + UserID int64 `xorm:"bigint null index" json:"user_id" readOnly:"true" doc:"The id of the user if this is a user-level webhook (mutually exclusive with project_id)."` // If provided, webhook requests will be signed using HMAC. Check out the docs about how to use this: https://vikunja.io/docs/webhooks/#signing - Secret string `xorm:"null" json:"secret"` + Secret string `xorm:"null" json:"secret" writeOnly:"true" doc:"If provided, webhook requests will be signed using HMAC. See https://vikunja.io/docs/webhooks/#signing. Write-only: never returned in responses."` // If provided, webhook requests will be sent with a Basic Auth header. - BasicAuthUser string `xorm:"null" json:"basic_auth_user"` - BasicAuthPassword string `xorm:"null" json:"basic_auth_password"` + BasicAuthUser string `xorm:"null" json:"basic_auth_user" writeOnly:"true" doc:"If provided together with basic_auth_password, webhook requests will be sent with a Basic Auth header. Write-only: never returned in responses."` + BasicAuthPassword string `xorm:"null" json:"basic_auth_password" writeOnly:"true" doc:"The password for the Basic Auth header. Write-only: never returned in responses."` // The user who initially created the webhook target. - CreatedBy *user.User `xorm:"-" json:"created_by" valid:"-"` + CreatedBy *user.User `xorm:"-" json:"created_by" valid:"-" readOnly:"true" doc:"The user who initially created the webhook target."` CreatedByID int64 `xorm:"bigint not null" json:"-"` // A timestamp when this webhook target was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this webhook target was created. You cannot change this value."` // A timestamp when this webhook target was last updated. You cannot change this value. - Updated time.Time `xorm:"updated not null" json:"updated"` + Updated time.Time `xorm:"updated not null" json:"updated" readOnly:"true" doc:"A timestamp when this webhook target was last updated. You cannot change this value."` web.CRUDable `xorm:"-" json:"-"` web.Permissions `xorm:"-" json:"-"` @@ -79,6 +79,17 @@ func (w *Webhook) TableName() string { return "webhooks" } +// maskCredentials clears the write-only secret and basic-auth fields so they are +// never echoed back in a response. The client already submitted these values and +// the DB row keeps them (outgoing deliveries reload and sign from the DB copy); +// only the in-memory struct returned to the caller is cleared. Always call this +// after the DB write, never before. +func (w *Webhook) maskCredentials() { + w.Secret = "" + w.BasicAuthUser = "" + w.BasicAuthPassword = "" +} + var availableWebhookEvents map[string]bool var availableWebhookEventsLock *sync.Mutex var userDirectedWebhookEvents map[string]bool @@ -183,6 +194,11 @@ func (w *Webhook) Create(s *xorm.Session, a web.Auth) (err error) { } w.CreatedBy, err = user.GetUserByID(s, a.GetID()) + if err != nil { + return err + } + + w.maskCredentials() return } @@ -234,9 +250,7 @@ func (w *Webhook) ReadAll(s *xorm.Session, a web.Auth, _ string, page int, perPa } for _, webhook := range ws { - webhook.Secret = "" - webhook.BasicAuthUser = "" - webhook.BasicAuthPassword = "" + webhook.maskCredentials() if createdBy, has := users[webhook.CreatedByID]; has { webhook.CreatedBy = createdBy } @@ -268,6 +282,11 @@ func (w *Webhook) Update(s *xorm.Session, _ web.Auth) (err error) { _, err = s.Where("id = ?", w.ID). Cols("events"). Update(w) + if err != nil { + return err + } + + w.maskCredentials() return } diff --git a/pkg/modules/auth/auth.go b/pkg/modules/auth/auth.go index 540e85d04..61a5f9b13 100644 --- a/pkg/modules/auth/auth.go +++ b/pkg/modules/auth/auth.go @@ -17,6 +17,7 @@ package auth import ( + "context" "fmt" "net/http" "net/url" @@ -26,6 +27,7 @@ import ( "code.vikunja.io/api/pkg/config" "code.vikunja.io/api/pkg/db" "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/modules/humaecho5" "code.vikunja.io/api/pkg/user" "code.vikunja.io/api/pkg/web" @@ -383,3 +385,14 @@ func RefreshSession(rawRefreshToken string) (*RefreshResult, error) { SessionID: session.ID, }, nil } + +// GetAuthFromContext retrieves the authenticated web.Auth from a plain +// context.Context, bridging Huma handlers to Vikunja's echo JWT flow. The +// humaecho5 adapter stashes the *echo.Context under EchoContextKey first. +func GetAuthFromContext(ctx context.Context) (web.Auth, error) { + ec, ok := ctx.Value(humaecho5.EchoContextKey).(*echo.Context) + if !ok { + return nil, fmt.Errorf("no echo.Context on request context; are you calling GetAuthFromContext from a Huma handler dispatched by humaecho5?") + } + return GetAuthFromClaims(ec) +} diff --git a/pkg/modules/auth/auth_test.go b/pkg/modules/auth/auth_test.go new file mode 100644 index 000000000..b51b2da37 --- /dev/null +++ b/pkg/modules/auth/auth_test.go @@ -0,0 +1,29 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package auth + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGetAuthFromContext_NoEchoContext(t *testing.T) { + _, err := GetAuthFromContext(context.Background()) + assert.Error(t, err, "should fail when echo.Context isn't stashed on ctx") +} diff --git a/pkg/modules/avatar/avatar.go b/pkg/modules/avatar/avatar.go index 321fb8553..7c453542e 100644 --- a/pkg/modules/avatar/avatar.go +++ b/pkg/modules/avatar/avatar.go @@ -17,6 +17,12 @@ package avatar import ( + "errors" + "image" + "io" + "strings" + + "code.vikunja.io/api/pkg/config" "code.vikunja.io/api/pkg/log" "code.vikunja.io/api/pkg/modules/avatar/botmarble" "code.vikunja.io/api/pkg/modules/avatar/empty" @@ -27,8 +33,14 @@ import ( "code.vikunja.io/api/pkg/modules/avatar/openid" "code.vikunja.io/api/pkg/modules/avatar/upload" "code.vikunja.io/api/pkg/user" + + "github.com/gabriel-vasile/mimetype" + "xorm.io/xorm" ) +// ErrNotAnImage is returned by StoreUploadedAvatar when the uploaded file is not an image. +var ErrNotAnImage = errors.New("uploaded file is no image") + // Provider defines the avatar provider interface type Provider interface { // GetAvatar is the method used to get an actual avatar for a user @@ -58,6 +70,43 @@ func FlushAllCaches(u *user.User) { } } +// GetAvatarForUsername resolves and renders the avatar for a username. It is the +// shared core behind both the v1 and v2 avatar endpoints: it looks up the user, +// tolerates an unknown/disabled user (returning the default placeholder rather +// than an error, since avatars are loaded via tags), picks the right +// provider (empty for unknown users, botmarble for bots, otherwise the user's +// configured provider) and clamps the size to the server's configured maximum. +func GetAvatarForUsername(s *xorm.Session, username string, size int64) (data []byte, mime string, err error) { + u, err := user.GetUserWithEmail(s, &user.User{Username: username}) + if err != nil && !user.IsErrUserDoesNotExist(err) && !user.IsErrUserStatusError(err) { + log.Errorf("Error getting user for avatar: %v", err) + return nil, "", err + } + + found := err == nil || user.IsErrUserStatusError(err) + + provider := GetProvider(u) + if !found { + // Unknown user: serve the default placeholder. + provider = &empty.Provider{} + } + if found && u.IsBot() { + provider = &botmarble.Provider{} + } + + if size > config.ServiceMaxAvatarSize.GetInt64() { + size = config.ServiceMaxAvatarSize.GetInt64() + } + + data, mime, err = provider.GetAvatar(u, size) + if err != nil { + log.Errorf("Error getting avatar for user %d: %v", u.ID, err) + return nil, "", err + } + + return data, mime, nil +} + // GetProvider returns the appropriate avatar provider for a user func GetProvider(u *user.User) Provider { provider := u.AvatarProvider @@ -82,3 +131,41 @@ func GetProvider(u *user.User) Provider { return &empty.Provider{} } } + +// StoreUploadedAvatar validates that src is an image, switches the user's avatar +// provider to "upload", stores the image as the user's avatar and flushes all +// cached avatars for the user. It returns ErrNotAnImage if src is not an image. +func StoreUploadedAvatar(s *xorm.Session, u *user.User, src io.ReadSeeker) error { + mime, err := mimetype.DetectReader(src) + if err != nil { + return err + } + if !strings.HasPrefix(mime.String(), "image") { + return ErrNotAnImage + } + if _, err := src.Seek(0, io.SeekStart); err != nil { + return err + } + + // The mimetype sniff above accepts image types we cannot actually store + // (e.g. SVG, WebP) because upload.StoreAvatarFile decodes via image.Decode, + // which only has the decoders registered process-wide by the imaging package + // (png, jpeg, gif, tiff, bmp). image.DecodeConfig uses those same decoders, so + // validating here rejects undecodable images with a 400 instead of failing + // deeper in storage with a 500. + if _, _, err := image.DecodeConfig(src); err != nil { + return ErrNotAnImage + } + if _, err := src.Seek(0, io.SeekStart); err != nil { + return err + } + + u.AvatarProvider = "upload" + if err := upload.StoreAvatarFile(s, u, src); err != nil { + return err + } + + FlushAllCaches(u) + + return nil +} diff --git a/pkg/modules/humaecho5/humaecho5.go b/pkg/modules/humaecho5/humaecho5.go new file mode 100644 index 000000000..1c1f28b8e --- /dev/null +++ b/pkg/modules/humaecho5/humaecho5.go @@ -0,0 +1,185 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Package humaecho5 is a Huma adapter for labstack/echo/v5, vendored from +// the unmerged upstream PR https://github.com/danielgtaylor/huma/pull/959 +// until it lands (Huma's own humaecho is echo/v4 only). Delete and switch +// back to upstream once that PR merges. +// +// Vikunja-specific glue: every request stashes its *echo.Context on +// context.Context under EchoContextKey so handlers can reach the echo +// context via auth.GetAuthFromContext without per-handler wiring. +package humaecho5 + +import ( + "context" + "crypto/tls" + "io" + "mime/multipart" + "net/http" + "net/url" + "strings" + "time" + + "github.com/danielgtaylor/huma/v2" + "github.com/labstack/echo/v5" +) + +// MultipartMaxMemory caps in-memory buffering for multipart form parsing. +var MultipartMaxMemory int64 = 8 * 1024 + +type echoContextKey struct{} + +// EchoContextKey retrieves the underlying *echo.Context from a Huma +// handler's context.Context. +var EchoContextKey = echoContextKey{} + +// Unwrap extracts the underlying Echo context from a Huma context. Panics if +// called on a context from a different adapter. +func Unwrap(ctx huma.Context) *echo.Context { + for { + if c, ok := ctx.(interface{ Unwrap() huma.Context }); ok { + ctx = c.Unwrap() + continue + } + break + } + if c, ok := ctx.(*echoCtx); ok { + return c.Unwrap() + } + panic("not a humaecho5 context") +} + +type echoCtx struct { + op *huma.Operation + orig *echo.Context + status int +} + +var _ huma.Context = &echoCtx{} + +func (c *echoCtx) Unwrap() *echo.Context { return c.orig } +func (c *echoCtx) Operation() *huma.Operation { return c.op } + +func (c *echoCtx) Context() context.Context { + // Stash echo context so auth.GetAuthFromContext can retrieve it. + return context.WithValue((*c.orig).Request().Context(), EchoContextKey, c.orig) +} + +func (c *echoCtx) Method() string { return (*c.orig).Request().Method } +func (c *echoCtx) Host() string { return (*c.orig).Request().Host } +func (c *echoCtx) RemoteAddr() string { return (*c.orig).Request().RemoteAddr } +func (c *echoCtx) URL() url.URL { return *(*c.orig).Request().URL } + +func (c *echoCtx) Param(name string) string { return (*c.orig).Param(name) } +func (c *echoCtx) Query(name string) string { return (*c.orig).QueryParam(name) } +func (c *echoCtx) Header(name string) string { return (*c.orig).Request().Header.Get(name) } + +func (c *echoCtx) EachHeader(cb func(name, value string)) { + for name, values := range (*c.orig).Request().Header { + for _, value := range values { + cb(name, value) + } + } +} + +func (c *echoCtx) BodyReader() io.Reader { return (*c.orig).Request().Body } + +func (c *echoCtx) GetMultipartForm() (*multipart.Form, error) { + err := (*c.orig).Request().ParseMultipartForm(MultipartMaxMemory) + return (*c.orig).Request().MultipartForm, err +} + +func (c *echoCtx) SetReadDeadline(deadline time.Time) error { + return huma.SetReadDeadline((*c.orig).Response(), deadline) +} + +func (c *echoCtx) SetStatus(code int) { + c.status = code + (*c.orig).Response().WriteHeader(code) +} + +func (c *echoCtx) Status() int { return c.status } + +func (c *echoCtx) AppendHeader(name, value string) { + (*c.orig).Response().Header().Add(name, value) +} + +func (c *echoCtx) SetHeader(name, value string) { + (*c.orig).Response().Header().Set(name, value) +} + +func (c *echoCtx) BodyWriter() io.Writer { return (*c.orig).Response() } + +func (c *echoCtx) TLS() *tls.ConnectionState { return (*c.orig).Request().TLS } + +func (c *echoCtx) Version() huma.ProtoVersion { + r := (*c.orig).Request() + return huma.ProtoVersion{ + Proto: r.Proto, + ProtoMajor: r.ProtoMajor, + ProtoMinor: r.ProtoMinor, + } +} + +type router interface { + Add(method, path string, handler echo.HandlerFunc, middlewares ...echo.MiddlewareFunc) echo.RouteInfo +} + +type echoAdapter struct { + http.Handler + router router + // groupPrefix (e.g. "/api/v2") gets prepended to internal Huma + // dispatches whose path doesn't already start with it — required so + // autopatch's relative path resolution works under a sub-group. + groupPrefix string +} + +func (a *echoAdapter) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if a.groupPrefix != "" && !strings.HasPrefix(r.URL.Path, a.groupPrefix) { + r = r.Clone(r.Context()) + r.URL.Path = a.groupPrefix + r.URL.Path + if r.URL.RawPath != "" { + r.URL.RawPath = a.groupPrefix + r.URL.RawPath + } + } + a.Handler.ServeHTTP(w, r) +} + +func (a *echoAdapter) Handle(op *huma.Operation, handler func(huma.Context)) { + // Convert {param} to :param for Echo's router. + path := op.Path + path = strings.ReplaceAll(path, "{", ":") + path = strings.ReplaceAll(path, "}", "") + a.router.Add(op.Method, path, func(c *echo.Context) error { + ctx := &echoCtx{op: op, orig: c} + handler(ctx) + return nil + }) +} + +// New creates a new Huma API using the provided Echo router. +func New(r *echo.Echo, config huma.Config) huma.API { + return huma.NewAPI(config, &echoAdapter{Handler: r, router: r}) +} + +// NewWithGroup mounts a Huma API on a group so handlers inherit its +// middleware. groupPrefix must equal the prefix g was constructed with; +// the adapter uses it to rewrite internal Huma dispatches (notably +// autopatch's GET+PUT round trip) onto absolute URLs. +func NewWithGroup(r *echo.Echo, g *echo.Group, groupPrefix string, config huma.Config) huma.API { + return huma.NewAPI(config, &echoAdapter{Handler: r, router: g, groupPrefix: groupPrefix}) +} diff --git a/pkg/modules/humaecho5/humaecho5_test.go b/pkg/modules/humaecho5/humaecho5_test.go new file mode 100644 index 000000000..9594ea106 --- /dev/null +++ b/pkg/modules/humaecho5/humaecho5_test.go @@ -0,0 +1,86 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package humaecho5_test + +import ( + "context" + "encoding/json" + "net/http/httptest" + "testing" + + "code.vikunja.io/api/pkg/modules/humaecho5" + "github.com/danielgtaylor/huma/v2" + "github.com/labstack/echo/v5" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// TestAdapterRoundtrip proves that a Huma operation registered against the +// v5 adapter is served by Echo and that the echo.Context is retrievable +// from the handler's context.Context via EchoContextKey. +func TestAdapterRoundtrip(t *testing.T) { + e := echo.New() + api := humaecho5.New(e, huma.DefaultConfig("spike", "0.0.1")) + + type pingInput struct { + Name string `path:"name"` + } + type pingOutput struct { + Body struct { + Echo string `json:"echo"` + HasEchoCtx bool `json:"has_echo_ctx"` + } + } + + huma.Register(api, huma.Operation{ + OperationID: "ping", + Method: "GET", + Path: "/ping/{name}", + }, func(ctx context.Context, in *pingInput) (*pingOutput, error) { + _, ok := ctx.Value(humaecho5.EchoContextKey).(*echo.Context) + out := &pingOutput{} + out.Body.Echo = in.Name + out.Body.HasEchoCtx = ok + return out, nil + }) + + req := httptest.NewRequest("GET", "/ping/world", nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + + require.Equal(t, 200, rec.Code, "body: %s", rec.Body.String()) + var got struct { + Echo string `json:"echo"` + HasEchoCtx bool `json:"has_echo_ctx"` + } + require.NoError(t, json.NewDecoder(rec.Body).Decode(&got)) + assert.Equal(t, "world", got.Echo) + assert.True(t, got.HasEchoCtx, "echo.Context not stashed on request ctx") +} + +// TestOpenAPISpecServed proves Huma serves the OAS 3.1 spec document +// on its configured URL. +func TestOpenAPISpecServed(t *testing.T) { + e := echo.New() + _ = humaecho5.New(e, huma.DefaultConfig("spike", "0.0.1")) + req := httptest.NewRequest("GET", "/openapi.json", nil) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + require.Equal(t, 200, rec.Code) + assert.Contains(t, rec.Body.String(), `"openapi":"3.1`, + "expected OAS 3.1 header, got %s", rec.Body.String()) +} diff --git a/pkg/modules/keyvalue/keyvalue.go b/pkg/modules/keyvalue/keyvalue.go index 507f7322b..137ea8f62 100644 --- a/pkg/modules/keyvalue/keyvalue.go +++ b/pkg/modules/keyvalue/keyvalue.go @@ -17,6 +17,8 @@ package keyvalue import ( + "time" + "code.vikunja.io/api/pkg/config" "code.vikunja.io/api/pkg/log" "code.vikunja.io/api/pkg/modules/keyvalue/memory" @@ -142,3 +144,38 @@ func RememberValue[T any](key string, fn func() (T, error)) (T, error) { return val, nil } + +// expiringValue wraps a cached value with the time it expires. +type expiringValue[T any] struct { + Value T + ExpiresAt time.Time +} + +// RememberFor is like RememberValue but treats the cached value as stale once it is +// older than ttl. On a miss or once expired, it executes fn, caches the result for +// ttl and returns it. If fn returns an error, nothing is cached. +// T must be a concrete (non-pointer) type. +// +// A value that cannot be deserialized into the expected type is treated as a cache +// miss and overwritten, so the cache self-heals across upgrades that change what a key +// stores (e.g. a key that previously held a plain int64 in Redis). +func RememberFor[T any](key string, ttl time.Duration, fn func() (T, error)) (T, error) { + var cached expiringValue[T] + exists, err := GetWithValue(key, &cached) + if err == nil && exists && time.Now().Before(cached.ExpiresAt) { + return cached.Value, nil + } + + val, err := fn() + if err != nil { + var zero T + return zero, err + } + + if err := Put(key, expiringValue[T]{Value: val, ExpiresAt: time.Now().Add(ttl)}); err != nil { + var zero T + return zero, err + } + + return val, nil +} diff --git a/pkg/modules/keyvalue/keyvalue_test.go b/pkg/modules/keyvalue/keyvalue_test.go index 9d7c10a8b..ca32d8aec 100644 --- a/pkg/modules/keyvalue/keyvalue_test.go +++ b/pkg/modules/keyvalue/keyvalue_test.go @@ -19,6 +19,7 @@ package keyvalue import ( "errors" "testing" + "time" "code.vikunja.io/api/pkg/modules/keyvalue/memory" "github.com/stretchr/testify/assert" @@ -81,3 +82,78 @@ func TestRememberErrorDoesNotStore(t *testing.T) { require.NoError(t, err2) assert.False(t, exists) } + +func TestRememberForReturnsCachedWithinTTL(t *testing.T) { + store = memory.NewStorage() + + called := 0 + fn := func() (int64, error) { + called++ + return int64(called), nil + } + + val, err := RememberFor("foo", time.Hour, fn) + require.NoError(t, err) + assert.Equal(t, int64(1), val) + + // Still within the TTL, so fn must not be called again. + val, err = RememberFor("foo", time.Hour, fn) + require.NoError(t, err) + assert.Equal(t, int64(1), val) + assert.Equal(t, 1, called) +} + +func TestRememberForRecomputesAfterExpiry(t *testing.T) { + store = memory.NewStorage() + + // Seed an already-expired value. + require.NoError(t, Put("foo", expiringValue[int64]{Value: 1, ExpiresAt: time.Now().Add(-time.Minute)})) + + called := 0 + val, err := RememberFor("foo", time.Hour, func() (int64, error) { + called++ + return 2, nil + }) + + require.NoError(t, err) + assert.Equal(t, int64(2), val) + assert.Equal(t, 1, called) +} + +func TestRememberForErrorDoesNotStore(t *testing.T) { + store = memory.NewStorage() + + _, err := RememberFor("foo", time.Hour, func() (int64, error) { + return 0, errors.New("fail") + }) + + require.Error(t, err) + _, exists, err2 := Get("foo") + require.NoError(t, err2) + assert.False(t, exists) +} + +// getWithValueErrorStore simulates a backend that cannot deserialize an existing value +// into the requested type, e.g. a key that held a plain int64 before the cache started +// storing a struct (the pre-refactor metrics counters in Redis). +type getWithValueErrorStore struct { + *memory.Storage +} + +func (s *getWithValueErrorStore) GetWithValue(string, interface{}) (bool, error) { + return false, errors.New("decode error") +} + +func TestRememberForRecomputesWhenStoredValueCannotBeDeserialized(t *testing.T) { + store = &getWithValueErrorStore{memory.NewStorage()} + + called := 0 + val, err := RememberFor("foo", time.Hour, func() (int64, error) { + called++ + return 42, nil + }) + + require.NoError(t, err) + assert.Equal(t, int64(42), val) + assert.Equal(t, 1, called) +} diff --git a/pkg/modules/migration/ticktick/testdata_ticktick_invalid_numbers.csv b/pkg/modules/migration/ticktick/testdata_ticktick_invalid_numbers.csv new file mode 100644 index 000000000..b38329f61 --- /dev/null +++ b/pkg/modules/migration/ticktick/testdata_ticktick_invalid_numbers.csv @@ -0,0 +1,9 @@ +"Date: 2026-02-27+0000" +"Version: 7.1" +"Status: +0 Normal +1 Completed +2 Archived" +"Folder Name","List Name","Title","Kind","Tags","Content","Is Check list","Start Date","Due Date","Reminder","Repeat","Priority","Status","Created Time","Completed Time","Order","Timezone","Is All Day","Is Floating","Column Name","Column Order","View Mode","taskId","parentId" +"Work","Project Beta","Task with non-numeric priority","TEXT","","A task whose priority column is p1","N","","","","","p1","0","2026-02-15 09:30:00","","-1099511627776","Europe/Berlin",,"false",,,"list","1","" +"Work","Project Beta","Task with non-numeric ids","TEXT","","A task with garbage in the id columns","N","","","","","0","0","2026-02-10 08:00:00","","0","Europe/Berlin","false","false",,,"list","abc","xyz" diff --git a/pkg/modules/migration/ticktick/ticktick.go b/pkg/modules/migration/ticktick/ticktick.go index 48b74938c..a7b3f84bc 100644 --- a/pkg/modules/migration/ticktick/ticktick.go +++ b/pkg/modules/migration/ticktick/ticktick.go @@ -23,6 +23,7 @@ import ( "errors" "io" "sort" + "strconv" "strings" "time" @@ -44,32 +45,84 @@ type Migrator struct { } type tickTickTask struct { - FolderName string `csv:"Folder Name"` - ProjectName string `csv:"List Name"` - Title string `csv:"Title"` - TagsList string `csv:"Tags"` - Tags []string `csv:"-"` - Content string `csv:"Content"` - IsChecklistString string `csv:"Is Check list"` - IsChecklist bool `csv:"-"` - StartDate tickTickTime `csv:"Start Date"` - DueDate tickTickTime `csv:"Due Date"` - ReminderDuration string `csv:"Reminder"` - Reminder time.Duration `csv:"-"` - Repeat string `csv:"Repeat"` - Priority int `csv:"Priority"` - Status string `csv:"Status"` - CreatedTime tickTickTime `csv:"Created Time"` - CompletedTime tickTickTime `csv:"Completed Time"` - Order float64 `csv:"Order"` - TaskID int64 `csv:"taskId"` - ParentID int64 `csv:"parentId"` + FolderName string `csv:"Folder Name"` + ProjectName string `csv:"List Name"` + Title string `csv:"Title"` + TagsList string `csv:"Tags"` + Tags []string `csv:"-"` + Content string `csv:"Content"` + IsChecklistString string `csv:"Is Check list"` + IsChecklist bool `csv:"-"` + StartDate tickTickTime `csv:"Start Date"` + DueDate tickTickTime `csv:"Due Date"` + ReminderDuration string `csv:"Reminder"` + Reminder time.Duration `csv:"-"` + Repeat string `csv:"Repeat"` + Priority tickTickPriority `csv:"Priority"` + Status string `csv:"Status"` + CreatedTime tickTickTime `csv:"Created Time"` + CompletedTime tickTickTime `csv:"Completed Time"` + Order float64 `csv:"Order"` + TaskID tickTickNumber `csv:"taskId"` + ParentID tickTickNumber `csv:"parentId"` } type tickTickTime struct { time.Time } +// tickTickNumber is an int64 that tolerates non-numeric or malformed values in +// the numeric ID columns (taskId, parentId) of TickTick exports. Such values can +// occur through column misalignment caused by unescaped delimiters, which would +// otherwise make gocsv fail the entire import with an internal server error +// (go-vikunja/vikunja#2822). Rather than aborting the import, we fall back to 0 +// for any value we cannot parse. +type tickTickNumber int64 + +func (n *tickTickNumber) UnmarshalCSV(csv string) error { + csv = strings.TrimSpace(csv) + if csv == "" { + *n = 0 + return nil + } + parsed, err := strconv.ParseInt(csv, 10, 64) + if err != nil { + // Deliberately ignore the parse error and fall back to 0 so a single + // malformed value does not abort the whole import. + *n = 0 + return nil //nolint:nilerr + } + *n = tickTickNumber(parsed) + return nil +} + +// tickTickPriority parses the TickTick "Priority" column. TickTick exports the +// priority either as a plain number (0, 1, 3, 5) or, in some exports, prefixed +// with "p" (p1, p2, p3). We accept both forms and fall back to 0 (no priority) +// for anything we cannot parse, so a stray value never fails the whole import +// (go-vikunja/vikunja#2822). Vikunja's task priority is a free-form sortable +// integer, so the parsed value is carried over as-is. +type tickTickPriority int64 + +func (p *tickTickPriority) UnmarshalCSV(csv string) error { + csv = strings.TrimSpace(csv) + csv = strings.TrimPrefix(csv, "p") + csv = strings.TrimPrefix(csv, "P") + if csv == "" { + *p = 0 + return nil + } + parsed, err := strconv.ParseInt(csv, 10, 64) + if err != nil { + // Deliberately ignore the parse error and fall back to 0 so a single + // malformed value does not abort the whole import. + *p = 0 + return nil //nolint:nilerr + } + *p = tickTickPriority(parsed) + return nil +} + func (date *tickTickTime) UnmarshalCSV(csv string) (err error) { date.Time = time.Time{} if csv == "" { @@ -88,17 +141,21 @@ func (date *tickTickTime) UnmarshalCSV(csv string) (err error) { // appears before any of its children. Tasks without a parent come first. // The relative order of siblings / unrelated tasks is preserved. func sortParentsBeforeChildren(tasks []*tickTickTask) []*tickTickTask { - tasksByID := make(map[int64]*tickTickTask, len(tasks)) + tasksByID := make(map[tickTickNumber]*tickTickTask, len(tasks)) for _, t := range tasks { tasksByID[t.TaskID] = t } - placed := make(map[int64]bool, len(tasks)) + // placed is keyed by the task itself rather than by TaskID: malformed + // exports can collapse several taskIds to 0 (see tickTickNumber), and + // keying by ID would treat every zero-ID task after the first as already + // placed and silently drop it. + placed := make(map[*tickTickTask]bool, len(tasks)) result := make([]*tickTickTask, 0, len(tasks)) var place func(t *tickTickTask) place = func(t *tickTickTask) { - if placed[t.TaskID] { + if placed[t] { return } // If this task has a parent that we know about, place the parent first. @@ -107,7 +164,7 @@ func sortParentsBeforeChildren(tasks []*tickTickTask) []*tickTickTask { place(parent) } } - placed[t.TaskID] = true + placed[t] = true result = append(result, t) } @@ -161,7 +218,7 @@ func convertTickTickToVikunja(tasks []*tickTickTask) (result []*models.ProjectWi task := &models.TaskWithComments{ Task: models.Task{ - ID: t.TaskID, + ID: int64(t.TaskID), Title: t.Title, Description: t.Content, StartDate: t.StartDate.Time, @@ -170,6 +227,7 @@ func convertTickTickToVikunja(tasks []*tickTickTask) (result []*models.ProjectWi Done: t.Status == "1" || t.Status == "2", DoneAt: t.CompletedTime.Time, Position: t.Order, + Priority: int64(t.Priority), Labels: labels, }, } @@ -185,7 +243,7 @@ func convertTickTickToVikunja(tasks []*tickTickTask) (result []*models.ProjectWi if t.ParentID != 0 { task.RelatedTasks = map[models.RelationKind][]*models.Task{ - models.RelationKindParenttask: {{ID: t.ParentID}}, + models.RelationKindParenttask: {{ID: int64(t.ParentID)}}, } } diff --git a/pkg/modules/migration/ticktick/ticktick_test.go b/pkg/modules/migration/ticktick/ticktick_test.go index 47ab622b5..64c60689d 100644 --- a/pkg/modules/migration/ticktick/ticktick_test.go +++ b/pkg/modules/migration/ticktick/ticktick_test.go @@ -131,7 +131,7 @@ func TestConvertTicktickTasksToVikunja(t *testing.T) { assert.Equal(t, models.RelatedTaskMap{ models.RelationKindParenttask: []*models.Task{ { - ID: tickTickTasks[1].ParentID, + ID: int64(tickTickTasks[1].ParentID), }, }, }, vikunjaTasks[1].Tasks[1].RelatedTasks) @@ -770,3 +770,102 @@ func TestEmptyLabelHandlingWithRealCSV(t *testing.T) { t.Logf("Successfully processed %d tasks with %d total labels, no empty labels created", len(tasks), totalLabels) }) } + +func TestTickTickPriorityParsing(t *testing.T) { + cases := []struct { + input string + expected int64 + }{ + {"", 0}, + {"0", 0}, + {"1", 1}, + {"3", 3}, + {"5", 5}, + {"p1", 1}, + {"P2", 2}, + {"p3", 3}, + {" p5 ", 5}, + {"garbage", 0}, + } + for _, c := range cases { + t.Run(c.input, func(t *testing.T) { + var p tickTickPriority + require.NoError(t, p.UnmarshalCSV(c.input)) + assert.Equal(t, tickTickPriority(c.expected), p) + }) + } +} + +// TestNonNumericNumberColumns ensures that exports containing non-numeric values +// in columns Vikunja parses as integers (Priority, taskId, parentId) do not fail +// the whole import. See go-vikunja/vikunja#2822. +func TestNonNumericNumberColumns(t *testing.T) { + file, err := os.Open("testdata_ticktick_invalid_numbers.csv") + require.NoError(t, err) + defer file.Close() + + stat, err := file.Stat() + require.NoError(t, err) + + lines, err := linesToSkipBeforeHeader(file, stat.Size()) + require.NoError(t, err) + + _, err = file.Seek(0, io.SeekStart) + require.NoError(t, err) + + dec, err := newLineSkipDecoder(file, lines) + require.NoError(t, err) + tasks := []*tickTickTask{} + err = gocsv.UnmarshalDecoder(dec, &tasks) + require.NoError(t, err, "non-numeric values in numeric columns should not fail the import") + require.Len(t, tasks, 2) + + // "p1" in the Priority column is parsed as priority 1 instead of crashing. + assert.Equal(t, tickTickPriority(1), tasks[0].Priority) + assert.Equal(t, tickTickNumber(1), tasks[0].TaskID) + + // Non-numeric taskId/parentId fall back to 0 as well. + assert.Equal(t, tickTickNumber(0), tasks[1].TaskID) + assert.Equal(t, tickTickNumber(0), tasks[1].ParentID) + + // And the tasks still convert to the Vikunja structure, carrying the parsed + // priority over to the resulting task. + for _, task := range tasks { + task.Tags = strings.Split(task.TagsList, ", ") + } + vikunjaTasks := convertTickTickToVikunja(tasks) + require.Greater(t, len(vikunjaTasks), 0) + + var priority int64 + for _, project := range vikunjaTasks { + for _, task := range project.Tasks { + if task.Title == "Task with non-numeric priority" { + priority = task.Priority + } + } + } + assert.Equal(t, int64(1), priority) +} + +// TestMultipleTasksWithMalformedIDsAreNotDropped guards against a regression +// where collapsing several unparseable taskIds to 0 caused all but the first +// zero-ID task to be silently dropped by sortParentsBeforeChildren. +func TestMultipleTasksWithMalformedIDsAreNotDropped(t *testing.T) { + tasks := []*tickTickTask{ + {TaskID: 0, ProjectName: "Project 1", Title: "First malformed"}, + {TaskID: 0, ProjectName: "Project 1", Title: "Second malformed"}, + {TaskID: 0, ProjectName: "Project 1", Title: "Third malformed"}, + } + + sorted := sortParentsBeforeChildren(tasks) + require.Len(t, sorted, 3, "no task with a zero ID should be dropped") + + vikunjaTasks := convertTickTickToVikunja(tasks) + titles := []string{} + for _, project := range vikunjaTasks { + for _, task := range project.Tasks { + titles = append(titles, task.Title) + } + } + assert.ElementsMatch(t, []string{"First malformed", "Second malformed", "Third malformed"}, titles) +} diff --git a/pkg/notifications/database.go b/pkg/notifications/database.go index b007d8a54..c944e2f7b 100644 --- a/pkg/notifications/database.go +++ b/pkg/notifications/database.go @@ -28,22 +28,22 @@ import ( // DatabaseNotification represents a notification that was saved to the database type DatabaseNotification struct { // The unique, numeric id of this notification. - ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"notificationid"` + ID int64 `xorm:"bigint autoincr not null unique pk" json:"id" param:"notificationid" readOnly:"true" doc:"The unique, numeric id of this notification."` // The ID of the notifiable this notification is associated with. NotifiableID int64 `xorm:"bigint not null" json:"-"` // The actual content of the notification. - Notification interface{} `xorm:"json not null" json:"notification"` + Notification interface{} `xorm:"json not null" json:"notification" readOnly:"true" doc:"The notification payload. Shape depends on the notification's name."` // The name of the notification - Name string `xorm:"varchar(250) index not null" json:"name"` + Name string `xorm:"varchar(250) index not null" json:"name" readOnly:"true" doc:"The name identifying the kind of notification."` // The thing the notification is about. Used to check if a notification for this thing already happened or not. SubjectID int64 `xorm:"bigint null" json:"-"` // When this notification is marked as read, this will be updated with the current timestamp. - ReadAt time.Time `xorm:"datetime null" json:"read_at"` + ReadAt time.Time `xorm:"datetime null" json:"read_at" readOnly:"true" doc:"When the notification was marked read; zero value while unread. Set via the read flag, not written directly."` // A timestamp when this notification was created. You cannot change this value. - Created time.Time `xorm:"created not null" json:"created"` + Created time.Time `xorm:"created not null" json:"created" readOnly:"true" doc:"A timestamp when this notification was created. You cannot change this value."` } // AfterInsert is called by XORM after the row is inserted. For transactional diff --git a/pkg/routes/api/v1/avatar.go b/pkg/routes/api/v1/avatar.go index d98b9dc32..a80719e72 100644 --- a/pkg/routes/api/v1/avatar.go +++ b/pkg/routes/api/v1/avatar.go @@ -17,22 +17,16 @@ package v1 import ( - "code.vikunja.io/api/pkg/config" "code.vikunja.io/api/pkg/db" "code.vikunja.io/api/pkg/log" "code.vikunja.io/api/pkg/models" "code.vikunja.io/api/pkg/modules/avatar" - "code.vikunja.io/api/pkg/modules/avatar/botmarble" - "code.vikunja.io/api/pkg/modules/avatar/empty" - "code.vikunja.io/api/pkg/modules/avatar/upload" "code.vikunja.io/api/pkg/user" - "io" + "errors" "net/http" "strconv" - "strings" - "github.com/gabriel-vasile/mimetype" "github.com/labstack/echo/v5" ) @@ -54,42 +48,19 @@ func GetAvatar(c *echo.Context) error { s := db.NewSession() defer s.Close() - // Get the user - u, err := user.GetUserWithEmail(s, &user.User{Username: username}) - if err != nil && !user.IsErrUserDoesNotExist(err) && !user.IsErrUserStatusError(err) { - log.Errorf("Error getting user for avatar: %v", err) - return err - } - - found := err == nil || user.IsErrUserStatusError(err) - - avatarProvider := avatar.GetProvider(u) - - if !found { - avatarProvider = &empty.Provider{} - } - - if found && u.IsBot() { - avatarProvider = &botmarble.Provider{} - } - size := c.QueryParam("size") var sizeInt int64 = 250 // Default size of 250 if size != "" { + var err error sizeInt, err = strconv.ParseInt(size, 10, 64) if err != nil { log.Errorf("Error parsing size: %v", err) return models.ErrInvalidModel{Message: "Invalid size parameter"} } } - if sizeInt > config.ServiceMaxAvatarSize.GetInt64() { - sizeInt = config.ServiceMaxAvatarSize.GetInt64() - } - // Get the avatar - a, mimeType, err := avatarProvider.GetAvatar(u, sizeInt) + a, mimeType, err := avatar.GetAvatarForUsername(s, username, sizeInt) if err != nil { - log.Errorf("Error getting avatar for user %d: %v", u.ID, err) return err } @@ -137,21 +108,11 @@ func UploadAvatar(c *echo.Context) (err error) { } defer src.Close() - // Validate we're dealing with an image - mime, err := mimetype.DetectReader(src) - if err != nil { - _ = s.Rollback() - return err - } - if !strings.HasPrefix(mime.String(), "image") { - return c.JSON(http.StatusBadRequest, models.Message{Message: "Uploaded file is no image."}) - } - _, _ = src.Seek(0, io.SeekStart) - - u.AvatarProvider = "upload" - err = upload.StoreAvatarFile(s, u, src) - if err != nil { + if err := avatar.StoreUploadedAvatar(s, u, src); err != nil { _ = s.Rollback() + if errors.Is(err, avatar.ErrNotAnImage) { + return c.JSON(http.StatusBadRequest, models.Message{Message: "Uploaded file is no image."}) + } return err } @@ -160,7 +121,5 @@ func UploadAvatar(c *echo.Context) (err error) { return err } - avatar.FlushAllCaches(u) - return c.JSON(http.StatusOK, models.Message{Message: "Avatar was uploaded successfully."}) } diff --git a/pkg/routes/api/v1/info.go b/pkg/routes/api/v1/info.go index 0f8ded367..0e0a64ff2 100644 --- a/pkg/routes/api/v1/info.go +++ b/pkg/routes/api/v1/info.go @@ -55,6 +55,7 @@ type vikunjaInfos struct { DemoModeEnabled bool `json:"demo_mode_enabled"` WebhooksEnabled bool `json:"webhooks_enabled"` PublicTeamsEnabled bool `json:"public_teams_enabled"` + AllowIconChanges bool `json:"allow_icon_changes"` EnabledProFeatures []license.Feature `json:"enabled_pro_features"` } @@ -107,6 +108,7 @@ func Info(c *echo.Context) error { DemoModeEnabled: config.ServiceDemoMode.GetBool(), WebhooksEnabled: config.WebhooksEnabled.GetBool(), PublicTeamsEnabled: config.ServiceEnablePublicTeams.GetBool(), + AllowIconChanges: config.ServiceAllowIconChanges.GetBool(), EnabledProFeatures: license.EnabledProFeatures(), AvailableMigrators: []string{ (&vikunja_file.FileMigrator{}).Name(), diff --git a/pkg/routes/api/v1/user_register.go b/pkg/routes/api/v1/user_register.go index 96a9c02d9..9db52c88a 100644 --- a/pkg/routes/api/v1/user_register.go +++ b/pkg/routes/api/v1/user_register.go @@ -22,6 +22,8 @@ import ( "code.vikunja.io/api/pkg/config" "code.vikunja.io/api/pkg/db" + "code.vikunja.io/api/pkg/log" + "code.vikunja.io/api/pkg/metrics" "code.vikunja.io/api/pkg/models" "code.vikunja.io/api/pkg/user" @@ -85,5 +87,13 @@ func RegisterUser(c *echo.Context) error { return err } + // Bust the cached user count so the new registration shows up in metrics + // immediately instead of after the regular cache expiry. + if config.MetricsEnabled.GetBool() { + if err := metrics.InvalidateCount(metrics.UserCountKey); err != nil { + log.Errorf("Could not invalidate user count metric: %s", err) + } + } + return c.JSON(http.StatusOK, newUser) } diff --git a/pkg/routes/api/v2/admin_projects.go b/pkg/routes/api/v2/admin_projects.go new file mode 100644 index 000000000..2203ab01d --- /dev/null +++ b/pkg/routes/api/v2/admin_projects.go @@ -0,0 +1,64 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "fmt" + "net/http" + + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" +) + +type adminProjectListBody struct { + Body Paginated[*models.Project] +} + +// Permissions are enforced by the gateV2AdminRoutes path middleware, not per-handler. +func RegisterAdminProjectRoutes(api huma.API) { + tags := []string{"admin"} + + Register(api, huma.Operation{ + OperationID: "admin-projects-list", + Summary: "List all projects (admin)", + Description: "Returns every project on the instance, including archived ones and projects the caller does not own. Restricted to instance admins on a licensed instance; unlicensed or non-admin callers get a 404, making the endpoint indistinguishable from one that is not registered.", + Method: http.MethodGet, + Path: "/admin/projects", + Tags: tags, + }, adminProjectsList) +} + +func init() { AddRouteRegistrar(RegisterAdminProjectRoutes) } + +func adminProjectsList(ctx context.Context, in *ListParams) (*adminProjectListBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + result, _, total, err := handler.DoReadAll(ctx, &models.AdminProjectList{}, a, in.Q, in.Page, in.PerPage) + if err != nil { + return nil, translateDomainError(err) + } + items, ok := result.([]*models.Project) + if !ok { + return nil, fmt.Errorf("AdminProjectList.ReadAll returned unexpected type %T (expected []*models.Project)", result) + } + return &adminProjectListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil +} diff --git a/pkg/routes/api/v2/api_tokens.go b/pkg/routes/api/v2/api_tokens.go new file mode 100644 index 000000000..9a70f360d --- /dev/null +++ b/pkg/routes/api/v2/api_tokens.go @@ -0,0 +1,110 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "fmt" + "net/http" + + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" +) + +type apiTokenListBody struct { + Body Paginated[*models.APIToken] +} + +func RegisterAPITokenRoutes(api huma.API) { + tags := []string{"tokens"} + + Register(api, huma.Operation{ + OperationID: "tokens-list", + Summary: "List api tokens", + Description: "Returns the api tokens owned by the authenticated user. Pass owner_id to list a bot's tokens instead — only bots owned by the caller are allowed.", + Method: http.MethodGet, + Path: "/tokens", + Tags: tags, + }, apiTokensList) + + Register(api, huma.Operation{ + OperationID: "tokens-create", + Summary: "Create an api token", + Description: "Creates an api token for the authenticated user, or for a bot they own when owner_id is set. The cleartext token is returned once in this response and is never readable again.", + Method: http.MethodPost, + Path: "/tokens", + Tags: tags, + }, apiTokensCreate) + + Register(api, huma.Operation{ + OperationID: "tokens-delete", + Summary: "Delete an api token", + Description: "Deletes an api token. The caller may delete their own tokens and tokens belonging to bots they own.", + Method: http.MethodDelete, + Path: "/tokens/{id}", + Tags: tags, + }, apiTokensDelete) +} + +func init() { AddRouteRegistrar(RegisterAPITokenRoutes) } + +func apiTokensList(ctx context.Context, in *struct { + ListParams + OwnerID int64 `query:"owner_id" doc:"List tokens of this owner instead of the caller. Must be a bot owned by the authenticated user."` +}) (*apiTokenListBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + result, _, total, err := handler.DoReadAll(ctx, &models.APIToken{OwnerID: in.OwnerID}, a, in.Q, in.Page, in.PerPage) + if err != nil { + return nil, translateDomainError(err) + } + items, ok := result.([]*models.APIToken) + if !ok { + return nil, fmt.Errorf("tokens.ReadAll returned unexpected type %T (expected []*models.APIToken)", result) + } + return &apiTokenListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil +} + +func apiTokensCreate(ctx context.Context, in *struct { + Body models.APIToken +}) (*singleBody[models.APIToken], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoCreate(ctx, &in.Body, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.APIToken]{Body: &in.Body}, nil +} + +func apiTokensDelete(ctx context.Context, in *struct { + ID int64 `path:"id"` +}) (*emptyBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoDelete(ctx, &models.APIToken{ID: in.ID}, a); err != nil { + return nil, translateDomainError(err) + } + return &emptyBody{}, nil +} diff --git a/pkg/routes/api/v2/avatar.go b/pkg/routes/api/v2/avatar.go new file mode 100644 index 000000000..a26c68e56 --- /dev/null +++ b/pkg/routes/api/v2/avatar.go @@ -0,0 +1,89 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "net/http" + + "code.vikunja.io/api/pkg/db" + "code.vikunja.io/api/pkg/modules/avatar" + + "github.com/danielgtaylor/huma/v2" +) + +// avatarResponse carries raw image bytes plus the runtime Content-Type. Huma writes +// the []byte Body straight to the wire; the header:"Content-Type" field overrides +// content negotiation so the provider's actual mime type reaches the client. +type avatarResponse struct { + ContentType string `header:"Content-Type"` + Body []byte +} + +type avatarInput struct { + Username string `path:"username" doc:"The username of the user whose avatar to fetch."` + Size int64 `query:"size" default:"250" minimum:"1" doc:"Desired avatar edge length in pixels. Clamped to the server's configured maximum if larger; providers that render fixed-size images may ignore it."` +} + +// RegisterAvatarRoutes wires the avatar binary endpoint onto the Huma API. +func RegisterAvatarRoutes(api huma.API) { + Register(api, huma.Operation{ + OperationID: "avatar-get", + Summary: "Get a user's avatar", + Description: "Returns the user's avatar as raw image bytes. The Content-Type is chosen at " + + "runtime by the user's avatar provider (gravatar, initials, marble, an uploaded image, " + + "or the default placeholder). An unknown username is not an error — the default " + + "placeholder avatar is returned. Authenticated like every other endpoint.", + Method: http.MethodGet, + Path: "/avatar/{username}", + Tags: []string{"user"}, + // Spell out the binary response; a bare []byte Body would otherwise be + // modeled as a base64 JSON string instead of binary image data. + Responses: map[string]*huma.Response{ + "200": { + Description: "The avatar image bytes. The Content-Type header carries the actual image type.", + Content: map[string]*huma.MediaType{ + "application/octet-stream": { + Schema: &huma.Schema{Type: huma.TypeString, Format: "binary"}, + }, + }, + }, + }, + }, avatarGet) +} + +func init() { AddRouteRegistrar(RegisterAvatarRoutes) } + +func avatarGet(ctx context.Context, in *avatarInput) (*avatarResponse, error) { + // Authenticated but no per-user check — any authenticated caller may view any + // avatar (matching v1); authFromCtx just surfaces a clean 401 if auth is missing. + if _, err := authFromCtx(ctx); err != nil { + return nil, err + } + + s := db.NewSession() + defer s.Close() + + // Avatar resolution (user lookup, provider selection, size clamping) is + // shared with the v1 handler; only the transport differs. + a, mimeType, err := avatar.GetAvatarForUsername(s, in.Username, in.Size) + if err != nil { + return nil, translateDomainError(err) + } + + return &avatarResponse{ContentType: mimeType, Body: a}, nil +} diff --git a/pkg/routes/api/v2/avatar_upload.go b/pkg/routes/api/v2/avatar_upload.go new file mode 100644 index 000000000..e8ca6e024 --- /dev/null +++ b/pkg/routes/api/v2/avatar_upload.go @@ -0,0 +1,102 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "errors" + "net/http" + + "code.vikunja.io/api/pkg/config" + "code.vikunja.io/api/pkg/db" + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/modules/avatar" + "code.vikunja.io/api/pkg/user" + + "github.com/danielgtaylor/huma/v2" +) + +type avatarUploadInput struct { + // Allow-list mirrors the image formats avatar.StoreUploadedAvatar can actually decode (the decoders registered process-wide by the imaging package: png, jpeg, gif, tiff, bmp); octet-stream covers programmatic clients. Huma's MimeTypeValidator rejects the part pre-handler, so anything advertised here must also pass the byte-level image check in avatar.StoreUploadedAvatar. Formats without a registered decoder (e.g. svg, webp) are intentionally excluded. + RawBody huma.MultipartFormFiles[struct { + Avatar huma.FormFile `form:"avatar" contentType:"image/png,image/jpeg,image/gif,image/tiff,image/bmp,application/octet-stream" required:"true" doc:"The avatar image to upload. Must be a decodable raster image (PNG, JPEG, GIF, TIFF or BMP); it is resized server-side and re-encoded as PNG."` + }] +} + +type avatarUploadBody struct { + Body *models.Message +} + +func RegisterAvatarUploadRoutes(api huma.API) { + tags := []string{"user"} + + Register(api, huma.Operation{ + OperationID: "user-avatar-upload", + Summary: "Upload your avatar", + Description: "Uploads an image as the authenticated user's avatar and switches their avatar provider to \"upload\". The image is validated to be an image, resized server-side, and stored as PNG. Replaces any previously uploaded avatar (idempotent replace, hence PUT).", + Method: http.MethodPut, + Path: "/user/settings/avatar", + Tags: tags, + // +2 MB mirrors Echo's global BodyLimit overhead so a max-sized file isn't rejected by multipart boundary/header bytes. + // #nosec G115 - configured value won't exceed int64 max in practice. + MaxBodyBytes: (int64(config.GetMaxFileSizeInMBytes()) + 2) * 1024 * 1024, + DefaultStatus: http.StatusOK, + }, avatarUpload) +} + +func init() { AddRouteRegistrar(RegisterAvatarUploadRoutes) } + +func avatarUpload(ctx context.Context, in *avatarUploadInput) (*avatarUploadBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + + // Only real users have avatars; a link share cannot upload one. + authUser, is := a.(*user.User) + if !is { + return nil, huma.Error403Forbidden("only users can upload an avatar") + } + + s := db.NewSession() + defer s.Close() + + // Re-fetch the full user: the auth user from the JWT claims is partial. + u, err := user.GetUserByID(s, authUser.ID) + if err != nil { + _ = s.Rollback() + return nil, translateDomainError(err) + } + + src := in.RawBody.Data().Avatar + defer func() { _ = src.Close() }() + + if err := avatar.StoreUploadedAvatar(s, u, src); err != nil { + _ = s.Rollback() + if errors.Is(err, avatar.ErrNotAnImage) { + return nil, huma.Error400BadRequest("Uploaded file is no image.") + } + return nil, translateDomainError(err) + } + + if err := s.Commit(); err != nil { + _ = s.Rollback() + return nil, translateDomainError(err) + } + + return &avatarUploadBody{Body: &models.Message{Message: "Avatar was uploaded successfully."}}, nil +} diff --git a/pkg/routes/api/v2/bot_users.go b/pkg/routes/api/v2/bot_users.go new file mode 100644 index 000000000..0af344019 --- /dev/null +++ b/pkg/routes/api/v2/bot_users.go @@ -0,0 +1,169 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "fmt" + "net/http" + + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" + "github.com/danielgtaylor/huma/v2/conditional" +) + +type botUserListBody struct { + Body Paginated[*models.BotUser] +} + +// RegisterBotUserRoutes wires bot-user CRUD onto the Huma API. +func RegisterBotUserRoutes(api huma.API) { + tags := []string{"bots"} + + Register(api, huma.Operation{ + OperationID: "bots-list", + Summary: "List bot users", + Description: "Returns only the bot users owned by the authenticated user. Bots owned by anyone else are never listed.", + Method: http.MethodGet, + Path: "/user/bots", + Tags: tags, + }, botUsersList) + + Register(api, huma.Operation{ + OperationID: "bots-read", + Summary: "Get a bot user", + Description: "Returns a single bot user. Only the owner may read it; otherwise the request is refused. Sends an ETag; pass it as If-None-Match on a later read to get a 304 Not Modified.", + Method: http.MethodGet, + Path: "/user/bots/{bot}", + Tags: tags, + }, botUsersRead) + + Register(api, huma.Operation{ + OperationID: "bots-create", + Summary: "Create a bot user", + Description: "Creates a bot user owned by the authenticated user. The username must start with the 'bot-' prefix. Bots have no email or password and cannot create further bots. Requires a real user account — link shares cannot create bots.", + Method: http.MethodPost, + Path: "/user/bots", + Tags: tags, + }, botUsersCreate) + + Register(api, huma.Operation{ + OperationID: "bots-update", + Summary: "Update a bot user", + Description: "Updates an owned bot user's name, status, and username. Only the owner may update it. Use PATCH for a partial update.", + Method: http.MethodPut, + Path: "/user/bots/{bot}", + Tags: tags, + }, botUsersUpdate) + + Register(api, huma.Operation{ + OperationID: "bots-delete", + Summary: "Delete a bot user", + Description: "Permanently deletes an owned bot user and all data associated with it. Only the owner may delete it.", + Method: http.MethodDelete, + Path: "/user/bots/{bot}", + Tags: tags, + }, botUsersDelete) +} + +func init() { AddRouteRegistrar(RegisterBotUserRoutes) } + +func botUsersList(ctx context.Context, in *ListParams) (*botUserListBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + result, _, total, err := handler.DoReadAll(ctx, &models.BotUser{}, a, in.Q, in.Page, in.PerPage) + if err != nil { + return nil, translateDomainError(err) + } + items, ok := result.([]*models.BotUser) + if !ok { + return nil, fmt.Errorf("bots.ReadAll returned unexpected type %T (expected []*models.BotUser)", result) + } + return &botUserListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil +} + +type botUserReadBody struct { + models.BotUser + MaxPermission models.Permission `json:"max_permission" readOnly:"true" doc:"The maximum permission the requesting user has on this bot user (0=read, 1=read/write, 2=admin)."` +} + +func botUsersRead(ctx context.Context, in *struct { + ID int64 `path:"bot"` + conditional.Params +}) (*singleReadBody[botUserReadBody], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + bot := &models.BotUser{} + bot.ID = in.ID + maxPermission, err := handler.DoReadOne(ctx, bot, a) + if err != nil { + return nil, translateDomainError(err) + } + body := &botUserReadBody{BotUser: *bot, MaxPermission: models.Permission(maxPermission)} + return conditionalReadResponse(&in.Params, body, bot.Updated, maxPermission) +} + +func botUsersCreate(ctx context.Context, in *struct { + Body models.BotUser +}) (*singleBody[models.BotUser], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoCreate(ctx, &in.Body, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.BotUser]{Body: &in.Body}, nil +} + +// Body matches the read shape so AutoPatch's GET→PUT echo of max_permission validates. +func botUsersUpdate(ctx context.Context, in *struct { + ID int64 `path:"bot"` + Body botUserReadBody +}) (*singleBody[models.BotUser], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + bot := &in.Body.BotUser + bot.ID = in.ID // URL wins over body + if err := handler.DoUpdate(ctx, bot, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.BotUser]{Body: bot}, nil +} + +func botUsersDelete(ctx context.Context, in *struct { + ID int64 `path:"bot"` +}) (*emptyBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + bot := &models.BotUser{} + bot.ID = in.ID + if err := handler.DoDelete(ctx, bot, a); err != nil { + return nil, translateDomainError(err) + } + return &emptyBody{}, nil +} diff --git a/pkg/user/listeners.go b/pkg/routes/api/v2/docs.go similarity index 53% rename from pkg/user/listeners.go rename to pkg/routes/api/v2/docs.go index 7fdbe61a3..c2f15e53c 100644 --- a/pkg/user/listeners.go +++ b/pkg/routes/api/v2/docs.go @@ -14,32 +14,27 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -package user +package apiv2 import ( - "code.vikunja.io/api/pkg/events" - "code.vikunja.io/api/pkg/metrics" - "code.vikunja.io/api/pkg/modules/keyvalue" - "github.com/ThreeDotsLabs/watermill/message" + _ "embed" + "net/http" + + "github.com/labstack/echo/v5" ) -func RegisterListeners() { - events.RegisterListener((&CreatedEvent{}).Name(), &IncreaseUserCounter{}) +//go:embed scalar/scalar.html +var scalarHTML string + +//go:embed scalar/scalar.standalone.js +var scalarJS []byte + +// ScalarUI serves the Scalar API reference HTML; assets ship locally to avoid a CDN dependency. +func ScalarUI(c *echo.Context) error { + return c.HTML(http.StatusOK, scalarHTML) } -/////// -// User Events - -// IncreaseUserCounter represents a listener -type IncreaseUserCounter struct { -} - -// Name defines the name for the IncreaseUserCounter listener -func (s *IncreaseUserCounter) Name() string { - return "increase.user.counter" -} - -// Handle is executed when the event IncreaseUserCounter listens on is fired -func (s *IncreaseUserCounter) Handle(_ *message.Message) (err error) { - return keyvalue.IncrBy(metrics.UserCountKey, 1) +// ScalarJS serves the embedded Scalar standalone JS bundle. +func ScalarJS(c *echo.Context) error { + return c.Blob(http.StatusOK, echo.MIMEApplicationJavaScript, scalarJS) } diff --git a/pkg/routes/api/v2/errors.go b/pkg/routes/api/v2/errors.go new file mode 100644 index 000000000..3292b2e2b --- /dev/null +++ b/pkg/routes/api/v2/errors.go @@ -0,0 +1,153 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "errors" + "net/http" + "strings" + + "code.vikunja.io/api/pkg/log" + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/modules/auth" + "code.vikunja.io/api/pkg/web" + + "github.com/danielgtaylor/huma/v2" +) + +// authFromCtx retrieves the authed user from a Huma handler context, +// surfacing lookup failures as 401 instead of falling through to 500. +func authFromCtx(ctx context.Context) (web.Auth, error) { + a, err := auth.GetAuthFromContext(ctx) + if err != nil { + // The underlying error can carry internal adapter/config detail + // (e.g. a missing Echo context — a programming error, since the + // token middleware authenticates before the handler runs). Log it + // and return a generic 401 so nothing internal leaks to clients. + log.Errorf("v2: could not resolve auth from context: %s", err) + return nil, huma.Error401Unauthorized("invalid or missing authentication") + } + return a, nil +} + +// translateDomainError maps a Vikunja domain error (web.HTTPErrorProcessor) +// onto Huma's status-error type so the response carries the right code +// and an RFC 9457 body. Errors without HTTP semantics fall through, which +// Huma treats as 500. +func translateDomainError(err error) error { + if err == nil { + return nil + } + var hp web.HTTPErrorProcessor + if errors.As(err, &hp) { + details := hp.HTTPError() + msg := details.Message + if msg == "" { + msg = err.Error() + } + se := huma.NewError(details.HTTPCode, msg) + // Preserve Vikunja's numeric domain error code (the value the + // error docs key off) on the problem+json body. v1 exposes it as + // `code`; without this v2 clients always read 0. + if vm, ok := se.(*vikunjaErrorModel); ok { + vm.Code = details.Code + } + return se + } + // v2 maps validation failures to 422 (not v1's 412) so a govalidator failure + // looks identical to Huma's own schema validation. ValidationHTTPError isn't an + // HTTPErrorProcessor (the embedded field shadows the method), so it lands here. + var ve models.ValidationHTTPError + if errors.As(err, &ve) { + se := huma.NewError(http.StatusUnprocessableEntity, ve.Error(), invalidFieldDetails(ve.InvalidFields)...) + if vm, ok := se.(*vikunjaErrorModel); ok { + vm.Code = ve.GetCode() + } + return se + } + return err +} + +// invalidFieldDetails turns ValidationHTTPError's invalid_fields into RFC 9457 +// error details. Entries come in two shapes — govalidator's "field: message" and +// model call sites' bare field names — and both must yield a Location. +func invalidFieldDetails(fields []string) []error { + details := make([]error, 0, len(fields)) + for _, f := range fields { + name, msg, ok := strings.Cut(f, ": ") + if !ok { + msg = "Invalid data" + } + details = append(details, &huma.ErrorDetail{Location: "body." + name, Message: msg}) + } + return details +} + +// vikunjaErrorModel extends Huma's RFC 9457 body with Vikunja's numeric +// domain error code, preserving the v1 error-code contract on v2. Wired in +// as the global error type via the huma.NewError override in init(). +type vikunjaErrorModel struct { + huma.ErrorModel + Code int `json:"code,omitempty" readOnly:"true" doc:"Vikunja numeric error code; see https://vikunja.io/docs/errors/"` +} + +func init() { + // Replace Huma's default error constructor so both the generated + // OpenAPI schema and runtime responses use vikunjaErrorModel. Huma + // derives the error-response schema from NewError(0, "") at register + // time and routes runtime errors through the same constructor, so the + // `code` field stays consistent between spec and wire. + huma.NewError = func(status int, msg string, errs ...error) huma.StatusError { + details := make([]*huma.ErrorDetail, 0, len(errs)) + for _, e := range errs { + if e == nil { + continue + } + if d, ok := e.(huma.ErrorDetailer); ok { + details = append(details, d.ErrorDetail()) + } else { + details = append(details, &huma.ErrorDetail{Message: e.Error()}) + } + } + return &vikunjaErrorModel{ErrorModel: huma.ErrorModel{ + Status: status, + Title: http.StatusText(status), + Detail: msg, + Errors: details, + }} + } + + // Strip internal detail from server errors. Huma's handler-error path + // wraps a raw error as NewErrorWithContext(ctx, 500, "unexpected error + // occurred", err) and — because the humaecho5 adapter writes the + // response itself — bypasses Vikunja's CreateHTTPErrorHandler, which for + // v1 returns a generic 500 with no detail. Without this override a raw + // DB/driver error (SQL, table, column names) would leak into the + // problem+json `errors[]`. Log the real cause, return a generic body. + huma.NewErrorWithContext = func(_ huma.Context, status int, msg string, errs ...error) huma.StatusError { + if status >= 500 { + for _, e := range errs { + if e != nil { + log.Errorf("v2: internal server error: %s", e) + } + } + errs = nil + } + return huma.NewError(status, msg, errs...) + } +} diff --git a/pkg/routes/api/v2/errors_test.go b/pkg/routes/api/v2/errors_test.go new file mode 100644 index 000000000..def0c5c53 --- /dev/null +++ b/pkg/routes/api/v2/errors_test.go @@ -0,0 +1,61 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "errors" + "os" + "testing" + + "code.vikunja.io/api/pkg/log" + + "github.com/danielgtaylor/huma/v2" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestMain(m *testing.M) { + // The NewErrorWithContext override logs server errors; initialise a + // logger so that path doesn't nil-panic in the bare test binary. + log.InitLogger() + os.Exit(m.Run()) +} + +// TestNewErrorWithContext_StripsServerErrorDetail guards against leaking +// internal error detail (raw DB/driver messages, etc.) in v2 5xx responses. +// Huma's handler-error path funnels raw errors through NewErrorWithContext +// at status 500; the override must drop the detail there while keeping it +// for client (4xx) errors. Mirrors v1's generic-500 behaviour. +func TestNewErrorWithContext_StripsServerErrorDetail(t *testing.T) { + secret := errors.New(`pq: relation "labels" does not exist`) + + t.Run("500 drops the wrapped detail", func(t *testing.T) { + se := huma.NewErrorWithContext(nil, 500, "unexpected error occurred", secret) + vm, ok := se.(*vikunjaErrorModel) + require.True(t, ok) + assert.Empty(t, vm.Errors, "server errors must not expose internal detail") + assert.Equal(t, "unexpected error occurred", vm.Detail) + }) + + t.Run("4xx keeps the detail", func(t *testing.T) { + se := huma.NewErrorWithContext(nil, 422, "validation failed", secret) + vm, ok := se.(*vikunjaErrorModel) + require.True(t, ok) + require.Len(t, vm.Errors, 1, "client errors keep their detail") + assert.Equal(t, secret.Error(), vm.Errors[0].Message) + }) +} diff --git a/pkg/routes/api/v2/huma.go b/pkg/routes/api/v2/huma.go new file mode 100644 index 000000000..7ad6f18f6 --- /dev/null +++ b/pkg/routes/api/v2/huma.go @@ -0,0 +1,129 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Package apiv2 wires Huma onto the /api/v2 Echo group. +package apiv2 + +import ( + "context" + "net/http" + "strings" + + "code.vikunja.io/api/pkg/config" + "code.vikunja.io/api/pkg/modules/humaecho5" + "code.vikunja.io/api/pkg/version" + + "github.com/danielgtaylor/huma/v2" + "github.com/danielgtaylor/huma/v2/autopatch" + "github.com/labstack/echo/v5" +) + +// GroupPrefix is the URL prefix the Echo group for /api/v2 is mounted at. +const GroupPrefix = "/api/v2" + +// NewAPI mounts Huma on the /api/v2 group. Per-resource Register* calls +// live in sibling files. +func NewAPI(e *echo.Echo, g *echo.Group) huma.API { + cfg := huma.DefaultConfig("Vikunja API", version.Version) + cfg.OpenAPIPath = "/openapi" + // Huma's built-in docs would load from unpkg.com — we serve Scalar locally instead. + cfg.DocsPath = "" + // Real presence/format rules live in `valid:` tags, enforced by govalidator in + // the Register wrapper; leave the schema permissive so partial updates match v1. + cfg.FieldsOptionalByDefault = true + + api := humaecho5.NewWithGroup(e, g, GroupPrefix, cfg) + oapi := api.OpenAPI() + if oapi.Components.SecuritySchemes == nil { + oapi.Components.SecuritySchemes = map[string]*huma.SecurityScheme{} + } + // v1 conflated JWTs and tk_-prefixed API tokens under JWTKeyAuth; v2 + // declares them separately so SDK generators and /api/v2/docs distinguish them. + oapi.Components.SecuritySchemes["JWTKeyAuth"] = &huma.SecurityScheme{ + Type: "http", + Scheme: "bearer", + BearerFormat: "JWT", + Description: "User session JWT issued via /api/v1/login.", + } + oapi.Components.SecuritySchemes["APITokenAuth"] = &huma.SecurityScheme{ + Type: "http", + Scheme: "bearer", + Description: "Vikunja API token (tk_ prefix) with scoped permissions. Created via /api/v1/tokens.", + } + // Applied globally; public endpoints (spec, docs) opt out with an empty Security list. + oapi.Security = []map[string][]string{ + {"JWTKeyAuth": {}}, + {"APITokenAuth": {}}, + } + // The relative entry MUST stay at index 0. Huma's SchemaLinkTransformer + // reads Servers[0] in three places (getAPIPrefix, addSchemaField, the + // runtime Transform fallback). With a path-bearing absolute URL at + // index 0, the runtime fallback concatenates that URL onto a ref that + // already includes /api/v2, producing a double-prefixed $schema link + // like https://host/api/v2/api/v2/schemas/Label.json. A relative URL + // at index 0 keeps the prefix in the transformer's bookkeeping while + // the absolute URL at index 1 advertises the deployment URL to SDK + // generators and docs UIs. + servers := []*huma.Server{{URL: GroupPrefix}} + if publicURL := strings.TrimRight(config.ServicePublicURL.GetString(), "/"); publicURL != "" { + servers = append(servers, &huma.Server{URL: publicURL + GroupPrefix}) + } + oapi.Servers = servers + return api +} + +// Register wraps huma.Register with verb-based DefaultStatus: POST → 201, +// DELETE → 204. Anything else (including an explicit op.DefaultStatus) is untouched. +// +// It also runs govalidator before the handler — i.e. before handler.Do*'s +// permission check — so v2 validates-then-authorizes like v1. +func Register[I, O any](api huma.API, op huma.Operation, handler func(context.Context, *I) (*O, error)) { + if op.DefaultStatus == 0 { + switch op.Method { + case http.MethodPost: + op.DefaultStatus = http.StatusCreated + case http.MethodDelete: + op.DefaultStatus = http.StatusNoContent + } + } + wrapped := func(ctx context.Context, in *I) (*O, error) { + if err := validateInputBody(in); err != nil { + return nil, translateDomainError(err) + } + return handler(ctx, in) + } + huma.Register(api, op, wrapped) +} + +// EnableAutoPatch synthesises a PATCH for every resource that already +// registered GET + PUT. Must be called AFTER all Register* calls. +func EnableAutoPatch(api huma.API) { + autopatch.AutoPatch(api) + + // AutoPatch names each synthesised PATCH after the GET operation + // ("Patch labels-read"), which reads poorly in the docs nav. Rewrite + // the summary from the sibling PUT so it reads like "Update a label + // (partial)". Only touch summaries AutoPatch generated (the "Patch " + // prefix) so a hand-registered PATCH is left alone. + for _, item := range api.OpenAPI().Paths { + if item == nil || item.Patch == nil || item.Put == nil { + continue + } + if item.Put.Summary != "" && strings.HasPrefix(item.Patch.Summary, "Patch ") { + item.Patch.Summary = item.Put.Summary + " (partial)" + } + } +} diff --git a/pkg/routes/api/v2/label_tasks.go b/pkg/routes/api/v2/label_tasks.go new file mode 100644 index 000000000..1ea47800a --- /dev/null +++ b/pkg/routes/api/v2/label_tasks.go @@ -0,0 +1,119 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "fmt" + "net/http" + + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" +) + +// Element type is *models.LabelWithTaskID because that's what +// models.LabelTask.ReadAll returns; TaskID is json:"-", so the wire shape +// matches plain Label. +type labelTaskListBody struct { + Body Paginated[*models.LabelWithTaskID] +} + +// RegisterLabelTaskRoutes wires the nested labels-on-a-task routes onto the +// Huma API: list, attach and detach. There is no read-one or update — a +// label-task is just a relation, so it has no max_permission. +func RegisterLabelTaskRoutes(api huma.API) { + tags := []string{"labels"} + + Register(api, huma.Operation{ + OperationID: "task-labels-list", + Summary: "List the labels on a task", + Description: "Returns the labels attached to the given task, paginated. Requires read access to the task.", + Method: http.MethodGet, + Path: "/tasks/{projecttask}/labels", + Tags: tags, + }, labelTasksList) + + Register(api, huma.Operation{ + OperationID: "task-labels-create", + Summary: "Add a label to a task", + Description: "Attaches an existing label to the given task. Requires write access to the task and access to the label. Fails if the label is already on the task.", + Method: http.MethodPost, + Path: "/tasks/{projecttask}/labels", + Tags: tags, + }, labelTasksCreate) + + Register(api, huma.Operation{ + OperationID: "task-labels-delete", + Summary: "Remove a label from a task", + Description: "Detaches a label from the given task. Requires write access to the task.", + Method: http.MethodDelete, + Path: "/tasks/{projecttask}/labels/{label}", + Tags: tags, + }, labelTasksDelete) +} + +func init() { AddRouteRegistrar(RegisterLabelTaskRoutes) } + +func labelTasksList(ctx context.Context, in *struct { + TaskID int64 `path:"projecttask"` + ListParams +}) (*labelTaskListBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + result, _, total, err := handler.DoReadAll(ctx, &models.LabelTask{TaskID: in.TaskID}, a, in.Q, in.Page, in.PerPage) + if err != nil { + return nil, translateDomainError(err) + } + items, ok := result.([]*models.LabelWithTaskID) + if !ok { + return nil, fmt.Errorf("labelTasks.ReadAll returned unexpected type %T (expected []*models.LabelWithTaskID)", result) + } + return &labelTaskListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil +} + +func labelTasksCreate(ctx context.Context, in *struct { + TaskID int64 `path:"projecttask"` + Body models.LabelTask +}) (*singleBody[models.LabelTask], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + in.Body.TaskID = in.TaskID // parent from the path, not the body + if err := handler.DoCreate(ctx, &in.Body, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.LabelTask]{Body: &in.Body}, nil +} + +func labelTasksDelete(ctx context.Context, in *struct { + TaskID int64 `path:"projecttask"` + LabelID int64 `path:"label"` +}) (*emptyBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoDelete(ctx, &models.LabelTask{TaskID: in.TaskID, LabelID: in.LabelID}, a); err != nil { + return nil, translateDomainError(err) + } + return &emptyBody{}, nil +} diff --git a/pkg/routes/api/v2/labels.go b/pkg/routes/api/v2/labels.go new file mode 100644 index 000000000..a9576bc50 --- /dev/null +++ b/pkg/routes/api/v2/labels.go @@ -0,0 +1,169 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "fmt" + "net/http" + + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" + "github.com/danielgtaylor/huma/v2/conditional" +) + +// Element type is *models.LabelWithTaskID because that's what +// models.Label.ReadAll returns; TaskID is json:"-", so the wire shape +// matches plain Label. +type labelListBody struct { + Body Paginated[*models.LabelWithTaskID] +} + +// RegisterLabelRoutes wires Label CRUD onto the Huma API. +func RegisterLabelRoutes(api huma.API) { + tags := []string{"labels"} + + Register(api, huma.Operation{ + OperationID: "labels-list", + Summary: "List labels", + Description: "Returns the labels visible to the authenticated user — their own plus any used on tasks they can access. Not a global list.", + Method: http.MethodGet, + Path: "/labels", + Tags: tags, + }, labelsList) + + Register(api, huma.Operation{ + OperationID: "labels-read", + Summary: "Get a label", + Description: "Returns a single label. Sends an ETag; pass it as If-None-Match on a later read to get a 304 Not Modified.", + Method: http.MethodGet, + Path: "/labels/{id}", + Tags: tags, + }, labelsRead) + + Register(api, huma.Operation{ + OperationID: "labels-create", + Summary: "Create a label", + Description: "Creates a label; the authenticated user becomes its owner.", + Method: http.MethodPost, + Path: "/labels", + Tags: tags, + }, labelsCreate) + + Register(api, huma.Operation{ + OperationID: "labels-update", + Summary: "Update a label", + Description: "Replaces all of a label's fields — only the owner may update it. Use PATCH for a partial update.", + Method: http.MethodPut, + Path: "/labels/{id}", + Tags: tags, + }, labelsUpdate) + + Register(api, huma.Operation{ + OperationID: "labels-delete", + Summary: "Delete a label", + Description: "Deletes a label. Only the owner may delete it.", + Method: http.MethodDelete, + Path: "/labels/{id}", + Tags: tags, + }, labelsDelete) +} + +func init() { AddRouteRegistrar(RegisterLabelRoutes) } + +func labelsList(ctx context.Context, in *ListParams) (*labelListBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + result, _, total, err := handler.DoReadAll(ctx, &models.Label{}, a, in.Q, in.Page, in.PerPage) + if err != nil { + return nil, translateDomainError(err) + } + items, ok := result.([]*models.LabelWithTaskID) + if !ok { + return nil, fmt.Errorf("labels.ReadAll returned unexpected type %T (expected []*models.LabelWithTaskID)", result) + } + return &labelListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil +} + +type labelReadBody struct { + models.Label + MaxPermission models.Permission `json:"max_permission" readOnly:"true" doc:"The maximum permission the requesting user has on this label (0=read, 1=read/write, 2=admin)."` +} + +func labelsRead(ctx context.Context, in *struct { + ID int64 `path:"id"` + conditional.Params +}) (*singleReadBody[labelReadBody], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + label := &models.Label{ID: in.ID} + maxPermission, err := handler.DoReadOne(ctx, label, a) + if err != nil { + return nil, translateDomainError(err) + } + body := &labelReadBody{Label: *label, MaxPermission: models.Permission(maxPermission)} + return conditionalReadResponse(&in.Params, body, label.Updated, maxPermission) +} + +func labelsCreate(ctx context.Context, in *struct { + Body models.Label +}) (*singleBody[models.Label], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoCreate(ctx, &in.Body, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.Label]{Body: &in.Body}, nil +} + +// Body matches the read shape so AutoPatch's GET→PUT echo of max_permission validates. +func labelsUpdate(ctx context.Context, in *struct { + ID int64 `path:"id"` + Body labelReadBody +}) (*singleBody[models.Label], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + label := &in.Body.Label + label.ID = in.ID // URL wins over body + if err := handler.DoUpdate(ctx, label, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.Label]{Body: label}, nil +} + +func labelsDelete(ctx context.Context, in *struct { + ID int64 `path:"id"` +}) (*emptyBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoDelete(ctx, &models.Label{ID: in.ID}, a); err != nil { + return nil, translateDomainError(err) + } + return &emptyBody{}, nil +} diff --git a/pkg/routes/api/v2/link_sharing.go b/pkg/routes/api/v2/link_sharing.go new file mode 100644 index 000000000..c4234a141 --- /dev/null +++ b/pkg/routes/api/v2/link_sharing.go @@ -0,0 +1,160 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "fmt" + "net/http" + + "code.vikunja.io/api/pkg/config" + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" + "github.com/danielgtaylor/huma/v2/conditional" +) + +type linkShareListBody struct { + Body Paginated[*models.LinkSharing] +} + +// RegisterLinkSharingRoutes wires the nested LinkSharing routes onto the Huma +// API. There is no update operation — a share is created, read, listed or +// deleted, never modified in place. +// +// The feature gate is checked here, not in the central wiring: the registrar +// runs at RegisterAll time after the config has loaded, so a disabled instance +// registers no link-sharing routes at all. +func RegisterLinkSharingRoutes(api huma.API) { + if !config.ServiceEnableLinkSharing.GetBool() { + return + } + + tags := []string{"sharing"} + + Register(api, huma.Operation{ + OperationID: "shares-list", + Summary: "List the link shares of a project", + Description: "Returns the link shares of the given project, paginated. Only project admins may list them.", + Method: http.MethodGet, + Path: "/projects/{project}/shares", + Tags: tags, + }, linkSharesList) + + Register(api, huma.Operation{ + OperationID: "shares-read", + Summary: "Get a single link share of a project", + Description: "Returns one link share of a project. The share must belong to the project in the path. Sends an ETag; pass it as If-None-Match on a later read to get a 304 Not Modified.", + Method: http.MethodGet, + Path: "/projects/{project}/shares/{share}", + Tags: tags, + }, linkSharesRead) + + Register(api, huma.Operation{ + OperationID: "shares-create", + Summary: "Share a project via link", + Description: "Creates a link share for the given project. The parent project is taken from the URL, not the body, and the authenticated user becomes the sharer. Creating an admin share requires project admin; read/write shares require write access. The hash is generated by the server; a password, if set, is write-only and cannot be read back.", + Method: http.MethodPost, + Path: "/projects/{project}/shares", + Tags: tags, + }, linkSharesCreate) + + Register(api, huma.Operation{ + OperationID: "shares-delete", + Summary: "Remove a link share from a project", + Description: "Deletes a link share of a project. The share must belong to the project in the path. Requires write access to the project.", + Method: http.MethodDelete, + Path: "/projects/{project}/shares/{share}", + Tags: tags, + }, linkSharesDelete) +} + +func init() { AddRouteRegistrar(RegisterLinkSharingRoutes) } + +func linkSharesList(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + ListParams +}) (*linkShareListBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + result, _, total, err := handler.DoReadAll(ctx, &models.LinkSharing{ProjectID: in.ProjectID}, a, in.Q, in.Page, in.PerPage) + if err != nil { + return nil, translateDomainError(err) + } + items, ok := result.([]*models.LinkSharing) + if !ok { + return nil, fmt.Errorf("linkShares.ReadAll returned unexpected type %T (expected []*models.LinkSharing)", result) + } + return &linkShareListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil +} + +type linkShareReadBody struct { + models.LinkSharing + MaxPermission models.Permission `json:"max_permission" readOnly:"true" doc:"The maximum permission the requesting user has on this link share (0=read, 1=read/write, 2=admin)."` +} + +func linkSharesRead(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + ID int64 `path:"share"` + conditional.Params +}) (*singleReadBody[linkShareReadBody], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + // ProjectID scopes the lookup to the parent project, guarding against + // reading a share of one project through another. + share := &models.LinkSharing{ID: in.ID, ProjectID: in.ProjectID} + maxPermission, err := handler.DoReadOne(ctx, share, a) + if err != nil { + return nil, translateDomainError(err) + } + body := &linkShareReadBody{LinkSharing: *share, MaxPermission: models.Permission(maxPermission)} + return conditionalReadResponse(&in.Params, body, share.Updated, maxPermission) +} + +func linkSharesCreate(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + Body models.LinkSharing +}) (*singleBody[models.LinkSharing], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + in.Body.ProjectID = in.ProjectID // URL wins over body + if err := handler.DoCreate(ctx, &in.Body, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.LinkSharing]{Body: &in.Body}, nil +} + +func linkSharesDelete(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + ID int64 `path:"share"` +}) (*emptyBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoDelete(ctx, &models.LinkSharing{ID: in.ID, ProjectID: in.ProjectID}, a); err != nil { + return nil, translateDomainError(err) + } + return &emptyBody{}, nil +} diff --git a/pkg/routes/api/v2/notifications.go b/pkg/routes/api/v2/notifications.go new file mode 100644 index 000000000..d5e5b67d3 --- /dev/null +++ b/pkg/routes/api/v2/notifications.go @@ -0,0 +1,139 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "fmt" + "net/http" + + "code.vikunja.io/api/pkg/db" + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/notifications" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" +) + +// Element type is the foreign notifications.DatabaseNotification — that's what +// models.DatabaseNotifications.ReadAll returns directly, not a models wrapper. +type notificationListBody struct { + Body Paginated[*notifications.DatabaseNotification] +} + +// markAllReadBody mirrors v1's {"message":"success"}: the action has no +// resource to return, so it confirms with a status body, not emptyBody. +type markAllReadBody struct { + Body struct { + Message string `json:"message" readOnly:"true" doc:"A confirmation message."` + } +} + +// RegisterNotificationRoutes wires notification list / mark-read / mark-all onto the Huma API. +func RegisterNotificationRoutes(api huma.API) { + tags := []string{"notifications"} + + Register(api, huma.Operation{ + OperationID: "notifications-list", + Summary: "List notifications", + Description: "Returns the authenticated user's own notifications, newest first. Link shares have no notifications and are refused.", + Method: http.MethodGet, + Path: "/notifications", + Tags: tags, + }, notificationsList) + + Register(api, huma.Operation{ + OperationID: "notifications-mark-read", + Summary: "Mark a notification as (un-)read", + Description: "Marks one of the authenticated user's notifications as read or unread. A user can only mark their own notifications.", + Method: http.MethodPut, + Path: "/notifications/{notificationid}", + Tags: tags, + }, notificationsMarkRead) + + Register(api, huma.Operation{ + OperationID: "notifications-mark-all-read", + Summary: "Mark all notifications as read", + Description: "Marks every notification of the authenticated user as read. Link shares have no notifications and are refused.", + Method: http.MethodPost, + Path: "/notifications", + // Override the wrapper's POST→201 create default: this action creates nothing. + DefaultStatus: http.StatusOK, + Tags: tags, + }, notificationsMarkAllRead) +} + +func init() { AddRouteRegistrar(RegisterNotificationRoutes) } + +func notificationsList(ctx context.Context, in *ListParams) (*notificationListBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + result, _, total, err := handler.DoReadAll(ctx, &models.DatabaseNotifications{}, a, in.Q, in.Page, in.PerPage) + if err != nil { + return nil, translateDomainError(err) + } + items, ok := result.([]*notifications.DatabaseNotification) + if !ok { + return nil, fmt.Errorf("notifications.ReadAll returned unexpected type %T (expected []*notifications.DatabaseNotification)", result) + } + return ¬ificationListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil +} + +func notificationsMarkRead(ctx context.Context, in *struct { + ID int64 `path:"notificationid"` + Body models.DatabaseNotifications +}) (*singleBody[models.DatabaseNotifications], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + n := &in.Body + n.ID = in.ID // URL wins over body + if err := handler.DoUpdate(ctx, n, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.DatabaseNotifications]{Body: n}, nil +} + +// notificationsMarkAllRead is a custom action: no CRUDable Do* exists for a bulk +// mark, so the handler owns the link-share guard, session and commit itself. +func notificationsMarkAllRead(ctx context.Context, _ *struct{}) (*markAllReadBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if _, is := a.(*models.LinkSharing); is { + return nil, huma.Error403Forbidden("link shares cannot have notifications") + } + + s := db.NewSession() + defer s.Close() + + if err := notifications.MarkAllNotificationsAsRead(s, a.GetID()); err != nil { + _ = s.Rollback() + return nil, translateDomainError(err) + } + if err := s.Commit(); err != nil { + return nil, translateDomainError(err) + } + + out := &markAllReadBody{} + out.Body.Message = "success" + return out, nil +} diff --git a/pkg/routes/api/v2/project_teams.go b/pkg/routes/api/v2/project_teams.go new file mode 100644 index 000000000..b90442075 --- /dev/null +++ b/pkg/routes/api/v2/project_teams.go @@ -0,0 +1,143 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "fmt" + "net/http" + + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" +) + +// ReadAll returns []*models.TeamWithPermission, not the bare relation. +type projectTeamListBody struct { + Body Paginated[*models.TeamWithPermission] +} + +// RegisterProjectTeamRoutes wires the team<->project share CRUD onto Huma. +// There is no read-one operation (v1 has none either). +func RegisterProjectTeamRoutes(api huma.API) { + tags := []string{"sharing"} + + Register(api, huma.Operation{ + OperationID: "project-teams-list", + Summary: "List the teams a project is shared with", + Description: "Returns the teams that have access to the project, each with the permission they were granted. Requires read access to the project.", + Method: http.MethodGet, + Path: "/projects/{project}/teams", + Tags: tags, + }, projectTeamsList) + + Register(api, huma.Operation{ + OperationID: "project-teams-create", + Summary: "Share a project with a team", + Description: "Gives a team access to the project at the requested permission. Only project admins may share. Fails if the team already has access.", + Method: http.MethodPost, + Path: "/projects/{project}/teams", + Tags: tags, + }, projectTeamsCreate) + + Register(api, huma.Operation{ + OperationID: "project-teams-update", + Summary: "Update a team's permission on a project", + Description: "Changes the permission a team has on the project; only the permission is writable. Only project admins may update a share.", + Method: http.MethodPut, + Path: "/projects/{project}/teams/{team}", + Tags: tags, + }, projectTeamsUpdate) + + Register(api, huma.Operation{ + OperationID: "project-teams-delete", + Summary: "Remove a team from a project", + Description: "Revokes a team's access to the project. Only project admins may remove a share.", + Method: http.MethodDelete, + Path: "/projects/{project}/teams/{team}", + Tags: tags, + }, projectTeamsDelete) +} + +func init() { AddRouteRegistrar(RegisterProjectTeamRoutes) } + +func projectTeamsList(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + ListParams +}) (*projectTeamListBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + result, _, total, err := handler.DoReadAll(ctx, &models.TeamProject{ProjectID: in.ProjectID}, a, in.Q, in.Page, in.PerPage) + if err != nil { + return nil, translateDomainError(err) + } + items, ok := result.([]*models.TeamWithPermission) + if !ok { + return nil, fmt.Errorf("projectTeams.ReadAll returned unexpected type %T (expected []*models.TeamWithPermission)", result) + } + return &projectTeamListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil +} + +func projectTeamsCreate(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + Body models.TeamProject +}) (*singleBody[models.TeamProject], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + in.Body.ProjectID = in.ProjectID // URL wins over body + if err := handler.DoCreate(ctx, &in.Body, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.TeamProject]{Body: &in.Body}, nil +} + +func projectTeamsUpdate(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + TeamID int64 `path:"team"` + Body models.TeamProject +}) (*singleBody[models.TeamProject], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + tp := &in.Body + tp.ProjectID = in.ProjectID // URL wins over body + tp.TeamID = in.TeamID + if err := handler.DoUpdate(ctx, tp, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.TeamProject]{Body: tp}, nil +} + +func projectTeamsDelete(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + TeamID int64 `path:"team"` +}) (*emptyBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoDelete(ctx, &models.TeamProject{ProjectID: in.ProjectID, TeamID: in.TeamID}, a); err != nil { + return nil, translateDomainError(err) + } + return &emptyBody{}, nil +} diff --git a/pkg/routes/api/v2/project_users.go b/pkg/routes/api/v2/project_users.go new file mode 100644 index 000000000..7bc588609 --- /dev/null +++ b/pkg/routes/api/v2/project_users.go @@ -0,0 +1,144 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "fmt" + "net/http" + + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" +) + +// ReadAll yields the shared users, not the join rows: []*models.UserWithPermission. +type projectUserListBody struct { + Body Paginated[*models.UserWithPermission] +} + +// RegisterProjectUserRoutes registers the project<->user share routes. {user} is +// the username (a string), not a numeric id; there is no read-one. +func RegisterProjectUserRoutes(api huma.API) { + tags := []string{"sharing"} + + Register(api, huma.Operation{ + OperationID: "project-users-list", + Summary: "List the users a project is shared with", + Description: "Returns the users that have direct access to the project, with their permission. Requires read access to the project; team shares are not included. Pass q to filter by username.", + Method: http.MethodGet, + Path: "/projects/{project}/users", + Tags: tags, + }, projectUsersList) + + Register(api, huma.Operation{ + OperationID: "project-users-create", + Summary: "Share a project with a user", + Description: "Grants a user access to the project. The user is named by username in the body. Only project admins may share; the project owner cannot be added.", + Method: http.MethodPost, + Path: "/projects/{project}/users", + Tags: tags, + }, projectUsersCreate) + + Register(api, huma.Operation{ + OperationID: "project-users-update", + Summary: "Update a user's permission on a project", + Description: "Changes the permission a user has on the project; only the permission field is updated. The user is identified by username in the path. Only project admins may update a share.", + Method: http.MethodPut, + Path: "/projects/{project}/users/{user}", + Tags: tags, + }, projectUsersUpdate) + + Register(api, huma.Operation{ + OperationID: "project-users-delete", + Summary: "Remove a user's access to a project", + Description: "Revokes a user's direct access to the project, identified by username in the path. Only project admins may do this.", + Method: http.MethodDelete, + Path: "/projects/{project}/users/{user}", + Tags: tags, + }, projectUsersDelete) +} + +func init() { AddRouteRegistrar(RegisterProjectUserRoutes) } + +func projectUsersList(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + ListParams +}) (*projectUserListBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + result, _, total, err := handler.DoReadAll(ctx, &models.ProjectUser{ProjectID: in.ProjectID}, a, in.Q, in.Page, in.PerPage) + if err != nil { + return nil, translateDomainError(err) + } + items, ok := result.([]*models.UserWithPermission) + if !ok { + return nil, fmt.Errorf("projectUsers.ReadAll returned unexpected type %T (expected []*models.UserWithPermission)", result) + } + return &projectUserListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil +} + +func projectUsersCreate(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + Body models.ProjectUser +}) (*singleBody[models.ProjectUser], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + in.Body.ProjectID = in.ProjectID // URL wins over body + if err := handler.DoCreate(ctx, &in.Body, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.ProjectUser]{Body: &in.Body}, nil +} + +func projectUsersUpdate(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + Username string `path:"user"` + Body models.ProjectUser +}) (*singleBody[models.ProjectUser], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + // Update only persists permission; the user and project come from the path. + lu := &in.Body + lu.ProjectID = in.ProjectID + lu.Username = in.Username + if err := handler.DoUpdate(ctx, lu, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.ProjectUser]{Body: lu}, nil +} + +func projectUsersDelete(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + Username string `path:"user"` +}) (*emptyBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoDelete(ctx, &models.ProjectUser{ProjectID: in.ProjectID, Username: in.Username}, a); err != nil { + return nil, translateDomainError(err) + } + return &emptyBody{}, nil +} diff --git a/pkg/routes/api/v2/project_views.go b/pkg/routes/api/v2/project_views.go new file mode 100644 index 000000000..946b5aabf --- /dev/null +++ b/pkg/routes/api/v2/project_views.go @@ -0,0 +1,181 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "fmt" + "net/http" + + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" + "github.com/danielgtaylor/huma/v2/conditional" +) + +// projectViewListBody is the list-response envelope. models.ProjectView.ReadAll +// returns []*models.ProjectView, so that's the element type. +type projectViewListBody struct { + Body Paginated[*models.ProjectView] +} + +// RegisterProjectViewRoutes wires the nested ProjectView CRUD onto the Huma API. +// Every operation binds two path params: {project} → ProjectID and {view} → ID. +// This is the reference shape every nested sub-resource copies. +func RegisterProjectViewRoutes(api huma.API) { + tags := []string{"project_views"} + + Register(api, huma.Operation{ + OperationID: "project-views-list", + Summary: "List the views of a project", + Description: "Returns all views of the given project. Requires read access to the project; the list is not paginated by the server but is returned in the standard list envelope.", + Method: http.MethodGet, + Path: "/projects/{project}/views", + Tags: tags, + }, projectViewsList) + + Register(api, huma.Operation{ + OperationID: "project-views-read", + Summary: "Get a single view of a project", + Description: "Returns one view of a project. The view must belong to the project in the path. Sends an ETag; pass it as If-None-Match on a later read to get a 304 Not Modified.", + Method: http.MethodGet, + Path: "/projects/{project}/views/{view}", + Tags: tags, + }, projectViewsRead) + + Register(api, huma.Operation{ + OperationID: "project-views-create", + Summary: "Create a view in a project", + Description: "Creates a view in the given project. The parent project is taken from the URL, not the body. Only project admins may create a view.", + Method: http.MethodPost, + Path: "/projects/{project}/views", + Tags: tags, + }, projectViewsCreate) + + Register(api, huma.Operation{ + OperationID: "project-views-update", + Summary: "Update a view of a project", + Description: "Replaces a project view's fields. The view must belong to the project in the path, and only project admins may update it. Use PATCH for a partial update.", + Method: http.MethodPut, + Path: "/projects/{project}/views/{view}", + Tags: tags, + }, projectViewsUpdate) + + Register(api, huma.Operation{ + OperationID: "project-views-delete", + Summary: "Delete a view of a project", + Description: "Deletes a project view along with its buckets and task positions. Only project admins may delete it.", + Method: http.MethodDelete, + Path: "/projects/{project}/views/{view}", + Tags: tags, + }, projectViewsDelete) +} + +func init() { AddRouteRegistrar(RegisterProjectViewRoutes) } + +func projectViewsList(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + ListParams +}) (*projectViewListBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + result, _, total, err := handler.DoReadAll(ctx, &models.ProjectView{ProjectID: in.ProjectID}, a, in.Q, in.Page, in.PerPage) + if err != nil { + return nil, translateDomainError(err) + } + items, ok := result.([]*models.ProjectView) + if !ok { + return nil, fmt.Errorf("projectViews.ReadAll returned unexpected type %T (expected []*models.ProjectView)", result) + } + return &projectViewListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil +} + +type projectViewReadBody struct { + models.ProjectView + MaxPermission models.Permission `json:"max_permission" readOnly:"true" doc:"The maximum permission the requesting user has on this view (0=read, 1=read/write, 2=admin)."` +} + +func projectViewsRead(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + ID int64 `path:"view"` + conditional.Params +}) (*singleReadBody[projectViewReadBody], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + // ReadOne resolves the view via GetProjectViewByIDAndProject, which needs + // both ids — the parent project scopes the lookup. + view := &models.ProjectView{ID: in.ID, ProjectID: in.ProjectID} + maxPermission, err := handler.DoReadOne(ctx, view, a) + if err != nil { + return nil, translateDomainError(err) + } + body := &projectViewReadBody{ProjectView: *view, MaxPermission: models.Permission(maxPermission)} + return conditionalReadResponse(&in.Params, body, view.Updated, maxPermission) +} + +func projectViewsCreate(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + Body models.ProjectView +}) (*singleBody[models.ProjectView], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + in.Body.ProjectID = in.ProjectID // URL wins over body + if err := handler.DoCreate(ctx, &in.Body, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.ProjectView]{Body: &in.Body}, nil +} + +// Body matches the read shape so AutoPatch's GET→PUT echo of max_permission validates. +func projectViewsUpdate(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + ID int64 `path:"view"` + Body projectViewReadBody +}) (*singleBody[models.ProjectView], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + view := &in.Body.ProjectView + view.ID = in.ID // URL wins over body + view.ProjectID = in.ProjectID // parent from the path scopes the update + if err := handler.DoUpdate(ctx, view, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.ProjectView]{Body: view}, nil +} + +func projectViewsDelete(ctx context.Context, in *struct { + ProjectID int64 `path:"project"` + ID int64 `path:"view"` +}) (*emptyBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoDelete(ctx, &models.ProjectView{ID: in.ID, ProjectID: in.ProjectID}, a); err != nil { + return nil, translateDomainError(err) + } + return &emptyBody{}, nil +} diff --git a/pkg/routes/api/v2/projects.go b/pkg/routes/api/v2/projects.go new file mode 100644 index 000000000..27a40ea20 --- /dev/null +++ b/pkg/routes/api/v2/projects.go @@ -0,0 +1,186 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "fmt" + "net/http" + + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" +) + +// projectListBody is the list-response envelope. models.Project.ReadAll +// returns []*models.Project, so that's the element type. +type projectListBody struct { + Body Paginated[*models.Project] +} + +// RegisterProjectRoutes wires Project CRUD onto the Huma API. +func RegisterProjectRoutes(api huma.API) { + tags := []string{"projects"} + + Register(api, huma.Operation{ + OperationID: "projects-list", + Summary: "List projects", + Description: "Returns the projects the authenticated user has access to (owned plus shared, with child projects of accessible parents), paginated. Archived projects are excluded unless is_archived=true. Pass expand=permissions to include each project's max_permission for the caller.", + Method: http.MethodGet, + Path: "/projects", + Tags: tags, + }, projectsList) + + Register(api, huma.Operation{ + OperationID: "projects-read", + Summary: "Get a project", + Description: "Returns a single project the caller can read, including its views, the caller's favorite/subscription state and the caller's max_permission. Resolves the Favorites pseudo-project and saved-filter-backed projects. Served fresh on every call (no conditional/ETag) because the response carries user-scoped state that changes without bumping the project's updated timestamp.", + Method: http.MethodGet, + Path: "/projects/{id}", + Tags: tags, + }, projectsRead) + + Register(api, huma.Operation{ + OperationID: "projects-create", + Summary: "Create a project", + Description: "Creates a project; the authenticated user becomes its owner. When parent_project_id is set, the caller needs write access to that parent. Default views and a backlog bucket are created automatically.", + Method: http.MethodPost, + Path: "/projects", + Tags: tags, + }, projectsCreate) + + Register(api, huma.Operation{ + OperationID: "projects-update", + Summary: "Update a project", + Description: "Replaces a project's fields. Requires write access (admin to reparent or delete). Use PATCH for a partial update.", + Method: http.MethodPut, + Path: "/projects/{id}", + Tags: tags, + }, projectsUpdate) + + Register(api, huma.Operation{ + OperationID: "projects-delete", + Summary: "Delete a project", + Description: "Deletes a project together with its tasks, views, buckets and child projects. Only project admins may delete it.", + Method: http.MethodDelete, + Path: "/projects/{id}", + Tags: tags, + }, projectsDelete) +} + +func init() { AddRouteRegistrar(RegisterProjectRoutes) } + +func projectsList(ctx context.Context, in *struct { + ListParams + Expand string `query:"expand" enum:"permissions" doc:"If set to \"permissions\", each returned project includes the max permission the requesting user has on it (max_permission). Currently only \"permissions\" is supported."` + IsArchived bool `query:"is_archived" doc:"If true, also returns archived projects."` +}) (*projectListBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + p := &models.Project{ + Expand: models.ProjectExpandable(in.Expand), + IsArchived: in.IsArchived, + } + result, _, total, err := handler.DoReadAll(ctx, p, a, in.Q, in.Page, in.PerPage) + if err != nil { + return nil, translateDomainError(err) + } + items, ok := result.([]*models.Project) + if !ok { + return nil, fmt.Errorf("projects.ReadAll returned unexpected type %T (expected []*models.Project)", result) + } + return &projectListBody{Body: NewPaginated(items, total, in.Page, in.PerPage)}, nil +} + +// projectReadBody is the read shape. Unlike labels/views, models.Project +// already carries a max_permission field (v1 surfaces it via expand on the +// list route), so the embed just reuses it rather than declaring a sibling. +type projectReadBody struct { + models.Project +} + +func projectsRead(ctx context.Context, in *struct { + ID int64 `path:"id"` +}) (*singleBody[projectReadBody], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + project := &models.Project{ID: in.ID} + maxPermission, err := handler.DoReadOne(ctx, project, a) + if err != nil { + return nil, translateDomainError(err) + } + // CanRead returns a real permission for every readable project (including + // the Favorites pseudo-project and saved-filter-backed ones), so the field + // is always meaningful here — surfaced unconditionally like labels/views. + project.MaxPermission = models.Permission(maxPermission) + // No ETag/conditional read: a project response carries user-scoped, derived + // state (subscription, favorite, views, computed archived state) that + // changes without bumping project.Updated, so it's always served fresh. + return &singleBody[projectReadBody]{Body: &projectReadBody{Project: *project}}, nil +} + +func projectsCreate(ctx context.Context, in *struct { + Body models.Project +}) (*singleBody[models.Project], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoCreate(ctx, &in.Body, a); err != nil { + return nil, translateDomainError(err) + } + // Create/Update don't compute the caller's permission; null says "read it" + // rather than echoing the zero value (0 = read), misleading for the owner. + in.Body.MaxPermission = models.PermissionUnknown + return &singleBody[models.Project]{Body: &in.Body}, nil +} + +// Body matches the read shape so AutoPatch's GET→PUT echo of max_permission validates. +func projectsUpdate(ctx context.Context, in *struct { + ID int64 `path:"id"` + Body projectReadBody +}) (*singleBody[models.Project], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + project := &in.Body.Project + project.ID = in.ID // URL wins over body + if err := handler.DoUpdate(ctx, project, a); err != nil { + return nil, translateDomainError(err) + } + project.MaxPermission = models.PermissionUnknown // see projectsCreate + return &singleBody[models.Project]{Body: project}, nil +} + +func projectsDelete(ctx context.Context, in *struct { + ID int64 `path:"id"` +}) (*emptyBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoDelete(ctx, &models.Project{ID: in.ID}, a); err != nil { + return nil, translateDomainError(err) + } + return &emptyBody{}, nil +} diff --git a/pkg/routes/api/v2/registry.go b/pkg/routes/api/v2/registry.go new file mode 100644 index 000000000..ab186045e --- /dev/null +++ b/pkg/routes/api/v2/registry.go @@ -0,0 +1,45 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import "github.com/danielgtaylor/huma/v2" + +var routeRegistrars []func(huma.API) + +// AddRouteRegistrar records a resource's route-registration function. Each +// resource file calls this from an init() so new resources never touch the +// central wiring. +// +// It mutates the package-level routeRegistrars slice without synchronization, so +// it is NOT safe for concurrent use. Call it only during package initialization +// (from an init() func), never at runtime. +func AddRouteRegistrar(f func(huma.API)) { + routeRegistrars = append(routeRegistrars, f) +} + +// RegisterAll runs every registrar collected via AddRouteRegistrar, then +// enables AutoPatch. The order in which registrars run is unspecified (Go does +// not guarantee a stable init order across files) and does not matter: each +// resource registers a distinct set of routes. AutoPatch runs last — inside +// RegisterAll, after every registrar — so it can synthesise PATCH counterparts +// for all GET + PUT pairs. +func RegisterAll(api huma.API) { + for _, r := range routeRegistrars { + r(api) + } + EnableAutoPatch(api) +} diff --git a/pkg/routes/api/v2/saved_filters.go b/pkg/routes/api/v2/saved_filters.go new file mode 100644 index 000000000..bc82776f5 --- /dev/null +++ b/pkg/routes/api/v2/saved_filters.go @@ -0,0 +1,137 @@ +// Vikunja is a to-do list application to facilitate your life. +// Copyright 2018-present Vikunja and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package apiv2 + +import ( + "context" + "net/http" + + "code.vikunja.io/api/pkg/models" + "code.vikunja.io/api/pkg/web/handler" + + "github.com/danielgtaylor/huma/v2" + "github.com/danielgtaylor/huma/v2/conditional" +) + +// RegisterSavedFilterRoutes wires saved filter CRUD onto the Huma API. +// No list operation, by design — v1 has none either. +func RegisterSavedFilterRoutes(api huma.API) { + tags := []string{"filters"} + + Register(api, huma.Operation{ + OperationID: "filters-read", + Summary: "Get a saved filter", + Description: "Returns a single saved filter. Only the owner may see it. Sends an ETag; pass it as If-None-Match on a later read to get a 304 Not Modified.", + Method: http.MethodGet, + Path: "/filters/{filter}", + Tags: tags, + }, savedFiltersRead) + + Register(api, huma.Operation{ + OperationID: "filters-create", + Summary: "Create a saved filter", + Description: "Creates a saved filter; the authenticated user becomes its owner. The filter query is validated before it is stored.", + Method: http.MethodPost, + Path: "/filters", + Tags: tags, + }, savedFiltersCreate) + + Register(api, huma.Operation{ + OperationID: "filters-update", + Summary: "Update a saved filter", + Description: "Replaces all of a saved filter's fields — only the owner may update it. Use PATCH for a partial update.", + Method: http.MethodPut, + Path: "/filters/{filter}", + Tags: tags, + }, savedFiltersUpdate) + + Register(api, huma.Operation{ + OperationID: "filters-delete", + Summary: "Delete a saved filter", + Description: "Deletes a saved filter. Only the owner may delete it.", + Method: http.MethodDelete, + Path: "/filters/{filter}", + Tags: tags, + }, savedFiltersDelete) +} + +func init() { AddRouteRegistrar(RegisterSavedFilterRoutes) } + +type savedFilterReadBody struct { + models.SavedFilter + MaxPermission models.Permission `json:"max_permission" readOnly:"true" doc:"The maximum permission the requesting user has on this saved filter (0=read, 1=read/write, 2=admin). Filters are owner-only, so this is always 2 for a successful read."` +} + +func savedFiltersRead(ctx context.Context, in *struct { + ID int64 `path:"filter"` + conditional.Params +}) (*singleReadBody[savedFilterReadBody], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + filter := &models.SavedFilter{ID: in.ID} + maxPermission, err := handler.DoReadOne(ctx, filter, a) + if err != nil { + return nil, translateDomainError(err) + } + body := &savedFilterReadBody{SavedFilter: *filter, MaxPermission: models.Permission(maxPermission)} + return conditionalReadResponse(&in.Params, body, filter.Updated, maxPermission) +} + +func savedFiltersCreate(ctx context.Context, in *struct { + Body models.SavedFilter +}) (*singleBody[models.SavedFilter], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoCreate(ctx, &in.Body, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.SavedFilter]{Body: &in.Body}, nil +} + +// Body matches the read shape so AutoPatch's GET→PUT echo of max_permission validates. +func savedFiltersUpdate(ctx context.Context, in *struct { + ID int64 `path:"filter"` + Body savedFilterReadBody +}) (*singleBody[models.SavedFilter], error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + filter := &in.Body.SavedFilter + filter.ID = in.ID // URL wins over body + if err := handler.DoUpdate(ctx, filter, a); err != nil { + return nil, translateDomainError(err) + } + return &singleBody[models.SavedFilter]{Body: filter}, nil +} + +func savedFiltersDelete(ctx context.Context, in *struct { + ID int64 `path:"filter"` +}) (*emptyBody, error) { + a, err := authFromCtx(ctx) + if err != nil { + return nil, err + } + if err := handler.DoDelete(ctx, &models.SavedFilter{ID: in.ID}, a); err != nil { + return nil, translateDomainError(err) + } + return &emptyBody{}, nil +} diff --git a/pkg/routes/api/v2/scalar/scalar.html b/pkg/routes/api/v2/scalar/scalar.html new file mode 100644 index 000000000..6f76f5879 --- /dev/null +++ b/pkg/routes/api/v2/scalar/scalar.html @@ -0,0 +1,16 @@ + + + + + + + Vikunja API + + + + + + diff --git a/pkg/routes/api/v2/scalar/scalar.standalone.js b/pkg/routes/api/v2/scalar/scalar.standalone.js new file mode 100644 index 000000000..a9de9c8ac --- /dev/null +++ b/pkg/routes/api/v2/scalar/scalar.standalone.js @@ -0,0 +1,38827 @@ +/** + * _____ _________ __ ___ ____ + * / ___// ____/ | / / / | / __ \ + * \__ \/ / / /| | / / / /| | / /_/ / + * ___/ / /___/ ___ |/ /___/ ___ |/ _, _/ + * /____/\____/_/ |_/_____/_/ |_/_/ |_| + * + * @scalar/api-reference 1.44.20 + * + * Website: https://scalar.com + * GitHub: https://github.com/scalar/scalar + * License: https://github.com/scalar/scalar/blob/main/LICENSE +**/ + +!function(){"use strict";try{if("undefined"!=typeof document){var a=document.createElement("style");a.appendChild(document.createTextNode('@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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse: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-mask-linear:linear-gradient(#fff,#fff);--tw-mask-radial:linear-gradient(#fff,#fff);--tw-mask-conic:linear-gradient(#fff,#fff);--tw-mask-left:linear-gradient(#fff,#fff);--tw-mask-right:linear-gradient(#fff,#fff);--tw-mask-bottom:linear-gradient(#fff,#fff);--tw-mask-top:linear-gradient(#fff,#fff);--tw-mask-top-from-position:0%;--tw-mask-top-to-position:100%;--tw-mask-top-from-color:black;--tw-mask-top-to-color:transparent;--tw-mask-bottom-from-position:0%;--tw-mask-bottom-to-position:100%;--tw-mask-bottom-from-color:black;--tw-mask-bottom-to-color:transparent;--tw-leading:initial;--tw-font-weight: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:0;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer scalar-base{@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1))}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-color-1)20%)}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-color-1)20%)}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:color-mix(in srgb,var(--scalar-background-1),#fff 10%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)20%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}body{line-height:inherit;margin:0}:root{--scalar-border-width:.5px;--scalar-radius:3px;--scalar-radius-lg:6px;--scalar-radius-xl:8px;--scalar-font:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif;--scalar-font-code:"JetBrains Mono",ui-monospace,Menlo,Monaco,"Cascadia Mono","Segoe UI Mono","Roboto Mono","Oxygen Mono","Ubuntu Monospace","Source Code Pro","Fira Mono","Droid Sans Mono","Courier New",monospace;--scalar-heading-1:24px;--scalar-page-description:16px;--scalar-heading-2:20px;--scalar-heading-3:16px;--scalar-heading-4:16px;--scalar-heading-5:16px;--scalar-heading-6:16px;--scalar-paragraph:16px;--scalar-small:14px;--scalar-mini:13px;--scalar-micro:12px;--scalar-bold:600;--scalar-semibold:500;--scalar-regular:400;--scalar-font-size-1:21px;--scalar-font-size-2:16px;--scalar-font-size-3:14px;--scalar-font-size-4:13px;--scalar-font-size-5:12px;--scalar-font-size-6:12px;--scalar-font-size-7:10px;--scalar-line-height-1:32px;--scalar-line-height-2:24px;--scalar-line-height-3:20px;--scalar-line-height-4:18px;--scalar-line-height-5:16px;--scalar-font-normal:400;--scalar-font-medium:500;--scalar-font-bold:700;--scalar-text-decoration:none;--scalar-text-decoration-hover:underline;--scalar-link-font-weight:inherit;--scalar-sidebar-indent:20px}.dark-mode{color-scheme:dark;--scalar-scrollbar-color:#ffffff2e;--scalar-scrollbar-color-active:#ffffff5c;--scalar-button-1:#fff;--scalar-button-1-hover:#ffffffe6;--scalar-button-1-color:black;--scalar-shadow-1:0 1px 3px 0 #0000001a;--scalar-shadow-2:0 0 0 .5px var(--scalar-border-color),#0f0f0f33 0px 3px 6px,#0f0f0f66 0px 9px 24px;--scalar-lifted-brightness:1.45;--scalar-backdrop-brightness:.5;--scalar-text-decoration-color:currentColor;--scalar-text-decoration-color-hover:currentColor}.light-mode{color-scheme:light;--scalar-scrollbar-color-active:#0000005c;--scalar-scrollbar-color:#0000002e;--scalar-button-1:#000;--scalar-button-1-hover:#000c;--scalar-button-1-color:#ffffffe6;--scalar-shadow-1:0 1px 3px 0 #0000001c;--scalar-shadow-2:#00000014 0px 13px 20px 0px,#00000014 0px 3px 8px 0px,#eeeeed 0px 0 0 .5px;--scalar-lifted-brightness:1;--scalar-backdrop-brightness:1;--scalar-text-decoration-color:currentColor;--scalar-text-decoration-color-hover:currentColor}.light-mode .dark-mode{color-scheme:dark!important}@media(max-width:460px){:root{--scalar-font-size-1:22px;--scalar-font-size-2:14px;--scalar-font-size-3:12px}}@media(max-width:720px){:root{--scalar-heading-1:24px;--scalar-page-description:20px}}:root{--scalar-text-decoration:underline;--scalar-text-decoration-hover:underline}.light-mode{--scalar-background-1:#fff;--scalar-background-2:#f6f6f6;--scalar-background-3:#e7e7e7;--scalar-background-accent:#8ab4f81f;--scalar-color-1:#1b1b1b;--scalar-color-2:#757575;--scalar-color-3:#8e8e8e;--scalar-color-accent:#09f;--scalar-border-color:#dfdfdf}.dark-mode{--scalar-background-1:#0f0f0f;--scalar-background-2:#1a1a1a;--scalar-background-3:#272727;--scalar-color-1:#e7e7e7;--scalar-color-2:#a4a4a4;--scalar-color-3:#797979;--scalar-color-accent:#00aeff;--scalar-background-accent:#3ea6ff1f;--scalar-border-color:#2d2d2d}.light-mode,.dark-mode{--scalar-sidebar-background-1:var(--scalar-background-1);--scalar-sidebar-color-1:var(--scalar-color-1);--scalar-sidebar-color-2:var(--scalar-color-2);--scalar-sidebar-border-color:var(--scalar-border-color);--scalar-sidebar-item-hover-background:var(--scalar-background-2);--scalar-sidebar-item-hover-color:var(--scalar-sidebar-color-2);--scalar-sidebar-item-active-background:var(--scalar-background-2);--scalar-sidebar-color-active:var(--scalar-sidebar-color-1);--scalar-sidebar-indent-border:var(--scalar-sidebar-border-color);--scalar-sidebar-indent-border-hover:var(--scalar-sidebar-border-color);--scalar-sidebar-indent-border-active:var(--scalar-sidebar-border-color);--scalar-sidebar-search-background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1))}}}.light-mode,.dark-mode{--scalar-sidebar-search-color:var(--scalar-color-3);--scalar-sidebar-search-border-color:var(--scalar-border-color)}.light-mode{--scalar-color-green:#069061;--scalar-color-red:#ef0006;--scalar-color-yellow:#edbe20;--scalar-color-blue:#0082d0;--scalar-color-orange:#ff5800;--scalar-color-purple:#5203d1;--scalar-link-color:var(--scalar-color-1);--scalar-link-color-hover:var(--scalar-link-color);--scalar-button-1:#000;--scalar-button-1-hover:#000c;--scalar-button-1-color:#ffffffe6;--scalar-tooltip-background:#1a1a1ae6;--scalar-tooltip-color:#ffffffd9;--scalar-color-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-color-1)20%)}}}.light-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-color-1)20%)}}}.light-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}}.light-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}}.dark-mode{--scalar-color-green:#00b648;--scalar-color-red:#dc1b19;--scalar-color-yellow:#ffc90d;--scalar-color-blue:#4eb3ec;--scalar-color-orange:#ff8d4d;--scalar-color-purple:#b191f9;--scalar-link-color:var(--scalar-color-1);--scalar-link-color-hover:var(--scalar-link-color);--scalar-button-1:#fff;--scalar-button-1-hover:#ffffffe6;--scalar-button-1-color:black;--scalar-tooltip-background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:color-mix(in srgb,var(--scalar-background-1),#fff 10%)}}}.dark-mode{--scalar-tooltip-color:#fffffff2;--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)20%)}}}.dark-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}}.dark-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}}@supports (color:color(display-p3 1 1 1)){.light-mode{--scalar-color-accent:color(display-p3 0 .6 1);--scalar-color-green:color(display-p3 .023529 .564706 .380392);--scalar-color-red:color(display-p3 .937255 0 .023529);--scalar-color-yellow:color(display-p3 .929412 .745098 .12549);--scalar-color-blue:color(display-p3 0 .509804 .815686);--scalar-color-orange:color(display-p3 1 .4 .02);--scalar-color-purple:color(display-p3 .321569 .011765 .819608)}.dark-mode{--scalar-color-accent:color(display-p3 .07 .67 1);--scalar-color-green:color(display-p3 0 .713725 .282353);--scalar-color-red:color(display-p3 .862745 .105882 .098039);--scalar-color-yellow:color(display-p3 1 .788235 .05098);--scalar-color-blue:color(display-p3 .305882 .701961 .92549);--scalar-color-orange:color(display-p3 1 .552941 .301961);--scalar-color-purple:color(display-p3 .694118 .568627 .976471)}}:root,:host{--leading-snug:1.375;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1)}}@layer scalar-theme;.scalar-app .text-wrap{text-wrap:wrap}@media(hover:hover){.scalar-app .hover\\:bg-b-3:hover{background-color:var(--scalar-background-3)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}}@supports (color:color-mix(in lab,red,red)){:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:var(--scalar-tooltip-color)}@supports (color:color-mix(in lab,red,red)){:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:color-mix(in srgb,var(--scalar-tooltip-color),var(--scalar-tooltip-background))}}}.scalar-app .markdown summary:before{content:"";width:var(--markdown-spacing-md);height:var(--markdown-spacing-md);background-color:var(--scalar-color-3);flex-shrink:0;margin-top:5px;display:block;-webkit-mask-image:url(\'data:image/svg+xml,\');mask-image:url(\'data:image/svg+xml,\')}.scalar-app .markdown .markdown-alert.markdown-alert-note .markdown-alert-icon:before,.scalar-app .markdown .markdown-alert.markdown-alert-tip .markdown-alert-icon:before{color:var(--scalar-color-blue);-webkit-mask-image:url(\'data:image/svg+xml,\');mask-image:url(\'data:image/svg+xml,\')}.scalar-app .markdown .markdown-alert.markdown-alert-important .markdown-alert-icon:before,.scalar-app .markdown .markdown-alert.markdown-alert-warning .markdown-alert-icon:before{-webkit-mask-image:url(\'data:image/svg+xml,\');mask-image:url(\'data:image/svg+xml,\')}.scalar-app .markdown .markdown-alert.markdown-alert-caution .markdown-alert-icon:before{color:var(--scalar-color-red);-webkit-mask-image:url(\'data:image/svg+xml,\');mask-image:url(\'data:image/svg+xml,\')}.scalar-app .markdown .markdown-alert.markdown-alert-success .markdown-alert-icon:before{color:var(--scalar-color-green);-webkit-mask-image:url(\'data:image/svg+xml,\');mask-image:url(\'data:image/svg+xml,\')}.authenticationProvided[data-v-e3416cd5]{display:flex;align-items:center;gap:6px;color:var(--scalar-color-1);font-weight:var(--scalar-semibold);min-height:40px;font-size:var(--scalar-font-size-3);position:relative}.authenticationRequired[data-v-d15ef40b]{display:flex;align-items:center;gap:6px;color:var(--scalar-color-blue);font-weight:var(--scalar-semibold);min-height:40px;font-size:var(--scalar-font-size-3);position:relative}.askForAuthentication[data-v-169d0bc0]{display:flex;flex-direction:column;width:100%;position:relative;border-top:var(--scalar-border-width) solid var(--scalar-border-color);border-bottom:var(--scalar-border-width) solid var(--scalar-border-color);margin-bottom:12px;box-shadow:0 var(--scalar-border-width) 0 var(--scalar-background-1),0 calc(-1 * var(--scalar-border-width)) 0 var(--scalar-background-1);padding:0}.authContent[data-v-169d0bc0]{display:grid;grid-template-rows:0fr;min-height:0;overflow:hidden;transition:grid-template-rows .2s ease-out;max-width:520px;margin:auto;width:100%}.authContentInner[data-v-169d0bc0]>div{margin:36px 0 48px}.authContent[data-v-169d0bc0] .markdown{margin-bottom:0!important}.askForAuthentication.open .authContent[data-v-169d0bc0]{grid-template-rows:1fr}.continueButton[data-v-169d0bc0]{align-self:flex-end}.toggleButton[data-v-169d0bc0]{background:none;border:none;cursor:pointer;text-align:left;position:relative;display:flex;align-items:center;color:var(--scalar-color-3);justify-content:space-between;border-radius:var(--scalar-radius-lg)}.authContentInner[data-v-169d0bc0]{min-height:0;overflow:hidden}.authorizeButton[data-v-169d0bc0]{background:var(--scalar-color-blue)!important;color:#fff!important;margin:0!important;z-index:1;display:flex;gap:5px}.autosendPaused[data-v-d08225db]{display:flex;align-items:center;gap:6px;color:var(--scalar-color-blue);font-weight:var(--scalar-semibold);min-height:40px;font-size:var(--scalar-font-size-3);position:relative}.requestApproved[data-v-bb311586]{display:flex;align-items:center;gap:6px;color:var(--scalar-color-green);font-weight:var(--scalar-semibold);min-height:40px;font-size:var(--scalar-font-size-3);position:relative}.requestFailed[data-v-bc27e533]{display:flex;align-items:center;gap:6px;color:var(--scalar-color-red);font-weight:var(--scalar-semibold);min-height:40px;font-size:var(--scalar-font-size-3);position:relative}.requestFailedIcon[data-v-bc27e533]{box-shadow:inset 0 0 0 1.5px currentColor;padding:4px;width:16px;height:16px;border-radius:50%}.requestRejected[data-v-9803a54c]{display:flex;align-items:center;gap:6px;color:var(--scalar-color-red);font-weight:var(--scalar-semibold);min-height:40px;font-size:var(--scalar-font-size-3);position:relative}.requestSuccess[data-v-acc2c0d8]{display:flex;align-items:center;gap:6px;color:var(--scalar-color-1);font-weight:var(--scalar-semibold);min-height:40px;font-size:var(--scalar-font-size-3);position:relative}.light-mode .bg-preview[data-v-92f84612]{background-image:url("data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'16\' height=\'16\' fill=\'%23000\' fill-opacity=\'10%25\'%3E%3Crect width=\'8\' height=\'8\' /%3E%3Crect x=\'8\' y=\'8\' width=\'8\' height=\'8\' /%3E%3C/svg%3E")}.dark-mode .bg-preview[data-v-92f84612]{background-image:url("data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'16\' height=\'16\' fill=\'%23FFF\' fill-opacity=\'10%25\'%3E%3Crect width=\'8\' height=\'8\' /%3E%3Crect x=\'8\' y=\'8\' width=\'8\' height=\'8\' /%3E%3C/svg%3E")}.playIcon[data-v-65dc6dfb]{padding:4px;height:16px;width:16px;z-index:1;display:flex;align-items:center;justify-content:center;position:relative;background:var(--scalar-background-1);border-radius:50%}.playIcon[data-v-65dc6dfb]:before{content:"";width:16px;height:16px;display:inline-block;box-sizing:border-box;position:absolute;border-width:1.75px;border-style:solid;border-color:currentcolor currentcolor transparent;border-image:initial;border-radius:50%;background:var(--scalar-background-1);animation:.42s linear 0s infinite normal none running rotation-65dc6dfb}.sendingRequest[data-v-65dc6dfb]{display:flex;align-items:center;gap:6px;color:var(--scalar-color-blue);font-weight:var(--scalar-semibold);min-height:40px;font-size:var(--scalar-font-size-3);position:relative}.sendingRequest svg[data-v-65dc6dfb]{width:100%;height:100%;z-index:1;border-radius:50%}@keyframes rotation-65dc6dfb{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.requestHeaderContainer[data-v-f4245586]{display:flex;align-items:center;justify-content:space-between;padding:0 5px}.requestPreview[data-v-f4245586]{border-radius:12px;display:flex;flex-direction:column;width:100%;position:relative}.requestContent[data-v-f4245586]{display:grid;grid-template-rows:0fr;min-height:0;overflow:hidden;transition:grid-template-rows .2s ease-out}.requestPreview.open .requestContent[data-v-f4245586]{grid-template-rows:1fr}.requestPreview.succeeded[data-v-f4245586]{padding:0}.requestContentInner[data-v-f4245586]{min-height:0;overflow:hidden}.code[data-v-f4245586]{display:flex;flex-direction:column;font-size:var(--scalar-font-size-4);border-radius:12px;background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1));overflow:hidden;margin-bottom:12px}.dark-mode .code[data-v-f4245586]{background:var(--scalar-background-2)}.code h1[data-v-f4245586]{font-size:var(--scalar-font-size-3);color:var(--scalar-color-3);padding:8px}.code[data-v-f4245586] .codeBlock{max-height:calc(50vh - 100px);padding-top:0}.autosendContainer[data-v-f4245586]{display:flex;justify-content:space-between}.sendButton[data-v-f4245586]{background:var(--scalar-color-blue);color:#fff;font-weight:var(--scalar-semibold);padding:5px 10px}.sendButton[data-v-f4245586]:hover,.sendButton[data-v-f4245586]:active{background:color-mix(in srgb,var(--scalar-color-blue),black 10%);color:#fff!important}.toggleButton[data-v-f4245586]{background:none;border:none;cursor:pointer;text-align:left;position:relative;display:flex;align-items:center;color:var(--scalar-color-3);justify-content:space-between;border-radius:var(--scalar-radius-lg)}.toggleButton[data-v-f4245586]:hover{text-decoration:underline}.executeRequestTool[data-v-49d28052]{display:flex;flex-direction:column;gap:10px;border-top:var(--scalar-border-width) solid var(--scalar-border-color);border-bottom:var(--scalar-border-width) solid var(--scalar-border-color);margin-bottom:12px;box-shadow:0 var(--scalar-border-width) 0 var(--scalar-background-1),0 calc(-1 * var(--scalar-border-width)) 0 var(--scalar-background-1)}.tool[data-v-49d28052]{border:var(--scalar-border-width) solid var(--scalar-border-color);padding:15px;border-radius:15px;margin-bottom:20px}.contextItem[data-v-b6e5aa96]{font-size:10px;display:inline-block;color:var(--scalar-color-2);cursor:pointer;vertical-align:middle;border-radius:12px;padding:5px 10px;display:flex;align-items:center;background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1))}.shimmer[data-v-b6e5aa96]{background:var(--scalar-background-2);background-image:linear-gradient(90deg,#202020 0%,var(--scalar-background-2) 40%,var(--scalar-background-3) 80%);background-size:200% 100%;animation:shimmer-b6e5aa96 1.4s ease-in-out infinite}.light-mode .shimmer[data-v-b6e5aa96]{background:var(--scalar-background-2);background-image:linear-gradient(90deg,#fafafa 0%,var(--scalar-background-2) 40%,var(--scalar-background-3) 80%);background-size:200% 100%;animation:shimmer-b6e5aa96 1.4s ease-in-out infinite}@keyframes shimmer-b6e5aa96{0%{background-position:200% 0}to{background-position:-200% 0}}.playIcon[data-v-653c66b3]{padding:4px;height:16px;width:16px;z-index:1;display:flex;align-items:center;justify-content:center;position:relative;background:var(--scalar-background-1);border-radius:50%}.playIcon[data-v-653c66b3]:before{content:"";width:16px;height:16px;display:inline-block;box-sizing:border-box;position:absolute;border-width:1.5px;border-style:solid;border-color:currentcolor currentcolor transparent;border-image:initial;border-radius:50%;background:var(--scalar-background-1);animation:.42s linear 0s infinite normal none running rotation-653c66b3}.sendingRequest[data-v-653c66b3]{display:flex;align-items:center;gap:6px;color:var(--scalar-color-2);font-weight:var(--scalar-semibold);font-size:var(--scalar-font-size-3);margin-bottom:10px}.sendingRequest svg[data-v-653c66b3]{width:100%;height:100%;z-index:1;border-radius:50%}@keyframes rotation-653c66b3{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.operations[data-v-ecee6203]{display:flex;gap:5px;align-items:center;margin-bottom:12px}.operations[data-v-ecee6203]:empty{margin-bottom:-12px}.playIcon[data-v-9d9724d2]{padding:4px;height:16px;width:16px;z-index:1;display:flex;align-items:center;justify-content:center;position:relative;background:var(--scalar-background-1);border-radius:50%}.playIcon[data-v-9d9724d2]:before{content:"";width:16px;height:16px;display:inline-block;box-sizing:border-box;position:absolute;border-width:1.5px;border-style:solid;border-color:currentcolor currentcolor transparent;border-image:initial;border-radius:50%;background:var(--scalar-background-1);animation:.42s linear 0s infinite normal none running rotation-9d9724d2}.loadingApiSpecs[data-v-9d9724d2]{display:flex;align-items:center;gap:6px;color:var(--scalar-color-2);font-weight:var(--scalar-semibold);font-size:var(--scalar-font-size-3);margin-bottom:10px}.loadingApiSpecs svg[data-v-9d9724d2]{width:100%;height:100%;z-index:1;border-radius:50%}@keyframes rotation-9d9724d2{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.catalogModal .scalar-modal-body{display:flex;flex-direction:column}.searchInput[data-v-bc24f891]{border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:var(--scalar-radius-lg);margin-bottom:10px}.catalog[data-v-bc24f891]{display:grid;grid-template-columns:1fr 1fr;gap:10px;overflow-y:scroll;font-size:var(--scalar-font-size-3)}.item[data-v-bc24f891]{display:flex;padding:15px;gap:10px;align-items:center;background-color:var(--scalar-background-2);border-radius:var(--scalar-radius-lg);transition:background-color .16s ease}.item[data-v-bc24f891]:hover{background-color:color-mix(in srgb,var(--scalar-background-3),transparent 40%)!important}.left[data-v-bc24f891]{align-items:center}.right[data-v-bc24f891]{display:flex;flex-direction:column}.logo[data-v-bc24f891]{width:25px}.item-top[data-v-bc24f891]{display:flex;gap:10px}.version[data-v-bc24f891]{background:var(--scalar-background-3);padding:2px 5px;border-radius:var(--scalar-radius);font-size:var(--scalar-font-size-5);color:var(--scalar-color-3)}.description[data-v-bc24f891]{color:var(--scalar-color-2)}.dropdown-item[data-v-2d142bb5]{display:flex;align-items:center;gap:10px}.approvalSection[data-v-a7e6c699]{width:100%;margin-bottom:-16px;padding:8px 8px 24px 12px;background:color-mix(in srgb,var(--scalar-color-blue),var(--scalar-background-1) 95%);border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:16px 16px 0 0;display:flex;align-items:center;justify-content:space-between;position:absolute;top:0;transform:translate3d(0,calc(-100% + 16px),0)}.approvalText[data-v-a7e6c699]{font-weight:var(--scalar-semibold);font-size:var(--scalar-font-size-3)}.approveContainer[data-v-a7e6c699]{display:flex;gap:5px}.actionButton[data-v-a7e6c699]{display:flex;align-items:center;font-weight:var(--scalar-semibold);border-radius:50px;padding:6px 12px;font-size:var(--scalar-font-size-3)}.rejectButton[data-v-a7e6c699]{color:#fff;background:var(--scalar-color-red)}.rejectButton[data-v-a7e6c699]:hover,.rejectButton[data-v-a7e6c699]:active{background:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1) 10%);color:#fff!important}.approveButton[data-v-a7e6c699]{color:#fff;background:var(--scalar-color-blue)}.approveButton[data-v-a7e6c699]:hover,.approveButton[data-v-a7e6c699]:active{background:color-mix(in srgb,var(--scalar-color-blue),var(--scalar-background-1) 10%);color:#fff!important}.error[data-v-63a481da]{display:flex;align-items:center;margin-bottom:-16px;padding:8px 8px 24px 12px;border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:16px 16px 0 0;background:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1) 95%);font-weight:var(--scalar-semibold);font-size:var(--scalar-font-size-3);position:absolute;top:0;transform:translate3d(0,calc(-100% + 16px),0)}.freeMessagesInfoSection[data-v-593b8dcb]{width:100%;margin-bottom:-16px;padding:8px 8px 24px 12px;position:relative;background:color-mix(in srgb,var(--scalar-color-blue),var(--scalar-background-1) 95%);border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:16px 16px 0 0;display:flex;align-items:center;justify-content:space-between}.infoText[data-v-593b8dcb]{font-weight:var(--scalar-semibold);font-size:var(--scalar-font-size-3)}.actionsContainer[data-v-593b8dcb]{display:flex;align-items:center;gap:8px}.actionButton[data-v-593b8dcb]{display:flex;align-items:center;font-weight:var(--scalar-semibold);border-radius:50px;padding:6px 12px}.upgradeButton[data-v-593b8dcb]{color:#fff;font-size:var(--scalar-font-size-3);background:var(--scalar-color-blue)}.upgradeButton[data-v-593b8dcb]:hover,.upgradeButton[data-v-593b8dcb]:active{background:color-mix(in srgb,var(--scalar-color-blue),var(--scalar-background-1) 10%);color:#fff!important}.closeButton[data-v-593b8dcb]{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;color:var(--scalar-color-2);background:transparent;border:none;cursor:pointer}.closeButton[data-v-593b8dcb]:hover{background:color-mix(in srgb,var(--scalar-color-blue),var(--scalar-background-1) 80%);color:var(--scalar-color-1)}.paymentSection[data-v-59a0be07]{width:100%;margin-bottom:-16px;padding:8px 8px 24px 12px;position:relative;background:color-mix(in srgb,var(--scalar-color-blue),var(--scalar-background-1) 95%);border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:16px 16px 0 0;display:flex;align-items:center;justify-content:space-between;position:absolute;top:0;transform:translate3d(0,calc(-100% + 16px),0)}.approvalText[data-v-59a0be07]{font-weight:var(--scalar-semibold);font-size:var(--scalar-font-size-3)}.paymentContainer[data-v-59a0be07]{display:flex;gap:5px}.actionButton[data-v-59a0be07]{display:flex;align-items:center;font-weight:var(--scalar-semibold);border-radius:50px;padding:6px 12px}.rejectButton[data-v-59a0be07]{color:#fff;background:var(--scalar-color-red)}.rejectButton[data-v-59a0be07]:hover,.rejectButton[data-v-59a0be07]:active{background:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1) 10%);color:#fff!important}.approveButton[data-v-59a0be07]{color:#fff;font-size:var(--scalar-font-size-3);background:var(--scalar-color-blue)}.approveButton[data-v-59a0be07]:hover,.approveButton[data-v-59a0be07]:active{background:color-mix(in srgb,var(--scalar-color-blue),var(--scalar-background-1) 10%);color:#fff!important}.paymentInfo[data-v-59a0be07]{width:300px;position:absolute;right:0;bottom:70px;box-shadow:var(--scalar-shadow-2);background:var(--scalar-background-1);border-radius:16px;pointer-events:none;padding:12px;transform:translate3d(0,-5px,0);opacity:0;transition:all .2s ease-in-out}.paymentInfo h3[data-v-59a0be07]{font-size:var(--scalar-font-size-1);font-weight:var(--scalar-bold);margin-bottom:18px}.paymentInfo h3 span[data-v-59a0be07]{font-size:var(--scalar-font-size-2)}.dark-mode .paymentInfo[data-v-59a0be07]{background:var(--scalar-background-2)}.paymentContainer:hover .paymentInfo[data-v-59a0be07]{transform:translateZ(0);opacity:1}.paymentInfoItem[data-v-59a0be07]{display:flex;justify-content:space-between;margin-top:8px;font-size:var(--scalar-font-size-3);color:var(--scalar-color-2);font-weight:var(--scalar-semibold)}.paymentInfoSection[data-v-59a0be07]:not(:last-child){border-bottom:var(--scalar-border-width) solid var(--scalar-border-color);padding-bottom:8px}.searchItem[data-v-7945f74c]{display:flex;align-items:center;gap:9px;padding:8px 10px;font-size:var(--scalar-font-size-3)}.searchInput[data-v-7945f74c]{margin-bottom:5px}.searchItem[data-v-7945f74c]:hover{background:var(--scalar-background-2)}.searchItemLogo[data-v-7945f74c]{width:15px}.searchIcon[data-v-7945f74c]{margin-right:7px}.searchResultsEmpty[data-v-7945f74c]{font-size:var(--scalar-font-size-3);color:var(--scalar-color-2);margin:10px}.uploadSection[data-v-f9d3a579]{width:100%;margin-bottom:-16px;padding:8px 8px 24px 12px;position:relative;background:color-mix(in srgb,var(--scalar-color-blue),var(--scalar-background-1) 95%);border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:16px 16px 0 0;display:flex;align-items:center;justify-content:space-between;position:absolute;top:0;transform:translate3d(0,calc(-100% + 16px),0)}.uploadSection.error[data-v-f9d3a579]{background:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1) 95%)}.uploadSection.done[data-v-f9d3a579]{background:color-mix(in srgb,var(--scalar-color-green),var(--scalar-background-1) 95%)}.uploadText[data-v-f9d3a579]{font-weight:var(--scalar-semibold);font-size:var(--scalar-font-size-3)}.icon[data-v-f9d3a579]{height:20px;width:20px}.actionContainer[data-v-3899441c]{background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1));border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:16px;width:100%;position:relative;box-shadow:0 24px 0 2px var(--scalar-background-1)}.promptForm[data-v-3899441c]{width:100%;position:relative;display:flex;flex-direction:column;background:var(--scalar-background-1);box-shadow:var(--scalar-shadow-1),0 0 0 var(--scalar-border-width) var(--scalar-border-color);border-radius:16px}.inputActionsContainer[data-v-3899441c]{display:flex;justify-content:space-between;padding:0 8px 8px}.inputActionsLeft[data-v-3899441c]{display:flex;flex-wrap:wrap;align-items:center;gap:5px}.inputActionsRight[data-v-3899441c]{display:flex;gap:5px;position:relative}.apiPill[data-v-3899441c]{font-size:var(--scalar-font-size-3);border:var(--scalar-border-width) solid var(--scalar-border-color);color:var(--scalar-color-2);font-weight:var(--scalar-semibold);height:28px;align-items:center;display:flex;border-radius:16px;padding:0 8px;pointer-events:all;z-index:1;gap:4px;-webkit-user-select:none;user-select:none}.apiPillLogo[data-v-3899441c]{width:15px}.apiPillRemove[data-v-3899441c]{width:24px;height:24px;margin-right:-6px;border-radius:50%;display:flex;align-items:center;justify-content:center}.apiPill:hover .apiPillRemove[data-v-3899441c]{background:var(--scalar-background-2)}.dark-mode .apiPill:hover .apiPillRemove[data-v-3899441c]{background:var(--scalar-background-3)}.apiPillRemove[data-v-3899441c]:hover{color:var(--scalar-color-1)}.prompt[data-v-3899441c]{width:100%;outline:none;border:none;resize:none;field-sizing:content;min-height:64px;z-index:1;max-height:250px;max-width:100%;overflow-y:auto;scrollbar-width:thin;word-wrap:break-word;font-family:var(--scalar-font);font-size:16px;padding:12px 12px 14px}.dark-mode .promptForm[data-v-3899441c]{background:var(--scalar-background-2)}.prompt[data-v-3899441c]:disabled{color:var(--scalar-color-3)}.addAPIButton[data-v-3899441c]{justify-content:center;color:var(--scalar-color-2);font-size:var(--scalar-font-size-3);height:28px;width:28px;font-weight:var(--scalar-bold);border-radius:100%;display:flex;align-items:center;gap:4px;pointer-events:all;z-index:1;box-shadow:0 0 0 var(--scalar-border-width) var(--scalar-border-color)}.addAPIButton[data-v-3899441c]:hover{background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1));box-shadow:0 0 0 var(--scalar-border-width) var(--scalar-border-color)}.dark-mode .addAPIButton[data-v-3899441c]:hover{background:var(--scalar-background-3)}.settingsButton[data-v-3899441c]{color:var(--scalar-color-3)!important;border-radius:50%!important;margin:0!important;z-index:1}.settingsButton[aria-disabled=true][data-v-3899441c]{background:var(--scalar-background-2)}.dark-mode .settingsButton[data-v-3899441c]:hover{background:var(--scalar-background-3)}.sendButton[data-v-3899441c]{background:var(--scalar-color-blue)!important;border-radius:50%!important;margin:0!important;z-index:1;border:var(--scalar-border-width) solid var(--scalar-color-blue)}.sendButton[data-v-3899441c]:not([aria-disabled=true]){color:#fff!important}.sendButton[data-v-3899441c]:not([aria-disabled=true]):hover{background:color-mix(in srgb,var(--scalar-color-blue),transparent 10%)!important}.sendButton[aria-disabled=true][data-v-3899441c]{background:var(--scalar-background-2)!important;color:var(--scalar-color-3)!important;border:var(--scalar-border-width) solid var(--scalar-border-color)}.dark-mode .sendButton[aria-disabled=true][data-v-3899441c]{background:var(--scalar-background-3)!important}.contextContainer[data-v-3899441c]{display:flex;width:100%;padding:10px 12px 12px;color:var(--scalar-color-2);font-size:var(--scalar-font-size-3);-webkit-user-select:none;user-select:none;justify-content:space-between}.settingsButton[data-v-3899441c]{font-weight:var(--scalar-semibold);border-radius:var(--scalar-radius-lg);padding:4px 6px;margin:-4px -6px}.settingsButton[data-v-3899441c]:hover{background:var(--scalar-background-2);box-shadow:0 0 var(--scalar-border-width) 0 var(--scalar-border-color);cursor:pointer}.agentLabel[data-v-3899441c]{font-size:0px;position:absolute;width:100%;height:100%;cursor:text}.sendCheckboxContinue[data-v-3899441c]:has(input){display:flex;align-items:center;border-radius:14px;background:var(--scalar-background-2);box-shadow:0 0 0 1.5px var(--scalar-background-2);color:var(--scalar-color-2);font-size:var(--scalar-font-size-3);font-weight:var(--scalar-semibold);-webkit-user-select:none;user-select:none;height:28px}.dark-mode .sendCheckboxContinue[data-v-3899441c]:has(input){background:var(--scalar-background-3);box-shadow:0 0 0 1.5px var(--scalar-background-3)}.addMoreContext[data-v-3899441c]{height:40px;display:flex;position:relative;font-size:var(--scalar-font-size-3);color:var(--scalar-color-3);padding:0 8px 0 12px;align-items:center}.addMoreContext[data-v-3899441c]:before{content:"";width:8px;height:8px;background:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2));transform:rotate(45deg);left:18px;top:-3px;position:absolute;box-shadow:-.5px -.5px 0 var(--scalar-border-color),inset .5px .5px 1px var(--scalar-border-color)}.dark-mode .addMoreContext[data-v-3899441c]:before{box-shadow:-.5px -.5px 0 var(--scalar-border-color)}.addAPIContext[data-v-3899441c]{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:var(--scalar-border-width) solid var(--scalar-border-color)}.termsAgree[data-v-3899441c]{display:flex;cursor:pointer;height:inherit;align-items:center;border-radius:14px;gap:5px;margin:0 5px}.termsAgree[data-v-3899441c]:hover{color:var(--scalar-color-1)}.termsAgree:hover .termsAgreeIcon[data-v-3899441c]{background:var(--scalar-color-1);color:var(--scalar-background-1)}.termsAgreeIcon[data-v-3899441c]{width:inherit;height:inherit;padding:2px;border-radius:50%;background:var(--scalar-background-2)}.chat[data-v-41e50a16]{flex:1;display:flex;flex-direction:column;width:100%;padding:24px 0;max-width:744px}.userMessage[data-v-41e50a16]{padding-top:6px;padding-bottom:6px;padding-inline:16px;border-radius:18px;background:var(--scalar-background-2);width:fit-content;max-width:80%;margin-left:auto;font-size:16px;line-height:24px;color:var(--scalar-color-1);margin-bottom:12px}div+.userMessage[data-v-41e50a16]{margin-top:64px}.chat[data-v-41e50a16]>div:has(.executeRequestTool)+div:has(.executeRequestTool){margin-top:-12px}.spacer[data-v-41e50a16]{min-height:280px;width:100%}.formContainer[data-v-41e50a16]{position:sticky;bottom:20px;width:100%;max-width:744px;z-index:1}.chat[data-v-41e50a16] .markdown{margin-bottom:12px}.agentLogo[data-v-1fbb0eb5]{margin-bottom:15px}.startContainer[data-v-1fbb0eb5]{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;max-width:720px;position:relative}.heading[data-v-1fbb0eb5]{font-size:1.5rem;font-weight:var(--scalar-font-bold);margin-bottom:50px}.suggestionsContainer[data-v-1fbb0eb5]{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin:25px 0}.disclaimerText[data-v-1fbb0eb5]{text-align:center;color:var(--scalar-color-3);font-size:var(--scalar-font-size-3);text-wrap:balance;line-height:1.44;margin-top:40px}.disclaimerLink[data-v-1fbb0eb5]{text-decoration:underline}.wrapper[data-v-f1eee0af]{display:flex;flex-direction:column;align-items:center;height:100%;width:100%}.docSettings[data-v-2dfa823a]{display:flex;flex-direction:column;gap:12px;margin-bottom:12px;font-size:var(--scalar-font-size-3);max-height:600px}.documentName[data-v-2dfa823a]{font-weight:var(--scalar-semibold)}.settingsModal .scalar-modal-layout{z-index:10!important}.settingsModal .scalar-modal-body{overflow-y:scroll;overflow-x:hidden}.documentList[data-v-745651bc]{display:flex;flex-direction:column;font-size:var(--scalar-font-size-3);margin-bottom:12px}.document[data-v-745651bc]{display:flex;flex-direction:column;width:calc(100% + 24px);left:-12px;position:relative;padding:0 12px;border-top:var(--scalar-border-width) solid var(--scalar-border-color);border-bottom:var(--scalar-border-width) solid var(--scalar-border-color)}.document[data-v-745651bc]:first-of-type:not(:last-of-type){border-bottom:none}.documentName[data-v-745651bc]{gap:4px;display:flex;align-items:center;font-weight:var(--scalar-semibold);color:var(--scalar-color-2);padding:12px 0}.documentNameActive[data-v-745651bc]{color:var(--scalar-color-1)}.settingsHeading[data-v-745651bc]{font-size:19px;margin-bottom:12px;display:flex;gap:5px;align-items:center;font-weight:var(--scalar-semibold)}.proxyUrlContainer[data-v-745651bc]{font-size:var(--scalar-font-size-3);display:flex;gap:5px;flex-direction:column}.proxyUrlContainer label[data-v-745651bc]{font-weight:var(--scalar-semibold)}.noDocuments[data-v-745651bc]{color:var(--scalar-color-2);margin-bottom:10px}.agent-scalar[data-v-b45a83b1]{position:fixed;top:0;left:0;width:calc(100% - 50px);height:100dvh;background:var(--scalar-background-1);border-right:var(--scalar-border-width) solid var(--scalar-border-color);transform:translate3d(calc(-100% + var(--scalar-sidebar-width, 288px)),0,0);z-index:2;animation:.35s forwards scalaragentslidein-b45a83b1;box-shadow:var(--scalar-shadow-2)}.agent-scalar-container[data-v-b45a83b1]{width:calc(100% - var(--scalar-sidebar-width, 288px));height:100%;margin-left:auto;overflow:auto;padding:0 24px}.scalar-app-exit[data-v-b45a83b1]{cursor:pointer;z-index:2;width:100vw;height:100vh;transition:all .3s ease-in-out;position:fixed;top:0;left:0}@media(max-width:1000px){.agent-scalar-container[data-v-b45a83b1]{width:100%}.agent-scalar[data-v-b45a83b1]{width:100%;height:calc(100dvh - 50px);bottom:0;top:initial;border-radius:var(--scalar-radius-lg) var(--scalar-radius-lg) 0 0;z-index:12}.scalar-app-exit[data-v-b45a83b1]{z-index:11}}.scalar-app-exit-animation[data-v-b45a83b1]:before{content:"";position:absolute;width:100%;height:100%;background:#00000038;animation:.5s forwards scalardrawerexitfadein-b45a83b1;animation-timing-function:cubic-bezier(.77,0,.175,1)}.dark-mode .scalar .scalar-app-exit-animation[data-v-b45a83b1]:before{background:#00000073}@keyframes scalaragentslidein-b45a83b1{0%{transform:translate3d(calc(-100% + var(--scalar-sidebar-width, 288px)),0,0)}to{transform:translateZ(0)}}@keyframes scalardrawerexitfadein-b45a83b1{0%{opacity:0}to{opacity:1}}.app-exit-button[data-v-b45a83b1]{color:#fff;background:#0000001a}.app-exit-button[data-v-b45a83b1]:hover{background:#ffffff1a}.references-classic-header[data-v-9198d025]{display:flex;align-items:center;gap:12px;max-width:var(--refs-content-max-width);margin:auto;padding:12px 0}.references-classic-header-content[data-v-9198d025]{display:flex;gap:12px;flex-grow:1}.references-classic-header-container[data-v-9198d025]{padding:0 60px}@container narrow-references-container (max-width: 900px){.references-classic-header[data-v-9198d025]{padding:12px 24px}.references-classic-header-container[data-v-9198d025]{padding:0}}.references-classic-header-icon[data-v-9198d025]{height:24px;color:var(--scalar-color-1)}.client-libraries-content[data-v-6a49c111]{container:client-libraries-content / inline-size;display:flex;justify-content:center;overflow:hidden;padding:0 12px;background-color:var(--scalar-background-1);border-left:var(--scalar-border-width) solid var(--scalar-border-color);border-right:var(--scalar-border-width) solid var(--scalar-border-color)}.client-libraries[data-v-6a49c111]{display:flex;align-items:center;justify-content:center;width:100%;position:relative;cursor:pointer;white-space:nowrap;padding:8px 2px;gap:6px;color:var(--scalar-color-3);border-bottom:1px solid transparent;-webkit-user-select:none;user-select:none}.client-libraries[data-v-6a49c111]:not(.client-libraries__active):hover:before{content:"";position:absolute;width:calc(100% - 4px);height:calc(100% - 4px);background:var(--scalar-background-2);left:2px;top:2px;z-index:0;border-radius:var(--scalar-radius)}.client-libraries[data-v-6a49c111]:active{color:var(--scalar-color-1)}.client-libraries[data-v-6a49c111]:focus-visible{outline:none;box-shadow:inset 0 0 0 1px var(--scalar-color-accent)}@media screen and (max-width:450px){.client-libraries[data-v-6a49c111]:nth-of-type(4),.client-libraries[data-v-6a49c111]:nth-of-type(5){display:none}}.client-libraries-icon[data-v-6a49c111]{max-width:14px;max-height:14px;min-width:14px;width:100%;aspect-ratio:1;display:flex;align-items:center;justify-content:center;position:relative;box-sizing:border-box;color:currentColor}.client-libraries-icon__more svg[data-v-6a49c111]{height:initial}@container client-libraries-content (width < 400px){.client-libraries__select[data-v-6a49c111]{width:fit-content}.client-libraries__select .client-libraries-icon__more+span[data-v-6a49c111]{display:none}}@container client-libraries-content (width < 380px){.client-libraries[data-v-6a49c111]{width:100%}.client-libraries span[data-v-6a49c111]{display:none}}.client-libraries__active[data-v-6a49c111]{color:var(--scalar-color-1);border-bottom:1px solid var(--scalar-color-1)}@keyframes codeloader-6a49c111{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.client-libraries .client-libraries-text[data-v-6a49c111]{font-size:var(--scalar-small);position:relative;display:flex;align-items:center}.client-libraries__active .client-libraries-text[data-v-6a49c111]{color:var(--scalar-color-1);font-weight:var(--scalar-semibold)}@media screen and (max-width:600px){.references-classic .client-libraries[data-v-6a49c111]{flex-direction:column}}.selected-client[data-v-dd2e9b07]{color:var(--scalar-color-1);font-size:var(--scalar-small);font-family:var(--scalar-font-code);padding:9px 12px;border-top:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:var(--scalar-background-1);border:var(--scalar-border-width) solid var(--scalar-border-color);border-bottom-left-radius:var(--scalar-radius-xl);border-bottom-right-radius:var(--scalar-radius-xl);min-height:fit-content}.client-libraries-heading[data-v-dd2e9b07]{font-size:var(--scalar-small);font-weight:var(--scalar-font-medium);color:var(--scalar-color-1);padding:9px 12px;background-color:var(--scalar-background-2);display:flex;align-items:center;max-height:32px;border:var(--scalar-border-width) solid var(--scalar-border-color);border-top-left-radius:var(--scalar-radius-xl);border-top-right-radius:var(--scalar-radius-xl)}[data-v-dd2e9b07] .scalar-codeblock-pre .hljs{margin-top:8px}.badge[data-v-3dedb7e4]{color:var(--badge-text-color, var(--scalar-color-2));font-size:var(--scalar-mini);background:var(--badge-background-color, var(--scalar-background-2));border:var(--scalar-border-width) solid var(--badge-border-color, var(--scalar-border-color));padding:2px 6px;border-radius:12px;display:inline-block}.badge.text-orange[data-v-3dedb7e4]{background:color-mix(in srgb,var(--scalar-color-orange),transparent 90%);border:transparent}.badge.text-yellow[data-v-3dedb7e4]{background:color-mix(in srgb,var(--scalar-color-yellow),transparent 90%);border:transparent}.badge.text-red[data-v-3dedb7e4]{background:color-mix(in srgb,var(--scalar-color-red),transparent 90%);border:transparent}.badge.text-purple[data-v-3dedb7e4]{background:color-mix(in srgb,var(--scalar-color-purple),transparent 90%);border:transparent}.badge.text-green[data-v-3dedb7e4]{background:color-mix(in srgb,var(--scalar-color-green),transparent 90%);border:transparent}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-59b5011b],[data-v-59b5011b]:before,[data-v-59b5011b]:after,[data-v-59b5011b]::backdrop{--tw-outline-style:solid}}}.download-container[data-v-59b5011b]{z-index:1;flex-direction:column;gap:16px;width:fit-content;margin:0 .5px 8px;display:flex;position:relative}.download-container[data-v-59b5011b]:has(:focus-visible):before,.download-container.download-both[data-v-59b5011b]:hover:before{content:"";border-radius:var(--scalar-radius-lg);width:calc(100% + 24px);height:90px;box-shadow:var(--scalar-shadow-2);pointer-events:none;background:var(--scalar-background-1);position:absolute;top:-11px;left:-12px}.download-button[data-v-59b5011b]{color:var(--scalar-link-color);cursor:pointer;outline:none;justify-content:center;align-items:center;gap:4px;height:fit-content;padding:0;display:flex;position:relative;white-space:nowrap!important}.download-button[data-v-59b5011b]:before{border-radius:var(--scalar-radius);content:"";width:calc(100% + 18px);height:calc(100% + 16px);position:absolute;top:-8px;left:-9px}.download-button[data-v-59b5011b]:last-of-type:before{width:calc(100% + 15px)}.download-button[data-v-59b5011b]:hover:before{background:var(--scalar-background-2);border:var(--scalar-border-width)solid var(--scalar-border-color)}.download-button[data-v-59b5011b]:focus-visible:before{background:var(--scalar-background-2);border:var(--scalar-border-width)solid var(--scalar-border-color);outline-style:var(--tw-outline-style);outline-width:1px}.download-button span[data-v-59b5011b]{--font-color:var(--scalar-link-color,var(--scalar-color-accent));--font-visited:var(--scalar-link-color-visited,var(--scalar-color-2));-webkit-text-decoration:var(--scalar-text-decoration);text-decoration:var(--scalar-text-decoration);color:var(--font-color);font-weight:var(--scalar-link-font-weight,var(--scalar-semibold));text-underline-offset:.25rem;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--font-color);text-decoration-color:var(--font-color)}@supports (color:color-mix(in lab,red,red)){.download-button span[data-v-59b5011b]{-webkit-text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent);text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent)}}.download-button span[data-v-59b5011b]{z-index:1;align-items:center;gap:6px;line-height:1.625;display:flex}.download-button:hover span[data-v-59b5011b]{-webkit-text-decoration-color:var(--scalar-color-1,currentColor);text-decoration-color:var(--scalar-color-1,currentColor);color:var(--scalar-link-color-hover,var(--scalar-color-accent));-webkit-text-decoration:var(--scalar-text-decoration-hover);text-decoration:var(--scalar-text-decoration-hover)}.download-button[data-v-59b5011b]:nth-of-type(2){clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.download-container:has(:focus-visible) .download-button[data-v-59b5011b]:nth-of-type(2),.download-container:hover .download-button[data-v-59b5011b]:nth-of-type(2){clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:absolute;top:42px;overflow:visible}.extension[data-v-59b5011b]{z-index:1;background:var(--scalar-link-color,var(--scalar-color-accent));color:var(--scalar-background-1)}.download-container:has(:focus-visible) .extension[data-v-59b5011b],.download-container:hover .extension[data-v-59b5011b]{opacity:1}.download-link[data-v-59b5011b]{--font-color:var(--scalar-link-color,var(--scalar-color-accent));--font-visited:var(--scalar-link-color-visited,var(--scalar-color-2));-webkit-text-decoration:var(--scalar-text-decoration);text-decoration:var(--scalar-text-decoration);color:var(--font-color);font-weight:var(--scalar-link-font-weight,var(--scalar-semibold));text-underline-offset:.25rem;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--font-color);text-decoration-color:var(--font-color)}@supports (color:color-mix(in lab,red,red)){.download-link[data-v-59b5011b]{-webkit-text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent);text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent)}}.download-link[data-v-59b5011b]:hover{--font-color:var(--scalar-link-color,var(--scalar-color-accent));-webkit-text-decoration-color:var(--font-color);text-decoration-color:var(--font-color)}.introduction-card[data-v-5764c94a]{display:flex;flex-direction:column;gap:12px}.introduction-card-row[data-v-5764c94a]{gap:24px}@media(min-width:600px){.introduction-card-row[data-v-5764c94a]{flex-flow:row wrap}}.introduction-card-row[data-v-5764c94a]>*{flex:1}@media(min-width:600px){.introduction-card-row[data-v-5764c94a]>*{min-width:min-content}}@media(max-width:600px){.introduction-card-row[data-v-5764c94a]>*{max-width:100%}}@container (max-width: 900px){.introduction-card-row[data-v-5764c94a]{flex-direction:column;align-items:stretch;gap:0px}}.introduction-card[data-v-5764c94a] .security-scheme-label{text-transform:uppercase;font-weight:var(--scalar-semibold)}.introduction-card-row[data-v-5764c94a] .scalar-card:nth-of-type(2) .scalar-card-header{display:none}.introduction-card-row[data-v-5764c94a] .scalar-card:nth-of-type(2) .scalar-card-header.scalar-card--borderless+.scalar-card-content{margin-top:0}.section[data-v-be4443e9]{position:relative;display:flex;flex-direction:column;max-width:var(--refs-content-max-width);margin:auto;padding:90px 0;scroll-margin-top:var(--refs-viewport-offset)}.section[data-v-be4443e9]:has(~div.contents){border-bottom:var(--scalar-border-width) solid var(--scalar-border-color)}.references-classic .section[data-v-be4443e9]{padding:48px 0;gap:24px}@container narrow-references-container (max-width: 900px){.references-classic .section[data-v-be4443e9],.section[data-v-be4443e9]{padding:48px 24px}}.section[data-v-be4443e9]:not(:last-of-type){border-bottom:var(--scalar-border-width) solid var(--scalar-border-color)}.section-wrapper[data-v-ff689b94]{color:var(--scalar-color-1);padding-top:12px;margin-top:-12px}.section-accordion[data-v-ff689b94]{display:flex;flex-direction:column;border-radius:var(--scalar-radius-lg);background:var(--scalar-background-2);scroll-margin-top:var(--refs-viewport-offset)}.section-accordion-transparent[data-v-ff689b94]{background:transparent;border:var(--scalar-border-width) solid var(--scalar-border-color)}.section-accordion-button[data-v-ff689b94]{padding:6px}.section-accordion-button[data-v-ff689b94]{display:flex;align-items:center;gap:6px;cursor:pointer}.section-accordion-button-content[data-v-ff689b94]{flex:1;min-width:0}.section-accordion-button-actions[data-v-ff689b94]{display:flex;align-items:center;gap:6px;color:var(--scalar-color-3)}.section-accordion-chevron[data-v-ff689b94]{margin-right:4px;cursor:pointer;opacity:1;color:var(--scalar-color-3)}.section-accordion-button:hover .section-accordion-chevron[data-v-ff689b94]{color:var(--scalar-color-1)}.section-accordion-content[data-v-ff689b94]{border-top:var(--scalar-border-width) solid var(--scalar-border-color);display:flex;flex-direction:column}.section-accordion-description[data-v-ff689b94]{font-weight:var(--scalar-semibold);font-size:var(--scalar-mini);color:var(--scalar-color--1);padding:10px 12px 0}.section-accordion-content-card[data-v-ff689b94] .property:last-of-type{padding-bottom:9px}.section-column[data-v-699c28e3]{flex:1;min-width:0}@container narrow-references-container (max-width: 900px){.section-column[data-v-699c28e3]:nth-of-type(2){padding-top:0}}.section-columns[data-v-8b9602bf]{display:flex;gap:48px}@container narrow-references-container (max-width: 900px){.section-columns[data-v-8b9602bf]{flex-direction:column;gap:24px}}.section-container[data-v-20a1472a]{position:relative;padding:0 60px;width:100%;border-top:var(--scalar-border-width) solid var(--scalar-border-color)}.section-container[data-v-20a1472a]:has(.introduction-section){border-top:none}@container narrow-references-container (max-width: 900px){.section-container[data-v-20a1472a]{padding:0}}.section-accordion-wrapper[data-v-9419dd23]{padding:0 60px}.section-accordion[data-v-9419dd23]{position:relative;width:100%;max-width:var(--refs-content-max-width);margin:auto}.section-accordion-content[data-v-9419dd23]{display:flex;flex-direction:column;gap:12px;padding-top:12px}.section-accordion-button[data-v-9419dd23]{width:100%;display:flex;cursor:pointer;padding:6px 0;margin:-6px 0;border-radius:var(--scalar-radius)}.section-accordion-chevron[data-v-9419dd23]{position:absolute;left:-22px;top:12px;color:var(--scalar-color-3)}.section-accordion-button:hover .section-accordion-chevron[data-v-9419dd23]{color:var(--scalar-color-1)}.section-accordion-title[data-v-9419dd23]{display:flex;flex-direction:column;align-items:flex-start;flex:1;padding:0 6px}.section-accordion-title[data-v-9419dd23] .section-header-wrapper{grid-template-columns:1fr}.section-accordion-title[data-v-9419dd23] .section-header{margin-bottom:0}@container narrow-references-container (max-width: 900px){.section-accordion-chevron[data-v-9419dd23]{width:16px;left:-16px;top:14px}.section-accordion-wrapper[data-v-9419dd23]{padding:calc(var(--refs-viewport-offset)) 24px 0 24px}}.loading[data-v-8e0226d7]{background:var(--scalar-background-3);animation:loading-skeleton-8e0226d7 1.5s infinite alternate;border-radius:var(--scalar-radius-lg);min-height:1.6em;margin:.6em 0;max-width:100%}.loading[data-v-8e0226d7]:first-of-type{min-height:3em;margin-bottom:24px;margin-top:0}.loading[data-v-8e0226d7]:last-of-type{width:60%}.loading.single-line[data-v-8e0226d7]{min-height:3em;margin:.6em 0;max-width:80%}@keyframes loading-skeleton-8e0226d7{0%{opacity:1}to{opacity:.33}}@container narrow-references-container (max-width: 900px){.section-content--with-columns[data-v-9735459e]{flex-direction:column;gap:24px}}.section-header-wrapper[data-v-465a7a78]{grid-template-columns:1fr;display:grid}@media(min-width:1200px){.section-header-wrapper[data-v-465a7a78]{grid-template-columns:repeat(2,1fr)}}.section-header[data-v-465a7a78]{font-size:var(--font-size,var(--scalar-heading-1));font-weight:var(--font-weight,var(--scalar-bold));color:var(--scalar-color-1);word-wrap:break-word;margin-top:0;margin-bottom:12px;line-height:1.45}.section-header.tight[data-v-465a7a78]{margin-bottom:6px}.section-header.loading[data-v-465a7a78]{width:80%}.section-header-label[data-v-f1ac6c38]{display:inline}.screenreader-only[data-v-df2e1026]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.collapsible-section[data-v-999a158a]{border-top:var(--scalar-border-width) solid var(--scalar-border-color);position:relative}.collapsible-section-header[data-v-999a158a]{color:var(--scalar-color-1)}.collapsible-section .collapsible-section-trigger[data-v-999a158a]{display:flex;align-items:center;cursor:pointer;padding:10px 0;font-size:var(--scalar-font-size-3);z-index:1;position:relative}.collapsible-section-trigger svg[data-v-999a158a]{color:var(--scalar-color-3);position:absolute;left:-19px}.collapsible-section:hover .collapsible-section-trigger svg[data-v-999a158a]{color:var(--scalar-color-1)}.collapsible-section .collapsible-section-trigger[data-v-999a158a] .anchor-copy{line-height:18.5px}.collapsible-section-content[data-v-999a158a]{padding:0;margin:0 0 10px;scroll-margin-top:140px}.references-classic .introduction-description[data-v-fe80002d] img{max-width:720px}.icons-only[data-v-b59b0acf] span{display:none}.sticky-cards[data-v-0b1e2255]{display:flex;flex-direction:column;position:sticky;top:calc(var(--refs-viewport-offset) + 24px)}.introduction-card-item[data-v-dfab866f]{display:flex;flex-direction:column;justify-content:flex-start}.introduction-card-item[data-v-dfab866f]:empty{display:none}.introduction-card-item[data-v-dfab866f]:has(.description) .server-form-container{border-bottom-left-radius:0;border-bottom-right-radius:0}.introduction-card-item[data-v-dfab866f] .request-item{border-bottom:0}.schema-type-icon[data-v-70cb5c13]{color:var(--scalar-color-1);display:none}.schema-type[data-v-70cb5c13]{font-family:var(--scalar-font-code);color:var(--scalar-color-1)}.property-enum-value[data-v-f4b54bdd]{color:var(--scalar-color-3);line-height:1.5;overflow-wrap:break-word;display:flex;align-items:stretch;position:relative;--decorator-width: 1px;--decorator-color: color-mix( in srgb, var(--scalar-background-1), var(--scalar-color-1) 25% )}.property-enum-value-content[data-v-f4b54bdd]{display:flex;flex-direction:column;padding:3px 0}.property-enum-value-label[data-v-f4b54bdd]{font-family:var(--scalar-font-code);color:var(--scalar-color-1);font-size:var(--scalar-font-size-4);position:relative}.property-enum-value:last-of-type .property-enum-value-label[data-v-f4b54bdd]{padding-bottom:0}.property-enum-value[data-v-f4b54bdd]:before{content:"";margin-right:12px;width:var(--decorator-width);display:block;background-color:var(--decorator-color)}.property-enum-value[data-v-f4b54bdd]:last-of-type:before,.property-enum-values:has(.enum-toggle-button) .property-enum-value[data-v-f4b54bdd]:nth-last-child(2):before{height:calc(.5lh + 4px)}.property-enum-value-label[data-v-f4b54bdd]:after{content:"";position:absolute;top:.5lh;left:-12px;width:8px;height:var(--decorator-width);background-color:var(--decorator-color)}.property-enum-value[data-v-f4b54bdd]:last-of-type:after{bottom:0;height:50%;background:var(--scalar-background-1);border-top:var(--scalar-border-width) solid var(--decorator-color)}.property-enum-value-description[data-v-f4b54bdd]{color:var(--scalar-color-3)}.property-heading:empty+.property-description[data-v-d5367294]:last-of-type,.property-description[data-v-d5367294]:first-of-type:last-of-type{margin-top:0}.property-list[data-v-d5367294]{border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:var(--scalar-radius);margin-top:10px}.property-list .property[data-v-d5367294]:last-of-type{padding-bottom:10px}.property-enum-values[data-v-d5367294]{font-size:var(--scalar-font-size-3);list-style:none;margin-top:8px;padding-left:2px}.enum-toggle-button[data-v-d5367294]:hover{color:var(--scalar-color-1)}.property-detail[data-v-1295f965]{display:inline-flex}.property-detail+.property-detail[data-v-1295f965]:before{display:block;content:"·";margin:0 .5ch}.property-detail-truncate[data-v-1295f965]{overflow:hidden}.property-detail-truncate>.property-detail-value[data-v-1295f965]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.property-detail-prefix[data-v-1295f965]{color:var(--scalar-color-2)}code.property-detail-value[data-v-1295f965]{font-family:var(--scalar-font-code);font-size:var(--scalar-font-size-3);color:var(--scalar-color-2);background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1));padding:0 4px;border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:var(--scalar-radius)}.property-example[data-v-72def0ea]{display:flex;flex-direction:column;font-size:var(--scalar-mini);position:relative}.property-example[data-v-72def0ea]:hover:before{content:"";position:absolute;top:0;left:0;width:100%;height:20px;border-radius:var(--scalar-radius)}.property-example:hover .property-example-label span[data-v-72def0ea]{color:var(--scalar-color-1)}.property-example-label span[data-v-72def0ea]{color:var(--scalar-color-3);position:relative;border-bottom:var(--scalar-border-width) dotted currentColor}.property-example-value[data-v-72def0ea]{font-family:var(--scalar-font-code);display:flex;gap:8px;align-items:center;width:100%;padding:6px}.property-example-value span[data-v-72def0ea]{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.property-example-value[data-v-72def0ea] svg{color:var(--scalar-color-3)}.property-example-value[data-v-72def0ea]:hover svg{color:var(--scalar-color-1)}.property-example-value[data-v-72def0ea]{background:var(--scalar-background-2);border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:var(--scalar-radius)}.property-example-value-list[data-v-72def0ea]{position:absolute;top:18px;left:50%;transform:translate3d(-50%,0,0);overflow:auto;background-color:var(--scalar-background-1);box-shadow:var(--scalar-shadow-1);border-radius:var(--scalar-radius-lg);border:var(--scalar-border-width) solid var(--scalar-border-color);padding:9px;min-width:200px;max-width:300px;flex-direction:column;gap:3px;display:none;z-index:2}.property-example:hover .property-example-value-list[data-v-72def0ea],.property-example:focus-within .property-example-value-list[data-v-72def0ea]{display:flex}.property-heading[data-v-f1f4255a]{display:flex;flex-wrap:wrap;align-items:baseline;row-gap:9px;white-space:nowrap}.property-heading[data-v-f1f4255a]:has(+.children),.property-heading[data-v-f1f4255a]:has(+.property-rule){margin-bottom:9px}.property-heading[data-v-f1f4255a]>*{margin-right:9px}.property-heading[data-v-f1f4255a]:last-child{margin-right:0}.property-heading>.property-detail[data-v-f1f4255a]:not(:last-of-type){margin-right:0}.property-name[data-v-f1f4255a]{max-width:100%;font-family:var(--scalar-font-code);font-weight:var(--scalar-bold);font-size:var(--scalar-font-size-4);white-space:normal;overflow-wrap:break-word}.property-additional[data-v-f1f4255a]{font-family:var(--scalar-font-code)}.property-required[data-v-f1f4255a],.property-optional[data-v-f1f4255a]{color:var(--scalar-color-2)}.property-required[data-v-f1f4255a]{font-size:var(--scalar-mini);color:var(--scalar-color-orange)}.property-read-only[data-v-f1f4255a]{font-size:var(--scalar-mini);color:var(--scalar-color-blue)}.property-write-only[data-v-f1f4255a]{font-size:var(--scalar-mini);color:var(--scalar-color-green)}.property-discriminator[data-v-f1f4255a]{font-size:var(--scalar-mini);color:var(--scalar-color-purple)}.property-detail[data-v-f1f4255a]{font-size:var(--scalar-mini);color:var(--scalar-color-2);display:flex;align-items:center;min-width:0}.property-const[data-v-f1f4255a]{color:var(--scalar-color-1)}.deprecated[data-v-f1f4255a]{text-decoration:line-through}.property[data-v-84242873]{color:var(--scalar-color-1);display:flex;flex-direction:column;padding:10px;font-size:var(--scalar-small);position:relative}.property.property--level-0[data-v-84242873]:has(>.property-rule>.schema-card>.schema-properties.schema-properties-open>ul>li.property){padding-top:0}.property--compact.property--level-0[data-v-84242873],.property--compact.property--level-1[data-v-84242873]{padding:10px 0}.composition-panel .property.property.property.property--level-0[data-v-84242873]{padding:0}.property--compact.property--level-0 .composition-panel .property--compact.property--level-1[data-v-84242873]{padding:8px}.property[data-v-84242873]:has(>.property-rule:nth-of-type(1)):not(.property--compact){padding-top:8px;padding-bottom:8px}.property--deprecated[data-v-84242873]{background:repeating-linear-gradient(-45deg,var(--scalar-background-2) 0,var(--scalar-background-2) 2px,transparent 2px,transparent 5px);background-size:100%}.property--deprecated[data-v-84242873]>*{opacity:.75}.property-description[data-v-84242873]{margin-top:6px;line-height:1.4;font-size:var(--scalar-small)}.property-description[data-v-84242873]:has(+.property-rule){margin-bottom:9px}[data-v-84242873] .property-description *{color:var(--scalar-color-2)!important}.property[data-v-84242873]:not(:last-of-type){border-bottom:var(--scalar-border-width) solid var(--scalar-border-color)}.property-description+.children[data-v-84242873],.children+.property-rule[data-v-84242873]{margin-top:9px}.children[data-v-84242873]{display:flex;flex-direction:column}.children .property--compact.property--level-1[data-v-84242873]{padding:12px}.property-example-value[data-v-84242873]{all:unset;font-family:var(--scalar-font-code);padding:6px;border-top:var(--scalar-border-width) solid var(--scalar-border-color)}.property-rule[data-v-84242873]{border-radius:var(--scalar-radius-lg);display:flex;flex-direction:column}.property-rule[data-v-84242873] .composition-panel .schema-card--level-1>.schema-properties.schema-properties-open{border-radius:0 0 var(--scalar-radius-lg) var(--scalar-radius-lg)}.property-rule[data-v-84242873] .composition-panel>.schema-card>.schema-card-description{padding:10px;border-left:var(--scalar-border-width) solid var(--scalar-border-color);border-right:var(--scalar-border-width) solid var(--scalar-border-color)}.property-rule[data-v-84242873] .composition-panel>.schema-card>.schema-card-description+.schema-properties{margin-top:0}.property-example[data-v-84242873]{background:transparent;border:none;display:flex;flex-direction:row;gap:8px}.property-example-label[data-v-84242873],.property-example-value[data-v-84242873]{padding:3px 0 0}.property-example-value[data-v-84242873]{background:var(--scalar-background-2);border-top:0;border-radius:var(--scalar-radius);padding:3px 4px}.property-name[data-v-84242873]{font-family:var(--scalar-font-code);font-weight:var(--scalar-semibold)}.property-name-additional-properties[data-v-84242873]:before,.property-name-pattern-properties[data-v-84242873]:before{text-transform:uppercase;font-size:var(--scalar-micro);display:inline-block;padding:2px 4px;border-radius:var(--scalar-radius);color:var(--scalar-color-1);border:var(--scalar-border-width) solid var(--scalar-border-color);background-color:var(--scalar-background-2);margin-right:4px}.property-name-pattern-properties[data-v-84242873]:before{content:"regex"}.property-name-additional-properties[data-v-84242873]:before{content:"unknown property name"}.error[data-v-d9bd8110]{background-color:var(--scalar-color-red)}.schema-card[data-v-d9bd8110]{font-size:var(--scalar-font-size-4);color:var(--scalar-color-1)}.schema-card-title[data-v-d9bd8110]{height:var(--schema-title-height);padding:6px 8px;display:flex;align-items:center;gap:4px;color:var(--scalar-color-2);font-weight:var(--scalar-semibold);font-size:var(--scalar-mini);border-bottom:var(--scalar-border-width) solid transparent}button.schema-card-title[data-v-d9bd8110]{cursor:pointer}button.schema-card-title[data-v-d9bd8110]:hover{color:var(--scalar-color-1)}.schema-card-title-icon--open[data-v-d9bd8110]{transform:rotate(45deg)}.schema-properties-open>.schema-card-title[data-v-d9bd8110]{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:var(--scalar-border-width) solid var(--scalar-border-color)}.schema-properties-open>.schema-properties[data-v-d9bd8110]{width:fit-content}.schema-card-description[data-v-d9bd8110]{color:var(--scalar-color-2)}.schema-card-description+.schema-properties[data-v-d9bd8110]{width:fit-content}.schema-card-description+.schema-properties[data-v-d9bd8110]{margin-top:8px}.schema-card--level-0:nth-of-type(1)>.schema-card-description[data-v-d9bd8110]:has(+.schema-properties){margin-bottom:-8px;padding-bottom:8px;border-bottom:var(--scalar-border-width) solid var(--scalar-border-color)}.schema-card--level-0~.schema-card--level-0>.schema-card-description[data-v-d9bd8110]:has(+.schema-properties){padding-top:8px}.schema-properties-open.schema-properties[data-v-d9bd8110],.schema-properties-open>.schema-card--open[data-v-d9bd8110]{width:100%}.schema-properties[data-v-d9bd8110]{display:flex;flex-direction:column;border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:var(--scalar-radius-lg);width:fit-content}.schema-properties-name[data-v-d9bd8110]{width:100%}.schema-properties .schema-properties[data-v-d9bd8110]{border-radius:13.5px}.schema-properties .schema-properties.schema-properties-open[data-v-d9bd8110]{border-radius:var(--scalar-radius-lg)}.schema-properties-open[data-v-d9bd8110]{width:100%}.schema-card--compact[data-v-d9bd8110]{align-self:flex-start}.schema-card--compact.schema-card--open[data-v-d9bd8110]{align-self:initial}.schema-card-title--compact[data-v-d9bd8110]{color:var(--scalar-color-2);padding:6px 10px 6px 8px;height:auto;border-bottom:none}.schema-card-title--compact>.schema-card-title-icon[data-v-d9bd8110]{margin:0}.schema-card-title--compact>.schema-card-title-icon--open[data-v-d9bd8110]{transform:rotate(45deg)}.schema-properties-open>.schema-card-title--compact[data-v-d9bd8110]{position:static}.property--level-0>.schema-properties>.schema-card--level-0>.schema-properties[data-v-d9bd8110]{border:none}.property--level-0 .schema-card--level-0:not(.schema-card--compact) .property--level-1[data-v-d9bd8110]{padding:0 0 8px}:not(.composition-panel)>.schema-card--compact.schema-card--level-0>.schema-properties[data-v-d9bd8110]{border:none}[data-v-d9bd8110] .schema-card-description p{font-size:var(--scalar-small, var(--scalar-paragraph));color:var(--scalar-color-2);line-height:1.5;display:block;margin-bottom:6px}.children .schema-card-description[data-v-d9bd8110]:first-of-type{padding-top:0}.reference-models-anchor[data-v-e4ca3c0f]{display:flex;align-items:center;font-size:20px;padding-left:6px;color:var(--scalar-color-1)}.reference-models-label[data-v-e4ca3c0f]{display:block;font-size:var(--scalar-mini)}.reference-models-label[data-v-e4ca3c0f] em{font-weight:var(--scalar-bold)}.show-more[data-v-d1c2b649]{appearance:none;border:none;border:var(--scalar-border-width) solid var(--scalar-border-color);margin:auto;padding:8px 12px 8px 16px;border-radius:30px;color:var(--scalar-color-1);font-weight:var(--scalar-semibold);font-size:var(--scalar-small);display:flex;align-items:center;justify-content:center;position:relative;gap:6px;top:-48px}.show-more[data-v-d1c2b649]:hover{background:var(--scalar-background-2);cursor:pointer}.show-more[data-v-d1c2b649]:active{box-shadow:0 0 0 1px var(--scalar-border-color)}@container narrow-references-container (max-width: 900px){.show-more[data-v-d1c2b649]{top:-24px}}.tag-section[data-v-1124be5d]{margin-bottom:48px}.tag-name[data-v-1124be5d]{text-transform:capitalize}.tag-description[data-v-1124be5d]{padding-bottom:4px;text-align:left}.endpoint[data-v-ad8530a6]{display:flex;white-space:nowrap;cursor:pointer;text-decoration:none}.endpoint:hover .endpoint-path[data-v-ad8530a6],.endpoint:focus-visible .endpoint-path[data-v-ad8530a6]{text-decoration:underline}.endpoint .post[data-v-ad8530a6],.endpoint .get[data-v-ad8530a6],.endpoint .delete[data-v-ad8530a6],.endpoint .put[data-v-ad8530a6]{white-space:nowrap}.endpoint-method[data-v-ad8530a6],.endpoint-path[data-v-ad8530a6]{color:var(--scalar-color-1);min-width:62px;display:inline-flex;line-height:1.55;font-family:var(--scalar-font-code);font-size:var(--scalar-small);cursor:pointer}.endpoint-method[data-v-ad8530a6]{text-align:right}.endpoint-path[data-v-ad8530a6]{margin-left:12px;text-transform:initial}.deprecated[data-v-ad8530a6]{text-decoration:line-through}.endpoints-card[data-v-f726f753]{position:sticky;top:calc(var(--refs-viewport-offset) + 24px);font-size:var(--scalar-font-size-3)}.endpoints[data-v-f726f753]{overflow:auto;background:var(--scalar-background-2);padding:10px 12px;width:100%}.section-container[data-v-0d42fbc8]{border-top:var(--scalar-border-width) solid var(--scalar-border-color)}.section-container[data-v-0d42fbc8]:has(.show-more){background-color:color-mix(in srgb,var(--scalar-background-2),transparent)}.operation-path[data-v-ec6c8861]{overflow:hidden;word-wrap:break-word;font-weight:var(--scalar-semibold);line-break:anywhere}.deprecated[data-v-ec6c8861]{text-decoration:line-through}.empty-state[data-v-431974da]{margin:10px 0 10px 12px;text-align:center;font-size:var(--scalar-mini);min-height:56px;display:flex;align-items:center;justify-content:center;border-radius:var(--scalar-radius-lg);color:var(--scalar-color-2)}.rule-title[data-v-431974da]{font-family:var(--scalar-font-code);color:var(--scalar-color-1);display:inline-block;margin:12px 0 6px;border-radius:var(--scalar-radius)}.rule[data-v-431974da]{margin:0 12px;border-radius:var(--scalar-radius-lg)}.rule-items[data-v-431974da]{counter-reset:list-number;display:flex;flex-direction:column;gap:12px;border-left:1px solid var(--scalar-border-color);padding:12px 0}.rule-item[data-v-431974da]{counter-increment:list-number;border:1px solid var(--scalar-border-color);border-radius:var(--scalar-radius-lg);overflow:hidden;margin-left:24px}.rule-item[data-v-431974da]:before{border:1px solid var(--scalar-border-color);border-top:0;border-right:0;content:" ";display:block;width:24px;height:6px;border-radius:0 0 0 var(--scalar-radius-lg);margin-top:6px;color:var(--scalar-color-2);transform:translate(-25px);color:var(--scalar-color-1);position:absolute}.tab[data-v-804dba49]{background:none;border:none;font-size:var(--scalar-small);font-family:var(--scalar-font);font-weight:var(--scalar-font-normal);color:var(--scalar-color-2);line-height:calc(var(--scalar-small) + 2px);white-space:nowrap;cursor:pointer;padding:0;margin-right:3px;text-transform:uppercase;position:relative;line-height:22px}.tab[data-v-804dba49]:before{content:"";position:absolute;z-index:0;left:-6px;top:-2px;width:calc(100% + 12px);height:calc(100% + 4px);border-radius:var(--scalar-radius);background:var(--scalar-background-3);opacity:0}.tab[data-v-804dba49]:hover:before,.tab[data-v-804dba49]:focus-visible:before{opacity:1}.tab[data-v-804dba49]:focus-visible:before{outline:1px solid var(--scalar-color-accent)}.tab span[data-v-804dba49]{z-index:1;position:relative}.tab-selected[data-v-804dba49]{color:var(--scalar-color-1);font-weight:var(--scalar-semibold)}.tab-selected[data-v-804dba49]:after{content:"";position:absolute;background:currentColor;width:100%;left:0;height:1px;bottom:calc(var(--tab-list-padding-y) * -1)}.tab-list[data-v-fec8fbbb]{display:flex;gap:6px;position:relative;flex:1;--tab-list-padding-y: 7px;--tab-list-padding-x: 12px;padding:var(--tab-list-padding-y) var(--tab-list-padding-x);overflow:auto}.scalar-card-header.scalar-card-header-tabs[data-v-fec8fbbb]{padding:0}.response-card[data-v-4f7e7d02]{font-size:var(--scalar-font-size-3)}.markdown[data-v-4f7e7d02] *{margin:0}.code-copy[data-v-4f7e7d02]{display:flex;align-items:center;justify-content:center;appearance:none;-webkit-appearance:none;outline:none;background:transparent;cursor:pointer;color:var(--scalar-color-3);border:none;padding:0;margin-right:12px}.code-copy[data-v-4f7e7d02]:hover{color:var(--scalar-color-1)}.code-copy svg[data-v-4f7e7d02]{width:13px;height:13px}.response-card-footer[data-v-4f7e7d02]{display:flex;flex-direction:row;justify-content:space-between;flex-shrink:0;padding:7px 12px;gap:8px}.response-example-selector[data-v-4f7e7d02]{align-self:flex-start;margin:-4px}.response-description[data-v-4f7e7d02]{font-weight:var(--scalar-semibold);font-size:var(--scalar-small);color:var(--scalar-color--1);display:flex;align-items:center;box-sizing:border-box}.schema-type[data-v-4f7e7d02]{font-size:var(--scalar-micro);color:var(--scalar-color-2);font-weight:var(--scalar-semibold);background:var(--scalar-background-3);padding:2px 4px;border-radius:4px;margin-right:4px}.schema-example[data-v-4f7e7d02]{font-size:var(--scalar-micro);color:var(--scalar-color-2);font-weight:var(--scalar-semibold)}.example-response-tab[data-v-4f7e7d02]{display:block;margin:6px}.scalar-card-checkbox[data-v-4f7e7d02]{display:flex;align-items:center;justify-content:center;position:relative;min-height:17px;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:var(--scalar-small);font-weight:var(--scalar-font-normal);color:var(--scalar-color-2);width:fit-content;white-space:nowrap;gap:6px;padding:7px 6px}.scalar-card-checkbox:has(.scalar-card-checkbox-input:focus-visible) .scalar-card-checkbox-checkmark[data-v-4f7e7d02]{outline:1px solid var(--scalar-color-accent)}.scalar-card-checkbox[data-v-4f7e7d02]:hover{color:var(--scalar-color--1)}.scalar-card-checkbox .scalar-card-checkbox-input[data-v-4f7e7d02]{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.scalar-card-checkbox-checkmark[data-v-4f7e7d02]{height:16px;width:16px;border-radius:var(--scalar-radius);background-color:transparent;background-color:var(--scalar-background-3);box-shadow:inset 0 0 0 var(--scalar-border-width) var(--scalar-border-color)}.scalar-card-checkbox[data-v-4f7e7d02]:has(.scalar-card-checkbox-input:checked){color:var(--scalar-color-1);font-weight:var(--scalar-semibold)}.scalar-card-checkbox .scalar-card-checkbox-input:checked~.scalar-card-checkbox-checkmark[data-v-4f7e7d02]{background-color:var(--scalar-button-1);box-shadow:none}.scalar-card-checkbox-checkmark[data-v-4f7e7d02]:after{content:"";position:absolute;display:none}.scalar-card-checkbox .scalar-card-checkbox-input:checked~.scalar-card-checkbox-checkmark[data-v-4f7e7d02]:after{display:block}.scalar-card-checkbox .scalar-card-checkbox-checkmark[data-v-4f7e7d02]:after{right:11.5px;top:12.5px;width:5px;height:9px;border:solid 1px var(--scalar-button-1-color);border-width:0 1.5px 1.5px 0;transform:rotate(45deg)}.headers-card[data-v-ab19704d]{z-index:0;margin-top:12px;margin-bottom:6px;position:relative;font-size:var(--scalar-font-size-4);color:var(--scalar-color-1);align-self:flex-start}.headers-card.headers-card--open[data-v-ab19704d]{align-self:initial}.headers-card-title[data-v-ab19704d]{padding:6px 10px;display:flex;align-items:center;gap:4px;color:var(--scalar-color-3);font-weight:var(--scalar-semibold);font-size:var(--scalar-micro);border-radius:13.5px}button.headers-card-title[data-v-ab19704d]{cursor:pointer}button.headers-card-title[data-v-ab19704d]:hover{color:var(--scalar-color-1)}.headers-card-title-icon--open[data-v-ab19704d]{transform:rotate(45deg)}.headers-properties[data-v-ab19704d]{display:flex;flex-direction:column;border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:13.5px;width:fit-content}.headers-properties-open>.headers-card-title[data-v-ab19704d]{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:var(--scalar-border-width) solid var(--scalar-border-color)}.headers-properties-open[data-v-ab19704d]{border-radius:var(--scalar-radius-lg);width:100%}.headers-card .property[data-v-ab19704d]:last-of-type{padding-bottom:10px}.headers-card-title>.headers-card-title-icon[data-v-ab19704d]{width:14px;height:14px;margin:0}.headers-card-title>.headers-card-title-icon--open[data-v-ab19704d]{transform:rotate(45deg)}.parameter-item[data-v-b97d19d9]{display:flex;flex-direction:column;position:relative;border-top:var(--scalar-border-width) solid var(--scalar-border-color)}.parameter-item:last-of-type .parameter-schema[data-v-b97d19d9]{padding-bottom:0}.parameter-item-container[data-v-b97d19d9]{padding:0}.parameter-item-headers[data-v-b97d19d9]{border:var(--scalar-border-width) solid var(--scalar-border-color)}.parameter-item-name[data-v-b97d19d9]{position:relative;font-weight:var(--scalar-bold);font-size:var(--scalar-font-size-4);font-family:var(--scalar-font-code);color:var(--scalar-color-1);overflow-wrap:break-word}.parameter-item-description[data-v-b97d19d9],.parameter-item-description-summary[data-v-b97d19d9]{font-size:var(--scalar-mini);color:var(--scalar-color-2)}.parameter-item-description-summary.parameter-item-description-summary[data-v-b97d19d9]>*{--markdown-line-height: 1}.parameter-item-trigger+.parameter-item-container[data-v-b97d19d9] .property--level-0>.property-heading .property-detail-value{font-size:var(--scalar-micro)}.parameter-item-required-optional[data-v-b97d19d9]{color:var(--scalar-color-2);font-weight:var(--scalar-semibold);margin-right:6px;position:relative}.parameter-item--required[data-v-b97d19d9]{text-transform:uppercase;font-size:var(--scalar-micro);font-weight:var(--scalar-semibold);color:var(--scalar-color-orange)}.parameter-item-description[data-v-b97d19d9]{margin-top:6px;font-size:var(--scalar-small);color:var(--scalar-color-2);line-height:1.4}.parameter-item-description[data-v-b97d19d9] p{margin-top:4px;font-size:var(--scalar-small);color:var(--scalar-color-2);line-height:1.4}.parameter-schema[data-v-b97d19d9]{padding-bottom:9px;margin-top:3px}.parameter-item-trigger[data-v-b97d19d9]{display:flex;align-items:baseline;line-height:var(--scalar-line-height-5);gap:6px;flex-wrap:wrap;padding:10px 0;outline:none}.parameter-item-trigger-open[data-v-b97d19d9]{padding-bottom:0}.parameter-item-icon[data-v-b97d19d9]{color:var(--scalar-color-3);left:-19px;top:.5lh;translate:0 -50%;position:absolute}.parameter-item-trigger:hover .parameter-item-icon[data-v-b97d19d9],.parameter-item-trigger:focus-visible .parameter-item-icon[data-v-b97d19d9]{color:var(--scalar-color-1)}.parameter-item-trigger:focus-visible .parameter-item-icon[data-v-b97d19d9]{outline:1px solid var(--scalar-color-accent);outline-offset:2px;border-radius:var(--scalar-radius)}.request-body[data-v-17941e59]{margin-top:24px}.request-body-header[data-v-17941e59]{display:flex;align-items:center;justify-content:space-between;padding-bottom:12px;border-bottom:var(--scalar-border-width) solid var(--scalar-border-color);flex-flow:wrap}.request-body-title[data-v-17941e59]{display:flex;align-items:center;gap:8px;font-size:var(--scalar-font-size-2);font-weight:var(--scalar-semibold);color:var(--scalar-color-1)}.request-body-required[data-v-17941e59]{font-size:var(--scalar-micro);color:var(--scalar-color-orange);font-weight:400;border-radius:16px;border:var(--scalar-border-width) solid var(--scalar-border-color);padding:2px 8px;height:20px}.request-body-description[data-v-17941e59]{margin-top:6px;font-size:var(--scalar-small);width:100%}.request-body-header+.request-body-schema[data-v-17941e59]:has(>.schema-card>.schema-card-description),.request-body-header+.request-body-schema[data-v-17941e59]:has(>.schema-card>.schema-properties>*>.property--level-0){padding-top:8px}.request-body-description[data-v-17941e59] .markdown *{color:var(--scalar-color-2)!important}.callback-sticky-offset[data-v-b94c2b8b]{top:var(--refs-viewport-offset, 0px);z-index:1}.callback-operation-container[data-v-b94c2b8b] .request-body,.callback-operation-container[data-v-b94c2b8b] .request-body-description,.callback-operation-container[data-v-b94c2b8b] .request-body-header{margin-top:0}.callback-operation-container[data-v-b94c2b8b] .request-body-header{--scalar-font-size-2: var(--scalar-font-size-4);padding:10px;border-bottom:none;border:.5px solid var(--scalar-border-color);border-radius:var(--scalar-radius-lg) var(--scalar-radius-lg) 0 0;background:color-mix(in srgb,var(--scalar-background-2) 50%,transparent)}.callback-operation-container[data-v-b94c2b8b] .request-body-schema>.schema-card>.schema-card-description{padding-inline:8px}.callback-operation-container[data-v-b94c2b8b] ul li.property.property--level-1{padding:10px}.callback-operation-container[data-v-b94c2b8b] .request-body-schema{background-color:var(--scalar-background-1);border:var(--scalar-border-width) solid var(--scalar-border-color);border-top:none;overflow:hidden;border-radius:0 0 var(--scalar-radius-lg) var(--scalar-radius-lg)}.callback-operation-container[data-v-b94c2b8b] .parameter-list{margin-top:0}.callback-operation-container[data-v-b94c2b8b] .parameter-list-title{background:color-mix(in srgb,var(--scalar-background-2) 50%,transparent);border-radius:var(--scalar-radius-lg) var(--scalar-radius-lg) 0 0;padding:10px;margin-bottom:0;border:var(--scalar-border-width) solid var(--scalar-border-color);border-bottom:none;--scalar-font-size-2: var(--scalar-font-size-4)}.callback-operation-container[data-v-b94c2b8b] .parameter-list-items{border:var(--scalar-border-width) solid var(--scalar-border-color);border-radius:0 0 var(--scalar-radius-lg) var(--scalar-radius-lg)}.callback-operation-container[data-v-b94c2b8b] .parameter-list-items>li:first-of-type{border-top:none}.callback-operation-container[data-v-b94c2b8b] .parameter-list-items>li{padding:0 8px}.show-api-client-button[data-v-342ba62a]{appearance:none;border:none;padding:1px 6px;white-space:nowrap;border-radius:var(--scalar-radius);display:flex;justify-content:center;align-items:center;font-weight:var(--scalar-semibold);font-size:var(--scalar-small);line-height:22px;color:var(--scalar-background-2);font-family:var(--scalar-font);background:var(--scalar-button-1);position:relative;cursor:pointer;box-sizing:border-box;box-shadow:inset 0 0 0 1px #0000001a;outline-offset:2px}.show-api-client-button span[data-v-342ba62a],.show-api-client-button svg[data-v-342ba62a]{fill:currentColor;color:var(--scalar-button-1-color);z-index:1}.show-api-client-button[data-v-342ba62a]:hover{background:var(--scalar-button-1-hover)}.show-api-client-button svg[data-v-342ba62a]{margin-right:4px}.operation-title[data-v-55addca4]{justify-content:space-between;display:flex}.operation-details[data-v-55addca4]{flex-shrink:1;align-items:center;gap:9px;min-width:0;margin-top:0;display:flex}.operation-details[data-v-55addca4] .endpoint-anchor .scalar-button svg{width:16px;height:16px}.endpoint-type[data-v-55addca4]{z-index:0;width:60px;font-size:var(--scalar-small);text-transform:uppercase;font-weight:var(--scalar-bold);font-family:var(--scalar-font);flex-shrink:0;justify-content:center;align-items:center;gap:6px;padding:6px;display:flex;position:relative}.endpoint-type[data-v-55addca4]:after{content:"";z-index:-1;opacity:.15;border-radius:var(--scalar-radius);background:currentColor;position:absolute;inset:0}.endpoint-anchor[data-v-55addca4]{flex-shrink:1;align-items:center;min-width:0;display:flex}.endpoint-anchor.label[data-v-55addca4]{display:flex}.endpoint-label[data-v-55addca4]{min-width:0;color:var(--scalar-color-1);flex-shrink:1;align-items:baseline;gap:9px;display:flex}.endpoint-label-path[data-v-55addca4]{font-family:var(--scalar-font-code);font-size:var(--scalar-mini);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.endpoint-label-path[data-v-55addca4] em{color:var(--scalar-color-2)}.endpoint-label-name[data-v-55addca4]{color:var(--scalar-color-2);font-size:var(--scalar-small);text-overflow:ellipsis;white-space:nowrap;flex-shrink:1000000000;overflow:hidden}.endpoint-try-hint[data-v-55addca4]{flex-shrink:0;padding:2px}.endpoint-copy[data-v-55addca4]{color:currentColor}.endpoint-copy[data-v-55addca4] svg{stroke-width:2px}.endpoint-content[data-v-55addca4]{grid-auto-columns:1fr;grid-auto-flow:row;gap:9px;padding:9px;display:grid}@media(min-width:1000px){.endpoint-content[data-v-55addca4]{grid-auto-flow:column}}@container (max-width:900px){.endpoint-content[data-v-55addca4]{grid-template-columns:1fr}}.endpoint-content[data-v-55addca4]>*{min-width:0}.operation-details-card[data-v-55addca4]{flex-direction:column;gap:12px;min-width:0;display:flex}:is(.operation-details-card-item[data-v-55addca4] .parameter-list,.operation-details-card-item[data-v-55addca4] .callbacks-list){border:var(--scalar-border-width)solid var(--scalar-border-color);border-radius:var(--scalar-radius-lg);margin-top:0}.operation-details-card-item[data-v-55addca4]{flex-direction:column;gap:12px;display:flex}.operation-details-card-item[data-v-55addca4] .parameter-list-items{margin-bottom:0}.operation-details-card[data-v-55addca4] .parameter-item:last-of-type .parameter-schema{padding-bottom:12px}.operation-details-card[data-v-55addca4] .parameter-list .parameter-list{margin-bottom:12px}.operation-details-card[data-v-55addca4] .parameter-item{margin:0;padding:0}.operation-details-card[data-v-55addca4] .property{margin:0;padding:9px}:is(.operation-details-card[data-v-55addca4] .parameter-list-title,.operation-details-card[data-v-55addca4] .request-body-title,.operation-details-card[data-v-55addca4] .callbacks-title){text-transform:uppercase;font-weight:var(--scalar-bold);font-size:var(--scalar-mini);color:var(--scalar-color-2);margin:0;padding:9px;line-height:1.33}.operation-details-card[data-v-55addca4] .callback-list-item-title{padding-left:28px;padding-right:12px}.operation-details-card[data-v-55addca4] .callback-list-item-icon{left:6px}.operation-details-card[data-v-55addca4] .callback-operation-container{padding-inline:9px;padding-bottom:9px}:is(.operation-details-card[data-v-55addca4] .callback-operation-container>.request-body,.operation-details-card[data-v-55addca4] .callback-operation-container>.parameter-list){border:none}.operation-details-card[data-v-55addca4] .callback-operation-container>.request-body>.request-body-header{border-bottom:var(--scalar-border-width)solid var(--scalar-border-color);padding:0 0 9px}.operation-details-card[data-v-55addca4] .request-body-description{border-top:var(--scalar-border-width)solid var(--scalar-border-color);margin-top:0;padding:9px 9px 0}.operation-details-card[data-v-55addca4] .request-body{border-radius:var(--scalar-radius-lg);border:var(--scalar-border-width)solid var(--scalar-border-color);margin-top:0}.operation-details-card[data-v-55addca4] .request-body .schema-card--level-0>.schema-card-description{padding-inline:9px}.operation-details-card[data-v-55addca4] .request-body-header{border-bottom:0;padding-bottom:0}.operation-details-card[data-v-55addca4] .contents button{margin-right:9px}.operation-details-card[data-v-55addca4] .schema-card--open+.schema-card:not(.schema-card--open){margin-inline:9px;margin-bottom:9px}.operation-details-card[data-v-55addca4] .request-body-schema .property--level-0{padding:0}.operation-details-card[data-v-55addca4] .selected-content-type{margin-right:9px}.operation-example-card[data-v-55addca4]{top:calc(var(--refs-viewport-offset) + 24px);max-height:calc(var(--refs-viewport-height) - 48px);position:sticky}@media(max-width:600px){.operation-example-card[data-v-55addca4]{max-height:unset;position:static}}.ask-agent-scalar-input[data-v-b5a61e43]{appearance:none;border:none;white-space:nowrap;display:flex;justify-content:center;align-items:center;font-weight:var(--scalar-semibold);font-size:var(--scalar-small);line-height:22px;font-family:var(--scalar-font);position:relative;cursor:pointer;box-sizing:border-box;outline:none;outline-offset:2px;field-sizing:content;max-width:88px}.ask-agent-scalar-input[data-v-b5a61e43]:focus{cursor:text;width:100%!important;max-width:calc(100% - 50px)}.ask-agent-scalar-input[data-v-b5a61e43]:not(:placeholder-shown){width:100%!important;height:100%;field-sizing:border-box;cursor:text;max-width:calc(100% - 50px)}.ask-agent-scalar-input[data-v-b5a61e43]::placeholder{color:var(--scalar-color-1)}.ask-agent-scalar-input[data-v-b5a61e43]:focus::placeholder{color:var(--scalar-color-2)}.agent-button-container[data-v-b5a61e43]{position:relative;color:var(--scalar-color-1);background:color-mix(in srgb,var(--scalar-background-3),white 15%);display:flex;align-items:center;padding:1px 6px;margin-right:4px;border-radius:var(--scalar-radius);gap:4px;z-index:2;height:24px}.agent-button-container[data-v-b5a61e43]:hover:not(:focus-within){background:color-mix(in srgb,var(--scalar-background-3),white 20%)}.agent-button-container[data-v-b5a61e43]:has(.ask-agent-scalar-input:not(:placeholder-shown)),.agent-button-container[data-v-b5a61e43]:focus-within{width:100%;height:100%;position:absolute;left:0;top:0;border-radius:0}.ask-agent-scalar-send[data-v-b5a61e43]{background:var(--scalar-color-blue);color:#fff;width:24px;height:24px;flex-shrink:0;display:flex;justify-content:center;align-items:center;border-radius:var(--scalar-radius);margin-left:auto;display:none}.ask-agent-scalar-send[data-v-b5a61e43]:hover{background:color-mix(in srgb,var(--scalar-color-blue),transparent 10%)!important}.agent-button-container:has(.ask-agent-scalar-input:not(:placeholder-shown)) .ask-agent-scalar-send[data-v-b5a61e43]{display:flex}.examples[data-v-d5291d61]{position:sticky;top:calc(var(--refs-viewport-offset) + 24px)}.examples[data-v-d5291d61]>*{max-height:calc((var(--refs-viewport-height) - 60px) / 2);position:relative}.examples[data-v-d5291d61]>*:first-of-type:last-of-type{max-height:calc((var(--refs-viewport-height) - 60px))}@media(max-width:600px){.examples[data-v-d5291d61]>*{max-height:unset}}.deprecated[data-v-d5291d61] *{text-decoration:line-through}.section-flare[data-v-2a9c8c02]{top:0;right:0;pointer-events:none}.narrow-references-container{container-name:narrow-references-container;container-type:inline-size}.ref-search-meta[data-v-c1c368f9]{background:var(--scalar-background-1);border-bottom-left-radius:var(--scalar-radius-lg);border-bottom-right-radius:var(--scalar-radius-lg);padding:6px 12px;font-size:var(--scalar-font-size-4);color:var(--scalar-color-3);font-weight:var(--scalar-semibold);display:flex;gap:12px;border-top:var(--scalar-border-width) solid var(--scalar-border-color)}@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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse: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-mask-linear:linear-gradient(#fff,#fff);--tw-mask-radial:linear-gradient(#fff,#fff);--tw-mask-conic:linear-gradient(#fff,#fff);--tw-mask-left:linear-gradient(#fff,#fff);--tw-mask-right:linear-gradient(#fff,#fff);--tw-mask-bottom:linear-gradient(#fff,#fff);--tw-mask-top:linear-gradient(#fff,#fff);--tw-mask-top-from-position:0%;--tw-mask-top-to-position:100%;--tw-mask-top-from-color:black;--tw-mask-top-to-color:transparent;--tw-mask-bottom-from-position:0%;--tw-mask-bottom-to-position:100%;--tw-mask-bottom-from-color:black;--tw-mask-bottom-to-color:transparent;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-space-x-reverse:0}}}@layer scalar-base{@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1))}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-color-1)20%)}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-color-1)20%)}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:color-mix(in srgb,var(--scalar-background-1),#fff 10%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)20%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}:root,:host{--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1))}}.light-mode{--scalar-color-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-color-1)20%)}}.light-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-color-1)20%)}}.light-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}.light-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}.dark-mode{--scalar-tooltip-background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:color-mix(in srgb,var(--scalar-background-1),#fff 10%)}}.dark-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)20%)}}.dark-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}.dark-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1))}}}.light-mode{--scalar-color-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-color-1)20%)}}}.light-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-color-1)20%)}}}.light-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}}.light-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}}.dark-mode{--scalar-tooltip-background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:color-mix(in srgb,var(--scalar-background-1),#fff 10%)}}}.dark-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)20%)}}}.dark-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}}.dark-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}}}:root,:host{--leading-snug:1.375;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1)}@supports (color:color-mix(in lab,red,red)){@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1))}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-color-1)20%)}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-color-1)20%)}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:color-mix(in srgb,var(--scalar-background-1),#fff 10%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)20%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}.light-mode,.dark-mode{--scalar-sidebar-search-background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1))}}}.light-mode{--scalar-color-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-color-1)20%)}}}.light-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-color-1)20%)}}}.light-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}}.light-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}}.dark-mode{--scalar-tooltip-background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:color-mix(in srgb,var(--scalar-background-1),#fff 10%)}}}.dark-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)20%)}}}.dark-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}}.dark-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}}}body{line-height:inherit;margin:0}:root{--scalar-border-width:.5px;--scalar-radius:3px;--scalar-radius-lg:6px;--scalar-radius-xl:8px;--scalar-font:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif;--scalar-font-code:"JetBrains Mono",ui-monospace,Menlo,Monaco,"Cascadia Mono","Segoe UI Mono","Roboto Mono","Oxygen Mono","Ubuntu Monospace","Source Code Pro","Fira Mono","Droid Sans Mono","Courier New",monospace;--scalar-heading-1:24px;--scalar-page-description:16px;--scalar-heading-2:20px;--scalar-heading-3:16px;--scalar-heading-4:16px;--scalar-heading-5:16px;--scalar-heading-6:16px;--scalar-paragraph:16px;--scalar-small:14px;--scalar-mini:13px;--scalar-micro:12px;--scalar-bold:600;--scalar-semibold:500;--scalar-regular:400;--scalar-font-size-1:21px;--scalar-font-size-2:16px;--scalar-font-size-3:14px;--scalar-font-size-4:13px;--scalar-font-size-5:12px;--scalar-font-size-6:12px;--scalar-font-size-7:10px;--scalar-line-height-1:32px;--scalar-line-height-2:24px;--scalar-line-height-3:20px;--scalar-line-height-4:18px;--scalar-line-height-5:16px;--scalar-font-normal:400;--scalar-font-medium:500;--scalar-font-bold:700;--scalar-text-decoration:none;--scalar-text-decoration-hover:underline;--scalar-link-font-weight:inherit;--scalar-sidebar-indent:20px}.dark-mode{color-scheme:dark;--scalar-scrollbar-color:#ffffff2e;--scalar-scrollbar-color-active:#ffffff5c;--scalar-button-1:#fff;--scalar-button-1-hover:#ffffffe6;--scalar-button-1-color:black;--scalar-shadow-1:0 1px 3px 0 #0000001a;--scalar-shadow-2:0 0 0 .5px var(--scalar-border-color),#0f0f0f33 0px 3px 6px,#0f0f0f66 0px 9px 24px;--scalar-lifted-brightness:1.45;--scalar-backdrop-brightness:.5;--scalar-text-decoration-color:currentColor;--scalar-text-decoration-color-hover:currentColor}.light-mode{color-scheme:light;--scalar-scrollbar-color-active:#0000005c;--scalar-scrollbar-color:#0000002e;--scalar-button-1:#000;--scalar-button-1-hover:#000c;--scalar-button-1-color:#ffffffe6;--scalar-shadow-1:0 1px 3px 0 #0000001c;--scalar-shadow-2:#00000014 0px 13px 20px 0px,#00000014 0px 3px 8px 0px,#eeeeed 0px 0 0 .5px;--scalar-lifted-brightness:1;--scalar-backdrop-brightness:1;--scalar-text-decoration-color:currentColor;--scalar-text-decoration-color-hover:currentColor}.light-mode .dark-mode{color-scheme:dark!important}@media(max-width:460px){:root{--scalar-font-size-1:22px;--scalar-font-size-2:14px;--scalar-font-size-3:12px}}@media(max-width:720px){:root{--scalar-heading-1:24px;--scalar-page-description:20px}}:root{--scalar-text-decoration:underline;--scalar-text-decoration-hover:underline}.light-mode{--scalar-background-1:#fff;--scalar-background-2:#f6f6f6;--scalar-background-3:#e7e7e7;--scalar-background-accent:#8ab4f81f;--scalar-color-1:#1b1b1b;--scalar-color-2:#757575;--scalar-color-3:#8e8e8e;--scalar-color-accent:#09f;--scalar-border-color:#dfdfdf}.dark-mode{--scalar-background-1:#0f0f0f;--scalar-background-2:#1a1a1a;--scalar-background-3:#272727;--scalar-color-1:#e7e7e7;--scalar-color-2:#a4a4a4;--scalar-color-3:#797979;--scalar-color-accent:#00aeff;--scalar-background-accent:#3ea6ff1f;--scalar-border-color:#2d2d2d}.light-mode,.dark-mode{--scalar-sidebar-background-1:var(--scalar-background-1);--scalar-sidebar-color-1:var(--scalar-color-1);--scalar-sidebar-color-2:var(--scalar-color-2);--scalar-sidebar-border-color:var(--scalar-border-color);--scalar-sidebar-item-hover-background:var(--scalar-background-2);--scalar-sidebar-item-hover-color:var(--scalar-sidebar-color-2);--scalar-sidebar-item-active-background:var(--scalar-background-2);--scalar-sidebar-color-active:var(--scalar-sidebar-color-1);--scalar-sidebar-indent-border:var(--scalar-sidebar-border-color);--scalar-sidebar-indent-border-hover:var(--scalar-sidebar-border-color);--scalar-sidebar-indent-border-active:var(--scalar-sidebar-border-color);--scalar-sidebar-search-background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.light-mode,.dark-mode{--scalar-sidebar-search-background:color-mix(in srgb,var(--scalar-background-2),var(--scalar-background-1))}}}}}.light-mode,.dark-mode{--scalar-sidebar-search-color:var(--scalar-color-3);--scalar-sidebar-search-border-color:var(--scalar-border-color)}.light-mode{--scalar-color-green:#069061;--scalar-color-red:#ef0006;--scalar-color-yellow:#edbe20;--scalar-color-blue:#0082d0;--scalar-color-orange:#ff5800;--scalar-color-purple:#5203d1;--scalar-link-color:var(--scalar-color-1);--scalar-link-color-hover:var(--scalar-link-color);--scalar-button-1:#000;--scalar-button-1-hover:#000c;--scalar-button-1-color:#ffffffe6;--scalar-tooltip-background:#1a1a1ae6;--scalar-tooltip-color:#ffffffd9;--scalar-color-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-color-1)20%)}}}}}.light-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-color-1)20%)}}}}}.light-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}}}}.light-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.light-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}}}}.dark-mode{--scalar-color-green:#00b648;--scalar-color-red:#dc1b19;--scalar-color-yellow:#ffc90d;--scalar-color-blue:#4eb3ec;--scalar-color-orange:#ff8d4d;--scalar-color-purple:#b191f9;--scalar-link-color:var(--scalar-color-1);--scalar-link-color-hover:var(--scalar-link-color);--scalar-button-1:#fff;--scalar-button-1-hover:#ffffffe6;--scalar-button-1-color:black;--scalar-tooltip-background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-tooltip-background:color-mix(in srgb,var(--scalar-background-1),#fff 10%)}}}}}.dark-mode{--scalar-tooltip-color:#fffffff2;--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-color-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)20%)}}}}}.dark-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-alert:color-mix(in srgb,var(--scalar-color-orange),var(--scalar-background-1)95%)}}}}}.dark-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode{--scalar-background-danger:color-mix(in srgb,var(--scalar-color-red),var(--scalar-background-1)95%)}}}}}@supports (color:color(display-p3 1 1 1)){.light-mode{--scalar-color-accent:color(display-p3 0 .6 1);--scalar-color-green:color(display-p3 .023529 .564706 .380392);--scalar-color-red:color(display-p3 .937255 0 .023529);--scalar-color-yellow:color(display-p3 .929412 .745098 .12549);--scalar-color-blue:color(display-p3 0 .509804 .815686);--scalar-color-orange:color(display-p3 1 .4 .02);--scalar-color-purple:color(display-p3 .321569 .011765 .819608)}.dark-mode{--scalar-color-accent:color(display-p3 .07 .67 1);--scalar-color-green:color(display-p3 0 .713725 .282353);--scalar-color-red:color(display-p3 .862745 .105882 .098039);--scalar-color-yellow:color(display-p3 1 .788235 .05098);--scalar-color-blue:color(display-p3 .305882 .701961 .92549);--scalar-color-orange:color(display-p3 1 .552941 .301961);--scalar-color-purple:color(display-p3 .694118 .568627 .976471)}}:root,:host{--leading-snug:1.375;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--leading-normal:1.5}body{background-color:var(--scalar-background-1);margin:0}}@layer scalar-theme;.scalar-app .\\@container{container-type:inline-size}.scalar-app .-top-2{top:-8px}.scalar-app .top-\\(--refs-header-height\\){top:var(--refs-header-height)}.scalar-app .top-\\(--scalar-custom-header-height\\,0\\){top:var(--scalar-custom-header-height,0)}.scalar-app .top-3\\.5{top:14px}.scalar-app .top-\\[calc\\(9px\\+0\\.5lh\\)\\]{top:calc(9px + .5lh)}.scalar-app .-left-4\\.5{left:-18px}.scalar-app .-left-5{left:-20px}.scalar-app .-left-6{left:-24px}.scalar-app .order-789{order:789}.scalar-app .-m-2{margin:-8px}.scalar-app .-mx-2{margin-inline:-8px}.scalar-app .my-2{margin-block:8px}.scalar-app .my-3{margin-block:12px}.scalar-app .-mt-1{margin-top:-4px}.scalar-app .mt-6{margin-top:24px}.scalar-app .mb-3{margin-bottom:12px}.scalar-app .size-4\\.5{width:18px;height:18px}.scalar-app .h-\\(--refs-sidebar-height\\){height:var(--refs-sidebar-height)}.scalar-app .h-\\(--scalar-header-height\\){height:var(--scalar-header-height)}.scalar-app .h-\\[calc\\(100\\%\\+16px\\)\\]{height:calc(100% + 16px)}.scalar-app .max-h-\\[60vh\\]{max-height:60vh}.scalar-app .min-h-3{min-height:12px}.scalar-app .min-h-7{min-height:28px}.scalar-app .min-h-dvh{min-height:100dvh}.scalar-app .w-\\(--refs-sidebar-width\\){width:var(--refs-sidebar-width)}.scalar-app .w-4\\.5{width:18px}.scalar-app .w-96{width:384px}.scalar-app .w-110{width:440px}.scalar-app .w-120{width:480px}.scalar-app .max-w-\\(--refs-content-max-width\\){max-width:var(--refs-content-max-width)}.scalar-app .max-w-64{max-width:256px}.scalar-app .min-w-3{min-width:12px}.scalar-app .min-w-7{min-width:28px}.scalar-app .flex-grow{flex-grow:1}.scalar-app .rotate-45{rotate:45deg}.scalar-app .scroll-mt-16{scroll-margin-top:64px}.scalar-app .scroll-mt-24{scroll-margin-top:96px}.scalar-app .list-none{list-style-type:none}.scalar-app .content-end{align-content:flex-end}.scalar-app .gap-7{gap:28px}.scalar-app .\\!rounded-b-xl{border-bottom-right-radius:var(--scalar-radius-xl)!important;border-bottom-left-radius:var(--scalar-radius-xl)!important}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}.scalar-app .bg-linear-to-l{--tw-gradient-position:to left}@supports (background-image:linear-gradient(in lab,red,red)){.scalar-app .bg-linear-to-l{--tw-gradient-position:to left in oklab}}.scalar-app .bg-linear-to-l{background-image:linear-gradient(var(--tw-gradient-stops))}.scalar-app .from-40\\%{--tw-gradient-from-position:40%}.scalar-app .to-transparent{--tw-gradient-to:transparent;--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))}.scalar-app .p-7{padding:28px}.scalar-app .px-15{padding-inline:60px}.scalar-app .py-2\\.25{padding-block:9px}.scalar-app .pt-1\\.5{padding-top:6px}.scalar-app .pb-12{padding-bottom:48px}.scalar-app .leading-\\[1\\.45\\]{--tw-leading:1.45;line-height:1.45}.scalar-app .leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.scalar-app .text-current{color:currentColor}.scalar-app .\\[--scalar-address-bar-height\\:0px\\]{--scalar-address-bar-height:0px}.scalar-app .\\[grid-area\\:header\\]{grid-area:header}.scalar-app .\\[grid-area\\:navigation\\]{grid-area:navigation}.scalar-app .group-last\\:mr-0:is(:where(.group):last-child *){margin-right:0}.scalar-app .group-open\\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}.scalar-app .group-open\\:flex-wrap:is(:where(.group):is([open],:popover-open,:open) *){flex-wrap:wrap}.scalar-app .group-open\\:whitespace-normal:is(:where(.group):is([open],:popover-open,:open) *){white-space:normal}.scalar-app .group-focus-within\\/parameter-item\\:opacity-100:is(:where(.group\\/parameter-item):focus-within *){opacity:1}@media(hover:hover){.scalar-app .group-hover\\:flex:is(:where(.group):hover *){display:flex}.scalar-app .group-hover\\:text-c-1:is(:where(.group):hover *){color:var(--scalar-color-1)}.scalar-app .group-hover\\:opacity-100:is(:where(.group):hover *),.scalar-app .group-hover\\/heading\\:opacity-100:is(:where(.group\\/heading):hover *),.scalar-app .group-hover\\/parameter-item\\:opacity-100:is(:where(.group\\/parameter-item):hover *){opacity:1}}.scalar-app .group-has-focus-visible\\/heading\\:opacity-100:is(:where(.group\\/heading):has(:focus-visible) *){opacity:1}:is(.scalar-app .\\*\\:first\\:p-3>*):first-child{padding:12px}.scalar-app .empty\\:hidden:empty{display:none}@media(hover:hover){.scalar-app .hover\\:bg-b-2:hover{background-color:var(--scalar-background-2)}.scalar-app .hover\\:text-c-1:hover{color:var(--scalar-color-1)}.scalar-app .hover\\:text-sidebar-c-1:hover{color:var(--scalar-sidebar-color-1,var(--scalar-color-1))}}.scalar-app .focus-visible\\:opacity-100:focus-visible{opacity:1}@media(min-width:1200px){.scalar-app .xl\\:mb-1\\.5{margin-bottom:6px}.scalar-app .xl\\:gap-12{gap:48px}.scalar-app .xl\\:border-r{border-right-style:var(--tw-border-style);border-right-width:var(--scalar-border-width)}.scalar-app .xl\\:border-none{--tw-border-style:none;border-style:none}.scalar-app .xl\\:first\\:ml-auto:first-child{margin-left:auto}}.scalar-app .\\[\\&_a\\]\\:underline a{text-decoration-line:underline}.scalar-app .\\[\\&_a\\:hover\\]\\:text-c-1 a:hover{color:var(--scalar-color-1)}.scalar-app .\\[\\&_code\\]\\:font-code code{font-family:var(--scalar-font-code)}.scalar-app .\\[\\&_em\\]\\:text-c-1 em{color:var(--scalar-color-1)}.scalar-app .\\[\\&_em\\]\\:not-italic em{font-style:normal}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:var(--scalar-tooltip-color)}@supports (color:color-mix(in lab,red,red)){:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:color-mix(in srgb,var(--scalar-tooltip-color),var(--scalar-tooltip-background))}}}@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-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-mask-linear{syntax:"*";inherits:false;initial-value:linear-gradient(#fff,#fff)}@property --tw-mask-radial{syntax:"*";inherits:false;initial-value:linear-gradient(#fff,#fff)}@property --tw-mask-conic{syntax:"*";inherits:false;initial-value:linear-gradient(#fff,#fff)}@property --tw-mask-left{syntax:"*";inherits:false;initial-value:linear-gradient(#fff,#fff)}@property --tw-mask-right{syntax:"*";inherits:false;initial-value:linear-gradient(#fff,#fff)}@property --tw-mask-bottom{syntax:"*";inherits:false;initial-value:linear-gradient(#fff,#fff)}@property --tw-mask-top{syntax:"*";inherits:false;initial-value:linear-gradient(#fff,#fff)}@property --tw-mask-top-from-position{syntax:"*";inherits:false;initial-value:0%}@property --tw-mask-top-to-position{syntax:"*";inherits:false;initial-value:100%}@property --tw-mask-top-from-color{syntax:"*";inherits:false;initial-value:black}@property --tw-mask-top-to-color{syntax:"*";inherits:false;initial-value:transparent}@property --tw-mask-bottom-from-position{syntax:"*";inherits:false;initial-value:0%}@property --tw-mask-bottom-to-position{syntax:"*";inherits:false;initial-value:100%}@property --tw-mask-bottom-from-color{syntax:"*";inherits:false;initial-value:black}@property --tw-mask-bottom-to-color{syntax:"*";inherits:false;initial-value:transparent}@property --tw-ease{syntax:"*";inherits:false}@keyframes fade-in-27df5cd8{0%{opacity:0}70%{opacity:0}to{opacity:1}}@keyframes rotate-27df5cd8{0%{transform:scale(3.5)rotate(0)}to{transform:scale(3.5)rotate(360deg)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown a{-webkit-text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent);text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert{background-color:color-mix(in srgb,var(--scalar-background-2),transparent)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-note{background-color:color-mix(in srgb,var(--scalar-color-blue),transparent 97%)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-note{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-blue),transparent 50%)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-tip{background-color:color-mix(in srgb,var(--scalar-color-2),transparent 97%)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-tip{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-2),transparent 50%)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{background-color:color-mix(in srgb,var(--scalar-color-orange),transparent 97%)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-orange),transparent 50%)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-caution{background-color:color-mix(in srgb,var(--scalar-color-red),transparent 97%)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-caution{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-red),transparent 50%)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-success{background-color:color-mix(in srgb,var(--scalar-color-green),transparent 97%)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-success{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-green),transparent 50%)}}@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}@keyframes fadein-layout-c36b47da{0%{opacity:0}to{opacity:1}}@keyframes fadein-modal-c36b47da{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translate(0)}}@media(hover:hover){.scalar-app .group-hover\\/button\\:opacity-0:is(:where(.group\\/button):hover *){opacity:0}.scalar-app .peer-hover\\/button\\:opacity-100:is(:where(.peer\\/button):hover~*),.scalar-app .hover\\:opacity-100:hover{opacity:1}}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}}}.scalar-app .bg-c-accent{background-color:var(--scalar-color-accent)}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}}:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:var(--scalar-tooltip-color)}@supports (color:color-mix(in lab,red,red)){:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:var(--scalar-tooltip-color)}@supports (color:color-mix(in lab,red,red)){:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:color-mix(in srgb,var(--scalar-tooltip-color),var(--scalar-tooltip-background))}}}}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}}.scalar-app .to-b-1\\.5{--tw-gradient-to:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}}:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:var(--scalar-tooltip-color)}@supports (color:color-mix(in lab,red,red)){:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:var(--scalar-tooltip-color)}@supports (color:color-mix(in lab,red,red)){:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:color-mix(in srgb,var(--scalar-tooltip-color),var(--scalar-tooltip-background))}}}}@media(hover:hover){.scalar-app .group-hover\\:text-c-1:is(:where(.group):hover *){color:var(--scalar-color-1)}.scalar-app .group-hover\\/button\\:bg-sidebar-indent-border-hover:is(:where(.group\\/button):hover *){background-color:var(--scalar-sidebar-indent-border-hover,var(--scalar-border-color))}.scalar-app .group-hover\\/button\\:text-c-1:is(:where(.group\\/button):hover *){color:var(--scalar-color-1)}.scalar-app .hover\\:bg-b-2:hover{background-color:var(--scalar-background-2)}.scalar-app .hover\\:bg-b-3:hover{background-color:var(--scalar-background-3)}.scalar-app .hover\\:bg-h-btn:hover{background-color:var(--scalar-button-1-hover)}.scalar-app .hover\\:bg-sidebar-b-1:hover{background-color:var(--scalar-sidebar-background-1,var(--scalar-background-1))}.scalar-app .hover\\:bg-sidebar-b-hover:hover{background-color:var(--scalar-sidebar-item-hover-background,var(--scalar-background-2))}.scalar-app .hover\\:bg-linear-to-b:hover{--tw-gradient-position:to bottom}@supports (background-image:linear-gradient(in lab,red,red)){.scalar-app .hover\\:bg-linear-to-b:hover{--tw-gradient-position:to bottom in oklab}}.scalar-app .hover\\:bg-linear-to-b:hover{background-image:linear-gradient(var(--tw-gradient-stops))}.scalar-app .hover\\:bg-linear-to-t:hover{--tw-gradient-position:to top}@supports (background-image:linear-gradient(in lab,red,red)){.scalar-app .hover\\:bg-linear-to-t:hover{--tw-gradient-position:to top in oklab}}.scalar-app .hover\\:bg-linear-to-t:hover{background-image:linear-gradient(var(--tw-gradient-stops))}.scalar-app .hover\\:text-c-1:hover{color:var(--scalar-color-1)}.scalar-app .hover\\:text-sidebar-c-1:hover{color:var(--scalar-sidebar-color-1,var(--scalar-color-1))}.scalar-app .hover\\:text-sidebar-c-hover:hover{color:var(--scalar-sidebar-item-hover-color,var(--scalar-sidebar-color-2))}.scalar-app .hover\\:underline:hover{text-decoration-line:underline}.scalar-app .hover\\:brightness-90:hover{--tw-brightness:brightness(90%);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,)}}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown a{-webkit-text-decoration-color:var(--font-color)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown a{-webkit-text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent)}}.scalar-app .markdown a{-webkit-text-decoration-color:var(--font-color);text-decoration-color:var(--font-color)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown a{-webkit-text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent);text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent)}}.scalar-app .markdown .markdown-alert{background-color:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert{background-color:color-mix(in srgb,var(--scalar-background-2),transparent)}}.scalar-app .markdown .markdown-alert.markdown-alert-note{background-color:var(--scalar-color-blue)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-note{background-color:color-mix(in srgb,var(--scalar-color-blue),transparent 97%)}}.scalar-app .markdown .markdown-alert.markdown-alert-note{border:var(--scalar-border-width)solid var(--scalar-color-blue)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-note{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-blue),transparent 50%)}}.scalar-app .markdown .markdown-alert.markdown-alert-tip{background-color:var(--scalar-color-2)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-tip{background-color:color-mix(in srgb,var(--scalar-color-2),transparent 97%)}}.scalar-app .markdown .markdown-alert.markdown-alert-tip{border:var(--scalar-border-width)solid var(--scalar-color-2)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-tip{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-2),transparent 50%)}}.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{background-color:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{background-color:color-mix(in srgb,var(--scalar-color-orange),transparent 97%)}}.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{border:var(--scalar-border-width)solid var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-orange),transparent 50%)}}.scalar-app .markdown .markdown-alert.markdown-alert-caution{background-color:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-caution{background-color:color-mix(in srgb,var(--scalar-color-red),transparent 97%)}}.scalar-app .markdown .markdown-alert.markdown-alert-caution{border:var(--scalar-border-width)solid var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-caution{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-red),transparent 50%)}}.scalar-app .markdown .markdown-alert.markdown-alert-success{background-color:var(--scalar-color-green)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-success{background-color:color-mix(in srgb,var(--scalar-color-green),transparent 97%)}}.scalar-app .markdown .markdown-alert.markdown-alert-success{border:var(--scalar-border-width)solid var(--scalar-color-green)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-success{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-green),transparent 50%)}}}.scalar-app .right-0\\.75{right:3px}.scalar-app .ml-2{margin-left:8px}.scalar-app .self-start{align-self:flex-start}@media(hover:hover){.scalar-app .group-hover\\/button\\:opacity-0:is(:where(.group\\/button):hover *){opacity:0}}.scalar-app .group-focus-visible\\/button\\:opacity-0:is(:where(.group\\/button):focus-visible *),.scalar-app .group-has-\\[\\~\\*_\\[aria-expanded\\=true\\]\\]\\/button\\:opacity-0:is(:where(.group\\/button):has(~* [aria-expanded=true]) *),.scalar-app .group-has-\\[\\~\\*\\:focus-within\\]\\/button\\:opacity-0:is(:where(.group\\/button):has(~:focus-within) *),.scalar-app .group-has-\\[\\~\\*\\:hover\\]\\/button\\:opacity-0:is(:where(.group\\/button):has(~:hover) *){opacity:0}@media(hover:hover){.scalar-app .peer-hover\\/button\\:opacity-100:is(:where(.peer\\/button):hover~*){opacity:1}}.scalar-app .peer-focus-visible\\/button\\:opacity-100:is(:where(.peer\\/button):focus-visible~*){opacity:1}.scalar-app .after\\:pointer-events-none:after{content:var(--tw-content);pointer-events:none}.scalar-app .after\\:absolute:after{content:var(--tw-content);position:absolute}.scalar-app .after\\:inset-0:after{content:var(--tw-content);inset:0}.scalar-app .after\\:inset-x-0:after{content:var(--tw-content);inset-inline:0}.scalar-app .after\\:-top-0\\.5:after{content:var(--tw-content);top:-2px}.scalar-app .after\\:-bottom-0\\.5:after{content:var(--tw-content);bottom:-2px}.scalar-app .after\\:block:after{content:var(--tw-content);display:block}.scalar-app .after\\:h-0\\.75:after{content:var(--tw-content);height:3px}.scalar-app .after\\:rounded:after{content:var(--tw-content);border-radius:var(--scalar-radius)}.scalar-app .after\\:bg-blue:after{content:var(--tw-content);background-color:var(--scalar-color-blue)}.scalar-app .after\\:opacity-15:after{content:var(--tw-content);opacity:.15}.scalar-app .focus-within\\:opacity-100:focus-within{opacity:1}@media(hover:hover){.scalar-app .hover\\:opacity-100:hover{opacity:1}}.scalar-app .has-\\[\\&\\[aria-expanded\\=true\\]\\]\\:opacity-100:has([aria-expanded=true]){opacity:1}:where(.scalar-app){font-family:var(--scalar-font);color:var(--scalar-color-1);-webkit-text-size-adjust:100%;tab-size:4;line-height:1.15}:where(.scalar-app) *,:where(.scalar-app) :before,:where(.scalar-app) :after{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--scalar-border-color);outline-width:1px;outline-style:none;outline-color:var(--scalar-color-accent);font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;font-style:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;text-align:inherit;line-height:inherit;color:inherit;margin:unset;padding:unset;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:where(.scalar-app) :before,:where(.scalar-app) :after{--tw-content:""}:where(.scalar-app) button,:where(.scalar-app) input,:where(.scalar-app) optgroup,:where(.scalar-app) select,:where(.scalar-app) textarea{background:0 0}:where(.scalar-app) ::file-selector-button{background:0 0}:where(.scalar-app) ol,:where(.scalar-app) ul,:where(.scalar-app) menu{list-style:none}:where(.scalar-app) input:where(:not([type=button],[type=reset],[type=submit])),:where(.scalar-app) select,:where(.scalar-app) textarea{border-radius:var(--scalar-radius);border-width:1px}:where(.scalar-app) input::placeholder{color:var(--scalar-color-3);font-family:var(--scalar-font)}:where(.scalar-app) input[type=search]::-webkit-search-cancel-button{appearance:none}:where(.scalar-app) input[type=search]::-webkit-search-decoration{appearance:none}:where(.scalar-app) summary::-webkit-details-marker{display:none}:where(.scalar-app) input:-webkit-autofill{-webkit-background-clip:text!important;background-clip:text!important}:where(.scalar-app) :focus-visible{border-radius:var(--scalar-radius);outline-style:solid}:where(.scalar-app) button:focus-visible,:where(.scalar-app) [role=button]:focus-visible{outline-offset:-1px}:where(.scalar-app) button,:where(.scalar-app) [role=button]{cursor:pointer}:where(.scalar-app) :disabled{cursor:default}:where(.scalar-app) img,:where(.scalar-app) svg,:where(.scalar-app) video,:where(.scalar-app) canvas,:where(.scalar-app) audio,:where(.scalar-app) iframe,:where(.scalar-app) embed,:where(.scalar-app) object{vertical-align:middle;display:block}:where(.scalar-app) [hidden]{display:none}.scalar-app .cm-scroller,.scalar-app .custom-scroll{scrollbar-color:transparent transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;overflow-y:auto}.scalar-app .custom-scroll-self-contain-overflow{overscroll-behavior:contain}.scalar-app .cm-scroller:hover,.scalar-app .custom-scroll:hover,.scalar-app.scalar-scrollbars-obtrusive .cm-scroller,.scalar-app.scalar-scrollbars-obtrusive .custom-scroll{scrollbar-color:var(--scalar-scrollbar-color,transparent)transparent}.scalar-app .cm-scroller:hover::-webkit-scrollbar-thumb{background:var(--scalar-scrollbar-color);background-clip:content-box;border:3px solid #0000}.scalar-app .custom-scroll:hover::-webkit-scrollbar-thumb{background:var(--scalar-scrollbar-color);background-clip:content-box;border:3px solid #0000}.scalar-app .cm-scroller::-webkit-scrollbar-thumb:active{background:var(--scalar-scrollbar-color-active);background-clip:content-box;border:3px solid #0000}.scalar-app .custom-scroll::-webkit-scrollbar-thumb:active{background:var(--scalar-scrollbar-color-active);background-clip:content-box;border:3px solid #0000}.scalar-app .cm-scroller::-webkit-scrollbar-corner{background:0 0}.scalar-app .custom-scroll::-webkit-scrollbar-corner{background:0 0}.scalar-app .cm-scroller::-webkit-scrollbar{width:12px;height:12px}.scalar-app .custom-scroll::-webkit-scrollbar{width:12px;height:12px}.scalar-app .cm-scroller::-webkit-scrollbar-track{background:0 0}.scalar-app .custom-scroll::-webkit-scrollbar-track{background:0 0}.scalar-app .cm-scroller::-webkit-scrollbar-thumb{background:padding-box content-box;border:3px solid #0000;border-radius:20px}.scalar-app .custom-scroll::-webkit-scrollbar-thumb{background:padding-box content-box;border:3px solid #0000;border-radius:20px}@media(pointer:coarse){.scalar-app .cm-scroller,.scalar-app .custom-scroll{padding-right:12px}}.scalar-app .invisible{visibility:hidden}.scalar-app .-inset-y-0\\.5{inset-block:-2px}.scalar-app .-inset-y-0\\.75{inset-block:-3px}.scalar-app .inset-y-0{inset-block:0}.scalar-app .inset-y-0\\.5{inset-block:2px}.scalar-app .-top-1{top:-4px}.scalar-app .top-\\(--nested-items-offset\\){top:var(--nested-items-offset)}.scalar-app .top-0\\.5{top:2px}.scalar-app .top-1\\/2{top:50%}.scalar-app .top-2\\.5{top:10px}.scalar-app .top-22{top:88px}.scalar-app .top-\\[1lh\\]{top:1lh}.scalar-app .top-\\[calc\\(10px\\+0\\.5lh\\)\\]{top:calc(10px + .5lh)}.scalar-app .top-px{top:1px}.scalar-app .-right-1{right:-4px}.scalar-app .-right-1\\.5{right:-6px}.scalar-app .right-1\\.25{right:5px}.scalar-app .right-2\\.5{right:10px}.scalar-app .left-2{left:8px}.scalar-app .left-2\\.5{left:10px}.scalar-app .left-4{left:16px}.scalar-app .left-border{left:var(--scalar-border-width)}.scalar-app .left-px{left:1px}.scalar-app .-z-2{z-index:-2}.scalar-app .z-tooltip{z-index:99999}.scalar-app .-m-1{margin:-4px}.scalar-app .-m-1\\.5{margin:-6px}.scalar-app .-m-px{margin:-1px}.scalar-app .m-1{margin:4px}.scalar-app .-mx-0\\.75{margin-inline:-3px}.scalar-app .-mx-px{margin-inline:-1px}.scalar-app .mx-px{margin-inline:1px}.scalar-app .-my-1\\.5{margin-block:-6px}.scalar-app .-my-2{margin-block:-8px}.scalar-app .my-0\\.75{margin-block:3px}.scalar-app .my-1\\.5{margin-block:6px}.scalar-app .-mt-1\\.5{margin-top:-6px}.scalar-app .mt-0{margin-top:0}.scalar-app .mt-\\[15svh\\]{margin-top:15svh}.scalar-app .mt-\\[20svh\\]{margin-top:20svh}.scalar-app .-mr-0\\.25{margin-right:-1px}.scalar-app .mr-0{margin-right:0}.scalar-app .mr-\\[calc\\(20px-var\\(--scalar-sidebar-indent\\)\\)\\]{margin-right:calc(20px - var(--scalar-sidebar-indent))}.scalar-app .-mb-1{margin-bottom:-4px}.scalar-app .-ml-0\\.75{margin-left:-3px}.scalar-app .line-clamp-\\(--markdown-clamp\\){-webkit-line-clamp:var(--markdown-clamp);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.scalar-app .\\!hidden{display:none!important}.scalar-app .size-2{width:8px;height:8px}.scalar-app .size-2\\.75{width:11px;height:11px}.scalar-app .size-3\\.25{width:13px;height:13px}.scalar-app .size-60{width:240px;height:240px}.scalar-app .size-\\[23px\\]{width:23px;height:23px}.scalar-app .h-0{height:0}.scalar-app .h-1{height:4px}.scalar-app .h-24{height:96px}.scalar-app .h-32{height:128px}.scalar-app .h-\\[1lh\\]{height:1lh}.scalar-app .h-border{height:var(--scalar-border-width)}.scalar-app .max-h-20{max-height:80px}.scalar-app .max-h-\\[80svh\\]{max-height:80svh}.scalar-app .max-h-\\[90svh\\]{max-height:90svh}.scalar-app .max-h-dvh{max-height:100dvh}.scalar-app .max-h-radix-popper{max-height:calc(var(--radix-popper-available-height) - 8px)}.scalar-app .min-h-96{min-height:384px}.scalar-app .min-h-header{min-height:48px}.scalar-app .w-12{width:48px}.scalar-app .w-24{width:96px}.scalar-app .w-32{width:128px}.scalar-app .w-40{width:160px}.scalar-app .w-48{width:192px}.scalar-app .w-\\[38px\\]{width:38px}.scalar-app .w-\\[calc\\(100vw-12px\\)\\]{width:calc(100vw - 12px)}.scalar-app .w-\\[var\\(--scalar-sidebar-indent\\)\\]{width:var(--scalar-sidebar-indent)}.scalar-app .w-border{width:var(--scalar-border-width)}.scalar-app .w-min{width:min-content}.scalar-app .w-screen{width:100vw}.scalar-app .max-w-\\[360px\\]{max-width:360px}.scalar-app .max-w-\\[480px\\]{max-width:480px}.scalar-app .max-w-\\[540px\\]{max-width:540px}.scalar-app .max-w-\\[640px\\]{max-width:640px}.scalar-app .max-w-\\[800px\\]{max-width:800px}.scalar-app .max-w-\\[1000px\\]{max-width:1000px}.scalar-app .max-w-\\[inherit\\]{max-width:inherit}.scalar-app .max-w-xs{max-width:320px}.scalar-app .min-w-6{min-width:24px}.scalar-app .min-w-40{min-width:160px}.scalar-app .min-w-min{min-width:min-content}.scalar-app .flex-shrink,.scalar-app .shrink{flex-shrink:1}.scalar-app .-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .translate-x-2\\.5{--tw-translate-x:10px;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .translate-x-\\[14px\\]{--tw-translate-x:14px;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .-translate-y-1\\.5{--tw-translate-y:-6px;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .-translate-y-1\\/2{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .translate-y-0{--tw-translate-y:0px;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .translate-y-1\\.5{--tw-translate-y:6px;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scalar-app .scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scalar-app .appearance-none{appearance:none}.scalar-app .grid-flow-col{grid-auto-flow:column}.scalar-app .\\!items-end{align-items:flex-end!important}.scalar-app .\\!items-start{align-items:flex-start!important}.scalar-app .items-baseline{align-items:baseline}.scalar-app .\\!justify-end{justify-content:flex-end!important}.scalar-app .\\!justify-start{justify-content:flex-start!important}.scalar-app .gap-2\\.25{gap:9px}.scalar-app .gap-x-4{column-gap:16px}.scalar-app .gap-y-8{row-gap:32px}:where(.scalar-app .divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(var(--scalar-border-width)*var(--tw-divide-x-reverse));border-inline-end-width:calc(var(--scalar-border-width)*calc(1 - var(--tw-divide-x-reverse)))}.scalar-app .self-end{align-self:flex-end}.scalar-app .overflow-x-clip{overflow-x:clip}.scalar-app .overscroll-contain{overscroll-behavior:contain}.scalar-app .rounded-\\[inherit\\]{border-radius:inherit}.scalar-app .rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.scalar-app .border-1{border-style:var(--tw-border-style);border-width:1px}.scalar-app .border-solid{--tw-border-style:solid;border-style:solid}.scalar-app .border-\\(--scalar-background-3\\){border-color:var(--scalar-background-3)}.scalar-app .border-border{border-color:var(--scalar-border-color)}.scalar-app .border-c-alert{border-color:var(--scalar-color-alert)}.scalar-app .border-red{border-color:var(--scalar-color-red)}.scalar-app .border-sidebar-border{border-color:var(--scalar-sidebar-border-color,var(--scalar-border-color))}.scalar-app .border-sidebar-border-search{border-color:var(--scalar-sidebar-search-border-color,var(--scalar-border-color))}.scalar-app .bg-\\(--bg-light\\){background-color:var(--bg-light)}.scalar-app .bg-b-1,.scalar-app .bg-b-1\\.5{background-color:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-b-1\\.5{background-color:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}}}}.scalar-app .bg-b-alert{background-color:var(--scalar-background-alert)}.scalar-app .bg-b-btn{background-color:var(--scalar-button-1)}.scalar-app .bg-b-tooltip{background-color:var(--scalar-tooltip-background)}.scalar-app .bg-backdrop{background-color:#00000038}.scalar-app .bg-border{background-color:var(--scalar-border-color)}.scalar-app .bg-c-danger{background-color:var(--scalar-color-danger)}.scalar-app .bg-inherit{background-color:inherit}.scalar-app .bg-red{background-color:var(--scalar-color-red)}.scalar-app .bg-sidebar-b-search{background-color:var(--scalar-sidebar-search-background,var(--scalar-background-2))}.scalar-app .bg-sidebar-indent-border{background-color:var(--scalar-sidebar-indent-border,var(--scalar-border-color))}.scalar-app .bg-sidebar-indent-border-active{background-color:var(--scalar-sidebar-indent-border-active,var(--scalar-color-accent))}.scalar-app .bg-transparent{background-color:#0000}.scalar-app .bg-linear-to-b{--tw-gradient-position:to bottom}@supports (background-image:linear-gradient(in lab,red,red)){.scalar-app .bg-linear-to-b{--tw-gradient-position:to bottom in oklab}}.scalar-app .bg-linear-to-b{background-image:linear-gradient(var(--tw-gradient-stops))}.scalar-app .from-b-1{--tw-gradient-from:var(--scalar-background-1);--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))}.scalar-app .to-b-1\\.5{--tw-gradient-to:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.scalar-app .to-b-1\\.5{--tw-gradient-to:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}}}}.scalar-app .to-b-1\\.5{--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))}.scalar-app .to-b-2{--tw-gradient-to:var(--scalar-background-2);--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))}.scalar-app .mask-y-from-\\[calc\\(100\\%-8px\\)\\]{-webkit-mask-image:var(--tw-mask-linear),var(--tw-mask-radial),var(--tw-mask-conic);mask-image:var(--tw-mask-linear),var(--tw-mask-radial),var(--tw-mask-conic);--tw-mask-linear:var(--tw-mask-left),var(--tw-mask-right),var(--tw-mask-bottom),var(--tw-mask-top);--tw-mask-top:linear-gradient(to top,var(--tw-mask-top-from-color)var(--tw-mask-top-from-position),var(--tw-mask-top-to-color)var(--tw-mask-top-to-position));--tw-mask-top-from-position: calc(100% - 8px) ;--tw-mask-bottom:linear-gradient(to bottom,var(--tw-mask-bottom-from-color)var(--tw-mask-bottom-from-position),var(--tw-mask-bottom-to-color)var(--tw-mask-bottom-to-position));--tw-mask-bottom-from-position: calc(100% - 8px) ;-webkit-mask-composite:source-in;mask-composite:intersect}.scalar-app .mask-y-to-100\\%{-webkit-mask-image:var(--tw-mask-linear),var(--tw-mask-radial),var(--tw-mask-conic);mask-image:var(--tw-mask-linear),var(--tw-mask-radial),var(--tw-mask-conic);--tw-mask-linear:var(--tw-mask-left),var(--tw-mask-right),var(--tw-mask-bottom),var(--tw-mask-top);--tw-mask-top:linear-gradient(to top,var(--tw-mask-top-from-color)var(--tw-mask-top-from-position),var(--tw-mask-top-to-color)var(--tw-mask-top-to-position));--tw-mask-top-to-position:100%;--tw-mask-bottom:linear-gradient(to bottom,var(--tw-mask-bottom-from-color)var(--tw-mask-bottom-from-position),var(--tw-mask-bottom-to-color)var(--tw-mask-bottom-to-position));--tw-mask-bottom-to-position:100%;-webkit-mask-composite:source-in;mask-composite:intersect}.scalar-app .mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.scalar-app .p-0\\.25{padding:1px}.scalar-app .p-2\\.5{padding:10px}.scalar-app .p-6{padding:24px}.scalar-app .px-3\\.5{padding-inline:14px}.scalar-app .px-9{padding-inline:36px}.scalar-app .py-4{padding-block:16px}.scalar-app .py-\\[6\\.75px\\]{padding-block:6.75px}.scalar-app .pr-\\[100\\%\\]{padding-right:100%}.scalar-app .pl-8{padding-left:32px}.scalar-app .pl-\\[100\\%\\]{padding-left:100%}.scalar-app .text-base\\/5{font-size:var(--scalar-font-size-3);line-height:var(--scalar-line-height-5)}.scalar-app .text-sm\\/5{font-size:var(--scalar-font-size-4);line-height:var(--scalar-line-height-5)}.scalar-app .text-lg{font-size:var(--scalar-font-size-2)}.scalar-app .leading-5{--tw-leading:var(--scalar-line-height-5);line-height:var(--scalar-line-height-5)}.scalar-app .font-sidebar{--tw-font-weight:var(--scalar-sidebar-font-weight,var(--scalar-regular));font-weight:var(--scalar-sidebar-font-weight,var(--scalar-regular))}.scalar-app .font-sidebar-active{--tw-font-weight:var(--scalar-sidebar-font-weight-active,var(--scalar-semibold));font-weight:var(--scalar-sidebar-font-weight-active,var(--scalar-semibold))}.scalar-app .break-words,.scalar-app .wrap-break-word{overflow-wrap:break-word}.scalar-app .text-c-alert{color:var(--scalar-color-alert)}.scalar-app .text-c-tooltip{color:var(--scalar-tooltip-color)}.scalar-app .text-sidebar-c-1{color:var(--scalar-sidebar-color-1,var(--scalar-color-1))}.scalar-app .text-sidebar-c-search{color:var(--scalar-sidebar-search-color,var(--scalar-color-3))}.scalar-app .opacity-40{opacity:.4}.scalar-app .-outline-offset-2{outline-offset:-2px}.scalar-app .outline-offset-1{outline-offset:1px}.scalar-app .outline-offset-\\[-1px\\]{outline-offset:-1px}.scalar-app .backdrop-blur{--tw-backdrop-blur:blur(8px);-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,)}.scalar-app .ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.scalar-app .ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}:is(.scalar-app .\\*\\:size-3>*){width:12px;height:12px}:is(.scalar-app .\\*\\:size-4>*){width:16px;height:16px}:is(.scalar-app .\\*\\:h-5>*){height:20px}:is(.scalar-app .\\*\\:min-w-5>*){min-width:20px}:is(.scalar-app .\\*\\:flex-1>*){flex:1}:is(.scalar-app .\\*\\:justify-center>*){justify-content:center}:is(.scalar-app .\\*\\:gap-px>*){gap:1px}:is(.scalar-app .\\*\\:rounded>*){border-radius:var(--scalar-radius)}:is(.scalar-app .\\*\\:border>*){border-style:var(--tw-border-style);border-width:var(--scalar-border-width)}:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:var(--scalar-tooltip-color)}@supports (color:color-mix(in lab,red,red)){:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:var(--scalar-tooltip-color)}@supports (color:color-mix(in lab,red,red)){:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:var(--scalar-tooltip-color)}@supports (color:color-mix(in lab,red,red)){:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:var(--scalar-tooltip-color)}@supports (color:color-mix(in lab,red,red)){:is(.scalar-app .\\*\\:border-border-tooltip>*){border-color:color-mix(in srgb,var(--scalar-tooltip-color),var(--scalar-tooltip-background))}}}}}:is(.scalar-app .\\*\\:px-1>*){padding-inline:4px}:is(.scalar-app .\\*\\:text-xs>*){font-size:var(--scalar-font-size-5)}@media(hover:hover){.scalar-app .group-hover\\:text-c-1:is(:where(.group):hover *){color:var(--scalar-color-1)}.scalar-app .group-hover\\/button\\:bg-sidebar-indent-border-hover:is(:where(.group\\/button):hover *){background-color:var(--scalar-sidebar-indent-border-hover,var(--scalar-border-color))}.scalar-app .group-hover\\/button\\:text-c-1:is(:where(.group\\/button):hover *){color:var(--scalar-color-1)}}.scalar-app .group-focus-visible\\/toggle\\:outline:is(:where(.group\\/toggle):focus-visible *){outline-style:var(--tw-outline-style);outline-width:1px}.scalar-app .group-hocus\\/copy-button\\:sr-only:is(:is(:where(.group\\/copy-button):hover,:where(.group\\/copy-button):focus-visible) *){clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.scalar-app .group-hocus\\/copy-button\\:not-sr-only:is(:is(:where(.group\\/copy-button):hover,:where(.group\\/copy-button):focus-visible) *){clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.scalar-app .group-hocus\\/copy-button\\:block:is(:is(:where(.group\\/copy-button):hover,:where(.group\\/copy-button):focus-visible) *){display:block}.scalar-app .group-hocus-within\\/code-block\\:-left-0\\.5:is(:is(:where(.group\\/code-block):hover,:where(.group\\/code-block):focus-within) *){left:-2px}.scalar-app .group-hocus-within\\/code-block\\:inline:is(:is(:where(.group\\/code-block):hover,:where(.group\\/code-block):focus-within) *){display:inline}.scalar-app .group-hocus-within\\/code-block\\:opacity-100:is(:is(:where(.group\\/code-block):hover,:where(.group\\/code-block):focus-within) *){opacity:1}.scalar-app .placeholder\\:font-\\[inherit\\]::placeholder{font-family:inherit}.scalar-app .first\\:rounded-t-\\[inherit\\]:first-child,:is(.scalar-app .\\*\\:first\\:rounded-t-\\[inherit\\]>*):first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.scalar-app .last\\:rounded-b-\\[inherit\\]:last-child,:is(.scalar-app .\\*\\:last\\:rounded-b-\\[inherit\\]>*):last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.scalar-app .focus-within\\:outline-none:focus-within{--tw-outline-style:none;outline-style:none}@media(hover:hover){.scalar-app .hover\\:bg-b-2:hover{background-color:var(--scalar-background-2)}.scalar-app .hover\\:bg-b-3:hover{background-color:var(--scalar-background-3)}.scalar-app .hover\\:bg-h-btn:hover{background-color:var(--scalar-button-1-hover)}.scalar-app .hover\\:bg-sidebar-b-1:hover{background-color:var(--scalar-sidebar-background-1,var(--scalar-background-1))}.scalar-app .hover\\:bg-sidebar-b-hover:hover{background-color:var(--scalar-sidebar-item-hover-background,var(--scalar-background-2))}.scalar-app .hover\\:bg-linear-to-b:hover{--tw-gradient-position:to bottom}@supports (background-image:linear-gradient(in lab,red,red)){.scalar-app .hover\\:bg-linear-to-b:hover{--tw-gradient-position:to bottom in oklab}}.scalar-app .hover\\:bg-linear-to-b:hover{background-image:linear-gradient(var(--tw-gradient-stops))}.scalar-app .hover\\:bg-linear-to-t:hover{--tw-gradient-position:to top}@supports (background-image:linear-gradient(in lab,red,red)){.scalar-app .hover\\:bg-linear-to-t:hover{--tw-gradient-position:to top in oklab}}.scalar-app .hover\\:bg-linear-to-t:hover{background-image:linear-gradient(var(--tw-gradient-stops))}.scalar-app .hover\\:text-c-1:hover{color:var(--scalar-color-1)}.scalar-app .hover\\:text-sidebar-c-1:hover{color:var(--scalar-sidebar-color-1,var(--scalar-color-1))}.scalar-app .hover\\:text-sidebar-c-hover:hover{color:var(--scalar-sidebar-item-hover-color,var(--scalar-sidebar-color-2))}.scalar-app .hover\\:underline:hover{text-decoration-line:underline}.scalar-app .hover\\:brightness-90:hover{--tw-brightness:brightness(90%);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,)}}.scalar-app .focus-visible\\:border-c-btn:focus-visible{border-color:var(--scalar-button-1-color)}.scalar-app .focus-visible\\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.scalar-app .active\\:bg-b-btn:active{background-color:var(--scalar-button-1)}.scalar-app .active\\:brightness-90:active{--tw-brightness:brightness(90%);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,)}.scalar-app .has-\\[\\:focus-visible\\]\\:bg-sidebar-b-1:has(:focus-visible){background-color:var(--scalar-sidebar-background-1,var(--scalar-background-1))}.scalar-app .has-\\[\\:focus-visible\\]\\:outline:has(:focus-visible),.scalar-app .has-\\[input\\:focus-visible\\]\\:outline:has(:is(input:focus-visible)){outline-style:var(--tw-outline-style);outline-width:1px}@media(min-width:800px){.scalar-app .md\\:w-\\[calc\\(100vw-16px\\)\\]{width:calc(100vw - 16px)}}@media(min-width:1000px){.scalar-app .lg\\:w-\\[calc\\(100vw-32px\\)\\]{width:calc(100vw - 32px)}.scalar-app .lg\\:w-full{width:100%}}.scalar-app .dark\\:bg-\\(--bg-dark\\):where(.dark-mode,.dark-mode *){background-color:var(--bg-dark)}.scalar-app .dark\\:bg-b-3:where(.dark-mode,.dark-mode *){background-color:var(--scalar-background-3)}.scalar-app .dark\\:bg-backdrop-dark:where(.dark-mode,.dark-mode *){background-color:#00000073}.scalar-app .dark\\:bg-linear-to-t:where(.dark-mode,.dark-mode *){--tw-gradient-position:to top}@supports (background-image:linear-gradient(in lab,red,red)){.scalar-app .dark\\:bg-linear-to-t:where(.dark-mode,.dark-mode *){--tw-gradient-position:to top in oklab}}.scalar-app .dark\\:bg-linear-to-t:where(.dark-mode,.dark-mode *){background-image:linear-gradient(var(--tw-gradient-stops))}@media(hover:hover){.scalar-app .dark\\:hover\\:bg-b-3:where(.dark-mode,.dark-mode *):hover{background-color:var(--scalar-background-3)}.scalar-app .dark\\:hover\\:bg-linear-to-b:where(.dark-mode,.dark-mode *):hover{--tw-gradient-position:to bottom}@supports (background-image:linear-gradient(in lab,red,red)){.scalar-app .dark\\:hover\\:bg-linear-to-b:where(.dark-mode,.dark-mode *):hover{--tw-gradient-position:to bottom in oklab}}.scalar-app .dark\\:hover\\:bg-linear-to-b:where(.dark-mode,.dark-mode *):hover{background-image:linear-gradient(var(--tw-gradient-stops))}.scalar-app .dark\\:hover\\:bg-linear-to-t:where(.dark-mode,.dark-mode *):hover{--tw-gradient-position:to top}@supports (background-image:linear-gradient(in lab,red,red)){.scalar-app .dark\\:hover\\:bg-linear-to-t:where(.dark-mode,.dark-mode *):hover{--tw-gradient-position:to top in oklab}}.scalar-app .dark\\:hover\\:bg-linear-to-t:where(.dark-mode,.dark-mode *):hover{background-image:linear-gradient(var(--tw-gradient-stops))}}@media(max-width:720px)and (max-height:480px){.scalar-app .zoomed\\:\\!whitespace-normal{white-space:normal!important}}[data-radix-popper-content-wrapper]{z-index:1!important}.loader-wrapper[data-v-27df5cd8]{--loader-size:50%;justify-content:center;align-items:center;display:flex;position:relative}.svg-loader[data-v-27df5cd8]{width:var(--loader-size);height:var(--loader-size);fill:none;stroke:currentColor;background-color:#0000;top:1rem;right:.9rem;overflow:visible}.svg-path[data-v-27df5cd8]{stroke-width:12px;fill:none;transition:all .3s}.svg-x-mark[data-v-27df5cd8]{stroke-dasharray:57;stroke-dashoffset:57px;transition-delay:0s}.svg-check-mark[data-v-27df5cd8]{stroke-dasharray:149;stroke-dashoffset:149px;transition-delay:0s}.icon-is-invalid .svg-x-mark[data-v-27df5cd8],.icon-is-valid .svg-check-mark[data-v-27df5cd8]{stroke-dashoffset:0;transition-delay:.3s}.circular-loader[data-v-27df5cd8]{transform-origin:50%;background:0 0;animation:.7s linear infinite rotate-27df5cd8,.4s fade-in-27df5cd8;transform:scale(3.5)}.loader-path[data-v-27df5cd8]{stroke-dasharray:50 200;stroke-dashoffset:-100px;stroke-linecap:round}.loader-path-off[data-v-27df5cd8]{stroke-dasharray:50 200;stroke-dashoffset:-100px;opacity:0;transition:opacity .3s}.scalar-code-block.bg-b-1 .scalar-code-copy-backdrop{background-color:var(--scalar-background-1)}.scalar-code-block.bg-b-2 .scalar-code-copy-backdrop{background-color:var(--scalar-background-2)}.scalar-code-block.bg-b-2 .scalar-code-copy{background-color:var(--scalar-background-3)}.toggle-icon-ellipse[data-v-60be8692]{background:var(--scalar-background-1);border-radius:50%;width:7px;height:7px;transition:width .3s ease-in-out,height .3s ease-in-out;display:inline-block;position:relative;overflow:hidden;box-shadow:inset 0 0 0 1px}.toggle-icon-moon-mask[data-v-60be8692]{background:var(--scalar-background-1);border:1px solid;border-radius:50%;width:100%;height:100%;transition:transform .3s ease-in-out;display:block;position:absolute;bottom:2.5px;left:2.5px;transform:translate(4px,-4px)}.toggle-icon-sun-ray[data-v-60be8692]{background:currentColor;border-radius:8px;width:12px;height:1px;transition:transform .3s ease-in-out;position:absolute}.toggle-icon-sun-ray[data-v-60be8692]:nth-of-type(2){transform:rotate(90deg)}.toggle-icon-sun-ray[data-v-60be8692]:nth-of-type(3){transform:rotate(45deg)}.toggle-icon-sun-ray[data-v-60be8692]:nth-of-type(4){transform:rotate(-45deg)}.toggle-icon-dark .toggle-icon-ellipse[data-v-60be8692]{width:10px;height:10px;-webkit-mask-image:radial-gradient(circle at 0 100%,pink 10px,#0000 12px);mask-image:radial-gradient(circle at 0 100%,pink 10px,#0000 12px)}.toggle-icon-dark .toggle-icon-sun-ray[data-v-60be8692]{transform:scale(0)}.toggle-icon-dark .toggle-icon-moon-mask[data-v-60be8692]{transform:translateZ(0)}.scalar-icon[data-v-b651bb23],.scalar-icon[data-v-b651bb23] *{stroke-width:var(--c07589c2)}.scalar-app :where(code.hljs) *{font-size:inherit;font-family:var(--scalar-font-code);text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;tab-size:4;line-height:1.4}.scalar-app code.hljs{all:unset;font-size:inherit;color:var(--scalar-color-2);font-family:var(--scalar-font-code);counter-reset:linenumber}.scalar-app .hljs{color:var(--scalar-color-2);background:0 0}.scalar-app .hljs .line:before{color:var(--scalar-color-3);counter-increment:linenumber;content:counter(linenumber);min-width:calc(var(--line-digits)*1ch);text-align:right;margin-right:.875rem;display:inline-block}.scalar-app .hljs-comment,.scalar-app .hljs-quote{color:var(--scalar-color-3);font-style:italic}.scalar-app .hljs-number{color:var(--scalar-color-orange)}.scalar-app .hljs-regexp,.scalar-app .hljs-string,.scalar-app .hljs-built_in{color:var(--scalar-color-blue)}.scalar-app .hljs-title.class_{color:var(--scalar-color-1)}.scalar-app .hljs-keyword{color:var(--scalar-color-purple)}.scalar-app .hljs-title.function_{color:var(--scalar-color-orange)}.scalar-app .hljs-subst,.scalar-app .hljs-name{color:var(--scalar-color-blue)}.scalar-app .hljs-attr,.scalar-app .hljs-attribute{color:var(--scalar-color-1)}.scalar-app .hljs-addition,.scalar-app .hljs-literal,.scalar-app .hljs-selector-tag,.scalar-app .hljs-type{color:var(--scalar-color-green)}.scalar-app .hljs-selector-attr,.scalar-app .hljs-selector-pseudo{color:var(--scalar-color-orange)}.scalar-app .hljs-doctag,.scalar-app .hljs-section,.scalar-app .hljs-title{color:var(--scalar-color-blue)}.scalar-app .hljs-selector-id,.scalar-app .hljs-template-variable,.scalar-app .hljs-variable{color:var(--scalar-color-1)}.scalar-app .hljs-name,.scalar-app .hljs-section,.scalar-app .hljs-strong{font-weight:var(--scalar-semibold)}.scalar-app .hljs-bullet,.scalar-app .hljs-link,.scalar-app .hljs-meta,.scalar-app .hljs-symbol{color:var(--scalar-color-blue)}.scalar-app .hljs-deletion{color:var(--scalar-color-red)}.scalar-app .hljs-formula{background:var(--scalar-color-1)}.scalar-app .hljs-emphasis{font-style:italic}.scalar-app .credential .credential-value{color:#0000;font-size:0}.scalar-app .credential:after{content:"·····";color:var(--scalar-color-3);-webkit-user-select:none;user-select:none}.hljs.language-html{color:var(--scalar-color-1)}.hljs.language-html .hljs-attr{color:var(--scalar-color-2)}.hljs.language-curl .hljs-string{color:var(--scalar-color-blue)}.hljs.language-curl .hljs-literal{color:var(--scalar-color-1)}.hljs.language-php .hljs-variable{color:var(--scalar-color-blue)}.hljs.language-objectivec .hljs-meta{color:var(--scalar-color-1)}.hljs.language-objectivec .hljs-built_in,.hljs-built_in{color:var(--scalar-color-orange)}.scalar-app .markdown{--scalar-refs-heading-spacing:24px;--markdown-border:var(--scalar-border-width)solid var(--scalar-border-color);--markdown-spacing-sm:12px;--markdown-spacing-md:16px;--markdown-line-height:1.625;--markdown-heading-line-height:1.15;font-family:var(--scalar-font);word-break:break-word;line-height:var(--markdown-line-height)}.scalar-app .markdown>*{margin-bottom:var(--markdown-spacing-md)}.scalar-app .markdown>:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6):last-child{margin-bottom:0}.scalar-app .markdown h1,.scalar-app .markdown h2,.scalar-app .markdown h3,.scalar-app .markdown h4,.scalar-app .markdown h5,.scalar-app .markdown h6{font-weight:var(--scalar-bold);margin-top:var(--scalar-refs-heading-spacing);margin-bottom:var(--markdown-spacing-sm);line-height:var(--markdown-heading-line-height,1.15);scroll-margin-top:1rem;display:block}.scalar-app .markdown h1{font-size:1.5rem}.scalar-app .markdown h2,.scalar-app .markdown h3{font-size:1.25rem}.scalar-app .markdown h4,.scalar-app .markdown h5,.scalar-app .markdown h6{font-size:1rem}.scalar-app .markdown b,.scalar-app .markdown strong{font-weight:var(--scalar-bold)}.scalar-app .markdown p{color:inherit;line-height:var(--markdown-line-height);display:block}.scalar-app .markdown img{border-radius:var(--scalar-radius);max-width:100%;display:inline-block;overflow:hidden}.scalar-app .markdown ul,.scalar-app .markdown ol{line-height:var(--markdown-line-height);flex-direction:column;gap:2px;padding-left:1.6em;display:flex}.scalar-app .markdown li{margin-top:2px;padding-left:7px}.scalar-app ol>li::marker{font:var(--scalar-font);font-variant-numeric:tabular-nums;font-weight:var(--scalar-semibold);white-space:nowrap}.scalar-app ol>*>li::marker{font:var(--scalar-font);font-variant-numeric:tabular-nums;font-weight:var(--scalar-semibold);white-space:nowrap}.scalar-app .markdown ol{list-style-type:decimal}.scalar-app .markdown ol ol{list-style-type:lower-alpha}.scalar-app .markdown ol ol ol ol,.scalar-app .markdown ol ol ol ol ol ol ol{list-style-type:decimal}.scalar-app .markdown ol ol ol ol ol,.scalar-app .markdown ol ol ol ol ol ol ol ol{list-style-type:lower-alpha}.scalar-app .markdown ol ol ol,.scalar-app .markdown ol ol ol ol ol ol,.scalar-app .markdown ol ol ol ol ol ol ol ol ol{list-style-type:lower-roman}.scalar-app .markdown ul>li,.scalar-app .markdown ul>*>li{list-style-type:disc}.scalar-app .markdown table{table-layout:fixed;border:var(--scalar-border-width)solid var(--scalar-border-color);border-radius:var(--scalar-radius);border-spacing:0;width:100%;margin:1em 0;display:table;position:relative;overflow-x:auto}.scalar-app .markdown tbody,.scalar-app .markdown thead{vertical-align:middle}.scalar-app .markdown tbody{display:table-row-group}.scalar-app .markdown thead{display:table-header-group}.scalar-app .markdown tr{border-color:inherit;vertical-align:inherit;display:table-row}.scalar-app .markdown td,.scalar-app .markdown th{vertical-align:top;min-width:1em;line-height:var(--markdown-line-height);word-break:break-word;font-size:var(--scalar-small);color:var(--scalar-color-1);border-right:var(--markdown-border);border-bottom:var(--markdown-border);padding:8.5px 16px;display:table-cell;position:relative}.scalar-app .markdown td>*,.scalar-app .markdown th>*{margin-bottom:0}.scalar-app .markdown th:empty{display:none}.scalar-app .markdown td:first-of-type,.scalar-app .markdown th:first-of-type{border-left:none}.scalar-app .markdown td:last-of-type,.scalar-app .markdown th:last-of-type{border-right:none}.scalar-app .markdown tr:last-of-type td{border-bottom:none}.scalar-app .markdown th{font-weight:var(--scalar-bold);text-align:left;background:var(--scalar-background-2);border-left-color:#0000}.scalar-app .markdown th:first-of-type{border-top-left-radius:var(--scalar-radius)}.scalar-app .markdown th:last-of-type{border-top-right-radius:var(--scalar-radius)}.scalar-app .markdown tr>[align=left]{text-align:left}.scalar-app .markdown tr>[align=right]{text-align:right}.scalar-app .markdown tr>[align=center]{text-align:center}.scalar-app .markdown details{border:var(--markdown-border);border-radius:var(--scalar-radius-xl);color:var(--scalar-color-1)}.scalar-app .markdown details>:not(summary){margin:var(--markdown-spacing-md);margin-bottom:0}.scalar-app .markdown details>p:has(>strong):not(:has(:not(strong))){margin-bottom:8px}.scalar-app .markdown details>p:has(>strong):not(:has(:not(strong)))+*{margin-top:0}.scalar-app .markdown details>table{width:calc(100% - calc(var(--markdown-spacing-md)*2))}.scalar-app .markdown summary{min-height:40px;font-weight:var(--scalar-semibold);line-height:var(--markdown-line-height);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:2.5px;align-items:flex-start;gap:8px;padding:7px 14px;display:flex;position:relative}.scalar-app .markdown summary:hover{background-color:var(--scalar-background-2)}.scalar-app .markdown details[open]{padding-bottom:var(--markdown-spacing-md)}.scalar-app .markdown details[open]>summary{border-bottom:var(--markdown-border);border-bottom-right-radius:0;border-bottom-left-radius:0}.scalar-app .markdown summary:before{content:"";width:var(--markdown-spacing-md);height:var(--markdown-spacing-md);background-color:var(--scalar-color-3);flex-shrink:0;margin-top:5px;display:block;-webkit-mask-image:url(\'data:image/svg+xml,\');mask-image:url(\'data:image/svg+xml,\')}.scalar-app .markdown summary:hover:before{background-color:var(--scalar-color-1)}.scalar-app .markdown details[open]>summary:before{transition:transform .1s ease-in-out;transform:rotate(90deg)}.scalar-app .markdown details:has(+details){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0;margin-bottom:0}.scalar-app .markdown details:has(+details)+details,.scalar-app .markdown details:has(+details)+details>summary{border-top-left-radius:0;border-top-right-radius:0}.scalar-app .markdown a{--font-color:var(--scalar-link-color,var(--scalar-color-accent));--font-visited:var(--scalar-link-color-visited,var(--scalar-color-2));-webkit-text-decoration:var(--scalar-text-decoration);text-decoration:var(--scalar-text-decoration);color:var(--font-color);font-weight:var(--scalar-link-font-weight,var(--scalar-semibold));text-underline-offset:.25rem;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--font-color);text-decoration-color:var(--font-color)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown a{-webkit-text-decoration-color:var(--font-color)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown a{-webkit-text-decoration-color:var(--font-color)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown a{-webkit-text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent)}}}.scalar-app .markdown a{-webkit-text-decoration-color:var(--font-color);text-decoration-color:var(--font-color)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown a{-webkit-text-decoration-color:var(--font-color)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown a{-webkit-text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent)}}.scalar-app .markdown a{-webkit-text-decoration-color:var(--font-color);text-decoration-color:var(--font-color)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown a{-webkit-text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent);text-decoration-color:color-mix(in srgb,var(--font-color)30%,transparent)}}}}.scalar-app .markdown a:hover{-webkit-text-decoration-color:var(--scalar-color-1,currentColor);text-decoration-color:var(--scalar-color-1,currentColor);color:var(--scalar-link-color-hover,var(--scalar-color-accent));-webkit-text-decoration:var(--scalar-text-decoration-hover);text-decoration:var(--scalar-text-decoration-hover)}.scalar-app .markdown a:visited{color:var(--font-visited)}.scalar-app .markdown em{font-style:italic}.scalar-app .markdown sup,.scalar-app .markdown sub{font-size:var(--scalar-micro);font-weight:450}.scalar-app .markdown sup{vertical-align:super}.scalar-app .markdown sub{vertical-align:sub}.scalar-app .markdown del{text-decoration:line-through}.scalar-app .markdown code{font-family:var(--scalar-font-code);background-color:var(--scalar-background-2);box-shadow:0 0 0 var(--scalar-border-width) var(--scalar-border-color);font-size:var(--scalar-micro);border-radius:2px;padding:0 3px}.scalar-app .markdown .hljs{font-size:var(--scalar-small)}.scalar-app .markdown pre code{white-space:pre;padding:var(--markdown-spacing-sm);margin:var(--markdown-spacing-sm)0;-webkit-overflow-scrolling:touch;min-width:100px;max-width:100%;line-height:1.5;display:block;overflow-x:auto}.scalar-app .markdown hr{border:none;border-bottom:var(--markdown-border)}.scalar-app .markdown blockquote{border-left:1px solid var(--scalar-color-1);padding-left:var(--markdown-spacing-md);font-weight:var(--scalar-bold);font-size:var(--scalar-font-size-2);margin:0;display:block}.scalar-app .markdown li.task-list-item{list-style:none;position:relative}.scalar-app .markdown li.task-list-item>input{appearance:none;width:var(--markdown-spacing-md);height:var(--markdown-spacing-md);border:1px solid var(--scalar-color-3);border-radius:var(--scalar-radius);display:inline;position:absolute;top:.225em;left:-1.4em}.scalar-app .markdown li.task-list-item>input[type=checkbox]:checked{background-color:var(--scalar-color-1);border-color:var(--scalar-color-1)}.scalar-app .markdown li.task-list-item>input[type=checkbox]:before{content:"";border:solid var(--scalar-background-1);opacity:0;border-width:0 1.5px 1.5px 0;width:5px;height:10px;position:absolute;top:1px;left:5px;transform:rotate(45deg)}.scalar-app .markdown li.task-list-item>input[type=checkbox]:checked:before{opacity:1}.scalar-app .markdown .markdown-alert{border-radius:var(--scalar-radius);background-color:var(--scalar-background-2);align-items:stretch}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert{background-color:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert{background-color:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert{background-color:color-mix(in srgb,var(--scalar-background-2),transparent)}}}}.scalar-app .markdown .markdown-alert{border:var(--markdown-border);gap:var(--markdown-spacing-sm);padding:10px 14px;display:flex;position:relative}.scalar-app .markdown .markdown-alert .markdown-alert-icon:before{content:"";background-color:currentColor;flex-shrink:0;width:18px;height:18px;margin-top:3px;display:block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.scalar-app .markdown .markdown-alert.markdown-alert-note{background-color:var(--scalar-color-blue)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-note{background-color:var(--scalar-color-blue)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-note{background-color:var(--scalar-color-blue)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-note{background-color:color-mix(in srgb,var(--scalar-color-blue),transparent 97%)}}}}.scalar-app .markdown .markdown-alert.markdown-alert-note{border:var(--scalar-border-width)solid var(--scalar-color-blue)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-note{border:var(--scalar-border-width)solid var(--scalar-color-blue)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-note{border:var(--scalar-border-width)solid var(--scalar-color-blue)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-note{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-blue),transparent 50%)}}}}.scalar-app .markdown .markdown-alert.markdown-alert-tip{background-color:var(--scalar-color-2)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-tip{background-color:var(--scalar-color-2)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-tip{background-color:var(--scalar-color-2)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-tip{background-color:color-mix(in srgb,var(--scalar-color-2),transparent 97%)}}}}.scalar-app .markdown .markdown-alert.markdown-alert-tip{border:var(--scalar-border-width)solid var(--scalar-color-2)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-tip{border:var(--scalar-border-width)solid var(--scalar-color-2)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-tip{border:var(--scalar-border-width)solid var(--scalar-color-2)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-tip{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-2),transparent 50%)}}}}.scalar-app .markdown .markdown-alert.markdown-alert-note .markdown-alert-icon:before,.scalar-app .markdown .markdown-alert.markdown-alert-tip .markdown-alert-icon:before{color:var(--scalar-color-blue);-webkit-mask-image:url(\'data:image/svg+xml,\');mask-image:url(\'data:image/svg+xml,\')}.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{background-color:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{background-color:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{background-color:var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{background-color:color-mix(in srgb,var(--scalar-color-orange),transparent 97%)}}}}.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{border:var(--scalar-border-width)solid var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{border:var(--scalar-border-width)solid var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{border:var(--scalar-border-width)solid var(--scalar-color-orange)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-important,.scalar-app .markdown .markdown-alert.markdown-alert-warning{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-orange),transparent 50%)}}}}.scalar-app .markdown .markdown-alert.markdown-alert-important .markdown-alert-icon:before,.scalar-app .markdown .markdown-alert.markdown-alert-warning .markdown-alert-icon:before{-webkit-mask-image:url(\'data:image/svg+xml,\');mask-image:url(\'data:image/svg+xml,\')}.scalar-app .markdown .markdown-alert.markdown-alert-caution{background-color:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-caution{background-color:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-caution{background-color:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-caution{background-color:color-mix(in srgb,var(--scalar-color-red),transparent 97%)}}}}.scalar-app .markdown .markdown-alert.markdown-alert-caution{border:var(--scalar-border-width)solid var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-caution{border:var(--scalar-border-width)solid var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-caution{border:var(--scalar-border-width)solid var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-caution{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-red),transparent 50%)}}}}.scalar-app .markdown .markdown-alert.markdown-alert-caution .markdown-alert-icon:before{color:var(--scalar-color-red);-webkit-mask-image:url(\'data:image/svg+xml,\');mask-image:url(\'data:image/svg+xml,\')}.scalar-app .markdown .markdown-alert.markdown-alert-success{background-color:var(--scalar-color-green)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-success{background-color:var(--scalar-color-green)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-success{background-color:var(--scalar-color-green)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-success{background-color:color-mix(in srgb,var(--scalar-color-green),transparent 97%)}}}}.scalar-app .markdown .markdown-alert.markdown-alert-success{border:var(--scalar-border-width)solid var(--scalar-color-green)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-success{border:var(--scalar-border-width)solid var(--scalar-color-green)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-success{border:var(--scalar-border-width)solid var(--scalar-color-green)}@supports (color:color-mix(in lab,red,red)){.scalar-app .markdown .markdown-alert.markdown-alert-success{border:var(--scalar-border-width)solid color-mix(in srgb,var(--scalar-color-green),transparent 50%)}}}}.scalar-app .markdown .markdown-alert.markdown-alert-success .markdown-alert-icon:before{color:var(--scalar-color-green);-webkit-mask-image:url(\'data:image/svg+xml,\');mask-image:url(\'data:image/svg+xml,\')}.scalar-app .markdown .markdown-alert.markdown-alert-note .markdown-alert-icon:before{color:var(--scalar-color-blue)}.scalar-app .markdown .markdown-alert.markdown-alert-tip .markdown-alert-icon:before{color:var(--scalar-color-2)}.scalar-app .markdown .markdown-alert.markdown-alert-important .markdown-alert-icon:before{color:var(--scalar-color-purple)}.scalar-app .markdown .markdown-alert.markdown-alert-warning .markdown-alert-icon:before{color:var(--scalar-color-orange)}.scalar-app .markdown .markdown-alert .markdown-alert-content{line-height:var(--markdown-line-height);margin:0}.scalar-app .markdown.markdown-summary.markdown-summary :before,.scalar-app .markdown.markdown-summary.markdown-summary :after{content:none}.scalar-app .markdown.markdown-summary.markdown-summary :not(strong,em,a){font-size:inherit;font-weight:inherit;line-height:var(--markdown-line-height);display:contents}.scalar-app .markdown.markdown-summary.markdown-summary img,.scalar-app .markdown.markdown-summary.markdown-summary svg,.scalar-app .markdown.markdown-summary.markdown-summary hr,.scalar-app .markdown.markdown-summary.markdown-summary pre{display:none}.dark-mode .scalar-dropdown-item[data-v-6660bbc5]:hover{filter:brightness(1.1)}.group\\/item>*>.scalar-sidebar-indent .scalar-sidebar-indent-border[data-v-3e080c68]{inset-block:-1px}.group\\/item:first-child>*>.scalar-sidebar-indent .scalar-sidebar-indent-border[data-v-3e080c68]{top:0}.group\\/item:last-child>*>.scalar-sidebar-indent .scalar-sidebar-indent-border[data-v-3e080c68]{bottom:0}.group\\/items.-translate-x-full .group\\/button{transition-behavior:allow-discrete;max-height:0;transition-property:display,max-height;transition-duration:0s;transition-delay:.3s;display:none}.group\\/item.group\\/nested-items-open>*>.group\\/items.translate-x-0 .group\\/button{max-height:3.40282e38px;display:flex}.group\\/sidebar-section:first-of-type>.group\\/spacer-before,.group\\/sidebar-section:last-of-type>.group\\/spacer-after{height:0}.group\\/sidebar-section:has(+.group\\/sidebar-section)>.group\\/spacer-after{height:0;margin-bottom:-1px}:where(body)>.scalar-tooltip{--scalar-tooltip-padding:8px;padding:calc(var(--scalar-tooltip-padding) + var(--scalar-tooltip-offset));z-index:99999;max-width:320px;font-size:var(--scalar-font-size-5);--tw-leading:var(--scalar-line-height-5);line-height:var(--scalar-line-height-5);--tw-font-weight:var(--scalar-semibold);font-weight:var(--scalar-semibold);overflow-wrap:break-word;color:var(--scalar-tooltip-color)}:where(body)>.scalar-tooltip:before{content:"";inset:var(--scalar-tooltip-offset);z-index:-1;border-radius:var(--scalar-radius);background-color:var(--scalar-tooltip-background);--tw-backdrop-blur:blur(8px);-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,);position:absolute}:where(body.dark-mode)>.scalar-tooltip:before{--tw-shadow:inset 0 0 0 var(--tw-shadow-color,calc(var(--scalar-border-width)*2))var(--scalar-border-color);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark-mode .scalar-dropdown-item[data-v-3402682d]:hover{filter:brightness(1.1)}.scalar-modal-layout[data-v-c36b47da]{animation:.3s ease-in-out forwards fadein-layout-c36b47da}.scalar-modal[data-v-c36b47da]{box-shadow:var(--scalar-shadow-2);animation:.3s ease-in-out .1s forwards fadein-modal-c36b47da;transform:translateY(10px)}.scalar-modal-layout-full[data-v-c36b47da]{opacity:1!important;background:0 0!important}.modal-content-search .modal-body[data-v-c36b47da]{flex-direction:column;max-height:440px;padding:0;display:flex;overflow:hidden}@media(max-width:720px)and (max-height:480px){.scalar-modal-layout .scalar-modal[data-v-c36b47da]{max-height:90svh;margin-top:5svh}}.full-size-styles[data-v-c36b47da]{margin:initial;border-right:var(--scalar-border-width)solid var(--scalar-border-color);animation:.3s ease-in-out forwards fadein-layout-c36b47da;left:0;transform:translate(0);background-color:var(--scalar-background-1)!important;max-height:100%!important;box-shadow:none!important;border-radius:0!important;position:absolute!important;top:0!important}@media(min-width:800px){.full-size-styles[data-v-c36b47da]{width:50dvw!important}}.full-size-styles[data-v-c36b47da]:after{content:"";width:50dvw;height:100dvh;position:absolute;top:0;right:-50dvw}.sidebar-heading-type[data-v-1857170e]{text-transform:uppercase;color:var(--method-color,var(--scalar-color-1));font-size:10px;line-height:14px;font-weight:var(--scalar-bold);font-family:var(--scalar-font-code);white-space:nowrap;flex-shrink:0;align-items:center;gap:4px;display:inline-flex;overflow:hidden}.scalar-app .pointer-events-auto{pointer-events:auto}.scalar-app .pointer-events-none{pointer-events:none}.scalar-app .collapse{visibility:collapse}.scalar-app .visible{visibility:visible}.scalar-app .floating-bg:before{background-color:var(--scalar-background-2);border-radius:var(--scalar-radius);content:"";opacity:0;z-index:1;width:calc(100% + 8px);height:calc(100% - 4px);transition:opacity .2s ease-in-out;position:absolute;top:2.5px;left:-4px}.scalar-app .floating-bg:hover:before{opacity:1}.scalar-app .centered{--tw-translate-y:-50%;--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y);position:absolute;top:50%;left:50%}.scalar-app .centered-y{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y);position:absolute;top:50%}.scalar-app .centered-x{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y);position:absolute;left:50%}.scalar-app .sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.scalar-app .absolute{position:absolute}.scalar-app .fixed{position:fixed}.scalar-app .relative{position:relative}.scalar-app .static{position:static}.scalar-app .sticky{position:sticky}.scalar-app .inset-0{inset:0}.scalar-app .inset-x-0{inset-inline:0}.scalar-app .inset-x-1{inset-inline:4px}.scalar-app .inset-x-px{inset-inline:1px}.scalar-app .-top-\\(--scalar-address-bar-height\\){top:calc(var(--scalar-address-bar-height)*-1)}.scalar-app .-top-1\\.25{top:-5px}.scalar-app .-top-\\[104px\\]{top:-104px}.scalar-app .top-0{top:0}.scalar-app .top-2{top:8px}.scalar-app .top-12{top:48px}.scalar-app .top-\\[calc\\(100\\%\\+4px\\)\\]{top:calc(100% + 4px)}.scalar-app .-right-1\\.25{right:-5px}.scalar-app .-right-\\[30px\\]{right:-30px}.scalar-app .right-0{right:0}.scalar-app .right-1{right:4px}.scalar-app .right-1\\.5{right:6px}.scalar-app .right-1\\/2{right:50%}.scalar-app .right-2{right:8px}.scalar-app .right-4{right:16px}.scalar-app .right-7{right:28px}.scalar-app .right-14{right:56px}.scalar-app .right-16{right:64px}.scalar-app .bottom-0{bottom:0}.scalar-app .bottom-1{bottom:4px}.scalar-app .bottom-1\\/2{bottom:50%}.scalar-app .bottom-\\[var\\(--scalar-border-width\\)\\]{bottom:var(--scalar-border-width)}.scalar-app .left-0{left:0}.scalar-app .left-1\\/2{left:50%}.scalar-app .left-3{left:12px}.scalar-app .-z-1{z-index:-1}.scalar-app .z-0{z-index:0}.scalar-app .z-1{z-index:1}.scalar-app .z-2{z-index:2}.scalar-app .z-10{z-index:10}.scalar-app .z-20{z-index:20}.scalar-app .z-50{z-index:50}.scalar-app .z-\\[1\\]{z-index:1}.scalar-app .z-\\[1002\\]{z-index:1002}.scalar-app .z-context{z-index:1000}.scalar-app .z-context-plus{z-index:1001}.scalar-app .z-overlay{z-index:10000}.scalar-app .order-last{order:9999}.scalar-app .col-span-full{grid-column:1/-1}.scalar-app .container{width:100%}@media(min-width:400px){.scalar-app .container{max-width:400px}}@media(min-width:600px){.scalar-app .container{max-width:600px}}@media(min-width:800px){.scalar-app .container{max-width:800px}}@media(min-width:1000px){.scalar-app .container{max-width:1000px}}@media(min-width:1200px){.scalar-app .container{max-width:1200px}}@media(min-width:96rem){.scalar-app .container{max-width:96rem}}.scalar-app .\\!m-0{margin:0!important}.scalar-app .-m-0\\.5{margin:-2px}.scalar-app .m-0{margin:0}.scalar-app .m-4{margin:16px}.scalar-app .m-auto{margin:auto}.scalar-app .m-header{margin:48px}.scalar-app .-mx-0\\.25{margin-inline:-1px}.scalar-app .mx-1{margin-inline:4px}.scalar-app .mx-auto{margin-inline:auto}.scalar-app .-my-0\\.5{margin-block:-2px}.scalar-app .-my-1{margin-block:-4px}.scalar-app .my-12{margin-block:48px}.scalar-app .-mt-\\[\\.5px\\]{margin-top:-.5px}.scalar-app .mt-0\\.25{margin-top:1px}.scalar-app .mt-1{margin-top:4px}.scalar-app .mt-1\\.5{margin-top:6px}.scalar-app .mt-2{margin-top:8px}.scalar-app .mt-3{margin-top:12px}.scalar-app .mt-5{margin-top:20px}.scalar-app .mt-10{margin-top:40px}.scalar-app .mt-\\[0\\.5px\\]{margin-top:.5px}.scalar-app .mt-auto{margin-top:auto}.scalar-app .\\!mr-0{margin-right:0!important}.scalar-app .-mr-0\\.5{margin-right:-2px}.scalar-app .-mr-1{margin-right:-4px}.scalar-app .-mr-1\\.5{margin-right:-6px}.scalar-app .-mr-3{margin-right:-12px}.scalar-app .mr-0\\.5{margin-right:2px}.scalar-app .mr-0\\.75{margin-right:3px}.scalar-app .mr-1{margin-right:4px}.scalar-app .mr-1\\.5{margin-right:6px}.scalar-app .mr-1\\.25{margin-right:5px}.scalar-app .mr-2{margin-right:8px}.scalar-app .mr-2\\.5{margin-right:10px}.scalar-app .mr-3{margin-right:12px}.scalar-app .mr-\\[6\\.25px\\]{margin-right:6.25px}.scalar-app .mr-auto{margin-right:auto}.scalar-app .\\!mb-0{margin-bottom:0!important}.scalar-app .-mb-\\[var\\(--scalar-border-width\\)\\]{margin-bottom:calc(var(--scalar-border-width)*-1)}.scalar-app .mb-0{margin-bottom:0}.scalar-app .mb-1{margin-bottom:4px}.scalar-app .mb-1\\.5{margin-bottom:6px}.scalar-app .mb-2{margin-bottom:8px}.scalar-app .mb-4{margin-bottom:16px}.scalar-app .mb-5{margin-bottom:20px}.scalar-app .mb-\\[\\.5px\\]{margin-bottom:.5px}.scalar-app .-ml-0\\.5{margin-left:-2px}.scalar-app .-ml-0\\.25{margin-left:-1px}.scalar-app .-ml-1{margin-left:-4px}.scalar-app .-ml-2{margin-left:-8px}.scalar-app .-ml-12{margin-left:-48px}.scalar-app .ml-0\\.5{margin-left:2px}.scalar-app .ml-0\\.75{margin-left:3px}.scalar-app .ml-1{margin-left:4px}.scalar-app .ml-1\\.25{margin-left:5px}.scalar-app .ml-3{margin-left:12px}.scalar-app .ml-auto{margin-left:auto}.scalar-app .box-border{box-sizing:border-box}.scalar-app .box-content{box-sizing:content-box}.scalar-app .flex-center{justify-content:center;align-items:center;display:flex}.scalar-app .line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.scalar-app .\\!block{display:block!important}.scalar-app .\\!flex{display:flex!important}.scalar-app .block{display:block}.scalar-app .contents{display:contents}.scalar-app .flex{display:flex}.scalar-app .grid{display:grid}.scalar-app .hidden{display:none}.scalar-app .inline{display:inline}.scalar-app .inline-block{display:inline-block}.scalar-app .inline-flex{display:inline-flex}.scalar-app .table{display:table}.scalar-app .aspect-\\[4\\/3\\]{aspect-ratio:4/3}.scalar-app .aspect-square{aspect-ratio:1}.scalar-app .size-1\\.5{width:6px;height:6px}.scalar-app .size-2\\.5{width:10px;height:10px}.scalar-app .size-3{width:12px;height:12px}.scalar-app .size-3\\.5{width:14px;height:14px}.scalar-app .size-3\\/4{width:75%;height:75%}.scalar-app .size-4{width:16px;height:16px}.scalar-app .size-5{width:20px;height:20px}.scalar-app .size-6{width:24px;height:24px}.scalar-app .size-7{width:28px;height:28px}.scalar-app .size-8{width:32px;height:32px}.scalar-app .size-10{width:40px;height:40px}.scalar-app .size-full{width:100%;height:100%}.scalar-app .h-\\(--scalar-address-bar-height\\){height:var(--scalar-address-bar-height)}.scalar-app .h-1\\.5{height:6px}.scalar-app .h-2\\.5{height:10px}.scalar-app .h-2\\.25{height:9px}.scalar-app .h-3{height:12px}.scalar-app .h-3\\.5{height:14px}.scalar-app .h-4{height:16px}.scalar-app .h-5{height:20px}.scalar-app .h-6{height:24px}.scalar-app .h-7{height:28px}.scalar-app .h-8{height:32px}.scalar-app .h-9{height:36px}.scalar-app .h-10{height:40px}.scalar-app .h-12{height:48px}.scalar-app .h-16{height:64px}.scalar-app .h-64{height:256px}.scalar-app .h-\\[68px\\]{height:68px}.scalar-app .h-\\[calc\\(100\\%-273\\.5px\\)\\]{height:calc(100% - 273.5px)}.scalar-app .h-\\[calc\\(100\\%_-_50px\\)\\]{height:calc(100% - 50px)}.scalar-app .h-auto{height:auto}.scalar-app .h-dvh{height:100dvh}.scalar-app .h-fit{height:fit-content}.scalar-app .h-full{height:100%}.scalar-app .h-header{height:48px}.scalar-app .h-min{height:min-content}.scalar-app .h-px{height:1px}.scalar-app .h-screen{height:100vh}.scalar-app .\\!max-h-\\[initial\\]{max-height:initial!important}.scalar-app .max-h-8{max-height:32px}.scalar-app .max-h-40{max-height:160px}.scalar-app .max-h-80{max-height:320px}.scalar-app .max-h-\\[40dvh\\]{max-height:40dvh}.scalar-app .max-h-\\[50dvh\\]{max-height:50dvh}.scalar-app .max-h-\\[60svh\\]{max-height:60svh}.scalar-app .max-h-\\[auto\\]{max-height:auto}.scalar-app .max-h-\\[calc\\(100\\%-32px\\)\\]{max-height:calc(100% - 32px)}.scalar-app .max-h-\\[inherit\\]{max-height:inherit}.scalar-app .max-h-fit{max-height:fit-content}.scalar-app .max-h-screen{max-height:100vh}.scalar-app .min-h-0{min-height:0}.scalar-app .min-h-8{min-height:32px}.scalar-app .min-h-10{min-height:40px}.scalar-app .min-h-11{min-height:44px}.scalar-app .min-h-12{min-height:48px}.scalar-app .min-h-16{min-height:64px}.scalar-app .min-h-20{min-height:80px}.scalar-app .min-h-\\[64px\\]{min-height:64px}.scalar-app .min-h-\\[65px\\]{min-height:65px}.scalar-app .min-h-\\[calc\\(1rem\\*4\\)\\]{min-height:4rem}.scalar-app .min-h-\\[calc\\(4rem\\+0\\.5px\\)\\]{min-height:calc(4rem + .5px)}.scalar-app .min-h-\\[calc\\(4rem\\+1px\\)\\]{min-height:calc(4rem + 1px)}.scalar-app .min-h-fit{min-height:fit-content}.scalar-app .\\!w-fit{width:fit-content!important}.scalar-app .w-0\\.5{width:2px}.scalar-app .w-1\\.5{width:6px}.scalar-app .w-1\\/2{width:50%}.scalar-app .w-2\\.5{width:10px}.scalar-app .w-2\\.25{width:9px}.scalar-app .w-3{width:12px}.scalar-app .w-3\\.5{width:14px}.scalar-app .w-4{width:16px}.scalar-app .w-5{width:20px}.scalar-app .w-6{width:24px}.scalar-app .w-7{width:28px}.scalar-app .w-8{width:32px}.scalar-app .w-10{width:40px}.scalar-app .w-16{width:64px}.scalar-app .w-20{width:80px}.scalar-app .w-56{width:224px}.scalar-app .w-64{width:256px}.scalar-app .w-72{width:288px}.scalar-app .w-\\[60px\\]{width:60px}.scalar-app .w-\\[100px\\]{width:100px}.scalar-app .w-\\[150px\\]{width:150px}.scalar-app .w-\\[calc\\(100\\%-10px\\)\\]{width:calc(100% - 10px)}.scalar-app .w-\\[calc\\(100\\%_-_8px\\)\\]{width:calc(100% - 8px)}.scalar-app .w-\\[inherit\\]{width:inherit}.scalar-app .w-auto{width:auto}.scalar-app .w-dvw{width:100dvw}.scalar-app .w-fit{width:fit-content}.scalar-app .w-full{width:100%}.scalar-app .w-max{width:max-content}.scalar-app .max-w-8{max-width:32px}.scalar-app .max-w-40{max-width:160px}.scalar-app .max-w-\\[14px\\]{max-width:14px}.scalar-app .max-w-\\[16rem\\]{max-width:16rem}.scalar-app .max-w-\\[37px\\]{max-width:37px}.scalar-app .max-w-\\[100\\%\\]{max-width:100%}.scalar-app .max-w-\\[120px\\]{max-width:120px}.scalar-app .max-w-\\[150px\\]{max-width:150px}.scalar-app .max-w-\\[380px\\]{max-width:380px}.scalar-app .max-w-\\[420px\\]{max-width:420px}.scalar-app .max-w-\\[720px\\]{max-width:720px}.scalar-app .max-w-\\[calc\\(100dvw-24px\\)\\]{max-width:calc(100dvw - 24px)}.scalar-app .max-w-full{max-width:100%}.scalar-app .min-w-0{min-width:0}.scalar-app .min-w-2\\.25{min-width:9px}.scalar-app .min-w-3\\.5{min-width:14px}.scalar-app .min-w-4{min-width:16px}.scalar-app .min-w-8{min-width:32px}.scalar-app .min-w-32{min-width:128px}.scalar-app .min-w-48{min-width:192px}.scalar-app .min-w-\\[37px\\]{min-width:37px}.scalar-app .min-w-\\[100px\\]{min-width:100px}.scalar-app .min-w-\\[150px\\]{min-width:150px}.scalar-app .min-w-\\[296px\\]{min-width:296px}.scalar-app .min-w-fit{min-width:fit-content}.scalar-app .min-w-full{min-width:100%}.scalar-app .flex-1{flex:1}.scalar-app .flex-shrink{flex-shrink:1}.scalar-app .shrink-0{flex-shrink:0}.scalar-app .flex-grow,.scalar-app .grow{flex-grow:1}.scalar-app .-translate-x-1\\/2{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .translate-x-1\\/2{--tw-translate-x:50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .translate-y-1\\/2{--tw-translate-y:50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scalar-app .rotate-90{rotate:90deg}.scalar-app .rotate-180{rotate:180deg}.scalar-app .transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.scalar-app .cursor-auto{cursor:auto}.scalar-app .cursor-default{cursor:default}.scalar-app .cursor-grab{cursor:grab}.scalar-app .cursor-help{cursor:help}.scalar-app .cursor-not-allowed{cursor:not-allowed}.scalar-app .cursor-pointer{cursor:pointer}.scalar-app .cursor-text{cursor:text}.scalar-app .resize{resize:both}.scalar-app .resize-none{resize:none}.scalar-app .auto-rows-\\[32px\\]{grid-auto-rows:32px}.scalar-app .auto-rows-auto{grid-auto-rows:auto}.scalar-app .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.scalar-app .grid-cols-\\[44px_1fr_repeat\\(3\\,auto\\)\\]{grid-template-columns:44px 1fr repeat(3,auto)}.scalar-app .grid-cols-\\[auto_1fr\\]{grid-template-columns:auto 1fr}.scalar-app .grid-cols-\\[repeat\\(auto-fill\\,minmax\\(32px\\,1fr\\)\\)\\]{grid-template-columns:repeat(auto-fill,minmax(32px,1fr))}.scalar-app .flex-col{flex-direction:column}.scalar-app .flex-row{flex-direction:row}.scalar-app .flex-wrap{flex-wrap:wrap}.scalar-app .content-between{align-content:space-between}.scalar-app .content-start{align-content:flex-start}.scalar-app .items-center{align-items:center}.scalar-app .items-end{align-items:flex-end}.scalar-app .items-start{align-items:flex-start}.scalar-app .items-stretch{align-items:stretch}.scalar-app .justify-between{justify-content:space-between}.scalar-app .justify-center{justify-content:center}.scalar-app .justify-end{justify-content:flex-end}.scalar-app .justify-start{justify-content:flex-start}.scalar-app .justify-stretch{justify-content:stretch}.scalar-app .\\!gap-2{gap:8px!important}.scalar-app .gap-0\\.5{gap:2px}.scalar-app .gap-0\\.75{gap:3px}.scalar-app .gap-1{gap:4px}.scalar-app .gap-1\\.5{gap:6px}.scalar-app .gap-1\\.75{gap:7px}.scalar-app .gap-2{gap:8px}.scalar-app .gap-2\\.5{gap:10px}.scalar-app .gap-3{gap:12px}.scalar-app .gap-4{gap:16px}.scalar-app .gap-6{gap:24px}.scalar-app .gap-8{gap:32px}.scalar-app .gap-10{gap:40px}.scalar-app .gap-12{gap:48px}.scalar-app .gap-\\[1\\.5px\\]{gap:1.5px}.scalar-app .gap-px{gap:1px}.scalar-app .gap-x-2\\.5{column-gap:10px}:where(.scalar-app .space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(4px*var(--tw-space-x-reverse));margin-inline-end:calc(4px*calc(1 - var(--tw-space-x-reverse)))}:where(.scalar-app .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(var(--scalar-border-width)*var(--tw-divide-y-reverse));border-bottom-width:calc(var(--scalar-border-width)*calc(1 - var(--tw-divide-y-reverse)))}.scalar-app .self-center{align-self:center}.scalar-app .truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.scalar-app .overflow-auto{overflow:auto}.scalar-app .overflow-hidden{overflow:hidden}.scalar-app .overflow-visible{overflow:visible}.scalar-app .overflow-x-auto{overflow-x:auto}.scalar-app .overflow-x-hidden{overflow-x:hidden}.scalar-app .overflow-x-scroll{overflow-x:scroll}.scalar-app .overflow-y-auto{overflow-y:auto}.scalar-app .overflow-y-hidden{overflow-y:hidden}.scalar-app .overflow-y-scroll{overflow-y:scroll}.scalar-app .\\!rounded-none{border-radius:0!important}.scalar-app .rounded{border-radius:var(--scalar-radius)}.scalar-app .rounded-\\[10px\\]{border-radius:10px}.scalar-app .rounded-full{border-radius:9999px}.scalar-app .rounded-lg{border-radius:var(--scalar-radius-lg)}.scalar-app .rounded-md{border-radius:var(--scalar-radius)}.scalar-app .rounded-none{border-radius:0}.scalar-app .rounded-px{border-radius:1px}.scalar-app .rounded-xl{border-radius:var(--scalar-radius-xl)}.scalar-app .rounded-t{border-top-left-radius:var(--scalar-radius);border-top-right-radius:var(--scalar-radius)}.scalar-app .rounded-t-lg{border-top-left-radius:var(--scalar-radius-lg);border-top-right-radius:var(--scalar-radius-lg)}.scalar-app .rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.scalar-app .rounded-t-xl{border-top-left-radius:var(--scalar-radius-xl);border-top-right-radius:var(--scalar-radius-xl)}.scalar-app .rounded-b{border-bottom-right-radius:var(--scalar-radius);border-bottom-left-radius:var(--scalar-radius)}.scalar-app .rounded-b-lg{border-bottom-right-radius:var(--scalar-radius-lg);border-bottom-left-radius:var(--scalar-radius-lg)}.scalar-app .rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.scalar-app .rounded-b-xl{border-bottom-right-radius:var(--scalar-radius-xl);border-bottom-left-radius:var(--scalar-radius-xl)}.scalar-app .\\!border-0{border-style:var(--tw-border-style)!important;border-width:0!important}.scalar-app .border{border-style:var(--tw-border-style);border-width:var(--scalar-border-width)}.scalar-app .border-0{border-style:var(--tw-border-style);border-width:0}.scalar-app .border-\\[1\\.5px\\]{border-style:var(--tw-border-style);border-width:1.5px}.scalar-app .border-\\[1px\\]{border-style:var(--tw-border-style);border-width:1px}.scalar-app .border-x{border-inline-style:var(--tw-border-style);border-inline-width:var(--scalar-border-width)}.scalar-app .border-x-0{border-inline-style:var(--tw-border-style);border-inline-width:0}.scalar-app .border-y{border-block-style:var(--tw-border-style);border-block-width:var(--scalar-border-width)}.scalar-app .border-t{border-top-style:var(--tw-border-style);border-top-width:var(--scalar-border-width)}.scalar-app .border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.scalar-app .\\!border-r{border-right-style:var(--tw-border-style)!important;border-right-width:var(--scalar-border-width)!important}.scalar-app .border-r{border-right-style:var(--tw-border-style);border-right-width:var(--scalar-border-width)}.scalar-app .border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.scalar-app .border-r-1{border-right-style:var(--tw-border-style);border-right-width:1px}.scalar-app .border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:var(--scalar-border-width)}.scalar-app .border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.scalar-app .border-b-\\[1px\\]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.scalar-app .border-l{border-left-style:var(--tw-border-style);border-left-width:var(--scalar-border-width)}.scalar-app .border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.scalar-app .border-dashed{--tw-border-style:dashed;border-style:dashed}.scalar-app .border-none{--tw-border-style:none;border-style:none}.scalar-app .border-none\\!{--tw-border-style:none!important;border-style:none!important}.scalar-app .\\!border-current{border-color:currentColor!important}.scalar-app .border-c-1{border-color:var(--scalar-color-1)}.scalar-app .border-c-3{border-color:var(--scalar-color-3)}.scalar-app .border-c-accent,.scalar-app .border-c-accent\\/30{border-color:var(--scalar-color-accent)}@supports (color:color-mix(in lab,red,red)){.scalar-app .border-c-accent\\/30{border-color:var(--scalar-color-accent)}@supports (color:color-mix(in lab,red,red)){.scalar-app .border-c-accent\\/30{border-color:color-mix(in oklab,var(--scalar-color-accent)30%,transparent)}}}.scalar-app .border-c-danger{border-color:var(--scalar-color-danger)}.scalar-app .border-transparent{border-color:#0000}.scalar-app .border-r-transparent{border-right-color:#0000}.scalar-app .bg-b-1{background-color:var(--scalar-background-1)}.scalar-app .bg-b-2{background-color:var(--scalar-background-2)}.scalar-app .bg-b-3{background-color:var(--scalar-background-3)}.scalar-app .bg-b-danger{background-color:var(--scalar-background-danger)}.scalar-app .bg-c-3\\/5{background-color:var(--scalar-color-3)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-c-3\\/5{background-color:var(--scalar-color-3)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-c-3\\/5{background-color:color-mix(in oklab,var(--scalar-color-3)5%,transparent)}}}.scalar-app .bg-c-accent,.scalar-app .bg-c-accent\\/5{background-color:var(--scalar-color-accent)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-c-accent\\/5{background-color:var(--scalar-color-accent)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-c-accent\\/5{background-color:color-mix(in oklab,var(--scalar-color-accent)5%,transparent)}}}.scalar-app .bg-c-accent\\/10{background-color:var(--scalar-color-accent)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-c-accent\\/10{background-color:var(--scalar-color-accent)}@supports (color:color-mix(in lab,red,red)){.scalar-app .bg-c-accent\\/10{background-color:color-mix(in oklab,var(--scalar-color-accent)10%,transparent)}}}.scalar-app .bg-current{background-color:currentColor}.scalar-app .bg-grey{background-color:var(--scalar-color-3)}.scalar-app .bg-orange{background-color:var(--scalar-color-orange)}.scalar-app .bg-sidebar-b-1{background-color:var(--scalar-sidebar-background-1,var(--scalar-background-1))}.scalar-app .bg-sidebar-b-active{background-color:var(--scalar-sidebar-item-active-background,var(--scalar-background-2))}.scalar-app .bg-none{background-image:none}.scalar-app .fill-current{fill:currentColor}.scalar-app .stroke-2{stroke-width:2px}.scalar-app .stroke-\\[1\\.5\\]{stroke-width:1.5px}.scalar-app .stroke-\\[1\\.75\\]{stroke-width:1.75px}.scalar-app .stroke-\\[2\\.25\\]{stroke-width:2.25px}.scalar-app .object-contain{object-fit:contain}.scalar-app .\\!p-0{padding:0!important}.scalar-app .p-0{padding:0}.scalar-app .p-0\\.5{padding:2px}.scalar-app .p-0\\.75{padding:3px}.scalar-app .p-1{padding:4px}.scalar-app .p-1\\.5{padding:6px}.scalar-app .p-1\\.25{padding:5px}.scalar-app .p-1\\.75{padding:7px}.scalar-app .p-2{padding:8px}.scalar-app .p-3{padding:12px}.scalar-app .p-4{padding:16px}.scalar-app .p-\\[3px\\]{padding:3px}.scalar-app .p-\\[5px\\]{padding:5px}.scalar-app .p-px{padding:1px}.scalar-app .\\!px-3{padding-inline:12px!important}.scalar-app .px-0{padding-inline:0}.scalar-app .px-0\\.5{padding-inline:2px}.scalar-app .px-0\\.75{padding-inline:3px}.scalar-app .px-1{padding-inline:4px}.scalar-app .px-1\\.5{padding-inline:6px}.scalar-app .px-1\\.25{padding-inline:5px}.scalar-app .px-2{padding-inline:8px}.scalar-app .px-2\\.5{padding-inline:10px}.scalar-app .px-3{padding-inline:12px}.scalar-app .px-4{padding-inline:16px}.scalar-app .px-5{padding-inline:20px}.scalar-app .px-6{padding-inline:24px}.scalar-app .px-8{padding-inline:32px}.scalar-app .\\!py-1\\.5{padding-block:6px!important}.scalar-app .py-0{padding-block:0}.scalar-app .py-0\\.5{padding-block:2px}.scalar-app .py-0\\.25{padding-block:1px}.scalar-app .py-0\\.75{padding-block:3px}.scalar-app .py-1{padding-block:4px}.scalar-app .py-1\\.5{padding-block:6px}.scalar-app .py-1\\.25{padding-block:5px}.scalar-app .py-1\\.75{padding-block:7px}.scalar-app .py-2{padding-block:8px}.scalar-app .py-2\\.5{padding-block:10px}.scalar-app .py-3{padding-block:12px}.scalar-app .py-5{padding-block:20px}.scalar-app .py-8{padding-block:32px}.scalar-app .py-px{padding-block:1px}.scalar-app .\\!pt-0{padding-top:0!important}.scalar-app .pt-0{padding-top:0}.scalar-app .pt-2{padding-top:8px}.scalar-app .pt-3{padding-top:12px}.scalar-app .pt-4{padding-top:16px}.scalar-app .pt-6{padding-top:24px}.scalar-app .pt-8{padding-top:32px}.scalar-app .pt-px{padding-top:1px}.scalar-app .pr-0{padding-right:0}.scalar-app .pr-0\\.75{padding-right:3px}.scalar-app .pr-1{padding-right:4px}.scalar-app .pr-1\\.5{padding-right:6px}.scalar-app .pr-2{padding-right:8px}.scalar-app .pr-2\\.5{padding-right:10px}.scalar-app .pr-2\\.25{padding-right:9px}.scalar-app .pr-3{padding-right:12px}.scalar-app .pr-6{padding-right:24px}.scalar-app .pr-8{padding-right:32px}.scalar-app .pr-9{padding-right:36px}.scalar-app .pr-10{padding-right:40px}.scalar-app .pr-12{padding-right:48px}.scalar-app .pr-\\[26px\\]{padding-right:26px}.scalar-app .pb-0{padding-bottom:0}.scalar-app .pb-1\\.5{padding-bottom:6px}.scalar-app .pb-2{padding-bottom:8px}.scalar-app .pb-3{padding-bottom:12px}.scalar-app .pb-5{padding-bottom:20px}.scalar-app .pb-6{padding-bottom:24px}.scalar-app .pb-8{padding-bottom:32px}.scalar-app .pb-14{padding-bottom:56px}.scalar-app .pb-\\[75px\\]{padding-bottom:75px}.scalar-app .\\!pl-3{padding-left:12px!important}.scalar-app .pl-1{padding-left:4px}.scalar-app .pl-1\\.5{padding-left:6px}.scalar-app .pl-1\\.25{padding-left:5px}.scalar-app .pl-2{padding-left:8px}.scalar-app .pl-3{padding-left:12px}.scalar-app .pl-5{padding-left:20px}.scalar-app .pl-6{padding-left:24px}.scalar-app .pl-8\\.5{padding-left:34px}.scalar-app .pl-9{padding-left:36px}.scalar-app .pl-12{padding-left:48px}.scalar-app .pl-px{padding-left:1px}.scalar-app .text-center{text-align:center}.scalar-app .text-left{text-align:left}.scalar-app .text-right{text-align:right}.scalar-app .font-code{font-family:var(--scalar-font-code)}.scalar-app .font-sans{font-family:var(--scalar-font)}.scalar-app .text-3xs{font-size:var(--scalar-font-size-7)}.scalar-app .text-\\[6px\\]{font-size:6px}.scalar-app .text-\\[9px\\]{font-size:9px}.scalar-app .text-\\[11px\\]{font-size:11px}.scalar-app .text-\\[21px\\]{font-size:21px}.scalar-app .text-base{font-size:var(--scalar-font-size-3)}.scalar-app .text-sm{font-size:var(--scalar-font-size-4)}.scalar-app .text-xl{font-size:var(--scalar-font-size-1)}.scalar-app .text-xs{font-size:var(--scalar-font-size-5)}.scalar-app .text-xxs{font-size:var(--scalar-font-size-6)}.scalar-app .\\!leading-\\[6px\\]{--tw-leading:6px!important;line-height:6px!important}.scalar-app .leading-2{--tw-leading:var(--scalar-line-height-2);line-height:var(--scalar-line-height-2)}.scalar-app .leading-3{--tw-leading:var(--scalar-line-height-3);line-height:var(--scalar-line-height-3)}.scalar-app .leading-\\[1\\.44\\]{--tw-leading:1.44;line-height:1.44}.scalar-app .leading-\\[7px\\]{--tw-leading:7px;line-height:7px}.scalar-app .leading-\\[20px\\]{--tw-leading:20px;line-height:20px}.scalar-app .leading-\\[21px\\]{--tw-leading:21px;line-height:21px}.scalar-app .leading-\\[22px\\]{--tw-leading:22px;line-height:22px}.scalar-app .leading-\\[normal\\]{--tw-leading:normal;line-height:normal}.scalar-app .leading-none{--tw-leading:1;line-height:1}.scalar-app .leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.scalar-app .leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.scalar-app .font-bold{--tw-font-weight:var(--scalar-bold);font-weight:var(--scalar-bold)}.scalar-app .font-medium{--tw-font-weight:var(--scalar-semibold);font-weight:var(--scalar-semibold)}.scalar-app .font-normal{--tw-font-weight:var(--scalar-regular);font-weight:var(--scalar-regular)}.scalar-app .text-balance{text-wrap:balance}.scalar-app .text-nowrap{text-wrap:nowrap}.scalar-app .text-pretty{text-wrap:pretty}.scalar-app .break-words{overflow-wrap:break-word}.scalar-app .break-all{word-break:break-all}.scalar-app .text-ellipsis{text-overflow:ellipsis}.scalar-app .whitespace-nowrap{white-space:nowrap}.scalar-app .whitespace-pre{white-space:pre}.scalar-app .whitespace-pre-wrap{white-space:pre-wrap}.scalar-app .\\!text-c-1{color:var(--scalar-color-1)!important}.scalar-app .text-b-1{color:var(--scalar-background-1)}.scalar-app .text-b-2{color:var(--scalar-background-2)}.scalar-app .text-blue{color:var(--scalar-color-blue)}.scalar-app .text-border{color:var(--scalar-border-color)}.scalar-app .text-c-1{color:var(--scalar-color-1)}.scalar-app .text-c-2{color:var(--scalar-color-2)}.scalar-app .text-c-3{color:var(--scalar-color-3)}.scalar-app .text-c-accent{color:var(--scalar-color-accent)}.scalar-app .text-c-btn{color:var(--scalar-button-1-color)}.scalar-app .text-c-danger{color:var(--scalar-color-danger)}.scalar-app .text-green{color:var(--scalar-color-green)}.scalar-app .text-grey{color:var(--scalar-color-3)}.scalar-app .text-orange{color:var(--scalar-color-orange)}.scalar-app .text-purple{color:var(--scalar-color-purple)}.scalar-app .text-red{color:var(--scalar-color-red)}.scalar-app .text-sidebar-c-2{color:var(--scalar-sidebar-color-2,var(--scalar-color-2))}.scalar-app .text-sidebar-c-active{color:var(--scalar-sidebar-color-active,var(--scalar-sidebar-color-1))}.scalar-app .text-transparent{color:#0000}.scalar-app .text-white{color:#fff}.scalar-app .text-yellow{color:var(--scalar-color-yellow)}.scalar-app .capitalize{text-transform:capitalize}.scalar-app .lowercase{text-transform:lowercase}.scalar-app .uppercase{text-transform:uppercase}.scalar-app .italic{font-style:italic}.scalar-app .line-through{text-decoration-line:line-through}.scalar-app .no-underline{text-decoration-line:none}.scalar-app .underline{text-decoration-line:underline}.scalar-app .decoration-c-3{-webkit-text-decoration-color:var(--scalar-color-3);text-decoration-color:var(--scalar-color-3)}.scalar-app .underline-offset-2{text-underline-offset:2px}.scalar-app .opacity-0{opacity:0}.scalar-app .opacity-50{opacity:.5}.scalar-app .opacity-100{opacity:1}.scalar-app .bg-blend-normal{background-blend-mode:normal}.scalar-app .mix-blend-luminosity{mix-blend-mode:luminosity}.scalar-app .shadow{--tw-shadow:var(--scalar-shadow-1);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.scalar-app .shadow-\\[-8px_0_4px_var\\(--scalar-background-1\\)\\]{--tw-shadow:-8px 0 4px var(--tw-shadow-color,var(--scalar-background-1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.scalar-app .shadow-\\[0_-8px_0_8px_var\\(--scalar-background-1\\)\\,0_0_8px_8px_var\\(--scalar-background-1\\)\\]{--tw-shadow:0 -8px 0 8px var(--tw-shadow-color,var(--scalar-background-1)),0 0 8px 8px var(--tw-shadow-color,var(--scalar-background-1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.scalar-app .shadow-border{--tw-shadow:inset 0 0 0 var(--tw-shadow-color,calc(var(--scalar-border-width)*2))var(--scalar-border-color);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.scalar-app .shadow-lg{--tw-shadow:var(--scalar-shadow-2);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.scalar-app .shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.scalar-app .outline{outline-style:var(--tw-outline-style);outline-width:1px}.scalar-app .-outline-offset-1{outline-offset:-1px}.scalar-app .outline-offset-2{outline-offset:2px}.scalar-app .outline-b-3{outline-color:var(--scalar-background-3)}.scalar-app .outline-c-danger{outline-color:var(--scalar-color-danger)}.scalar-app .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,)}.scalar-app .brightness-90{--tw-brightness:brightness(90%);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,)}.scalar-app .brightness-\\[\\.9\\]{--tw-brightness:brightness(.9);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,)}.scalar-app .brightness-lifted{--tw-brightness:brightness(var(--scalar-lifted-brightness));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,)}.scalar-app .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,)}.scalar-app .backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.scalar-app .transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.scalar-app .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))}.scalar-app .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))}.scalar-app .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))}.scalar-app .transition-none{transition-property:none}.scalar-app .duration-100{--tw-duration:.1s;transition-duration:.1s}.scalar-app .duration-150{--tw-duration:.15s;transition-duration:.15s}.scalar-app .duration-200{--tw-duration:.2s;transition-duration:.2s}.scalar-app .duration-300{--tw-duration:.3s;transition-duration:.3s}.scalar-app .ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.scalar-app .outline-none{--tw-outline-style:none;outline-style:none}.scalar-app .select-none{-webkit-user-select:none;user-select:none}.scalar-app .\\[--scalar-address-bar-height\\:32px\\]{--scalar-address-bar-height:32px}.scalar-app .app-drag-region{-webkit-app-region:drag}.scalar-app .app-no-drag-region{-webkit-app-region:no-drag}:is(.scalar-app .\\*\\:flex>*){display:flex}:is(.scalar-app .\\*\\:h-8>*){height:32px}:is(.scalar-app .\\*\\:cursor-pointer>*){cursor:pointer}:is(.scalar-app .\\*\\:items-center>*){align-items:center}:is(.scalar-app .\\*\\:rounded-none>*){border-radius:0}:is(.scalar-app .\\*\\:border-t>*){border-top-style:var(--tw-border-style);border-top-width:var(--scalar-border-width)}:is(.scalar-app .\\*\\:border-b-0>*){border-bottom-style:var(--tw-border-style);border-bottom-width:0}:is(.scalar-app .\\*\\:px-1\\.5>*){padding-inline:6px}:is(.scalar-app .\\*\\:pl-4>*){padding-left:16px}.scalar-app .group-first\\/row\\:border-t-0:is(:where(.group\\/row):first-child *){border-top-style:var(--tw-border-style);border-top-width:0}.scalar-app .group-last\\:border-b-transparent:is(:where(.group):last-child *){border-bottom-color:#0000}.scalar-app .group-last\\/label\\:rounded-br-lg:is(:where(.group\\/label):last-child *){border-bottom-right-radius:var(--scalar-radius-lg)}.scalar-app .group-focus-within\\:flex:is(:where(.group):focus-within *){display:flex}@media(hover:hover){.scalar-app .group-hover\\:block:is(:where(.group):hover *){display:block}.scalar-app .group-hover\\:flex:is(:where(.group):hover *){display:flex}.scalar-app .group-hover\\:hidden:is(:where(.group):hover *){display:none}.scalar-app .group-hover\\:inline:is(:where(.group):hover *){display:inline}.scalar-app .group-hover\\:pr-5:is(:where(.group):hover *){padding-right:20px}.scalar-app .group-hover\\:pr-6:is(:where(.group):hover *){padding-right:24px}.scalar-app .group-hover\\:pr-10:is(:where(.group):hover *){padding-right:40px}.scalar-app .group-hover\\:text-c-1:is(:where(.group):hover *){color:var(--scalar-color-1)}.scalar-app .group-hover\\:opacity-80:is(:where(.group):hover *){opacity:.8}.scalar-app .group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.scalar-app .group-hover\\/auth\\:absolute:is(:where(.group\\/auth):hover *){position:absolute}.scalar-app .group-hover\\/auth\\:h-auto:is(:where(.group\\/auth):hover *){height:auto}.scalar-app .group-hover\\/auth\\:border-b:is(:where(.group\\/auth):hover *){border-bottom-style:var(--tw-border-style);border-bottom-width:var(--scalar-border-width)}.scalar-app .group-hover\\/cell\\:opacity-100:is(:where(.group\\/cell):hover *){opacity:1}.scalar-app .group-hover\\/item\\:flex:is(:where(.group\\/item):hover *){display:flex}.scalar-app .group-hover\\/item\\:opacity-100:is(:where(.group\\/item):hover *),.scalar-app .group-hover\\/params\\:opacity-100:is(:where(.group\\/params):hover *){opacity:1}.scalar-app .group-hover\\/row\\:flex:is(:where(.group\\/row):hover *){display:flex}.scalar-app .group-hover\\/scopes-accordion\\:text-c-2:is(:where(.group\\/scopes-accordion):hover *){color:var(--scalar-color-2)}.scalar-app .group-hover\\/upload\\:block:is(:where(.group\\/upload):hover *){display:block}}.scalar-app .group-focus-visible\\:opacity-100:is(:where(.group):focus-visible *){opacity:1}.scalar-app .group-focus-visible\\:outline:is(:where(.group):focus-visible *){outline-style:var(--tw-outline-style);outline-width:1px}.scalar-app .group-has-focus-visible\\:hidden:is(:where(.group):has(:focus-visible) *){display:none}.scalar-app .group-has-\\[\\.cm-focused\\]\\:z-1:is(:where(.group):has(.cm-focused) *){z-index:1}.scalar-app .group-has-\\[\\.cm-focused\\]\\:flex:is(:where(.group):has(.cm-focused) *){display:flex}.scalar-app .group-has-\\[\\.cm-focused\\]\\:pr-6:is(:where(.group):has(.cm-focused) *){padding-right:24px}.scalar-app .group-has-\\[\\.cm-focused\\]\\:pr-10:is(:where(.group):has(.cm-focused) *){padding-right:40px}.scalar-app .group-has-\\[\\:focus-visible\\]\\:hidden:is(:where(.group):has(:focus-visible) *){display:none}.scalar-app .group-has-\\[\\:focus-visible\\]\\:opacity-100:is(:where(.group):has(:focus-visible) *){opacity:1}.scalar-app .group-has-\\[\\:focus-visible\\]\\/cell\\:border-c-accent:is(:where(.group\\/cell):has(:focus-visible) *){border-color:var(--scalar-color-accent)}.scalar-app .group-has-\\[\\:focus-visible\\]\\/cell\\:opacity-100:is(:where(.group\\/cell):has(:focus-visible) *){opacity:1}.scalar-app .group-has-\\[\\:focus-visible\\]\\/input\\:block:is(:where(.group\\/input):has(:focus-visible) *){display:block}.scalar-app .group-has-\\[input\\]\\/label\\:mr-0:is(:where(.group\\/label):has(:is(input)) *){margin-right:0}.scalar-app .group-aria-expanded\\/button\\:rotate-180:is(:where(.group\\/button)[aria-expanded=true] *),.scalar-app .group-aria-expanded\\/combobox-button\\:rotate-180:is(:where(.group\\/combobox-button)[aria-expanded=true] *){rotate:180deg}.scalar-app .group-\\[\\.alert\\]\\:bg-b-alert:is(:where(.group).alert *){background-color:var(--scalar-background-alert)}.scalar-app .group-\\[\\.alert\\]\\:bg-transparent:is(:where(.group).alert *){background-color:#0000}.scalar-app .group-\\[\\.alert\\]\\:shadow-none:is(:where(.group).alert *){--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)}.scalar-app .group-\\[\\.alert\\]\\:outline-orange:is(:where(.group).alert *){outline-color:var(--scalar-color-orange)}.scalar-app .group-\\[\\.error\\]\\:bg-b-danger:is(:where(.group).error *){background-color:var(--scalar-background-danger)}.scalar-app .group-\\[\\.error\\]\\:bg-transparent:is(:where(.group).error *){background-color:#0000}.scalar-app .group-\\[\\.error\\]\\:text-red:is(:where(.group).error *){color:var(--scalar-color-red)}.scalar-app .group-\\[\\.error\\]\\:shadow-none:is(:where(.group).error *){--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)}.scalar-app .group-\\[\\.error\\]\\:outline-red:is(:where(.group).error *){outline-color:var(--scalar-color-red)}.scalar-app .peer-checked\\:text-c-1:is(:where(.peer):checked~*){color:var(--scalar-color-1)}.scalar-app .peer-has-\\[\\.cm-focused\\]\\:opacity-0:is(:where(.peer):has(.cm-focused)~*){opacity:0}.scalar-app .peer-has-\\[\\.color-selector\\]\\:hidden:is(:where(.peer):has(.color-selector)~*){display:none}.scalar-app .before\\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.scalar-app .before\\:absolute:before{content:var(--tw-content);position:absolute}.scalar-app .before\\:top-0:before{content:var(--tw-content);top:0}.scalar-app .before\\:left-3:before{content:var(--tw-content);left:12px}.scalar-app .before\\:left-\\[calc\\(\\.75rem_\\+_\\.5px\\)\\]:before{content:var(--tw-content);left:calc(.75rem + .5px)}.scalar-app .before\\:z-1:before{content:var(--tw-content);z-index:1}.scalar-app .before\\:h-\\[calc\\(100\\%_\\+_\\.5px\\)\\]:before{content:var(--tw-content);height:calc(100% + .5px)}.scalar-app .before\\:w-\\[\\.5px\\]:before{content:var(--tw-content);width:.5px}.scalar-app .before\\:bg-border:before{content:var(--tw-content);background-color:var(--scalar-border-color)}.scalar-app .after\\:content-\\[\\\'\\:\\\'\\]:after{--tw-content:":";content:var(--tw-content)}:is(.scalar-app .\\*\\:first\\:line-clamp-1>*):first-child{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.scalar-app .\\*\\:first\\:rounded-l>*):first-child{border-top-left-radius:var(--scalar-radius);border-bottom-left-radius:var(--scalar-radius)}:is(.scalar-app .\\*\\:first\\:border-t-0>*):first-child,:is(.scalar-app .first\\:\\*\\:border-t-0:first-child>*){border-top-style:var(--tw-border-style);border-top-width:0}:is(.scalar-app .\\*\\:first\\:text-ellipsis>*):first-child{text-overflow:ellipsis}@media(hover:hover){:is(.scalar-app .group-hover\\/auth\\:\\*\\:first\\:line-clamp-none:is(:where(.group\\/auth):hover *)>*):first-child{-webkit-line-clamp:unset;-webkit-box-orient:horizontal;display:block;overflow:visible}}.scalar-app .last\\:mb-0:last-child{margin-bottom:0}.scalar-app .last\\:rounded-b-lg:last-child{border-bottom-right-radius:var(--scalar-radius-lg);border-bottom-left-radius:var(--scalar-radius-lg)}.scalar-app .last\\:border-r-0:last-child{border-right-style:var(--tw-border-style);border-right-width:0}:is(.scalar-app .\\*\\:last\\:rounded-r>*):last-child{border-top-right-radius:var(--scalar-radius);border-bottom-right-radius:var(--scalar-radius)}.scalar-app .last\\:before\\:h-full:last-child:before{content:var(--tw-content);height:100%}.scalar-app .last-of-type\\:first-of-type\\:border-b-0:last-of-type:first-of-type{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.scalar-app .focus-within\\:z-20:focus-within{z-index:20}.scalar-app .focus-within\\:border-\\(--scalar-background-3\\):focus-within{border-color:var(--scalar-background-3)}.scalar-app .focus-within\\:bg-b-1:focus-within{background-color:var(--scalar-background-1)}.scalar-app .focus-within\\:text-c-1:focus-within{color:var(--scalar-color-1)}@media(hover:hover){.scalar-app .hover\\:cursor-default:hover{cursor:default}.scalar-app .hover\\:border-\\(--scalar-background-3\\):hover{border-color:var(--scalar-background-3)}.scalar-app .hover\\:border-inherit:hover{border-color:inherit}.scalar-app .hover\\:bg-b-2:hover{background-color:var(--scalar-background-2)}.scalar-app .hover\\:bg-b-3:hover{background-color:var(--scalar-background-3)}.scalar-app .hover\\:bg-c-accent\\/20:hover{background-color:var(--scalar-color-accent)}@supports (color:color-mix(in lab,red,red)){.scalar-app .hover\\:bg-c-accent\\/20:hover{background-color:var(--scalar-color-accent)}@supports (color:color-mix(in lab,red,red)){.scalar-app .hover\\:bg-c-accent\\/20:hover{background-color:color-mix(in oklab,var(--scalar-color-accent)20%,transparent)}}}.scalar-app .hover\\:bg-inherit:hover{background-color:inherit}.scalar-app .hover\\:bg-sidebar-b-active:hover{background-color:var(--scalar-sidebar-item-active-background,var(--scalar-background-2))}.scalar-app .hover\\:whitespace-normal:hover{white-space:normal}.scalar-app .hover\\:text-c-1:hover{color:var(--scalar-color-1)}.scalar-app .hover\\:text-c-2:hover{color:var(--scalar-color-2)}.scalar-app .hover\\:underline:hover{text-decoration-line:underline}.scalar-app .hover\\:brightness-75:hover{--tw-brightness:brightness(75%);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,)}}.scalar-app .focus\\:border-b-1:focus{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--scalar-background-1)}.scalar-app .focus\\:text-c-1:focus{color:var(--scalar-color-1)}.scalar-app .focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.scalar-app .focus-visible\\:z-10:focus-visible{z-index:10}.scalar-app .active\\:text-c-1:active{color:var(--scalar-color-1)}.scalar-app .disabled\\:cursor-default:disabled{cursor:default}.scalar-app .disabled\\:text-c-2:disabled{color:var(--scalar-color-2)}.scalar-app .has-focus-visible\\:bg-b-1:has(:focus-visible){background-color:var(--scalar-background-1)}.scalar-app .has-focus-visible\\:outline:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:1px}.scalar-app .has-\\[\\.empty-sidebar-item\\]\\:border-t:has(.empty-sidebar-item){border-top-style:var(--tw-border-style);border-top-width:var(--scalar-border-width)}.scalar-app .has-\\[\\:focus-visible\\]\\:absolute:has(:focus-visible){position:absolute}.scalar-app .has-\\[\\:focus-visible\\]\\:z-1:has(:focus-visible){z-index:1}.scalar-app .has-\\[\\:focus-visible\\]\\:rounded-\\[4px\\]:has(:focus-visible){border-radius:4px}.scalar-app .has-\\[\\:focus-visible\\]\\:bg-b-1:has(:focus-visible){background-color:var(--scalar-background-1)}.scalar-app .has-\\[\\:focus-visible\\]\\:opacity-100:has(:focus-visible){opacity:1}.scalar-app .has-\\[\\:focus-visible\\]\\:outline:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:1px}@media not all and (min-width:800px){.scalar-app .max-md\\:absolute\\!{position:absolute!important}.scalar-app .max-md\\:w-full\\!{width:100%!important}}@media(min-width:600px){.scalar-app .sm\\:not-sr-only{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.scalar-app .sm\\:order-none{order:0}.scalar-app .sm\\:mr-1\\.5{margin-right:6px}.scalar-app .sm\\:mb-1\\.5{margin-bottom:6px}.scalar-app .sm\\:ml-1\\.5{margin-left:6px}.scalar-app .sm\\:flex{display:flex}.scalar-app .sm\\:hidden{display:none}.scalar-app .sm\\:max-w-max{max-width:max-content}.scalar-app .sm\\:min-w-max{min-width:max-content}.scalar-app .sm\\:flex-col{flex-direction:column}.scalar-app .sm\\:flex-row{flex-direction:row}.scalar-app .sm\\:justify-between{justify-content:space-between}.scalar-app .sm\\:gap-px{gap:1px}.scalar-app .sm\\:rounded{border-radius:var(--scalar-radius)}.scalar-app .sm\\:rounded-lg{border-radius:var(--scalar-radius-lg)}.scalar-app .sm\\:px-2{padding-inline:8px}.scalar-app .sm\\:px-3{padding-inline:12px}.scalar-app .sm\\:py-1\\.5{padding-block:6px}:is(.scalar-app .sm\\:\\*\\:rounded-lg>*){border-radius:var(--scalar-radius-lg)}}@media(min-width:800px){.scalar-app .md\\:right-10{right:40px}.scalar-app .md\\:bottom-10{bottom:40px}.scalar-app .md\\:mx-auto{margin-inline:auto}.scalar-app .md\\:-ml-1\\.25{margin-left:-5px}.scalar-app .md\\:ml-1\\.5{margin-left:6px}.scalar-app .md\\:block{display:block}.scalar-app .md\\:flex{display:flex}.scalar-app .md\\:grid{display:grid}.scalar-app .md\\:w-full{width:100%}.scalar-app .md\\:max-w-180,.scalar-app .md\\:max-w-\\[720px\\]{max-width:720px}.scalar-app .md\\:min-w-fit{min-width:fit-content}.scalar-app .md\\:flex-none{flex:none}.scalar-app .md\\:translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .md\\:translate-y-0{--tw-translate-y:0px;translate:var(--tw-translate-x)var(--tw-translate-y)}.scalar-app .md\\:grid-cols-\\[1fr_720px_1fr\\]{grid-template-columns:1fr 720px 1fr}.scalar-app .md\\:flex-row{flex-direction:row}.scalar-app .md\\:border-r{border-right-style:var(--tw-border-style);border-right-width:var(--scalar-border-width)}.scalar-app .md\\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.scalar-app .md\\:p-1\\.5{padding:6px}.scalar-app .md\\:px-0{padding-inline:0}.scalar-app .md\\:px-1\\.5{padding-inline:6px}.scalar-app .md\\:px-2{padding-inline:8px}.scalar-app .md\\:px-2\\.5{padding-inline:10px}.scalar-app .md\\:px-4{padding-inline:16px}.scalar-app .md\\:px-\\[18px\\]{padding-inline:18px}.scalar-app .md\\:py-2\\.5{padding-block:10px}.scalar-app .md\\:pb-2\\.5{padding-bottom:10px}.scalar-app .md\\:pb-\\[37px\\]{padding-bottom:37px}.scalar-app .md\\:pl-0{padding-left:0}:is(.scalar-app .md\\:\\*\\:border-t-0>*){border-top-style:var(--tw-border-style);border-top-width:0}}@media(min-width:1000px){.scalar-app .lg\\:order-0,.scalar-app .lg\\:order-none{order:0}.scalar-app .lg\\:-mr-1{margin-right:-4px}.scalar-app .lg\\:mb-0{margin-bottom:0}.scalar-app .lg\\:flex{display:flex}.scalar-app .lg\\:min-h-header{min-height:48px}.scalar-app .lg\\:w-auto{width:auto}.scalar-app .lg\\:max-w-\\[580px\\]{max-width:580px}.scalar-app .lg\\:min-w-\\[580px\\]{min-width:580px}.scalar-app .lg\\:flex-1{flex:1}.scalar-app .lg\\:p-0{padding:0}.scalar-app .lg\\:p-1{padding:4px}.scalar-app .lg\\:px-1{padding-inline:4px}.scalar-app .lg\\:px-2\\.5{padding-inline:10px}.scalar-app .lg\\:pt-1{padding-top:4px}.scalar-app .lg\\:pr-24{padding-right:96px}}@media(min-width:1200px){.scalar-app .xl\\:\\!flex{display:flex!important}.scalar-app .xl\\:flex{display:flex}.scalar-app .xl\\:hidden{display:none}.scalar-app .xl\\:h-fit{height:fit-content}.scalar-app .xl\\:h-full{height:100%}.scalar-app .xl\\:min-h-header{min-height:48px}.scalar-app .xl\\:max-w-\\[720px\\]{max-width:720px}.scalar-app .xl\\:min-w-0{min-width:0}.scalar-app .xl\\:min-w-\\[720px\\]{min-width:720px}.scalar-app .xl\\:flex-row{flex-direction:row}.scalar-app .xl\\:overflow-auto{overflow:auto}.scalar-app .xl\\:overflow-hidden{overflow:hidden}.scalar-app .xl\\:rounded-none{border-radius:0}.scalar-app .xl\\:pr-0\\.5{padding-right:2px}.scalar-app .xl\\:pl-2{padding-left:8px}:is(.scalar-app .\\*\\:xl\\:border-t-0>*){border-top-style:var(--tw-border-style);border-top-width:0}:is(.scalar-app .\\*\\:xl\\:border-l>*){border-left-style:var(--tw-border-style);border-left-width:var(--scalar-border-width)}:is(.scalar-app .\\*\\:first\\:xl\\:border-l-0>*):first-child{border-left-style:var(--tw-border-style);border-left-width:0}}.scalar-app .dark\\:bg-b-2:where(.dark-mode,.dark-mode *){background-color:var(--scalar-background-2)}@media(hover:hover){.scalar-app .hover\\:dark\\:bg-b-2:hover:where(.dark-mode,.dark-mode *){background-color:var(--scalar-background-2)}}.scalar-app .ui-open\\:rotate-90[data-headlessui-state~=open],:where([data-headlessui-state~=open]) :is(.scalar-app .ui-open\\:rotate-90){rotate:90deg}.scalar-app .ui-open\\:rotate-180[data-headlessui-state~=open],:where([data-headlessui-state~=open]) :is(.scalar-app .ui-open\\:rotate-180){rotate:180deg}.scalar-app .last\\:ui-open\\:border-b-0:last-child[data-headlessui-state~=open],:where([data-headlessui-state~=open]) .scalar-app .last\\:ui-open\\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.scalar-app .ui-not-open\\:hidden[data-headlessui-state]:not([data-headlessui-state~=open]),:where([data-headlessui-state]:not([data-headlessui-state~=open])) :is(.scalar-app .ui-not-open\\:hidden):not([data-headlessui-state]){display:none}.scalar-app .ui-not-open\\:rotate-0[data-headlessui-state]:not([data-headlessui-state~=open]),:where([data-headlessui-state]:not([data-headlessui-state~=open])) :is(.scalar-app .ui-not-open\\:rotate-0):not([data-headlessui-state]){rotate:none}.scalar-app .ui-checked\\:bg-b-3[data-headlessui-state~=checked],:where([data-headlessui-state~=checked]) :is(.scalar-app .ui-checked\\:bg-b-3){background-color:var(--scalar-background-3)}.scalar-app .ui-active\\:bg-b-2[data-headlessui-state~=active],:where([data-headlessui-state~=active]) :is(.scalar-app .ui-active\\:bg-b-2),:is(.scalar-app .ui-active\\:\\*\\:bg-b-2[data-headlessui-state~=active]>*),:is(:where([data-headlessui-state~=active]) :is(.scalar-app .ui-active\\:\\*\\:bg-b-2)>*){background-color:var(--scalar-background-2)}@media(max-width:720px)and (max-height:480px){.scalar-app .zoomed\\:static{position:static}.scalar-app .zoomed\\:p-1{padding:4px}}.app-platform-mac :is(.scalar-app .mac\\:pl-\\[72px\\]){padding-left:72px}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}.nav-item[data-v-507381a3]{cursor:pointer;border-radius:var(--scalar-radius-lg);background:var(--scalar-background-3);border:var(--scalar-border-width)solid var(--scalar-background-2);color:var(--scalar-color-3);flex:1;justify-content:center;align-items:center;min-width:0;padding:4.5px;display:flex;position:relative;overflow:hidden}.dark-mode .nav-item[data-v-507381a3]{background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.dark-mode .nav-item[data-v-507381a3]{background:color-mix(in srgb,var(--scalar-background-2),transparent)}}.nav-item-icon-copy[data-v-507381a3]{white-space:nowrap;max-width:100%;-webkit-mask-image:linear-gradient(to left,transparent 0,var(--scalar-background-2)20px);mask-image:linear-gradient(to left,transparent 0,var(--scalar-background-2)20px);overflow:hidden}.nav-item:hover .nav-item-icon-copy[data-v-507381a3]{-webkit-mask-image:linear-gradient(to left,transparent 20px,var(--scalar-background-2)40px);mask-image:linear-gradient(to left,transparent 20px,var(--scalar-background-2)40px)}.nav-item-copy[data-v-507381a3]{max-width:calc(100% - 20px)}.nav-item[data-v-507381a3]:hover{color:var(--scalar-color-1)}.nav-item__active[data-v-507381a3]{background-color:var(--scalar-background-1);color:var(--scalar-color-1);border-color:var(--scalar-border-color)}.dark-mode .nav-item__active[data-v-507381a3]{background-color:var(--scalar-background-2)}.nav-item-close[data-v-507381a3]{border-radius:var(--scalar-radius);stroke-width:1.5px;max-width:20px;color:var(--scalar-color-3);opacity:0;background:0 0;margin-left:-20px;padding:2px;position:absolute;right:3px}.nav-item:hover .nav-item-close[data-v-507381a3]{opacity:1}.nav-item-close[data-v-507381a3]:hover{background-color:var(--scalar-background-4)}.nav-item__active .nav-item-close[data-v-507381a3]:hover{background-color:var(--scalar-background-2)}.download-app-button[data-v-cb45fa05]{box-shadow:0 0 0 .5px var(--scalar-border-color);background:linear-gradient(#ffffffbf,#00000009)}.dark-mode .download-app-button[data-v-cb45fa05]{background:linear-gradient(#ffffff1a,#00000026)}.download-app-button[data-v-cb45fa05]:hover{background:linear-gradient(#00000009,#ffffffbf)}.dark-mode .download-app-button[data-v-cb45fa05]:hover{background:linear-gradient(#00000026,#ffffff1a)}.http-bg-gradient[data-v-076b14a1]{background:linear-gradient(#ffffffbf,#00000009)}.http-bg-gradient[data-v-076b14a1]:hover{background:linear-gradient(#00000009,#ffffffbf)}.dark-mode .http-bg-gradient[data-v-076b14a1]{background:linear-gradient(#ffffff09,#00000026)}.dark-mode .http-bg-gradient[data-v-076b14a1]:hover{background:linear-gradient(#00000026,#ffffff09)}.scroll-timeline-x[data-v-e0578855]{scroll-timeline:--scroll-timeline x;scroll-timeline:--scroll-timeline horizontal;-ms-overflow-style:none;scrollbar-width:none;overflow:auto}.commandmenu[data-v-dd90fe74]{box-shadow:var(--scalar-shadow-2);border-radius:var(--scalar-radius-lg);background-color:var(--scalar-background-1);opacity:0;width:100%;max-width:580px;max-height:60dvh;margin:12px;animation:.3s ease-in-out .1s forwards fadeincommandmenu-dd90fe74;position:fixed;top:150px;left:50%;transform:translate(-50%,10px)}.commandmenu-overlay[data-v-dd90fe74]{cursor:pointer;background:#0003;animation:.3s ease-in-out forwards fadeincommand-dd90fe74;position:fixed;inset:0}@keyframes fadeincommand-dd90fe74{0%{opacity:0}to{opacity:1}}@keyframes fadeincommandmenu-dd90fe74{0%{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%)}}.scalar .scalar-app-layout[data-v-6118685a]{background:var(--scalar-background-1);border:var(--scalar-border-width)solid var(--scalar-border-color);border-radius:8px;width:100%;max-width:1390px;height:calc(100% - 120px);margin:auto;position:relative;overflow:hidden}@media(max-width:720px)and (max-height:480px){.scalar .scalar-app-layout[data-v-6118685a]{height:100%;max-height:90svh}}.scalar .scalar-app-exit[data-v-6118685a]{cursor:pointer;z-index:-1;background:#00000038;width:100vw;height:100vh;position:fixed;top:0;left:0}.dark-mode .scalar .scalar-app-exit[data-v-6118685a]{background:#00000073}.scalar .scalar-app-exit[data-v-6118685a]:before{text-align:center;color:#fff;opacity:.6;font-family:sans-serif;font-size:30px;font-weight:100;line-height:50px;position:absolute;top:0;right:12px}.scalar .scalar-app-exit[data-v-6118685a]:hover:before{opacity:1}.scalar-container[data-v-6118685a]{visibility:visible;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:fixed;top:0;bottom:0;left:0;overflow:hidden}.scalar .url-form-input[data-v-6118685a]{min-height:auto!important}.scalar .scalar-container[data-v-6118685a]{line-height:normal}.scalar-client-fade-enter-active[data-v-6118685a],.scalar-client-fade-leave-active[data-v-6118685a]{transition:opacity .35s}.scalar-client-fade-enter-from[data-v-6118685a],.scalar-client-fade-leave-to[data-v-6118685a]{opacity:0}.open-api-client-button[data-v-c7bdd328]{cursor:pointer;text-align:center;white-space:nowrap;width:100%;height:31px;font-size:var(--scalar-small);border-radius:var(--scalar-radius);box-shadow:0 0 0 .5px var(--scalar-border-color);color:var(--scalar-sidebar-color-1);justify-content:center;align-items:center;gap:6px;padding:9px 12px;line-height:1.385;text-decoration:none;display:flex}.open-api-client-button[data-v-c7bdd328]:hover{background:var(--scalar-sidebar-item-hover-background,var(--scalar-background-2))}[data-v-103d9d56] .cm-editor{background:0 0;outline:none;height:100%;padding:0}[data-v-103d9d56] .cm-placeholder{color:var(--scalar-color-3)}[data-v-103d9d56] .cm-content{font-family:var(--scalar-font-code);font-size:var(--scalar-small);max-height:20px;padding:8px 0}[data-v-103d9d56] .cm-tooltip{filter:brightness(var(--scalar-lifted-brightness));border-radius:var(--scalar-radius);box-shadow:var(--scalar-shadow-2);background:0 0!important;border:none!important;outline:none!important;overflow:hidden!important}[data-v-103d9d56] .cm-tooltip-autocomplete ul li{padding:3px 6px!important}[data-v-103d9d56] .cm-completionIcon-type:after{color:var(--scalar-color-3)!important}[data-v-103d9d56] .cm-tooltip-autocomplete ul li[aria-selected]{background:var(--scalar-background-2)!important;color:var(--scalar-color-1)!important}[data-v-103d9d56] .cm-tooltip-autocomplete ul{position:relative;padding:6px!important}[data-v-103d9d56] .cm-tooltip-autocomplete ul li:hover{border-radius:3px;color:var(--scalar-color-1)!important;background:var(--scalar-background-3)!important}[data-v-103d9d56] .cm-activeLine,[data-v-103d9d56] .cm-activeLineGutter{background-color:#0000}[data-v-103d9d56] .cm-selectionMatch,[data-v-103d9d56] .cm-matchingBracket{border-radius:var(--scalar-radius);background:var(--scalar-background-4)!important}[data-v-103d9d56] .cm-css-color-picker-wrapper{outline:1px solid var(--scalar-background-3);border-radius:3px;display:inline-flex;overflow:hidden}[data-v-103d9d56] .cm-gutters{color:var(--scalar-color-3);font-size:var(--scalar-small);background-color:#0000;border-right:none;border-radius:0 0 0 3px;line-height:22px}[data-v-103d9d56] .cm-gutters:before{content:"";border-radius:var(--scalar-radius)0 0 var(--scalar-radius);background-color:var(--scalar-background-1);width:calc(100% - 2px);height:calc(100% - 4px);position:absolute;top:2px;left:2px}[data-v-103d9d56] .cm-gutterElement{justify-content:flex-end;align-items:center;display:flex;position:relative;font-family:var(--scalar-font-code)!important;padding-left:0!important;padding-right:6px!important}[data-v-103d9d56] .cm-lineNumbers .cm-gutterElement{min-width:fit-content}[data-v-103d9d56] .cm-gutter+.cm-gutter :not(.cm-foldGutter) .cm-gutterElement{padding-left:0!important}[data-v-103d9d56] .cm-scroller{overflow:auto}.line-wrapping[data-v-103d9d56]:focus-within .cm-content{white-space:break-spaces;word-break:break-all;min-height:fit-content;padding:3px 6px;display:inline-table}.address-bar-history-button[data-v-a93fa60f]:hover{background:var(--scalar-background-3)}.address-bar-history-button[data-v-a93fa60f]:focus-within{background:var(--scalar-background-2)}.description[data-v-92012388] .markdown{font-weight:var(--scalar-semibold);color:var(--scalar-color--1);padding:0;display:block}.description[data-v-92012388] .markdown>:first-child{margin-top:0}[data-v-cb2a35da] .cm-editor{outline:none;width:100%;height:100%}[data-v-cb2a35da] .cm-line{padding:0}[data-v-cb2a35da] .cm-content{font-size:var(--scalar-small);align-items:center;padding:0;display:flex}.scroll-timeline-x[data-v-cb2a35da]{scroll-timeline:--scroll-timeline x;scroll-timeline:--scroll-timeline horizontal;-ms-overflow-style:none}.scroll-timeline-x-hidden[data-v-cb2a35da]{overflow-x:auto}.scroll-timeline-x-hidden[data-v-cb2a35da] .cm-scroller{scrollbar-width:none;-ms-overflow-style:none;padding-right:20px;overflow:auto}.scroll-timeline-x-hidden[data-v-cb2a35da]::-webkit-scrollbar{width:0;height:0;display:none}.scroll-timeline-x-hidden[data-v-cb2a35da] .cm-scroller::-webkit-scrollbar{width:0;height:0;display:none}.scroll-timeline-x-address[data-v-cb2a35da]{scrollbar-width:none;line-height:27px}.scroll-timeline-x-address[data-v-cb2a35da]:after{content:"";cursor:text;width:24px;height:100%;position:absolute;right:0}.scroll-timeline-x-address[data-v-cb2a35da]:empty:before{content:"Enter URL or cURL request";color:var(--scalar-color-3);pointer-events:none}.fade-left[data-v-cb2a35da],.fade-right[data-v-cb2a35da]{content:"";pointer-events:none;z-index:1;height:100%;animation-name:fadein-cb2a35da;animation-duration:1ms;animation-direction:reverse;animation-timeline:--scroll-timeline;position:sticky}.fade-left[data-v-cb2a35da]{background:linear-gradient(-90deg,var(--scalar-address-bar-bg)0%,var(--scalar-address-bar-bg)30%,var(--scalar-address-bar-bg)100%)}@supports (color:color-mix(in lab,red,red)){.fade-left[data-v-cb2a35da]{background:linear-gradient(-90deg,color-mix(in srgb,var(--scalar-address-bar-bg),transparent 100%)0%,color-mix(in srgb,var(--scalar-address-bar-bg),transparent 20%)30%,var(--scalar-address-bar-bg)100%)}}.fade-left[data-v-cb2a35da]{min-width:6px;animation-direction:normal;left:-1px}.fade-right[data-v-cb2a35da]{background:linear-gradient(90deg,var(--scalar-address-bar-bg)0%,var(--scalar-address-bar-bg)30%,var(--scalar-address-bar-bg)100%)}@supports (color:color-mix(in lab,red,red)){.fade-right[data-v-cb2a35da]{background:linear-gradient(90deg,color-mix(in srgb,var(--scalar-address-bar-bg),transparent 100%)0%,color-mix(in srgb,var(--scalar-address-bar-bg),transparent 20%)30%,var(--scalar-address-bar-bg)100%)}}.fade-right[data-v-cb2a35da]{min-width:24px;right:-1px}@keyframes fadein-cb2a35da{0%{opacity:0}1%{opacity:1}}.address-bar-bg-states[data-v-cb2a35da]{--scalar-address-bar-bg:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.address-bar-bg-states[data-v-cb2a35da]{--scalar-address-bar-bg:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}.address-bar-bg-states[data-v-cb2a35da]{background:var(--scalar-address-bar-bg)}.address-bar-bg-states[data-v-cb2a35da]:has(.cm-focused){--scalar-address-bar-bg:var(--scalar-background-1);border-color:var(--scalar-border-color);outline:1px solid var(--scalar-color-accent)}.address-bar-bg-states:has(.cm-focused) .fade-left[data-v-cb2a35da],.address-bar-bg-states:has(.cm-focused) .fade-right[data-v-cb2a35da]{--scalar-address-bar-bg:var(--scalar-background-1)}.sidebar-height[data-v-dcff7b49]{min-height:100%}@media(min-width:800px){.sidebar-mask[data-v-dcff7b49]{-webkit-mask-image:linear-gradient(0,transparent 0,transparent 0,var(--scalar-background-2)30px);mask-image:linear-gradient(0,transparent 0,transparent 0,var(--scalar-background-2)30px)}}.resizer[data-v-dcff7b49]{cursor:col-resize;border-right:2px solid #0000;width:5px;transition:border-right-color .3s;position:absolute;top:0;bottom:0;right:0}.resizer[data-v-dcff7b49]:hover,.dragging .resizer[data-v-dcff7b49]{border-right-color:var(--scalar-background-3)}.dragging[data-v-dcff7b49]{cursor:col-resize}.dragging[data-v-dcff7b49]:before{content:"";width:100%;height:100%;display:block;position:absolute}[data-v-c1a50a6e] .cm-editor{padding:0}[data-v-c1a50a6e] .cm-content{font-family:var(--scalar-font);font-size:var(--scalar-small);background-color:#0000;align-items:center;width:100%;padding:5px 8px;display:flex}[data-v-c1a50a6e] .cm-content:has(.cm-pill){padding:5px 8px}[data-v-c1a50a6e] .cm-content .cm-pill:not(:last-of-type){margin-right:.5px}[data-v-c1a50a6e] .cm-content .cm-pill:not(:first-of-type){margin-left:.5px}[data-v-c1a50a6e] .cm-line{text-overflow:ellipsis;word-break:break-word;padding:0;overflow:hidden}.required[data-v-c1a50a6e]:after{content:"Required"}input[data-v-c1a50a6e]::placeholder{color:var(--scalar-color-3)}.scalar-password-input[data-v-c1a50a6e]{text-security:disc;-webkit-text-security:disc;-moz-text-security:disc}@media(min-width:800px){.has-no-import-url,.has-import-url{contain:paint;max-width:100dvw;overflow-x:hidden}.has-no-import-url .scalar-client>main{opacity:1;background:var(--scalar-background-1);animation:.3s ease-in-out forwards transform-restore-layout}.has-import-url .scalar-client>main{opacity:0;border:var(--scalar-border-width)solid var(--scalar-border-color);z-index:10000;border-radius:12px;animation:.3s ease-in-out forwards transform-fade-layout;overflow:hidden;transform:scale(.85)translate(calc(50dvw + 80px))}.has-import-url .scalar-client .sidenav{display:none}.has-no-import-url .scalar-app,.has-import-url .scalar-app{background:var(--scalar-background-1)!important}}@keyframes transform-fade-layout{0%{opacity:0;transform:scale(.85)translate(calc(50dvw + 80px),10px)}to{opacity:1;transform:scale(.85)translate(calc(50dvw + 80px))}}@keyframes transform-restore-layout{0%{opacity:1;transform:scale(.85)translate(calc(50dvw + 80px))}to{opacity:1;transform:scale(1)translate(0)}}.openapi-color{color:var(--scalar-color-green)}.section-flare{position:fixed;top:0;right:-50dvw}#scalar-client{background-color:var(--scalar-background-2);flex-direction:column;width:100dvw;height:100dvh;display:flex;position:relative}.address-bar-history-button[data-v-c15c6573]:hover{background:var(--scalar-background-3)}.address-bar-history-button[data-v-c15c6573]:focus-within{background:var(--scalar-background-2)}.description[data-v-1b7a32a4] .markdown{font-weight:var(--scalar-semibold);color:var(--scalar-color--1);padding:0;display:block}.description[data-v-1b7a32a4] .markdown>:first-child{margin-top:0}[data-v-a0bd2752] .cm-editor{background:0 0;outline:none;height:100%;padding:0}[data-v-a0bd2752] .cm-placeholder{color:var(--scalar-color-3)}[data-v-a0bd2752] .cm-content{font-family:var(--scalar-font-code);font-size:var(--scalar-small);max-height:20px;padding:8px 0}[data-v-a0bd2752] .cm-tooltip{filter:brightness(var(--scalar-lifted-brightness));border-radius:var(--scalar-radius);box-shadow:var(--scalar-shadow-2);background:0 0!important;border:none!important;outline:none!important;overflow:hidden!important}[data-v-a0bd2752] .cm-tooltip-autocomplete ul li{padding:3px 6px!important}[data-v-a0bd2752] .cm-completionIcon-type:after{color:var(--scalar-color-3)!important}[data-v-a0bd2752] .cm-tooltip-autocomplete ul li[aria-selected]{background:var(--scalar-background-2)!important;color:var(--scalar-color-1)!important}[data-v-a0bd2752] .cm-tooltip-autocomplete ul{position:relative;padding:6px!important}[data-v-a0bd2752] .cm-tooltip-autocomplete ul li:hover{border-radius:3px;color:var(--scalar-color-1)!important;background:var(--scalar-background-3)!important}[data-v-a0bd2752] .cm-activeLine,[data-v-a0bd2752] .cm-activeLineGutter{background-color:#0000}[data-v-a0bd2752] .cm-selectionMatch,[data-v-a0bd2752] .cm-matchingBracket{border-radius:var(--scalar-radius);background:var(--scalar-background-4)!important}[data-v-a0bd2752] .cm-css-color-picker-wrapper{outline:1px solid var(--scalar-background-3);border-radius:3px;display:inline-flex;overflow:hidden}[data-v-a0bd2752] .cm-gutters{color:var(--scalar-color-3);font-size:var(--scalar-small);background-color:#0000;border-right:none;border-radius:0 0 0 3px;line-height:22px}[data-v-a0bd2752] .cm-gutters:before{content:"";border-radius:var(--scalar-radius)0 0 var(--scalar-radius);background-color:var(--scalar-background-1);width:calc(100% - 2px);height:calc(100% - 4px);position:absolute;top:2px;left:2px}[data-v-a0bd2752] .cm-gutterElement{justify-content:flex-end;align-items:center;display:flex;position:relative;font-family:var(--scalar-font-code)!important;padding-left:0!important;padding-right:6px!important}[data-v-a0bd2752] .cm-lineNumbers .cm-gutterElement{min-width:fit-content}[data-v-a0bd2752] .cm-gutter+.cm-gutter :not(.cm-foldGutter) .cm-gutterElement{padding-left:0!important}[data-v-a0bd2752] .cm-scroller{overflow:auto}.line-wrapping[data-v-a0bd2752]:focus-within .cm-content{white-space:break-spaces;word-break:break-all;min-height:fit-content;padding:3px 6px;display:inline-table}.cm-pill{--tw-bg-base:var(--scalar-color-1);color:var(--tw-bg-base);font-size:var(--scalar-small);border-radius:30px;padding:0 9px;display:inline-block;background:var(--tw-bg-base)!important}@supports (color:color-mix(in lab,red,red)){.cm-pill{background:color-mix(in srgb,var(--tw-bg-base),transparent 94%)!important}}.cm-pill.bg-grey{background:var(--scalar-background-3)!important}.dark-mode .cm-pill{background:var(--tw-bg-base)!important}@supports (color:color-mix(in lab,red,red)){.dark-mode .cm-pill{background:color-mix(in srgb,var(--tw-bg-base),transparent 90%)!important}}.cm-pill:first-of-type{margin-left:0}.cm-editor .cm-widgetBuffer{display:none}.cm-foldPlaceholder:hover{color:var(--scalar-color-1)}.cm-foldGutter .cm-gutterElement{font-size:var(--scalar-heading-4);padding:2px!important}.cm-foldGutter .cm-gutterElement:first-of-type{display:none}.cm-foldGutter .cm-gutterElement .cm-foldMarker{padding:2px}.cm-foldGutter .cm-gutterElement:hover .cm-foldMarker{background:var(--scalar-background-2);border-radius:var(--scalar-radius);color:var(--scalar-color-1)}[data-v-791e0491] .cm-editor{outline:none;width:100%;height:100%}[data-v-791e0491] .cm-line{padding:0}[data-v-791e0491] .cm-content{font-size:var(--scalar-small);align-items:center;padding:0;display:flex}.scroll-timeline-x[data-v-791e0491]{scroll-timeline:--scroll-timeline x;scroll-timeline:--scroll-timeline horizontal;-ms-overflow-style:none}.scroll-timeline-x-hidden[data-v-791e0491]{overflow-x:auto}.scroll-timeline-x-hidden[data-v-791e0491] .cm-scroller{scrollbar-width:none;-ms-overflow-style:none;padding-right:20px;overflow:auto}.scroll-timeline-x-hidden[data-v-791e0491]::-webkit-scrollbar{width:0;height:0;display:none}.scroll-timeline-x-hidden[data-v-791e0491] .cm-scroller::-webkit-scrollbar{width:0;height:0;display:none}.scroll-timeline-x-address[data-v-791e0491]{scrollbar-width:none;line-height:27px}.scroll-timeline-x-address[data-v-791e0491]:after{content:"";cursor:text;width:24px;height:100%;position:absolute;right:0}.scroll-timeline-x-address[data-v-791e0491]:empty:before{content:"Enter URL or cURL request";color:var(--scalar-color-3);pointer-events:none}.fade-left[data-v-791e0491],.fade-right[data-v-791e0491]{content:"";pointer-events:none;z-index:1;height:100%;animation-name:fadein-791e0491;animation-duration:1ms;animation-direction:reverse;animation-timeline:--scroll-timeline;position:sticky}.fade-left[data-v-791e0491]{background:linear-gradient(-90deg,var(--scalar-address-bar-bg)0%,var(--scalar-address-bar-bg)30%,var(--scalar-address-bar-bg)100%)}@supports (color:color-mix(in lab,red,red)){.fade-left[data-v-791e0491]{background:linear-gradient(-90deg,color-mix(in srgb,var(--scalar-address-bar-bg),transparent 100%)0%,color-mix(in srgb,var(--scalar-address-bar-bg),transparent 20%)30%,var(--scalar-address-bar-bg)100%)}}.fade-left[data-v-791e0491]{min-width:6px;animation-direction:normal;left:-1px}.fade-right[data-v-791e0491]{background:linear-gradient(90deg,var(--scalar-address-bar-bg)0%,var(--scalar-address-bar-bg)30%,var(--scalar-address-bar-bg)100%)}@supports (color:color-mix(in lab,red,red)){.fade-right[data-v-791e0491]{background:linear-gradient(90deg,color-mix(in srgb,var(--scalar-address-bar-bg),transparent 100%)0%,color-mix(in srgb,var(--scalar-address-bar-bg),transparent 20%)30%,var(--scalar-address-bar-bg)100%)}}.fade-right[data-v-791e0491]{min-width:24px;right:-1px}@keyframes fadein-791e0491{0%{opacity:0}1%{opacity:1}}.address-bar-bg-states[data-v-791e0491]{--scalar-address-bar-bg:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.address-bar-bg-states[data-v-791e0491]{--scalar-address-bar-bg:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}.address-bar-bg-states[data-v-791e0491]{background:var(--scalar-address-bar-bg)}.address-bar-bg-states[data-v-791e0491]:has(.cm-focused){--scalar-address-bar-bg:var(--scalar-background-1);border-color:var(--scalar-border-color);outline-width:1px;outline-style:solid}.address-bar-bg-states:has(.cm-focused) .fade-left[data-v-791e0491],.address-bar-bg-states:has(.cm-focused) .fade-right[data-v-791e0491]{--scalar-address-bar-bg:var(--scalar-background-1)}.app-exit-button[data-v-7b4b0249]{color:#fff;background:#0000001a}.app-exit-button[data-v-7b4b0249]:hover{background:#ffffff1a}.fade-request-section-content[data-v-f97cc68c]{background:linear-gradient(to left,var(--scalar-background-1)64%,transparent)}.filter-hover[data-v-f97cc68c]{height:100%;padding-left:24px;padding-right:39px;transition:width 0s ease-in-out .2s;position:absolute;right:0;overflow:hidden}.filter-hover[data-v-f97cc68c]:hover,.filter-hover[data-v-f97cc68c]:has(:focus-visible){z-index:10;width:100%}.filter-hover[data-v-f97cc68c]:before{content:"";background-color:var(--scalar-background-1);opacity:0;pointer-events:none;width:100%;height:fit-content;transition:all .3s ease-in-out;position:absolute;top:0;left:0}.filter-hover-item[data-v-f97cc68c]{opacity:0}.filter-hover-item[data-v-f97cc68c]:not(:last-of-type){transform:translateY(3px)}.filter-hover:hover .filter-hover-item[data-v-f97cc68c]{transition:opacity .2s ease-in-out,transform .2s ease-in-out}.filter-hover:hover .filter-hover-item[data-v-f97cc68c]:last-of-type{transition-delay:50ms}.filter-hover:hover .filter-hover-item[data-v-f97cc68c]:nth-last-of-type(2){transition-delay:.1s}.filter-hover:hover .filter-hover-item[data-v-f97cc68c]:nth-last-of-type(3){transition-delay:.15s}.filter-hover:hover .filter-hover-item[data-v-f97cc68c]:nth-last-of-type(4){transition-delay:.2s}.filter-hover:hover .filter-hover-item[data-v-f97cc68c]:nth-last-of-type(5){transition-delay:.25s}.filter-hover:hover .filter-hover-item[data-v-f97cc68c]:nth-last-of-type(6){transition-delay:.3s}.filter-hover:hover .filter-hover-item[data-v-f97cc68c]:nth-last-of-type(7){transition-delay:.35s}.filter-hover:hover .filter-hover-item[data-v-f97cc68c],.filter-hover:has(:focus-visible) .filter-hover-item[data-v-f97cc68c]{opacity:1;transform:translateZ(0)}.filter-hover[data-v-f97cc68c]:hover:before,.filter-hover[data-v-f97cc68c]:has(:focus-visible):before{opacity:.9;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.filter-button[data-v-f97cc68c]{top:50%;transform:translateY(-50%)}.context-bar-group:hover .context-bar-group-hover\\:text-c-1[data-v-f97cc68c],.context-bar-group:has(:focus-visible) .context-bar-group-hover\\:text-c-1[data-v-f97cc68c]{--tw-text-opacity:1;color:rgb(var(--scalar-color-1)/var(--tw-text-opacity))}.context-bar-group:hover .context-bar-group-hover\\:hidden[data-v-f97cc68c],.context-bar-group:has(:focus-visible) .context-bar-group-hover\\:hidden[data-v-f97cc68c]{display:none}.schema>span[data-v-f2ab7aa3]:not(:first-child):before{content:"·";margin:0 .5ch;display:block}.schema>span[data-v-f2ab7aa3]{white-space:nowrap;display:flex}[data-v-36811e28] .cm-editor{padding:0}[data-v-36811e28] .cm-content{font-family:var(--scalar-font);font-size:var(--scalar-small);background-color:#0000;align-items:center;width:100%;padding:5px 8px;display:flex}[data-v-36811e28] .cm-content:has(.cm-pill){padding:5px 8px}[data-v-36811e28] .cm-content .cm-pill:not(:last-of-type){margin-right:.5px}[data-v-36811e28] .cm-content .cm-pill:not(:first-of-type){margin-left:.5px}[data-v-36811e28] .cm-line{text-overflow:ellipsis;padding:0;overflow:hidden}.filemask[data-v-36811e28]{-webkit-mask-image:linear-gradient(to right,transparent 0,var(--scalar-background-2)20px);mask-image:linear-gradient(to right,transparent 0,var(--scalar-background-2)20px)}[data-v-3d420065] .cm-content{font-size:var(--scalar-small)}.form-group[data-v-43df1726]{margin-bottom:1rem}.modal-actions[data-v-43df1726]{justify-content:flex-end;gap:1rem;display:flex}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}[data-v-3157c3c7] .cm-editor{padding:0}[data-v-3157c3c7] .cm-content{font-family:var(--scalar-font);font-size:var(--scalar-small);background-color:#0000;align-items:center;width:100%;padding:5px 8px;display:flex}[data-v-3157c3c7] .cm-content:has(.cm-pill){padding:5px 8px}[data-v-3157c3c7] .cm-content .cm-pill:not(:last-of-type){margin-right:.5px}[data-v-3157c3c7] .cm-content .cm-pill:not(:first-of-type){margin-left:.5px}[data-v-3157c3c7] .cm-line{text-overflow:ellipsis;word-break:break-word;padding:0;overflow:hidden}.required[data-v-3157c3c7]:after{content:"Required"}input[data-v-3157c3c7]::placeholder{color:var(--scalar-color-3)}.scalar-password-input[data-v-3157c3c7]{text-security:disc;-webkit-text-security:disc;-moz-text-security:disc}.request-section-content[data-v-b1bbc64b]{--scalar-border-width:.5px}.request-section-content-filter[data-v-b1bbc64b]{box-shadow:0 -10px 0 10px var(--scalar-background-1)}.request-item:focus-within .request-meta-buttons[data-v-b1bbc64b]{opacity:1}.group-hover-input[data-v-b1bbc64b]{border-width:var(--scalar-border-width);border-color:#0000}.group:hover .group-hover-input[data-v-b1bbc64b]{background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.group:hover .group-hover-input[data-v-b1bbc64b]{background:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}.group:hover .group-hover-input[data-v-b1bbc64b]{border-color:var(--scalar-border-color)}.group-hover-input[data-v-b1bbc64b]:focus{border-color:var(--scalar-border-color)!important;background:0 0!important}.light-mode .bg-preview[data-v-c02b5bb8]{background-image:url("data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'16\' height=\'16\' fill=\'%23000\' fill-opacity=\'10%25\'%3E%3Crect width=\'8\' height=\'8\' /%3E%3Crect x=\'8\' y=\'8\' width=\'8\' height=\'8\' /%3E%3C/svg%3E")}.dark-mode .bg-preview[data-v-c02b5bb8]{background-image:url("data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'16\' height=\'16\' fill=\'%23FFF\' fill-opacity=\'10%25\'%3E%3Crect width=\'8\' height=\'8\' /%3E%3Crect x=\'8\' y=\'8\' width=\'8\' height=\'8\' /%3E%3C/svg%3E")}[data-v-9c64cd5e] .cm-editor{font-size:var(--scalar-small);background-color:#0000;outline:none}[data-v-9c64cd5e] .cm-gutters{background-color:var(--scalar-background-1);border-radius:var(--scalar-radius)0 0 var(--scalar-radius)}.body-raw[data-v-9c64cd5e] .cm-scroller{min-width:100%;overflow:auto}.scalar-code-block[data-v-8ae4f555] .hljs *{font-size:var(--scalar-small)}.ascii-art-animate .ascii-art-line[data-v-69ebd973]{border-right:1ch solid #0000;animation:4s step-end 1s both typewriter-69ebd973,.5s step-end infinite blinkTextCursor-69ebd973}@keyframes typewriter-69ebd973{0%{width:0}to{width:100%}}@keyframes blinkTextCursor-69ebd973{0%{border-right-color:currentColor}50%{border-right-color:#0000}}.scalar-version-number[data-v-34b57d9d]{width:76px;height:76px;font-size:8px;font-family:var(--scalar-font-code);box-shadow:inset 2px 0 0 2px var(--scalar-background-2);text-align:center;text-transform:initial;-webkit-text-decoration-color:var(--scalar-color-3);text-decoration-color:var(--scalar-color-3);border-radius:9px 9px 16px 12px;flex-direction:column;justify-content:center;align-items:center;margin-top:-113px;margin-left:-36px;line-height:11px;display:flex;position:absolute;transform:skewY(13deg)}.scalar-version-number a[data-v-34b57d9d]{background:var(--scalar-background-2);border:.5px solid var(--scalar-border-color);border-radius:3px;padding:2px 4px;font-weight:700;text-decoration:none}.gitbook-show[data-v-34b57d9d]{display:none}.v-enter-active[data-v-1f35725e]{transition:opacity .5s}.v-enter-from[data-v-1f35725e]{opacity:0}.animate-response-heading .response-heading[data-v-9c1fd1c7]{opacity:1;animation:.2s ease-in-out forwards push-response-9c1fd1c7}@keyframes push-response-9c1fd1c7{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.animate-response-heading .animate-response-children[data-v-9c1fd1c7]{opacity:0;animation:.2s ease-in-out 50ms forwards response-spans-9c1fd1c7}@keyframes response-spans-9c1fd1c7{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.request-card[data-v-cbc307e3]{font-size:var(--scalar-font-size-3)}.request-method[data-v-cbc307e3]{font-family:var(--scalar-font-code);text-transform:uppercase;margin-right:6px}.request-card-footer[data-v-cbc307e3]{flex-shrink:0;justify-content:flex-end;padding:6px;display:flex;position:relative}.request-card-footer-addon[data-v-cbc307e3]{flex:1;align-items:center;min-width:0;display:flex}.request-editor-section[data-v-cbc307e3]{flex:1;display:flex}.request-card-simple[data-v-cbc307e3]{font-size:var(--scalar-small);justify-content:space-between;align-items:center;padding:8px 8px 8px 12px;display:flex}.code-snippet[data-v-cbc307e3]{flex-direction:column;width:100%;display:flex}.resizer[data-v-e2c54c18]{cursor:col-resize;z-index:100;border-right:2px solid #0000;width:5px;transition:border-right-color .3s;position:absolute;top:0;bottom:0;right:0}.scalar-dragging{cursor:col-resize}.resizer:hover,.scalar-dragging .resizer{border-right-color:var(--scalar-background-3)}.scalar-dragging:after{content:"";display:block;position:absolute;inset:0}.scroll-timeline-x[data-v-f4568236]{scroll-timeline:--scroll-timeline x;scroll-timeline:--scroll-timeline horizontal;-ms-overflow-style:none;scrollbar-width:none;overflow:auto}.scroll-timeline-x[data-v-f4568236]::-webkit-scrollbar{display:none}.splash-screen[data-v-af32615f]{opacity:0;animation:.5s ease-in-out forwards fadeIn-af32615f}.logo-icon[data-v-af32615f]{opacity:0;animation:.6s ease-in-out .2s forwards fadeInLogo-af32615f,2s ease-in-out .8s infinite pulse-af32615f}@keyframes fadeIn-af32615f{0%{opacity:0}to{opacity:.9}}@keyframes fadeInLogo-af32615f{0%{opacity:0;transform:scale(.9)}to{opacity:.8;transform:scale(1)}}@keyframes pulse-af32615f{0%,to{opacity:.8}50%{opacity:.6}}.commandmenu[data-v-2fe57517]{box-shadow:var(--scalar-shadow-2);border-radius:var(--scalar-radius-lg);background-color:var(--scalar-background-1);opacity:0;width:100%;max-width:580px;max-height:60dvh;margin:12px;animation:.3s ease-in-out .1s forwards fadeincommandmenu-2fe57517;position:fixed;top:150px;left:50%;transform:translate(-50%,10px)}.commandmenu-overlay[data-v-2fe57517]{cursor:pointer;background:#0003;animation:.3s ease-in-out forwards fadeincommand-2fe57517;position:fixed;inset:0}@keyframes fadeincommand-2fe57517{0%{opacity:0}to{opacity:1}}@keyframes fadeincommandmenu-2fe57517{0%{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%)}}.empty-sidebar-item-content[data-v-658f060e]{display:none}.empty-sidebar-item .empty-sidebar-item-content[data-v-658f060e]{display:block}.rabbitjump[data-v-658f060e]{opacity:0}.empty-sidebar-item:hover .rabbitjump[data-v-658f060e]{opacity:1;animation:.5s step-end infinite rabbitAnimation-658f060e}.empty-sidebar-item:hover .rabbitsit[data-v-658f060e]{opacity:0;animation:.5s step-end infinite rabbitAnimation2-658f060e}.empty-sidebar-item:hover .rabbit-ascii[data-v-658f060e]{animation:8s linear infinite rabbitRun-658f060e}@keyframes rabbitRun-658f060e{0%{transform:translateZ(0)}25%{transform:translate(250px)}25.01%{transform:translate(-250px)}75%{transform:translate(250px)}75.01%{transform:translate(-250px)}to{transform:translateZ(0)}}@keyframes rabbitAnimation-658f060e{0%,to{opacity:1}50%{opacity:0}}@keyframes rabbitAnimation2-658f060e{0%,to{opacity:0}50%{opacity:1;transform:translateY(-8px)}}.nav-single-tab[data-v-2e741aab]{width:100%;height:100%;color:var(--scalar-color-1);justify-content:center;align-items:center;display:flex;overflow:hidden}.nav-item[data-v-2e741aab]{cursor:pointer;border-radius:var(--scalar-radius-lg);background:var(--scalar-background-3);border:var(--scalar-border-width)solid var(--scalar-background-2);color:var(--scalar-color-3);flex:1;justify-content:center;align-items:center;min-width:0;padding:4.5px 1rem;display:flex;position:relative;overflow:hidden}.dark-mode .nav-item[data-v-2e741aab]{background:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.dark-mode .nav-item[data-v-2e741aab]{background:color-mix(in srgb,var(--scalar-background-2),transparent)}}.nav-item-icon-copy[data-v-2e741aab]{white-space:nowrap;max-width:100%;-webkit-mask-image:linear-gradient(to left,transparent 0,var(--scalar-background-2)20px);mask-image:linear-gradient(to left,transparent 0,var(--scalar-background-2)20px);overflow:hidden}.nav-item:hover .nav-item-icon-copy[data-v-2e741aab]{-webkit-mask-image:linear-gradient(to left,transparent 20px,var(--scalar-background-2)40px);mask-image:linear-gradient(to left,transparent 20px,var(--scalar-background-2)40px)}.nav-item-copy[data-v-2e741aab]{max-width:calc(100% - 20px)}.nav-item[data-v-2e741aab]:hover{color:var(--scalar-color-1)}.nav-item__active[data-v-2e741aab]{background-color:var(--scalar-background-1);color:var(--scalar-color-1);border-color:var(--scalar-border-color)}.dark-mode .nav-item__active[data-v-2e741aab]{background-color:var(--scalar-background-2)}.nav-item-close[data-v-2e741aab]{border-radius:var(--scalar-radius);stroke-width:1.5px;max-width:20px;color:var(--scalar-color-3);opacity:0;background:0 0;margin-left:-20px;padding:2px;position:absolute;right:3px}.nav-item:hover .nav-item-close[data-v-2e741aab]{opacity:1}.nav-item-close[data-v-2e741aab]:hover{background-color:var(--scalar-background-4)}.nav-item__active .nav-item-close[data-v-2e741aab]:hover{background-color:var(--scalar-background-2)}.download-app-button[data-v-d9bec97b]{box-shadow:0 0 0 .5px var(--scalar-border-color);background:linear-gradient(#ffffffbf,#00000009)}.dark-mode .download-app-button[data-v-d9bec97b]{background:linear-gradient(#ffffff1a,#00000026)}.download-app-button[data-v-d9bec97b]:hover{background:linear-gradient(#00000009,#ffffffbf)}.dark-mode .download-app-button[data-v-d9bec97b]:hover{background:linear-gradient(#00000026,#ffffff1a)}#scalar-client{background-color:var(--scalar-background-2);position:relative}.dark-mode #scalar-client{background-color:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.dark-mode #scalar-client{background-color:color-mix(in srgb,var(--scalar-background-1)65%,black)}}.scalar-collection-auth[data-v-9d8e1c09]{border:var(--scalar-border-width)solid var(--scalar-border-color);border-radius:var(--scalar-radius-lg);overflow:hidden}[data-v-ddfccc08] .cm-editor{padding:0}[data-v-ddfccc08] .cm-content{font-family:var(--scalar-font);font-size:var(--scalar-small);background-color:#0000;align-items:center;width:100%;padding:5px 8px;display:flex}[data-v-ddfccc08] .cm-content:has(.cm-pill){padding:5px 8px}[data-v-ddfccc08] .cm-content .cm-pill:not(:last-of-type){margin-right:.5px}[data-v-ddfccc08] .cm-content .cm-pill:not(:first-of-type){margin-left:.5px}[data-v-ddfccc08] .cm-line{text-overflow:ellipsis;padding:0;overflow:hidden}[data-v-28c8509c] .cm-editor{padding:0}[data-v-28c8509c] .cm-content{font-family:var(--scalar-font);font-size:var(--scalar-small);background-color:#0000;align-items:center;width:100%;padding:5px 8px;display:flex}[data-v-28c8509c] .cm-content:has(.cm-pill){padding:5px 8px}[data-v-28c8509c] .cm-content .cm-pill:not(:last-of-type){margin-right:.5px}[data-v-28c8509c] .cm-content .cm-pill:not(:first-of-type){margin-left:.5px}[data-v-28c8509c] .cm-line{text-overflow:ellipsis;padding:0;overflow:hidden}[data-v-59dae578] .cm-content{min-height:fit-content}[data-v-59dae578] .cm-scroller{max-width:100%;overflow:auto hidden}.dark-mode .t-editor__callout[data-v-fa58cbab],.light-mode .t-editor__callout[data-v-fa58cbab]{--callout-font-size:var(--scalar-small);--callout-neutral-primary:var(--scalar-color-3);--callout-neutral-secondary:var(--scalar-background-2)}@supports (color:color-mix(in lab,red,red)){.dark-mode .t-editor__callout[data-v-fa58cbab],.light-mode .t-editor__callout[data-v-fa58cbab]{--callout-neutral-secondary:color-mix(in srgb,var(--scalar-background-2),transparent 50%)}}.dark-mode .t-editor__callout[data-v-fa58cbab],.light-mode .t-editor__callout[data-v-fa58cbab]{--callout-neutral-font-color:var(--scalar-color-1);--callout-success-primary:var(--scalar-color-green);--callout-success-secondary:var(--scalar-color-green)}@supports (color:color-mix(in lab,red,red)){.dark-mode .t-editor__callout[data-v-fa58cbab],.light-mode .t-editor__callout[data-v-fa58cbab]{--callout-success-secondary:color-mix(in srgb,var(--scalar-color-green),transparent 97%)}}.dark-mode .t-editor__callout[data-v-fa58cbab],.light-mode .t-editor__callout[data-v-fa58cbab]{--callout-success-font-color:var(--scalar-color-1);--callout-danger-primary:var(--scalar-color-red);--callout-danger-secondary:var(--scalar-color-red)}@supports (color:color-mix(in lab,red,red)){.dark-mode .t-editor__callout[data-v-fa58cbab],.light-mode .t-editor__callout[data-v-fa58cbab]{--callout-danger-secondary:color-mix(in srgb,var(--scalar-color-red),transparent 97%)}}.dark-mode .t-editor__callout[data-v-fa58cbab],.light-mode .t-editor__callout[data-v-fa58cbab]{--callout-danger-font-color:var(--scalar-color-1);--callout-warning-primary:var(--scalar-color-yellow);--callout-warning-secondary:var(--scalar-color-yellow)}@supports (color:color-mix(in lab,red,red)){.dark-mode .t-editor__callout[data-v-fa58cbab],.light-mode .t-editor__callout[data-v-fa58cbab]{--callout-warning-secondary:color-mix(in srgb,var(--scalar-color-yellow),transparent 97%)}}.dark-mode .t-editor__callout[data-v-fa58cbab],.light-mode .t-editor__callout[data-v-fa58cbab]{--callout-warning-font-color:var(--scalar-color-1);--callout-info-primary:var(--scalar-color-blue);--callout-info-secondary:var(--scalar-color-blue)}@supports (color:color-mix(in lab,red,red)){.dark-mode .t-editor__callout[data-v-fa58cbab],.light-mode .t-editor__callout[data-v-fa58cbab]{--callout-info-secondary:color-mix(in srgb,var(--scalar-color-blue),transparent 97%)}}.dark-mode .t-editor__callout[data-v-fa58cbab],.light-mode .t-editor__callout[data-v-fa58cbab]{--callout-info-font-color:var(--scalar-color-1);--callout-line-height:22px}.t-editor__callout[data-v-fa58cbab]{border-radius:var(--scalar-radius);margin-top:var(--scalar-block-spacing);--callout-primary:var(--scalar-border-color);--callout-secondary:var(--scalar-background-2);--callout-svg:var(--callout-primary);background:var(--callout-secondary);border:var(--scalar-border-width)solid var(--callout-primary);padding:10px 14px}@supports (color:color-mix(in lab,red,red)){.t-editor__callout[data-v-fa58cbab]{border:var(--scalar-border-width)solid color-mix(in srgb,var(--callout-primary),transparent 50%)}}.t-editor__callout .callout-content__text[data-v-fa58cbab]{font-size:var(--callout-font-size);line-height:var(--callout-line-height);flex:1}.t-editor__callout .callout-content__icon[data-v-fa58cbab]{border-radius:var(--scalar-radius);width:18px;height:fit-content;color:var(--callout-svg);justify-content:center;align-items:center;display:flex;position:relative}.t-editor__callout .callout-content__icon svg[data-v-fa58cbab],.t-editor__callout .callout-content__icon img[data-v-fa58cbab]{width:18px;height:18px}.t-editor__callout .callout-content__icon[data-v-fa58cbab]:before{content:"​";line-height:var(--callout-line-height)}.t-editor__callout.callout__neutral[data-v-fa58cbab]{--callout-primary:var(--callout-neutral-primary);--callout-secondary:var(--callout-neutral-secondary);--callout-font-color:var(--callout-neutral-font-color);--callout-svg:var(--callout-neutral-font-color)}.t-editor__callout.callout__info[data-v-fa58cbab]{--callout-primary:var(--callout-info-primary);--callout-secondary:var(--callout-info-secondary);--callout-font-color:var(--callout-info-font-color);--callout-svg:var(--callout-info-primary)}.t-editor__callout.callout__warning[data-v-fa58cbab]{--callout-primary:var(--callout-warning-primary);--callout-secondary:var(--callout-warning-secondary);--callout-font-color:var(--callout-warning-font-color);--callout-svg:var(--callout-warning-primary)}.t-editor__callout.callout__success[data-v-fa58cbab]{--callout-primary:var(--callout-success-primary);--callout-secondary:var(--callout-success-secondary);--callout-font-color:var(--callout-success-font-color);--callout-svg:var(--callout-success-primary)}.t-editor__callout.callout__danger[data-v-fa58cbab]{--callout-primary:var(--callout-danger-primary);--callout-secondary:var(--callout-danger-secondary);--callout-font-color:var(--callout-danger-font-color);--callout-svg:var(--callout-danger-primary)}.group-hover-input[data-v-5a23cb87]{border-width:var(--scalar-border-width);border-color:#0000}.group:hover .group-hover-input[data-v-5a23cb87]{background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.group:hover .group-hover-input[data-v-5a23cb87]{background:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}.group:hover .group-hover-input[data-v-5a23cb87]{border-color:var(--scalar-border-color)}.group-hover-input[data-v-5a23cb87]:focus{border-color:var(--scalar-border-color)!important;background:0 0!important}.schema>span[data-v-4df72868]:not(:first-child):before{content:"·";margin:0 .5ch;display:block}.schema>span[data-v-4df72868]{white-space:nowrap;display:flex}[data-v-04661eb4] .cm-editor{padding:0}[data-v-04661eb4] .cm-content{font-family:var(--scalar-font);font-size:var(--scalar-small);background-color:#0000;align-items:center;width:100%;padding:5px 8px;display:flex}[data-v-04661eb4] .cm-content:has(.cm-pill){padding:5px 8px}[data-v-04661eb4] .cm-content .cm-pill:not(:last-of-type){margin-right:.5px}[data-v-04661eb4] .cm-content .cm-pill:not(:first-of-type){margin-left:.5px}[data-v-04661eb4] .cm-line{text-overflow:ellipsis;padding:0;overflow:hidden}.filemask[data-v-04661eb4]{-webkit-mask-image:linear-gradient(to right,transparent 0,var(--scalar-background-2)20px);mask-image:linear-gradient(to right,transparent 0,var(--scalar-background-2)20px)}[data-v-9aa4b63a] .cm-content{font-size:var(--scalar-small)}.auth-combobox-position[data-v-0bb98074]{margin-left:120px}.scroll-timeline-x[data-v-0bb98074]{scroll-timeline:--scroll-timeline x;scroll-timeline:--scroll-timeline horizontal;scrollbar-width:none;-ms-overflow-style:none;overflow:auto}.fade-left[data-v-0bb98074],.fade-right[data-v-0bb98074]{content:"";pointer-events:none;height:100%;min-height:24px;animation-name:fadein-0bb98074;animation-duration:1ms;animation-direction:reverse;animation-timeline:--scroll-timeline;position:sticky}.fade-left[data-v-0bb98074]{background:linear-gradient(-90deg,var(--scalar-background-1)0%,var(--scalar-background-1)60%,var(--scalar-background-1)100%)}@supports (color:color-mix(in lab,red,red)){.fade-left[data-v-0bb98074]{background:linear-gradient(-90deg,color-mix(in srgb,var(--scalar-background-1),transparent 100%)0%,color-mix(in srgb,var(--scalar-background-1),transparent 20%)60%,var(--scalar-background-1)100%)}}.fade-left[data-v-0bb98074]{min-width:3px;animation-direction:normal;left:-1px}.fade-right[data-v-0bb98074]{background:linear-gradient(90deg,var(--scalar-background-1)0%,var(--scalar-background-1)60%,var(--scalar-background-1)100%)}@supports (color:color-mix(in lab,red,red)){.fade-right[data-v-0bb98074]{background:linear-gradient(90deg,color-mix(in srgb,var(--scalar-background-1),transparent 100%)0%,color-mix(in srgb,var(--scalar-background-1),transparent 20%)60%,var(--scalar-background-1)100%)}}.fade-right[data-v-0bb98074]{min-width:24px;margin-left:-20px;top:0;right:-1px}@keyframes fadein-0bb98074{0%{opacity:0}15%{opacity:1}}.auth-combobox-position[data-v-3f1067a4]{margin-left:120px}.scroll-timeline-x[data-v-3f1067a4]{scroll-timeline:--scroll-timeline x;scroll-timeline:--scroll-timeline horizontal;scrollbar-width:none;-ms-overflow-style:none;overflow:auto}.fade-left[data-v-3f1067a4],.fade-right[data-v-3f1067a4]{content:"";pointer-events:none;height:100%;min-height:24px;animation-name:fadein-3f1067a4;animation-duration:1ms;animation-direction:reverse;animation-timeline:--scroll-timeline;position:sticky}.fade-left[data-v-3f1067a4]{background:linear-gradient(-90deg,var(--scalar-background-1)0%,var(--scalar-background-1)60%,var(--scalar-background-1)100%)}@supports (color:color-mix(in lab,red,red)){.fade-left[data-v-3f1067a4]{background:linear-gradient(-90deg,color-mix(in srgb,var(--scalar-background-1),transparent 100%)0%,color-mix(in srgb,var(--scalar-background-1),transparent 20%)60%,var(--scalar-background-1)100%)}}.fade-left[data-v-3f1067a4]{min-width:3px;animation-direction:normal;left:-1px}.fade-right[data-v-3f1067a4]{background:linear-gradient(90deg,var(--scalar-background-1)0%,var(--scalar-background-1)60%,var(--scalar-background-1)100%)}@supports (color:color-mix(in lab,red,red)){.fade-right[data-v-3f1067a4]{background:linear-gradient(90deg,color-mix(in srgb,var(--scalar-background-1),transparent 100%)0%,color-mix(in srgb,var(--scalar-background-1),transparent 20%)60%,var(--scalar-background-1)100%)}}.fade-right[data-v-3f1067a4]{min-width:24px;margin-left:-20px;top:0;right:-1px}@keyframes fadein-3f1067a4{0%{opacity:0}15%{opacity:1}}[data-v-2891f052] code.hljs *{font-size:var(--scalar-small)}.request-section-content[data-v-287f5ecf]{--scalar-border-width:.5px}.request-section-content-filter[data-v-287f5ecf]{box-shadow:0 -10px 0 10px var(--scalar-background-1)}.request-item:focus-within .request-meta-buttons[data-v-287f5ecf]{opacity:1}.group-hover-input[data-v-287f5ecf]{border-width:var(--scalar-border-width);border-color:#0000}.group:hover .group-hover-input[data-v-287f5ecf]{background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.group:hover .group-hover-input[data-v-287f5ecf]{background:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}.group:hover .group-hover-input[data-v-287f5ecf]{border-color:var(--scalar-border-color)}.group-hover-input[data-v-287f5ecf]:focus{border-color:var(--scalar-border-color)!important;background:0 0!important}.light-mode .bg-preview[data-v-0956ad2d]{background-image:url("data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'16\' height=\'16\' fill=\'%23000\' fill-opacity=\'10%25\'%3E%3Crect width=\'8\' height=\'8\' /%3E%3Crect x=\'8\' y=\'8\' width=\'8\' height=\'8\' /%3E%3C/svg%3E")}.dark-mode .bg-preview[data-v-0956ad2d]{background-image:url("data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'16\' height=\'16\' fill=\'%23FFF\' fill-opacity=\'10%25\'%3E%3Crect width=\'8\' height=\'8\' /%3E%3Crect x=\'8\' y=\'8\' width=\'8\' height=\'8\' /%3E%3C/svg%3E")}[data-v-1399120c] .cm-editor{font-size:var(--scalar-small);background-color:#0000;outline:none}[data-v-1399120c] .cm-gutters{background-color:var(--scalar-background-1);border-radius:var(--scalar-radius)0 0 var(--scalar-radius)}.body-raw[data-v-1399120c] .cm-scroller{min-width:100%;overflow:auto}.scalar-code-block[data-v-17966bf4] .hljs *{font-size:var(--scalar-small)}.response-body-virtual[data-headlessui-state=open],.response-body-virtual[data-headlessui-state=open] .diclosure-panel{flex-direction:column;flex-grow:1;display:flex}.keycap-n[data-v-b1211b87]{background:-webkit-linear-gradient(5deg,transparent 30%,var(--scalar-color-3)50%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.keycap-hotkey[data-v-b1211b87]{line-height:26px;position:absolute;top:32px}.scalar-version-number[data-v-6d2bdb61]{width:76px;height:76px;font-size:8px;font-family:var(--scalar-font-code);box-shadow:inset 2px 0 0 2px var(--scalar-background-2);text-align:center;text-transform:initial;-webkit-text-decoration-color:var(--scalar-color-3);text-decoration-color:var(--scalar-color-3);border-radius:9px 9px 16px 12px;flex-direction:column;justify-content:center;align-items:center;margin-top:-113px;margin-left:-36px;line-height:11px;display:flex;position:absolute;transform:skewY(13deg)}.scalar-version-number a[data-v-6d2bdb61]{background:var(--scalar-background-2);border:.5px solid var(--scalar-border-color);border-radius:3px;padding:2px 4px;font-weight:700;text-decoration:none}.gitbook-show[data-v-6d2bdb61]{display:none}.v-enter-active[data-v-7ec8af01]{transition:opacity .5s}.v-enter-from[data-v-7ec8af01]{opacity:0}.animate-response-heading .response-heading[data-v-6e4eec82]{opacity:1;animation:.2s ease-in-out forwards push-response-6e4eec82}@keyframes push-response-6e4eec82{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.animate-response-heading .animate-response-children[data-v-6e4eec82]{opacity:0;animation:.2s ease-in-out 50ms forwards response-spans-6e4eec82}@keyframes response-spans-6e4eec82{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.ellipsis-position[data-v-01a1ab71]{transform:translate(calc(-100% - 4.5px))}.indent-border-line-offset[data-v-24d396a0]:before{left:var(--v337cd30d)}.indent-padding-left[data-v-24d396a0]{padding-left:calc(var(--v1d572b91) + 6px)}.sidebar-folderitem[data-v-24d396a0] .ellipsis-position{right:6px;transform:none}.search-button-fade[data-v-23d35bb5]{background:linear-gradient(var(--scalar-background-1)32px,var(--scalar-background-1)38px,transparent)}@supports (color:color-mix(in lab,red,red)){.search-button-fade[data-v-23d35bb5]{background:linear-gradient(var(--scalar-background-1)32px,color-mix(in srgb,var(--scalar-background-1),transparent)38px,transparent)}}.empty-sidebar-item-content[data-v-23d35bb5]{display:none}.empty-sidebar-item .empty-sidebar-item-content[data-v-23d35bb5]{display:block}.rabbitjump[data-v-23d35bb5]{opacity:0}.empty-sidebar-item:hover .rabbitjump[data-v-23d35bb5]{opacity:1;animation:.5s step-end infinite rabbitAnimation-23d35bb5}.empty-sidebar-item:hover .rabbitsit[data-v-23d35bb5]{opacity:0;animation:.5s step-end infinite rabbitAnimation2-23d35bb5}.empty-sidebar-item:hover .rabbit-ascii[data-v-23d35bb5]{animation:8s linear infinite rabbitRun-23d35bb5}@keyframes rabbitRun-23d35bb5{0%{transform:translateZ(0)}25%{transform:translate(250px)}25.01%{transform:translate(-250px)}75%{transform:translate(250px)}75.01%{transform:translate(-250px)}to{transform:translateZ(0)}}@keyframes rabbitAnimation-23d35bb5{0%,to{opacity:1}50%{opacity:0}}@keyframes rabbitAnimation2-23d35bb5{0%,to{opacity:0}50%{opacity:1;transform:translateY(-8px)}}.request-text-color-text[data-v-02af05d1]{color:var(--scalar-color-1);background:linear-gradient(var(--scalar-background-1),var(--scalar-background-3));box-shadow:0 0 0 1px var(--scalar-border-color)}@media screen and (max-width:800px){.sidebar-active-hide-layout[data-v-02af05d1]{display:none}.sidebar-active-width[data-v-02af05d1]{width:100%}}.gitbook-show[data-v-c8df97c6]{display:none}.app-exit-button[data-v-c8df97c6]{color:#fff;background:#0000001a}.app-exit-button[data-v-c8df97c6]:hover{background:#ffffff1a}.request-text-color-text[data-v-57ae0d10]{color:var(--scalar-color-1);background:linear-gradient(var(--scalar-background-1),var(--scalar-background-3));box-shadow:0 0 0 1px var(--scalar-border-color)}@media screen and (max-width:800px){.sidebar-active-hide-layout[data-v-57ae0d10]{display:none}.sidebar-active-width[data-v-57ae0d10]{width:100%}}.group-hover-input[data-v-fced736a]{border-width:var(--scalar-border-width);border-color:#0000}.group:hover .group-hover-input[data-v-fced736a]{background:var(--scalar-background-1)}@supports (color:color-mix(in lab,red,red)){.group:hover .group-hover-input[data-v-fced736a]{background:color-mix(in srgb,var(--scalar-background-1),var(--scalar-background-2))}}.group:hover .group-hover-input[data-v-fced736a]{border-color:var(--scalar-border-color)}.group-hover-input[data-v-fced736a]:focus{border-color:var(--scalar-border-color)!important;background:0 0!important}[data-v-68d5218e] .markdown h2{font-size:var(--scalar-font-size-2)}[data-v-5997a667] .cm-content{min-height:fit-content}[data-v-5997a667] .cm-scroller{max-width:100%;overflow:auto hidden}[data-v-83bfcc8a] .cm-editor{padding:0}[data-v-83bfcc8a] .cm-content{font-family:var(--scalar-font);font-size:var(--scalar-small);background-color:#0000;align-items:center;width:100%;padding:5px 8px;display:flex}[data-v-83bfcc8a] .cm-content:has(.cm-pill){padding:5px 8px}[data-v-83bfcc8a] .cm-content .cm-pill:not(:last-of-type){margin-right:.5px}[data-v-83bfcc8a] .cm-content .cm-pill:not(:first-of-type){margin-left:.5px}[data-v-83bfcc8a] .cm-line{text-overflow:ellipsis;padding:0;overflow:hidden}.scalar-collection-auth[data-v-cc87292e]{border:var(--scalar-border-width)solid var(--scalar-border-color);border-radius:var(--scalar-radius-lg);overflow:hidden}.dragover-asChild[data-v-a89d6a6e],.dragover-above[data-v-a89d6a6e],.dragover-below[data-v-a89d6a6e]{position:relative}.dragover-above[data-v-a89d6a6e]:after,.dragover-below[data-v-a89d6a6e]:after{content:"";background:var(--scalar-color-blue);width:100%;height:3px;display:block;position:absolute;top:-1.5px}@supports (color:color-mix(in lab,red,red)){.dragover-above[data-v-a89d6a6e]:after,.dragover-below[data-v-a89d6a6e]:after{background:color-mix(in srgb,var(--scalar-color-blue),transparent 85%)}}.dragover-above[data-v-a89d6a6e]:after,.dragover-below[data-v-a89d6a6e]:after{pointer-events:none;border-radius:var(--scalar-radius)}.dragover-below[data-v-a89d6a6e]:after{top:initial;bottom:-1.5px}.dragover-asChild[data-v-a89d6a6e]:after{content:"";background:var(--scalar-color-blue);width:100%;height:100%;display:block;position:absolute;top:0;left:0}@supports (color:color-mix(in lab,red,red)){.dragover-asChild[data-v-a89d6a6e]:after{background:color-mix(in srgb,var(--scalar-color-blue),transparent 85%)}}.dragover-asChild[data-v-a89d6a6e]:after{pointer-events:none;border-radius:var(--scalar-radius)}.empty-variable-name[data-v-298ba76d]:empty:before{content:"Untitled";color:var(--scalar-color-3)}.form-group[data-v-694018d6]{margin-bottom:1rem}.modal-actions[data-v-694018d6]{justify-content:flex-end;gap:1rem;display:flex}:root{--scalar-loaded-api-reference:true}@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-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-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}@layer scalar-config{.scalar-api-reference[data-v-2a5231c6]{--refs-header-height: calc( var(--scalar-custom-header-height, 0px) + var(--scalar-header-height, 0px) );--refs-viewport-offset: calc( var(--refs-header-height, 0px) + var(--refs-content-offset, 0px) );--refs-viewport-height: calc( var(--full-height, 100dvh) - var(--refs-viewport-offset, 0px) );--refs-sidebar-width: var(--scalar-sidebar-width, 0px);--refs-sidebar-height: calc( var(--full-height, 100dvh) - var(--refs-header-height, 0px) );--refs-content-max-width: var(--scalar-content-max-width, 1540px)}.scalar-api-reference.references-classic[data-v-2a5231c6]{--refs-content-max-width: var(--scalar-content-max-width, 1420px);min-height:100dvh;--refs-sidebar-width: 0}}.t-doc__sidebar[data-v-2a5231c6]{z-index:10}.references-layout[data-v-2a5231c6]{min-height:100dvh;min-width:100%;max-width:100%;flex:1;--full-height: 100dvh;display:grid;grid-template-rows:var(--scalar-header-height, 0px) repeat(2,auto);grid-template-columns:auto 1fr;grid-template-areas:"header header" "navigation rendered" "footer footer";background:var(--scalar-background-1)}.references-editor[data-v-2a5231c6]{grid-area:editor;display:flex;min-width:0;background:var(--scalar-background-1)}.references-rendered[data-v-2a5231c6]{position:relative;grid-area:rendered;min-width:0;background:var(--scalar-background-1)}.scalar-api-reference.references-classic[data-v-2a5231c6],.references-classic .references-rendered[data-v-2a5231c6]{height:initial!important;max-height:initial!important}@layer scalar-config{.references-sidebar[data-v-2a5231c6]{--refs-sidebar-width: var(--scalar-sidebar-width, 288px)}}.references-footer[data-v-2a5231c6]{grid-area:footer}@media(max-width:1000px){.references-layout[data-v-2a5231c6]{--refs-sidebar-height: calc( var(--full-height, 100dvh) - var(--scalar-custom-header-height, 0px) );grid-template-columns:100%;grid-template-rows:var(--scalar-header-height, 0px) 0px auto auto;grid-template-areas:"header" "navigation" "rendered" "footer"}.references-editable[data-v-2a5231c6]{grid-template-areas:"header" "navigation" "editor"}.references-rendered[data-v-2a5231c6]{position:static}}@media(max-width:1000px){.scalar-api-references-standalone-mobile[data-v-2a5231c6]:not(.references-classic){--scalar-header-height: 50px}}.darklight-reference[data-v-2a5231c6]{width:100%;margin-top:auto}')),document.head.appendChild(a)}}catch(r){console.error("vite-plugin-css-injected-by-js",r)}}(); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){ +"use strict";const e=Object.freeze({status:"aborted"});function t(e,t,n){ +function r(n,r){if(n._zod||Object.defineProperty(n,"_zod",{value:{def:r, +constr:i,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return +;n._zod.traits.add(e),t(n,r);const a=i.prototype,o=Object.keys(a) +;for(let e=0;e!!(n?.Parent&&t instanceof n.Parent)||t?._zod?.traits?.has(e) +}),Object.defineProperty(i,"name",{value:e}),i}const n=Symbol("zod_brand") +;class r extends Error{constructor(){ +super("Encountered Promise during synchronous parse. Use .parseAsync() instead.") +}}class a extends Error{constructor(e){ +super(`Encountered unidirectional transform during encode: ${e}`), +this.name="ZodEncodeError"}}const o={};function i(e){ +return e&&Object.assign(o,e),o}function s(e){ +const t=Object.values(e).filter((e=>"number"==typeof e)) +;return Object.entries(e).filter((([e,n])=>-1===t.indexOf(+e))).map((([e,t])=>t)) +}function l(e,t="|"){return e.map((e=>$(e))).join(t)}function c(e,t){ +return"bigint"==typeof t?t.toString():t}function u(e){return{get value(){{ +const t=e();return Object.defineProperty(this,"value",{value:t}),t}}}} +function d(e){return null==e}function p(e){ +const t=e.startsWith("^")?1:0,n=e.endsWith("$")?e.length-1:e.length +;return e.slice(t,n)}function h(e,t){ +const n=(e.toString().split(".")[1]||"").length,r=t.toString() +;let a=(r.split(".")[1]||"").length;if(0===a&&/\d?e-\d?/.test(r)){ +const e=r.match(/\d?e-(\d?)/);e?.[1]&&(a=Number.parseInt(e[1]))}const o=n>a?n:a +;return Number.parseInt(e.toFixed(o).replace(".",""))%Number.parseInt(t.toFixed(o).replace(".",""))/10**o +}const f=Symbol("evaluating");function m(e,t,n){let r +;Object.defineProperty(e,t,{get(){if(r!==f)return void 0===r&&(r=f,r=n()),r}, +set(n){Object.defineProperty(e,t,{value:n})},configurable:!0})} +function g(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0, +configurable:!0})}function v(...e){const t={};for(const n of e){ +const e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)} +return Object.defineProperties({},t)}function b(e){return JSON.stringify(e)} +function y(e){ +return e.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"") +}const O="captureStackTrace"in Error?Error.captureStackTrace:(...e)=>{} +;function w(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)} +const x=u((()=>{ +if("undefined"!=typeof navigator&&navigator?.userAgent?.includes("Cloudflare"))return!1 +;try{return new Function(""),!0}catch(e){return!1}}));function k(e){ +if(!1===w(e))return!1;const t=e.constructor;if(void 0===t)return!0 +;if("function"!=typeof t)return!0;const n=t.prototype +;return!1!==w(n)&&!1!==Object.prototype.hasOwnProperty.call(n,"isPrototypeOf")} +function S(e){return k(e)?{...e}:Array.isArray(e)?[...e]:e} +const _=new Set(["string","number","symbol"]),A=new Set(["string","number","bigint","boolean","symbol","undefined"]) +;function T(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function E(e,t,n){ +const r=new e._zod.constr(t??e._zod.def) +;return t&&!n?.parent||(r._zod.parent=e),r}function C(e){const t=e +;if(!t)return{};if("string"==typeof t)return{error:()=>t} +;if(void 0!==t?.message){ +if(void 0!==t?.error)throw new Error("Cannot specify both `message` and `error` params") +;t.error=t.message}return delete t.message,"string"==typeof t.error?{...t, +error:()=>t.error}:t}function $(e){ +return"bigint"==typeof e?e.toString()+"n":"string"==typeof e?`"${e}"`:`${e}`} +function P(e){ +return Object.keys(e).filter((t=>"optional"===e[t]._zod.optin&&"optional"===e[t]._zod.optout)) +}const I={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER], +int32:[-2147483648,2147483647],uint32:[0,4294967295], +float32:[-34028234663852886e22,34028234663852886e22], +float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},D={ +int64:[BigInt("-9223372036854775808"),BigInt("9223372036854775807")], +uint64:[BigInt(0),BigInt("18446744073709551615")]};function M(e,t){ +const n=e._zod.def,r=n.checks +;if(r&&r.length>0)throw new Error(".pick() cannot be used on object schemas containing refinements") +;return E(e,v(e._zod.def,{get shape(){const e={};for(const r in t){ +if(!(r in n.shape))throw new Error(`Unrecognized key: "${r}"`) +;t[r]&&(e[r]=n.shape[r])}return g(this,"shape",e),e},checks:[]}))} +function N(e,t){const n=e._zod.def,r=n.checks +;if(r&&r.length>0)throw new Error(".omit() cannot be used on object schemas containing refinements") +;const a=v(e._zod.def,{get shape(){const r={...e._zod.def.shape} +;for(const e in t){ +if(!(e in n.shape))throw new Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e] +}return g(this,"shape",r),r},checks:[]});return E(e,a)}function R(e,t){ +if(!k(t))throw new Error("Invalid input to extend: expected a plain object") +;const n=e._zod.def.checks;if(n&&n.length>0){const n=e._zod.def.shape +;for(const e in t)if(void 0!==Object.getOwnPropertyDescriptor(n,e))throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.") +}const r=v(e._zod.def,{get shape(){const n={...e._zod.def.shape,...t} +;return g(this,"shape",n),n}});return E(e,r)}function L(e,t){ +if(!k(t))throw new Error("Invalid input to safeExtend: expected a plain object") +;const n=v(e._zod.def,{get shape(){const n={...e._zod.def.shape,...t} +;return g(this,"shape",n),n}});return E(e,n)}function B(e,t){ +const n=v(e._zod.def,{get shape(){const n={...e._zod.def.shape, +...t._zod.def.shape};return g(this,"shape",n),n},get catchall(){ +return t._zod.def.catchall},checks:[]});return E(e,n)}function j(e,t,n){ +const r=t._zod.def.checks +;if(r&&r.length>0)throw new Error(".partial() cannot be used on object schemas containing refinements") +;const a=v(t._zod.def,{get shape(){const r=t._zod.def.shape,a={...r} +;if(n)for(const t in n){if(!(t in r))throw new Error(`Unrecognized key: "${t}"`) +;n[t]&&(a[t]=e?new e({type:"optional",innerType:r[t]}):r[t]) +}else for(const t in r)a[t]=e?new e({type:"optional",innerType:r[t]}):r[t] +;return g(this,"shape",a),a},checks:[]});return E(t,a)}function U(e,t,n){ +const r=v(t._zod.def,{get shape(){const r=t._zod.def.shape,a={...r} +;if(n)for(const t in n){if(!(t in a))throw new Error(`Unrecognized key: "${t}"`) +;n[t]&&(a[t]=new e({type:"nonoptional",innerType:r[t]})) +}else for(const t in r)a[t]=new e({type:"nonoptional",innerType:r[t]}) +;return g(this,"shape",a),a}});return E(t,r)}function z(e,t=0){ +if(!0===e.aborted)return!0 +;for(let n=t;n{var n;return(n=t).path??(n.path=[]), +t.path.unshift(e),t}))}function F(e){return"string"==typeof e?e:e?.message} +function H(e,t,n){const r={...e,path:e.path??[]};if(!e.message){ +const a=F(e.inst?._zod.def?.error?.(e))??F(t?.error?.(e))??F(n.customError?.(e))??F(n.localeError?.(e))??"Invalid input" +;r.message=a} +return delete r.inst,delete r.continue,t?.reportInput||delete r.input,r} +function Q(e){ +return e instanceof Set?"set":e instanceof Map?"map":e instanceof File?"file":"unknown" +}function V(e){ +return Array.isArray(e)?"array":"string"==typeof e?"string":"unknown"} +function q(e){const t=typeof e;switch(t){case"number": +return Number.isNaN(e)?"nan":"number";case"object":{if(null===e)return"null" +;if(Array.isArray(e))return"array";const t=e +;if(t&&Object.getPrototypeOf(t)!==Object.prototype&&"constructor"in t&&t.constructor)return t.constructor.name +}}return t}function W(...e){const[t,n,r]=e;return"string"==typeof t?{message:t, +code:"custom",input:n,inst:r}:{...t}}function X(e){ +const t=atob(e),n=new Uint8Array(t.length) +;for(let r=0;re[t]));return Promise.all(n).then((e=>{ +const n={};for(let r=0;re.toString(16).padStart(2,"0"))).join("")}, +unwrapMessage:F},Symbol.toStringTag,{value:"Module"})),K=(e,t)=>{ +e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}), +Object.defineProperty(e,"issues",{value:t,enumerable:!1 +}),e.message=JSON.stringify(t,c,2),Object.defineProperty(e,"toString",{ +value:()=>e.message,enumerable:!1})},J=t("$ZodError",K),ee=t("$ZodError",K,{ +Parent:Error});function te(e,t=e=>e.message){const n={},r=[] +;for(const a of e.issues)a.path.length>0?(n[a.path[0]]=n[a.path[0]]||[], +n[a.path[0]].push(t(a))):r.push(t(a));return{formErrors:r,fieldErrors:n}} +function ne(e,t=e=>e.message){const n={_errors:[]},r=e=>{ +for(const a of e.issues)if("invalid_union"===a.code&&a.errors.length)a.errors.map((e=>r({ +issues:e})));else if("invalid_key"===a.code)r({issues:a.issues +});else if("invalid_element"===a.code)r({issues:a.issues +});else if(0===a.path.length)n._errors.push(t(a));else{let e=n,r=0 +;for(;re.message){const n={errors:[]},r=(e,a=[])=>{ +var o,i +;for(const s of e.issues)if("invalid_union"===s.code&&s.errors.length)s.errors.map((e=>r({ +issues:e},s.path)));else if("invalid_key"===s.code)r({issues:s.issues +},s.path);else if("invalid_element"===s.code)r({issues:s.issues},s.path);else{ +const e=[...a,...s.path];if(0===e.length){n.errors.push(t(s));continue} +let r=n,l=0;for(;l"object"==typeof e?e.key:e)) +;for(const r of n)"number"==typeof r?t.push(`[${r}]`):"symbol"==typeof r?t.push(`[${JSON.stringify(String(r))}]`):/[^\w$]/.test(r)?t.push(`[${JSON.stringify(r)}]`):(t.length&&t.push("."), +t.push(r));return t.join("")}function oe(e){ +const t=[],n=[...e.issues].sort(((e,t)=>(e.path??[]).length-(t.path??[]).length)) +;for(const r of n)t.push(`✖ ${r.message}`), +r.path?.length&&t.push(` → at ${ae(r.path)}`);return t.join("\n")} +const ie=e=>(t,n,a,o)=>{const s=a?Object.assign(a,{async:!1}):{async:!1 +},l=t._zod.run({value:n,issues:[]},s);if(l instanceof Promise)throw new r +;if(l.issues.length){const t=new(o?.Err??e)(l.issues.map((e=>H(e,s,i())))) +;throw O(t,o?.callee),t}return l.value},se=ie(ee),le=e=>async(t,n,r,a)=>{ +const o=r?Object.assign(r,{async:!0}):{async:!0};let s=t._zod.run({value:n, +issues:[]},o);if(s instanceof Promise&&(s=await s),s.issues.length){ +const t=new(a?.Err??e)(s.issues.map((e=>H(e,o,i()))));throw O(t,a?.callee),t} +return s.value},ce=le(ee),ue=e=>(t,n,a)=>{const o=a?{...a,async:!1}:{async:!1 +},s=t._zod.run({value:n,issues:[]},o);if(s instanceof Promise)throw new r +;return s.issues.length?{success:!1, +error:new(e??J)(s.issues.map((e=>H(e,o,i()))))}:{success:!0,data:s.value} +},de=ue(ee),pe=e=>async(t,n,r)=>{const a=r?Object.assign(r,{async:!0}):{async:!0 +};let o=t._zod.run({value:n,issues:[]},a) +;return o instanceof Promise&&(o=await o),o.issues.length?{success:!1, +error:new e(o.issues.map((e=>H(e,a,i()))))}:{success:!0,data:o.value} +},he=pe(ee),fe=e=>(t,n,r)=>{const a=r?Object.assign(r,{direction:"backward"}):{ +direction:"backward"};return ie(e)(t,n,a) +},me=fe(ee),ge=e=>(t,n,r)=>ie(e)(t,n,r),ve=ge(ee),be=e=>async(t,n,r)=>{ +const a=r?Object.assign(r,{direction:"backward"}):{direction:"backward"} +;return le(e)(t,n,a) +},ye=be(ee),Oe=e=>async(t,n,r)=>le(e)(t,n,r),we=Oe(ee),xe=e=>(t,n,r)=>{ +const a=r?Object.assign(r,{direction:"backward"}):{direction:"backward"} +;return ue(e)(t,n,a) +},ke=xe(ee),Se=e=>(t,n,r)=>ue(e)(t,n,r),_e=Se(ee),Ae=e=>async(t,n,r)=>{ +const a=r?Object.assign(r,{direction:"backward"}):{direction:"backward"} +;return pe(e)(t,n,a) +},Te=Ae(ee),Ee=e=>async(t,n,r)=>pe(e)(t,n,r),Ce=Ee(ee),$e=/^[cC][^\s-]{8,}$/,Pe=/^[0-9a-z]+$/,Ie=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,De=/^[0-9a-vA-V]{20}$/,Me=/^[A-Za-z0-9]{27}$/,Ne=/^[a-zA-Z0-9_-]{21}$/,Re=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,Le=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Be=e=>e?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,je=Be(4),Ue=Be(6),ze=Be(7),Ze=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,Fe=/^[^\s@"]{1,64}@[^\s@]{1,255}$/u,He=Fe +;function Qe(){ +return new RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")} +const Ve=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,qe=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,We=e=>{ +const t=T(e??":") +;return new RegExp(`^(?:[0-9A-F]{2}${t}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${t}){5}[0-9a-f]{2}$`) +},Xe=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Ge=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Ye=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Ke=/^[A-Za-z0-9_-]*$/,Je=/^(?=.{1,253}\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\.?$/,et=/^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/,tt=/^\+[1-9]\d{6,14}$/,nt="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",rt=new RegExp(`^${nt}$`) +;function at(e){const t="(?:[01]\\d|2[0-3]):[0-5]\\d" +;return"number"==typeof e.precision?-1===e.precision?`${t}`:0===e.precision?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?` +}function ot(e){return new RegExp(`^${at(e)}$`)}function it(e){const t=at({ +precision:e.precision}),n=["Z"] +;e.local&&n.push(""),e.offset&&n.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)") +;const r=`${t}(?:${n.join("|")})`;return new RegExp(`^${nt}T(?:${r})$`)} +const st=e=>new RegExp(`^${e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??""}}`:"[\\s\\S]*"}$`),lt=/^-?\d+n?$/,ct=/^-?\d+$/,ut=/^-?\d+(?:\.\d+)?$/,dt=/^(?:true|false)$/i,pt=/^null$/i,ht=/^undefined$/i,ft=/^[^A-Z]*$/,mt=/^[^a-z]*$/,gt=/^[0-9a-fA-F]*$/ +;function vt(e,t){return new RegExp(`^[A-Za-z0-9+/]{${e}}${t}$`)}function bt(e){ +return new RegExp(`^[A-Za-z0-9_-]{${e}}$`)} +const yt=vt(22,"=="),Ot=bt(22),wt=vt(27,"="),xt=bt(27),kt=vt(43,"="),St=bt(43),_t=vt(64,""),At=bt(64),Tt=vt(86,"=="),Et=bt(86),Ct=Object.freeze(Object.defineProperty({ +__proto__:null,base64:Ye,base64url:Ke,bigint:lt,boolean:dt, +browserEmail:/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, +cidrv4:Xe,cidrv6:Ge,cuid:$e,cuid2:Pe,date:rt,datetime:it,domain:et,duration:Re, +e164:tt,email:Ze,emoji:Qe, +extendedDuration:/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/, +guid:Le,hex:gt,hostname:Je, +html5Email:/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, +idnEmail:He,integer:ct,ipv4:Ve,ipv6:qe,ksuid:Me,lowercase:ft,mac:We, +md5_base64:yt,md5_base64url:Ot,md5_hex:/^[0-9a-fA-F]{32}$/,nanoid:Ne,null:pt, +number:ut, +rfc5322Email:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, +sha1_base64:wt,sha1_base64url:xt,sha1_hex:/^[0-9a-fA-F]{40}$/,sha256_base64:kt, +sha256_base64url:St,sha256_hex:/^[0-9a-fA-F]{64}$/,sha384_base64:_t, +sha384_base64url:At,sha384_hex:/^[0-9a-fA-F]{96}$/,sha512_base64:Tt, +sha512_base64url:Et,sha512_hex:/^[0-9a-fA-F]{128}$/,string:st,time:ot,ulid:Ie, +undefined:ht,unicodeEmail:Fe,uppercase:mt,uuid:Be,uuid4:je,uuid6:Ue,uuid7:ze, +xid:De},Symbol.toStringTag,{value:"Module"})),$t=t("$ZodCheck",((e,t)=>{var n +;e._zod??(e._zod={}),e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])})),Pt={ +number:"number",bigint:"bigint",object:"date" +},It=t("$ZodCheckLessThan",((e,t)=>{$t.init(e,t);const n=Pt[typeof t.value] +;e._zod.onattach.push((e=>{ +const n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??Number.POSITIVE_INFINITY +;t.value{ +(t.inclusive?r.value<=t.value:r.value{$t.init(e,t);const n=Pt[typeof t.value] +;e._zod.onattach.push((e=>{ +const n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??Number.NEGATIVE_INFINITY +;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value) +})),e._zod.check=r=>{ +(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n, +code:"too_small",minimum:"object"==typeof t.value?t.value.getTime():t.value, +input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})} +})),Mt=t("$ZodCheckMultipleOf",((e,t)=>{$t.init(e,t),e._zod.onattach.push((e=>{ +var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)})),e._zod.check=n=>{ +if(typeof n.value!=typeof t.value)throw new Error("Cannot mix number and bigint in multiple_of check.") +;("bigint"==typeof n.value?n.value%t.value===BigInt(0):0===h(n.value,t.value))||n.issues.push({ +origin:typeof n.value,code:"not_multiple_of",divisor:t.value,input:n.value, +inst:e,continue:!t.abort})}})),Nt=t("$ZodCheckNumberFormat",((e,t)=>{ +$t.init(e,t),t.format=t.format||"float64" +;const n=t.format?.includes("int"),r=n?"int":"number",[a,o]=I[t.format] +;e._zod.onattach.push((e=>{const r=e._zod.bag +;r.format=t.format,r.minimum=a,r.maximum=o,n&&(r.pattern=ct) +})),e._zod.check=i=>{const s=i.value;if(n){ +if(!Number.isInteger(s))return void i.issues.push({expected:r,format:t.format, +code:"invalid_type",continue:!1,input:s,inst:e}) +;if(!Number.isSafeInteger(s))return void(s>0?i.issues.push({input:s, +code:"too_big",maximum:Number.MAX_SAFE_INTEGER, +note:"Integers must be within the safe integer range.",inst:e,origin:r, +inclusive:!0,continue:!t.abort}):i.issues.push({input:s,code:"too_small", +minimum:Number.MIN_SAFE_INTEGER, +note:"Integers must be within the safe integer range.",inst:e,origin:r, +inclusive:!0,continue:!t.abort}))}so&&i.issues.push({origin:"number",input:s,code:"too_big",maximum:o, +inclusive:!0,inst:e,continue:!t.abort})} +})),Rt=t("$ZodCheckBigIntFormat",((e,t)=>{$t.init(e,t);const[n,r]=D[t.format] +;e._zod.onattach.push((e=>{const a=e._zod.bag +;a.format=t.format,a.minimum=n,a.maximum=r})),e._zod.check=a=>{const o=a.value +;or&&a.issues.push({origin:"bigint", +input:o,code:"too_big",maximum:r,inclusive:!0,inst:e,continue:!t.abort})} +})),Lt=t("$ZodCheckMaxSize",((e,t)=>{var n +;$t.init(e,t),(n=e._zod.def).when??(n.when=e=>{const t=e.value +;return!d(t)&&void 0!==t.size}),e._zod.onattach.push((e=>{ +const n=e._zod.bag.maximum??Number.POSITIVE_INFINITY +;t.maximum{const r=n.value +;r.size<=t.maximum||n.issues.push({origin:Q(r),code:"too_big",maximum:t.maximum, +inclusive:!0,input:r,inst:e,continue:!t.abort})} +})),Bt=t("$ZodCheckMinSize",((e,t)=>{var n +;$t.init(e,t),(n=e._zod.def).when??(n.when=e=>{const t=e.value +;return!d(t)&&void 0!==t.size}),e._zod.onattach.push((e=>{ +const n=e._zod.bag.minimum??Number.NEGATIVE_INFINITY +;t.minimum>n&&(e._zod.bag.minimum=t.minimum)})),e._zod.check=n=>{const r=n.value +;r.size>=t.minimum||n.issues.push({origin:Q(r),code:"too_small", +minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})} +})),jt=t("$ZodCheckSizeEquals",((e,t)=>{var n +;$t.init(e,t),(n=e._zod.def).when??(n.when=e=>{const t=e.value +;return!d(t)&&void 0!==t.size}),e._zod.onattach.push((e=>{const n=e._zod.bag +;n.minimum=t.size,n.maximum=t.size,n.size=t.size})),e._zod.check=n=>{ +const r=n.value,a=r.size;if(a===t.size)return;const o=a>t.size;n.issues.push({ +origin:Q(r),...o?{code:"too_big",maximum:t.size}:{code:"too_small", +minimum:t.size},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})} +})),Ut=t("$ZodCheckMaxLength",((e,t)=>{var n +;$t.init(e,t),(n=e._zod.def).when??(n.when=e=>{const t=e.value +;return!d(t)&&void 0!==t.length}),e._zod.onattach.push((e=>{ +const n=e._zod.bag.maximum??Number.POSITIVE_INFINITY +;t.maximum{const r=n.value +;if(r.length<=t.maximum)return;const a=V(r);n.issues.push({origin:a, +code:"too_big",maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort}) +}})),zt=t("$ZodCheckMinLength",((e,t)=>{var n +;$t.init(e,t),(n=e._zod.def).when??(n.when=e=>{const t=e.value +;return!d(t)&&void 0!==t.length}),e._zod.onattach.push((e=>{ +const n=e._zod.bag.minimum??Number.NEGATIVE_INFINITY +;t.minimum>n&&(e._zod.bag.minimum=t.minimum)})),e._zod.check=n=>{const r=n.value +;if(r.length>=t.minimum)return;const a=V(r);n.issues.push({origin:a, +code:"too_small",minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort +})}})),Zt=t("$ZodCheckLengthEquals",((e,t)=>{var n +;$t.init(e,t),(n=e._zod.def).when??(n.when=e=>{const t=e.value +;return!d(t)&&void 0!==t.length}),e._zod.onattach.push((e=>{const n=e._zod.bag +;n.minimum=t.length,n.maximum=t.length,n.length=t.length})),e._zod.check=n=>{ +const r=n.value,a=r.length;if(a===t.length)return;const o=V(r),i=a>t.length +;n.issues.push({origin:o,...i?{code:"too_big",maximum:t.length}:{ +code:"too_small",minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e, +continue:!t.abort})}})),Ft=t("$ZodCheckStringFormat",((e,t)=>{var n,r +;$t.init(e,t),e._zod.onattach.push((e=>{const n=e._zod.bag +;n.format=t.format,t.pattern&&(n.patterns??(n.patterns=new Set), +n.patterns.add(t.pattern))})),t.pattern?(n=e._zod).check??(n.check=n=>{ +t.pattern.lastIndex=0,t.pattern.test(n.value)||n.issues.push({origin:"string", +code:"invalid_format",format:t.format,input:n.value,...t.pattern?{ +pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort}) +}):(r=e._zod).check??(r.check=()=>{})})),Ht=t("$ZodCheckRegex",((e,t)=>{ +Ft.init(e,t),e._zod.check=n=>{ +t.pattern.lastIndex=0,t.pattern.test(n.value)||n.issues.push({origin:"string", +code:"invalid_format",format:"regex",input:n.value,pattern:t.pattern.toString(), +inst:e,continue:!t.abort})}})),Qt=t("$ZodCheckLowerCase",((e,t)=>{ +t.pattern??(t.pattern=ft),Ft.init(e,t)})),Vt=t("$ZodCheckUpperCase",((e,t)=>{ +t.pattern??(t.pattern=mt),Ft.init(e,t)})),qt=t("$ZodCheckIncludes",((e,t)=>{ +$t.init(e,t) +;const n=T(t.includes),r=new RegExp("number"==typeof t.position?`^.{${t.position}}${n}`:n) +;t.pattern=r,e._zod.onattach.push((e=>{const t=e._zod.bag +;t.patterns??(t.patterns=new Set),t.patterns.add(r)})),e._zod.check=n=>{ +n.value.includes(t.includes,t.position)||n.issues.push({origin:"string", +code:"invalid_format",format:"includes",includes:t.includes,input:n.value, +inst:e,continue:!t.abort})}})),Wt=t("$ZodCheckStartsWith",((e,t)=>{$t.init(e,t) +;const n=new RegExp(`^${T(t.prefix)}.*`) +;t.pattern??(t.pattern=n),e._zod.onattach.push((e=>{const t=e._zod.bag +;t.patterns??(t.patterns=new Set),t.patterns.add(n)})),e._zod.check=n=>{ +n.value.startsWith(t.prefix)||n.issues.push({origin:"string", +code:"invalid_format",format:"starts_with",prefix:t.prefix,input:n.value,inst:e, +continue:!t.abort})}})),Xt=t("$ZodCheckEndsWith",((e,t)=>{$t.init(e,t) +;const n=new RegExp(`.*${T(t.suffix)}$`) +;t.pattern??(t.pattern=n),e._zod.onattach.push((e=>{const t=e._zod.bag +;t.patterns??(t.patterns=new Set),t.patterns.add(n)})),e._zod.check=n=>{ +n.value.endsWith(t.suffix)||n.issues.push({origin:"string", +code:"invalid_format",format:"ends_with",suffix:t.suffix,input:n.value,inst:e, +continue:!t.abort})}}));function Gt(e,t,n){ +e.issues.length&&t.issues.push(...Z(n,e.issues))} +const Yt=t("$ZodCheckProperty",((e,t)=>{$t.init(e,t),e._zod.check=e=>{ +const n=t.schema._zod.run({value:e.value[t.property],issues:[]},{}) +;if(n instanceof Promise)return n.then((n=>Gt(n,e,t.property))) +;Gt(n,e,t.property)}})),Kt=t("$ZodCheckMimeType",((e,t)=>{$t.init(e,t) +;const n=new Set(t.mime);e._zod.onattach.push((e=>{e._zod.bag.mime=t.mime +})),e._zod.check=r=>{n.has(r.value.type)||r.issues.push({code:"invalid_value", +values:t.mime,input:r.value.type,inst:e,continue:!t.abort})} +})),Jt=t("$ZodCheckOverwrite",((e,t)=>{$t.init(e,t),e._zod.check=e=>{ +e.value=t.tx(e.value)}}));class en{constructor(e=[]){ +this.content=[],this.indent=0,this&&(this.args=e)}indented(e){ +this.indent+=1,e(this),this.indent-=1}write(e){ +if("function"==typeof e)return e(this,{execution:"sync"}),void e(this,{ +execution:"async"}) +;const t=e.split("\n").filter((e=>e)),n=Math.min(...t.map((e=>e.length-e.trimStart().length))),r=t.map((e=>e.slice(n))).map((e=>" ".repeat(2*this.indent)+e)) +;for(const a of r)this.content.push(a)}compile(){const e=Function,t=this?.args +;return new e(...t,[...(this?.content??[""]).map((e=>` ${e}`))].join("\n"))}} +const tn={major:4,minor:3,patch:5},nn=t("$ZodType",((e,t)=>{var n +;e??(e={}),e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=tn +;const a=[...e._zod.def.checks??[]];e._zod.traits.has("$ZodCheck")&&a.unshift(e) +;for(const r of a)for(const t of r._zod.onattach)t(e) +;if(0===a.length)(n=e._zod).deferred??(n.deferred=[]), +e._zod.deferred?.push((()=>{e._zod.run=e._zod.parse}));else{const t=(e,t,n)=>{ +let a,o=z(e);for(const i of t){if(i._zod.def.when){ +if(!i._zod.def.when(e))continue}else if(o)continue +;const t=e.issues.length,s=i._zod.check(e) +;if(s instanceof Promise&&!1===n?.async)throw new r +;if(a||s instanceof Promise)a=(a??Promise.resolve()).then((async()=>{await s +;e.issues.length!==t&&(o||(o=z(e,t)))}));else{if(e.issues.length===t)continue +;o||(o=z(e,t))}}return a?a.then((()=>e)):e},n=(n,o,i)=>{ +if(z(n))return n.aborted=!0,n;const s=t(o,a,i);if(s instanceof Promise){ +if(!1===i.async)throw new r;return s.then((t=>e._zod.parse(t,i)))} +return e._zod.parse(s,i)};e._zod.run=(o,i)=>{ +if(i.skipChecks)return e._zod.parse(o,i);if("backward"===i.direction){ +const t=e._zod.parse({value:o.value,issues:[]},{...i,skipChecks:!0}) +;return t instanceof Promise?t.then((e=>n(e,o,i))):n(t,o,i)} +const s=e._zod.parse(o,i);if(s instanceof Promise){if(!1===i.async)throw new r +;return s.then((e=>t(e,a,i)))}return t(s,a,i)}}m(e,"~standard",(()=>({ +validate:t=>{try{const n=de(e,t);return n.success?{value:n.data}:{ +issues:n.error?.issues}}catch(n){return he(e,t).then((e=>e.success?{value:e.data +}:{issues:e.error?.issues}))}},vendor:"zod",version:1}))) +})),rn=t("$ZodString",((e,t)=>{ +nn.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??st(e._zod.bag), +e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch(a){} +return"string"==typeof n.value||n.issues.push({expected:"string", +code:"invalid_type",input:n.value,inst:e}),n} +})),an=t("$ZodStringFormat",((e,t)=>{Ft.init(e,t),rn.init(e,t) +})),on=t("$ZodGUID",((e,t)=>{t.pattern??(t.pattern=Le),an.init(e,t) +})),sn=t("$ZodUUID",((e,t)=>{if(t.version){const e={v1:1,v2:2,v3:3,v4:4,v5:5, +v6:6,v7:7,v8:8}[t.version] +;if(void 0===e)throw new Error(`Invalid UUID version: "${t.version}"`) +;t.pattern??(t.pattern=Be(e))}else t.pattern??(t.pattern=Be());an.init(e,t) +})),ln=t("$ZodEmail",((e,t)=>{t.pattern??(t.pattern=Ze),an.init(e,t) +})),cn=t("$ZodURL",((e,t)=>{an.init(e,t),e._zod.check=n=>{try{ +const r=n.value.trim(),a=new URL(r) +;return t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(a.hostname)||n.issues.push({ +code:"invalid_format",format:"url",note:"Invalid hostname", +pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort +})),t.protocol&&(t.protocol.lastIndex=0, +t.protocol.test(a.protocol.endsWith(":")?a.protocol.slice(0,-1):a.protocol)||n.issues.push({ +code:"invalid_format",format:"url",note:"Invalid protocol", +pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort +})),void(t.normalize?n.value=a.href:n.value=r)}catch(r){n.issues.push({ +code:"invalid_format",format:"url",input:n.value,inst:e,continue:!t.abort})}} +})),un=t("$ZodEmoji",((e,t)=>{t.pattern??(t.pattern=Qe()),an.init(e,t) +})),dn=t("$ZodNanoID",((e,t)=>{t.pattern??(t.pattern=Ne),an.init(e,t) +})),pn=t("$ZodCUID",((e,t)=>{t.pattern??(t.pattern=$e),an.init(e,t) +})),hn=t("$ZodCUID2",((e,t)=>{t.pattern??(t.pattern=Pe),an.init(e,t) +})),fn=t("$ZodULID",((e,t)=>{t.pattern??(t.pattern=Ie),an.init(e,t) +})),mn=t("$ZodXID",((e,t)=>{t.pattern??(t.pattern=De),an.init(e,t) +})),gn=t("$ZodKSUID",((e,t)=>{t.pattern??(t.pattern=Me),an.init(e,t) +})),vn=t("$ZodISODateTime",((e,t)=>{t.pattern??(t.pattern=it(t)),an.init(e,t) +})),bn=t("$ZodISODate",((e,t)=>{t.pattern??(t.pattern=rt),an.init(e,t) +})),yn=t("$ZodISOTime",((e,t)=>{t.pattern??(t.pattern=ot(t)),an.init(e,t) +})),On=t("$ZodISODuration",((e,t)=>{t.pattern??(t.pattern=Re),an.init(e,t) +})),wn=t("$ZodIPv4",((e,t)=>{ +t.pattern??(t.pattern=Ve),an.init(e,t),e._zod.bag.format="ipv4" +})),xn=t("$ZodIPv6",((e,t)=>{ +t.pattern??(t.pattern=qe),an.init(e,t),e._zod.bag.format="ipv6", +e._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({ +code:"invalid_format",format:"ipv6",input:n.value,inst:e,continue:!t.abort})}} +})),kn=t("$ZodMAC",((e,t)=>{t.pattern??(t.pattern=We(t.delimiter)),an.init(e,t), +e._zod.bag.format="mac"})),Sn=t("$ZodCIDRv4",((e,t)=>{t.pattern??(t.pattern=Xe), +an.init(e,t)})),_n=t("$ZodCIDRv6",((e,t)=>{ +t.pattern??(t.pattern=Ge),an.init(e,t),e._zod.check=n=>{ +const r=n.value.split("/");try{if(2!==r.length)throw new Error;const[e,t]=r +;if(!t)throw new Error;const n=Number(t);if(`${n}`!==t)throw new Error +;if(n<0||n>128)throw new Error;new URL(`http://[${e}]`)}catch{n.issues.push({ +code:"invalid_format",format:"cidrv6",input:n.value,inst:e,continue:!t.abort})}} +}));function An(e){if(""===e)return!0;if(e.length%4!=0)return!1;try{ +return atob(e),!0}catch{return!1}}const Tn=t("$ZodBase64",((e,t)=>{ +t.pattern??(t.pattern=Ye), +an.init(e,t),e._zod.bag.contentEncoding="base64",e._zod.check=n=>{ +An(n.value)||n.issues.push({code:"invalid_format",format:"base64",input:n.value, +inst:e,continue:!t.abort})}}));function En(e){if(!Ke.test(e))return!1 +;const t=e.replace(/[-_]/g,(e=>"-"===e?"+":"/")) +;return An(t.padEnd(4*Math.ceil(t.length/4),"="))} +const Cn=t("$ZodBase64URL",((e,t)=>{ +t.pattern??(t.pattern=Ke),an.init(e,t),e._zod.bag.contentEncoding="base64url", +e._zod.check=n=>{En(n.value)||n.issues.push({code:"invalid_format", +format:"base64url",input:n.value,inst:e,continue:!t.abort})} +})),$n=t("$ZodE164",((e,t)=>{t.pattern??(t.pattern=tt),an.init(e,t)})) +;function Pn(e,t=null){try{const n=e.split(".");if(3!==n.length)return!1 +;const[r]=n;if(!r)return!1;const a=JSON.parse(atob(r)) +;return(!("typ"in a)||"JWT"===a?.typ)&&(!!a.alg&&(!t||"alg"in a&&a.alg===t)) +}catch{return!1}}const In=t("$ZodJWT",((e,t)=>{an.init(e,t),e._zod.check=n=>{ +Pn(n.value,t.alg)||n.issues.push({code:"invalid_format",format:"jwt", +input:n.value,inst:e,continue:!t.abort})} +})),Dn=t("$ZodCustomStringFormat",((e,t)=>{an.init(e,t),e._zod.check=n=>{ +t.fn(n.value)||n.issues.push({code:"invalid_format",format:t.format, +input:n.value,inst:e,continue:!t.abort})}})),Mn=t("$ZodNumber",((e,t)=>{ +nn.init(e,t),e._zod.pattern=e._zod.bag.pattern??ut,e._zod.parse=(n,r)=>{ +if(t.coerce)try{n.value=Number(n.value)}catch(i){}const a=n.value +;if("number"==typeof a&&!Number.isNaN(a)&&Number.isFinite(a))return n +;const o="number"==typeof a?Number.isNaN(a)?"NaN":Number.isFinite(a)?void 0:"Infinity":void 0 +;return n.issues.push({expected:"number",code:"invalid_type",input:a,inst:e, +...o?{received:o}:{}}),n}})),Nn=t("$ZodNumberFormat",((e,t)=>{ +Nt.init(e,t),Mn.init(e,t)})),Rn=t("$ZodBoolean",((e,t)=>{ +nn.init(e,t),e._zod.pattern=dt,e._zod.parse=(n,r)=>{if(t.coerce)try{ +n.value=Boolean(n.value)}catch(o){}const a=n.value +;return"boolean"==typeof a||n.issues.push({expected:"boolean", +code:"invalid_type",input:a,inst:e}),n}})),Ln=t("$ZodBigInt",((e,t)=>{ +nn.init(e,t),e._zod.pattern=lt,e._zod.parse=(n,r)=>{if(t.coerce)try{ +n.value=BigInt(n.value)}catch(a){} +return"bigint"==typeof n.value||n.issues.push({expected:"bigint", +code:"invalid_type",input:n.value,inst:e}),n} +})),Bn=t("$ZodBigIntFormat",((e,t)=>{Rt.init(e,t),Ln.init(e,t) +})),jn=t("$ZodSymbol",((e,t)=>{nn.init(e,t),e._zod.parse=(t,n)=>{const r=t.value +;return"symbol"==typeof r||t.issues.push({expected:"symbol",code:"invalid_type", +input:r,inst:e}),t}})),Un=t("$ZodUndefined",((e,t)=>{ +nn.init(e,t),e._zod.pattern=ht, +e._zod.values=new Set([void 0]),e._zod.optin="optional", +e._zod.optout="optional",e._zod.parse=(t,n)=>{const r=t.value +;return void 0===r||t.issues.push({expected:"undefined",code:"invalid_type", +input:r,inst:e}),t}})),zn=t("$ZodNull",((e,t)=>{ +nn.init(e,t),e._zod.pattern=pt,e._zod.values=new Set([null]), +e._zod.parse=(t,n)=>{const r=t.value;return null===r||t.issues.push({ +expected:"null",code:"invalid_type",input:r,inst:e}),t} +})),Zn=t("$ZodAny",((e,t)=>{nn.init(e,t),e._zod.parse=e=>e +})),Fn=t("$ZodUnknown",((e,t)=>{nn.init(e,t),e._zod.parse=e=>e +})),Hn=t("$ZodNever",((e,t)=>{nn.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({ +expected:"never",code:"invalid_type",input:t.value,inst:e}),t) +})),Qn=t("$ZodVoid",((e,t)=>{nn.init(e,t),e._zod.parse=(t,n)=>{const r=t.value +;return void 0===r||t.issues.push({expected:"void",code:"invalid_type",input:r, +inst:e}),t}})),Vn=t("$ZodDate",((e,t)=>{nn.init(e,t),e._zod.parse=(n,r)=>{ +if(t.coerce)try{n.value=new Date(n.value)}catch(i){} +const a=n.value,o=a instanceof Date +;return o&&!Number.isNaN(a.getTime())||n.issues.push({expected:"date", +code:"invalid_type",input:a,...o?{received:"Invalid Date"}:{},inst:e}),n}})) +;function qn(e,t,n){ +e.issues.length&&t.issues.push(...Z(n,e.issues)),t.value[n]=e.value} +const Wn=t("$ZodArray",((e,t)=>{nn.init(e,t),e._zod.parse=(n,r)=>{ +const a=n.value;if(!Array.isArray(a))return n.issues.push({expected:"array", +code:"invalid_type",input:a,inst:e}),n;n.value=Array(a.length);const o=[] +;for(let e=0;eqn(t,n,e)))):qn(s,n,e)} +return o.length?Promise.all(o).then((()=>n)):n}}));function Xn(e,t,n,r,a){ +if(e.issues.length){if(a&&!(n in r))return;t.issues.push(...Z(n,e.issues))} +void 0===e.value?n in r&&(t.value[n]=void 0):t.value[n]=e.value}function Gn(e){ +const t=Object.keys(e.shape) +;for(const r of t)if(!e.shape?.[r]?._zod?.traits?.has("$ZodType"))throw new Error(`Invalid element at key "${r}": expected a Zod schema`) +;const n=P(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length, +optionalKeys:new Set(n)}}function Yn(e,t,n,r,a,o){ +const i=[],s=a.keySet,l=a.catchall._zod,c=l.def.type,u="optional"===l.optout +;for(const d in t){if(s.has(d))continue;if("never"===c){i.push(d);continue} +const a=l.run({value:t[d],issues:[]},r) +;a instanceof Promise?e.push(a.then((e=>Xn(e,n,d,t,u)))):Xn(a,n,d,t,u)} +return i.length&&n.issues.push({code:"unrecognized_keys",keys:i,input:t,inst:o +}),e.length?Promise.all(e).then((()=>n)):n}const Kn=t("$ZodObject",((e,t)=>{ +nn.init(e,t);const n=Object.getOwnPropertyDescriptor(t,"shape");if(!n?.get){ +const e=t.shape;Object.defineProperty(t,"shape",{get:()=>{const n={...e} +;return Object.defineProperty(t,"shape",{value:n}),n}})}const r=u((()=>Gn(t))) +;m(e._zod,"propValues",(()=>{const e=t.shape,n={};for(const t in e){ +const r=e[t]._zod;if(r.values){n[t]??(n[t]=new Set) +;for(const e of r.values)n[t].add(e)}}return n}));const a=w,o=t.catchall;let i +;e._zod.parse=(t,n)=>{i??(i=r.value);const s=t.value +;if(!a(s))return t.issues.push({expected:"object",code:"invalid_type",input:s, +inst:e}),t;t.value={};const l=[],c=i.shape;for(const e of i.keys){ +const r=c[e],a="optional"===r._zod.optout,o=r._zod.run({value:s[e],issues:[]},n) +;o instanceof Promise?l.push(o.then((n=>Xn(n,t,e,s,a)))):Xn(o,t,e,s,a)} +return o?Yn(l,s,t,n,r.value,e):l.length?Promise.all(l).then((()=>t)):t} +})),Jn=t("$ZodObjectJIT",((e,t)=>{Kn.init(e,t) +;const n=e._zod.parse,r=u((()=>Gn(t)));let a +;const i=w,s=!o.jitless,l=s&&x.value,c=t.catchall;let d;e._zod.parse=(o,u)=>{ +d??(d=r.value);const p=o.value +;return i(p)?s&&l&&!1===u?.async&&!0!==u.jitless?(a||(a=(e=>{ +const t=new en(["shape","payload","ctx"]),n=r.value,a=e=>{const t=b(e) +;return`shape[${t}]._zod.run({ value: input[${t}], issues: [] }, ctx)`} +;t.write("const input = payload.value;");const o=Object.create(null);let i=0 +;for(const r of n.keys)o[r]="key_"+i++;t.write("const newResult = {};") +;for(const r of n.keys){ +const n=o[r],i=b(r),s=e[r],l="optional"===s?._zod?.optout +;t.write(`const ${n} = ${a(r)};`), +l?t.write(`\n if (${n}.issues.length) {\n if (${i} in input) {\n payload.issues = payload.issues.concat(${n}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${i}, ...iss.path] : [${i}]\n })));\n }\n }\n \n if (${n}.value === undefined) {\n if (${i} in input) {\n newResult[${i}] = undefined;\n }\n } else {\n newResult[${i}] = ${n}.value;\n }\n \n `):t.write(`\n if (${n}.issues.length) {\n payload.issues = payload.issues.concat(${n}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${i}, ...iss.path] : [${i}]\n })));\n }\n \n if (${n}.value === undefined) {\n if (${i} in input) {\n newResult[${i}] = undefined;\n }\n } else {\n newResult[${i}] = ${n}.value;\n }\n \n `) +}t.write("payload.value = newResult;"),t.write("return payload;") +;const s=t.compile();return(t,n)=>s(e,t,n) +})(t.shape)),o=a(o,u),c?Yn([],p,o,u,d,e):o):n(o,u):(o.issues.push({ +expected:"object",code:"invalid_type",input:p,inst:e}),o)}})) +;function er(e,t,n,r){ +for(const o of e)if(0===o.issues.length)return t.value=o.value,t +;const a=e.filter((e=>!z(e))) +;return 1===a.length?(t.value=a[0].value,a[0]):(t.issues.push({ +code:"invalid_union",input:t.value,inst:n, +errors:e.map((e=>e.issues.map((e=>H(e,r,i())))))}),t)} +const tr=t("$ZodUnion",((e,t)=>{ +nn.init(e,t),m(e._zod,"optin",(()=>t.options.some((e=>"optional"===e._zod.optin))?"optional":void 0)), +m(e._zod,"optout",(()=>t.options.some((e=>"optional"===e._zod.optout))?"optional":void 0)), +m(e._zod,"values",(()=>{ +if(t.options.every((e=>e._zod.values)))return new Set(t.options.flatMap((e=>Array.from(e._zod.values)))) +})),m(e._zod,"pattern",(()=>{if(t.options.every((e=>e._zod.pattern))){ +const e=t.options.map((e=>e._zod.pattern)) +;return new RegExp(`^(${e.map((e=>p(e.source))).join("|")})$`)}})) +;const n=1===t.options.length,r=t.options[0]._zod.run;e._zod.parse=(a,o)=>{ +if(n)return r(a,o);let i=!1;const s=[];for(const e of t.options){ +const t=e._zod.run({value:a.value,issues:[]},o) +;if(t instanceof Promise)s.push(t),i=!0;else{if(0===t.issues.length)return t +;s.push(t)}}return i?Promise.all(s).then((t=>er(t,a,e,o))):er(s,a,e,o)}})) +;function nr(e,t,n,r){const a=e.filter((e=>0===e.issues.length)) +;return 1===a.length?(t.value=a[0].value,t):(0===a.length?t.issues.push({ +code:"invalid_union",input:t.value,inst:n, +errors:e.map((e=>e.issues.map((e=>H(e,r,i())))))}):t.issues.push({ +code:"invalid_union",input:t.value,inst:n,errors:[],inclusive:!1}),t)} +const rr=t("$ZodXor",((e,t)=>{tr.init(e,t),t.inclusive=!1 +;const n=1===t.options.length,r=t.options[0]._zod.run;e._zod.parse=(a,o)=>{ +if(n)return r(a,o);let i=!1;const s=[];for(const e of t.options){ +const t=e._zod.run({value:a.value,issues:[]},o);t instanceof Promise?(s.push(t), +i=!0):s.push(t)}return i?Promise.all(s).then((t=>nr(t,a,e,o))):nr(s,a,e,o)} +})),ar=t("$ZodDiscriminatedUnion",((e,t)=>{t.inclusive=!1,tr.init(e,t) +;const n=e._zod.parse;m(e._zod,"propValues",(()=>{const e={} +;for(const n of t.options){const r=n._zod.propValues +;if(!r||0===Object.keys(r).length)throw new Error(`Invalid discriminated union option at index "${t.options.indexOf(n)}"`) +;for(const[t,n]of Object.entries(r)){e[t]||(e[t]=new Set) +;for(const r of n)e[t].add(r)}}return e}));const r=u((()=>{ +const e=t.options,n=new Map;for(const r of e){ +const e=r._zod.propValues?.[t.discriminator] +;if(!e||0===e.size)throw new Error(`Invalid discriminated union option at index "${t.options.indexOf(r)}"`) +;for(const t of e){ +if(n.has(t))throw new Error(`Duplicate discriminator value "${String(t)}"`) +;n.set(t,r)}}return n}));e._zod.parse=(a,o)=>{const i=a.value +;if(!w(i))return a.issues.push({code:"invalid_type",expected:"object",input:i, +inst:e}),a;const s=r.value.get(i?.[t.discriminator]) +;return s?s._zod.run(a,o):t.unionFallback?n(a,o):(a.issues.push({ +code:"invalid_union",errors:[],note:"No matching discriminator", +discriminator:t.discriminator,input:i,path:[t.discriminator],inst:e}),a)} +})),or=t("$ZodIntersection",((e,t)=>{nn.init(e,t),e._zod.parse=(e,n)=>{ +const r=e.value,a=t.left._zod.run({value:r,issues:[]},n),o=t.right._zod.run({ +value:r,issues:[]},n) +;return a instanceof Promise||o instanceof Promise?Promise.all([a,o]).then((([t,n])=>sr(e,t,n))):sr(e,a,o) +}}));function ir(e,t){if(e===t)return{valid:!0,data:e} +;if(e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e} +;if(k(e)&&k(t)){ +const n=Object.keys(t),r=Object.keys(e).filter((e=>-1!==n.indexOf(e))),a={...e, +...t};for(const o of r){const n=ir(e[o],t[o]);if(!n.valid)return{valid:!1, +mergeErrorPath:[o,...n.mergeErrorPath]};a[o]=n.data}return{valid:!0,data:a}} +if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1, +mergeErrorPath:[]};const n=[];for(let r=0;re.l&&e.r)).map((([e])=>e)) +;if(o.length&&a&&e.issues.push({...a,keys:o}),z(e))return e +;const i=ir(t.value,n.value) +;if(!i.valid)throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(i.mergeErrorPath)}`) +;return e.value=i.data,e}const lr=t("$ZodTuple",((e,t)=>{nn.init(e,t) +;const n=t.items;e._zod.parse=(r,a)=>{const o=r.value +;if(!Array.isArray(o))return r.issues.push({input:o,inst:e,expected:"tuple", +code:"invalid_type"}),r;r.value=[] +;const i=[],s=[...n].reverse().findIndex((e=>"optional"!==e._zod.optin)),l=-1===s?0:n.length-s +;if(!t.rest){const t=o.length>n.length,a=o.length=o.length&&c>=l)continue +;const t=e._zod.run({value:o[c],issues:[]},a) +;t instanceof Promise?i.push(t.then((e=>cr(e,r,c)))):cr(t,r,c)}if(t.rest){ +const e=o.slice(n.length);for(const n of e){c++;const e=t.rest._zod.run({ +value:n,issues:[]},a) +;e instanceof Promise?i.push(e.then((e=>cr(e,r,c)))):cr(e,r,c)}} +return i.length?Promise.all(i).then((()=>r)):r}}));function cr(e,t,n){ +e.issues.length&&t.issues.push(...Z(n,e.issues)),t.value[n]=e.value} +const ur=t("$ZodRecord",((e,t)=>{nn.init(e,t),e._zod.parse=(n,r)=>{ +const a=n.value;if(!k(a))return n.issues.push({expected:"record", +code:"invalid_type",input:a,inst:e}),n;const o=[],s=t.keyType._zod.values;if(s){ +n.value={};const i=new Set +;for(const e of s)if("string"==typeof e||"number"==typeof e||"symbol"==typeof e){ +i.add("number"==typeof e?e.toString():e);const s=t.valueType._zod.run({ +value:a[e],issues:[]},r);s instanceof Promise?o.push(s.then((t=>{ +t.issues.length&&n.issues.push(...Z(e,t.issues)),n.value[e]=t.value +}))):(s.issues.length&&n.issues.push(...Z(e,s.issues)),n.value[e]=s.value)}let l +;for(const e in a)i.has(e)||(l=l??[],l.push(e));l&&l.length>0&&n.issues.push({ +code:"unrecognized_keys",input:a,inst:e,keys:l})}else{n.value={} +;for(const s of Reflect.ownKeys(a)){if("__proto__"===s)continue +;let l=t.keyType._zod.run({value:s,issues:[]},r) +;if(l instanceof Promise)throw new Error("Async schemas not supported in object keys currently") +;if("string"==typeof s&&ut.test(s)&&l.issues.length&&l.issues.some((e=>"invalid_type"===e.code&&"number"===e.expected))){ +const e=t.keyType._zod.run({value:Number(s),issues:[]},r) +;if(e instanceof Promise)throw new Error("Async schemas not supported in object keys currently") +;0===e.issues.length&&(l=e)}if(l.issues.length){ +"loose"===t.mode?n.value[s]=a[s]:n.issues.push({code:"invalid_key", +origin:"record",issues:l.issues.map((e=>H(e,r,i()))),input:s,path:[s],inst:e}) +;continue}const c=t.valueType._zod.run({value:a[s],issues:[]},r) +;c instanceof Promise?o.push(c.then((e=>{ +e.issues.length&&n.issues.push(...Z(s,e.issues)),n.value[l.value]=e.value +}))):(c.issues.length&&n.issues.push(...Z(s,c.issues)),n.value[l.value]=c.value) +}}return o.length?Promise.all(o).then((()=>n)):n}})),dr=t("$ZodMap",((e,t)=>{ +nn.init(e,t),e._zod.parse=(n,r)=>{const a=n.value +;if(!(a instanceof Map))return n.issues.push({expected:"map", +code:"invalid_type",input:a,inst:e}),n;const o=[];n.value=new Map +;for(const[i,s]of a){const l=t.keyType._zod.run({value:i,issues:[] +},r),c=t.valueType._zod.run({value:s,issues:[]},r) +;l instanceof Promise||c instanceof Promise?o.push(Promise.all([l,c]).then((([t,o])=>{ +pr(t,o,n,i,a,e,r)}))):pr(l,c,n,i,a,e,r)} +return o.length?Promise.all(o).then((()=>n)):n}}));function pr(e,t,n,r,a,o,s){ +e.issues.length&&(_.has(typeof r)?n.issues.push(...Z(r,e.issues)):n.issues.push({ +code:"invalid_key",origin:"map",input:a,inst:o, +issues:e.issues.map((e=>H(e,s,i()))) +})),t.issues.length&&(_.has(typeof r)?n.issues.push(...Z(r,t.issues)):n.issues.push({ +origin:"map",code:"invalid_element",input:a,inst:o,key:r, +issues:t.issues.map((e=>H(e,s,i())))})),n.value.set(e.value,t.value)} +const hr=t("$ZodSet",((e,t)=>{nn.init(e,t),e._zod.parse=(n,r)=>{const a=n.value +;if(!(a instanceof Set))return n.issues.push({input:a,inst:e,expected:"set", +code:"invalid_type"}),n;const o=[];n.value=new Set;for(const e of a){ +const a=t.valueType._zod.run({value:e,issues:[]},r) +;a instanceof Promise?o.push(a.then((e=>fr(e,n)))):fr(a,n)} +return o.length?Promise.all(o).then((()=>n)):n}}));function fr(e,t){ +e.issues.length&&t.issues.push(...e.issues),t.value.add(e.value)} +const mr=t("$ZodEnum",((e,t)=>{nn.init(e,t);const n=s(t.entries),r=new Set(n) +;e._zod.values=r, +e._zod.pattern=new RegExp(`^(${n.filter((e=>_.has(typeof e))).map((e=>"string"==typeof e?T(e):e.toString())).join("|")})$`), +e._zod.parse=(t,a)=>{const o=t.value;return r.has(o)||t.issues.push({ +code:"invalid_value",values:n,input:o,inst:e}),t} +})),gr=t("$ZodLiteral",((e,t)=>{ +if(nn.init(e,t),0===t.values.length)throw new Error("Cannot create literal schema with no valid values") +;const n=new Set(t.values) +;e._zod.values=n,e._zod.pattern=new RegExp(`^(${t.values.map((e=>"string"==typeof e?T(e):e?T(e.toString()):String(e))).join("|")})$`), +e._zod.parse=(r,a)=>{const o=r.value;return n.has(o)||r.issues.push({ +code:"invalid_value",values:t.values,input:o,inst:e}),r} +})),vr=t("$ZodFile",((e,t)=>{nn.init(e,t),e._zod.parse=(t,n)=>{const r=t.value +;return r instanceof File||t.issues.push({expected:"file",code:"invalid_type", +input:r,inst:e}),t}})),br=t("$ZodTransform",((e,t)=>{ +nn.init(e,t),e._zod.parse=(n,o)=>{ +if("backward"===o.direction)throw new a(e.constructor.name) +;const i=t.transform(n.value,n);if(o.async){ +return(i instanceof Promise?i:Promise.resolve(i)).then((e=>(n.value=e,n)))} +if(i instanceof Promise)throw new r;return n.value=i,n}}));function yr(e,t){ +return e.issues.length&&void 0===t?{issues:[],value:void 0}:e} +const Or=t("$ZodOptional",((e,t)=>{ +nn.init(e,t),e._zod.optin="optional",e._zod.optout="optional", +m(e._zod,"values",(()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0)), +m(e._zod,"pattern",(()=>{const e=t.innerType._zod.pattern +;return e?new RegExp(`^(${p(e.source)})?$`):void 0})),e._zod.parse=(e,n)=>{ +if("optional"===t.innerType._zod.optin){const r=t.innerType._zod.run(e,n) +;return r instanceof Promise?r.then((t=>yr(t,e.value))):yr(r,e.value)} +return void 0===e.value?e:t.innerType._zod.run(e,n)} +})),wr=t("$ZodExactOptional",((e,t)=>{ +Or.init(e,t),m(e._zod,"values",(()=>t.innerType._zod.values)), +m(e._zod,"pattern",(()=>t.innerType._zod.pattern)), +e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)})),xr=t("$ZodNullable",((e,t)=>{ +nn.init(e,t), +m(e._zod,"optin",(()=>t.innerType._zod.optin)),m(e._zod,"optout",(()=>t.innerType._zod.optout)), +m(e._zod,"pattern",(()=>{const e=t.innerType._zod.pattern +;return e?new RegExp(`^(${p(e.source)}|null)$`):void 0 +})),m(e._zod,"values",(()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0)), +e._zod.parse=(e,n)=>null===e.value?e:t.innerType._zod.run(e,n) +})),kr=t("$ZodDefault",((e,t)=>{ +nn.init(e,t),e._zod.optin="optional",m(e._zod,"values",(()=>t.innerType._zod.values)), +e._zod.parse=(e,n)=>{ +if("backward"===n.direction)return t.innerType._zod.run(e,n) +;if(void 0===e.value)return e.value=t.defaultValue,e +;const r=t.innerType._zod.run(e,n) +;return r instanceof Promise?r.then((e=>Sr(e,t))):Sr(r,t)}}));function Sr(e,t){ +return void 0===e.value&&(e.value=t.defaultValue),e} +const _r=t("$ZodPrefault",((e,t)=>{ +nn.init(e,t),e._zod.optin="optional",m(e._zod,"values",(()=>t.innerType._zod.values)), +e._zod.parse=(e,n)=>("backward"===n.direction||void 0===e.value&&(e.value=t.defaultValue), +t.innerType._zod.run(e,n))})),Ar=t("$ZodNonOptional",((e,t)=>{ +nn.init(e,t),m(e._zod,"values",(()=>{const e=t.innerType._zod.values +;return e?new Set([...e].filter((e=>void 0!==e))):void 0 +})),e._zod.parse=(n,r)=>{const a=t.innerType._zod.run(n,r) +;return a instanceof Promise?a.then((t=>Tr(t,e))):Tr(a,e)}}));function Tr(e,t){ +return e.issues.length||void 0!==e.value||e.issues.push({code:"invalid_type", +expected:"nonoptional",input:e.value,inst:t}),e} +const Er=t("$ZodSuccess",((e,t)=>{nn.init(e,t),e._zod.parse=(e,n)=>{ +if("backward"===n.direction)throw new a("ZodSuccess") +;const r=t.innerType._zod.run(e,n) +;return r instanceof Promise?r.then((t=>(e.value=0===t.issues.length, +e))):(e.value=0===r.issues.length,e)}})),Cr=t("$ZodCatch",((e,t)=>{nn.init(e,t), +m(e._zod,"optin",(()=>t.innerType._zod.optin)), +m(e._zod,"optout",(()=>t.innerType._zod.optout)), +m(e._zod,"values",(()=>t.innerType._zod.values)),e._zod.parse=(e,n)=>{ +if("backward"===n.direction)return t.innerType._zod.run(e,n) +;const r=t.innerType._zod.run(e,n) +;return r instanceof Promise?r.then((r=>(e.value=r.value, +r.issues.length&&(e.value=t.catchValue({...e,error:{ +issues:r.issues.map((e=>H(e,n,i())))},input:e.value +}),e.issues=[]),e))):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({ +...e,error:{issues:r.issues.map((e=>H(e,n,i())))},input:e.value +}),e.issues=[]),e)}})),$r=t("$ZodNaN",((e,t)=>{ +nn.init(e,t),e._zod.parse=(t,n)=>("number"==typeof t.value&&Number.isNaN(t.value)||t.issues.push({ +input:t.value,inst:e,expected:"nan",code:"invalid_type"}),t) +})),Pr=t("$ZodPipe",((e,t)=>{ +nn.init(e,t),m(e._zod,"values",(()=>t.in._zod.values)), +m(e._zod,"optin",(()=>t.in._zod.optin)), +m(e._zod,"optout",(()=>t.out._zod.optout)), +m(e._zod,"propValues",(()=>t.in._zod.propValues)),e._zod.parse=(e,n)=>{ +if("backward"===n.direction){const r=t.out._zod.run(e,n) +;return r instanceof Promise?r.then((e=>Ir(e,t.in,n))):Ir(r,t.in,n)} +const r=t.in._zod.run(e,n) +;return r instanceof Promise?r.then((e=>Ir(e,t.out,n))):Ir(r,t.out,n)}})) +;function Ir(e,t,n){return e.issues.length?(e.aborted=!0,e):t._zod.run({ +value:e.value,issues:e.issues},n)}const Dr=t("$ZodCodec",((e,t)=>{ +nn.init(e,t),m(e._zod,"values",(()=>t.in._zod.values)), +m(e._zod,"optin",(()=>t.in._zod.optin)), +m(e._zod,"optout",(()=>t.out._zod.optout)), +m(e._zod,"propValues",(()=>t.in._zod.propValues)),e._zod.parse=(e,n)=>{ +if("forward"===(n.direction||"forward")){const r=t.in._zod.run(e,n) +;return r instanceof Promise?r.then((e=>Mr(e,t,n))):Mr(r,t,n)}{ +const r=t.out._zod.run(e,n) +;return r instanceof Promise?r.then((e=>Mr(e,t,n))):Mr(r,t,n)}}})) +;function Mr(e,t,n){if(e.issues.length)return e.aborted=!0,e +;if("forward"===(n.direction||"forward")){const r=t.transform(e.value,e) +;return r instanceof Promise?r.then((r=>Nr(e,r,t.out,n))):Nr(e,r,t.out,n)}{ +const r=t.reverseTransform(e.value,e) +;return r instanceof Promise?r.then((r=>Nr(e,r,t.in,n))):Nr(e,r,t.in,n)}} +function Nr(e,t,n,r){return e.issues.length?(e.aborted=!0,e):n._zod.run({ +value:t,issues:e.issues},r)}const Rr=t("$ZodReadonly",((e,t)=>{ +nn.init(e,t),m(e._zod,"propValues",(()=>t.innerType._zod.propValues)), +m(e._zod,"values",(()=>t.innerType._zod.values)), +m(e._zod,"optin",(()=>t.innerType?._zod?.optin)), +m(e._zod,"optout",(()=>t.innerType?._zod?.optout)),e._zod.parse=(e,n)=>{ +if("backward"===n.direction)return t.innerType._zod.run(e,n) +;const r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(Lr):Lr(r)} +}));function Lr(e){return e.value=Object.freeze(e.value),e} +const Br=t("$ZodTemplateLiteral",((e,t)=>{nn.init(e,t);const n=[] +;for(const r of t.parts)if("object"==typeof r&&null!==r){ +if(!r._zod.pattern)throw new Error(`Invalid template literal part, no pattern found: ${[...r._zod.traits].shift()}`) +;const e=r._zod.pattern instanceof RegExp?r._zod.pattern.source:r._zod.pattern +;if(!e)throw new Error(`Invalid template literal part: ${r._zod.traits}`) +;const t=e.startsWith("^")?1:0,a=e.endsWith("$")?e.length-1:e.length +;n.push(e.slice(t,a))}else{ +if(null!==r&&!A.has(typeof r))throw new Error(`Invalid template literal part: ${r}`) +;n.push(T(`${r}`))} +e._zod.pattern=new RegExp(`^${n.join("")}$`),e._zod.parse=(n,r)=>"string"!=typeof n.value?(n.issues.push({ +input:n.value,inst:e,expected:"string",code:"invalid_type" +}),n):(e._zod.pattern.lastIndex=0,e._zod.pattern.test(n.value)||n.issues.push({ +input:n.value,inst:e,code:"invalid_format",format:t.format??"template_literal", +pattern:e._zod.pattern.source}),n)})),jr=t("$ZodFunction",((e,t)=>(nn.init(e,t), +e._def=t,e._zod.def=t,e.implement=t=>{ +if("function"!=typeof t)throw new Error("implement() must be called with a function") +;return function(...n){ +const r=e._def.input?se(e._def.input,n):n,a=Reflect.apply(t,this,r) +;return e._def.output?se(e._def.output,a):a}},e.implementAsync=t=>{ +if("function"!=typeof t)throw new Error("implementAsync() must be called with a function") +;return async function(...n){ +const r=e._def.input?await ce(e._def.input,n):n,a=await Reflect.apply(t,this,r) +;return e._def.output?await ce(e._def.output,a):a}},e._zod.parse=(t,n)=>{ +if("function"!=typeof t.value)return t.issues.push({code:"invalid_type", +expected:"function",input:t.value,inst:e}),t +;const r=e._def.output&&"promise"===e._def.output._zod.def.type +;return t.value=r?e.implementAsync(t.value):e.implement(t.value),t +},e.input=(...t)=>{const n=e.constructor;return Array.isArray(t[0])?new n({ +type:"function",input:new lr({type:"tuple",items:t[0],rest:t[1]}), +output:e._def.output}):new n({type:"function",input:t[0],output:e._def.output}) +},e.output=t=>new(0,e.constructor)({type:"function",input:e._def.input,output:t +}),e))),Ur=t("$ZodPromise",((e,t)=>{ +nn.init(e,t),e._zod.parse=(e,n)=>Promise.resolve(e.value).then((e=>t.innerType._zod.run({ +value:e,issues:[]},n)))})),zr=t("$ZodLazy",((e,t)=>{ +nn.init(e,t),m(e._zod,"innerType",(()=>t.getter())), +m(e._zod,"pattern",(()=>e._zod.innerType?._zod?.pattern)), +m(e._zod,"propValues",(()=>e._zod.innerType?._zod?.propValues)), +m(e._zod,"optin",(()=>e._zod.innerType?._zod?.optin??void 0)), +m(e._zod,"optout",(()=>e._zod.innerType?._zod?.optout??void 0)), +e._zod.parse=(t,n)=>e._zod.innerType._zod.run(t,n) +})),Zr=t("$ZodCustom",((e,t)=>{ +$t.init(e,t),nn.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{ +const r=n.value,a=t.fn(r) +;if(a instanceof Promise)return a.then((t=>Fr(t,n,r,e)));Fr(a,n,r,e)}})) +;function Fr(e,t,n,r){if(!e){const e={code:"custom",input:n,inst:r, +path:[...r._zod.def.path??[]],continue:!r._zod.def.abort} +;r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(W(e))}} +const Hr=()=>{const e={string:{unit:"حرف",verb:"أن يحوي"},file:{unit:"بايت", +verb:"أن يحوي"},array:{unit:"عنصر",verb:"أن يحوي"},set:{unit:"عنصر", +verb:"أن يحوي"}};function t(t){return e[t]??null}const n={regex:"مدخل", +email:"بريد إلكتروني",url:"رابط",emoji:"إيموجي",uuid:"UUID",uuidv4:"UUIDv4", +uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2", +ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"تاريخ ووقت بمعيار ISO", +date:"تاريخ بمعيار ISO",time:"وقت بمعيار ISO",duration:"مدة بمعيار ISO", +ipv4:"عنوان IPv4",ipv6:"عنوان IPv6",cidrv4:"مدى عناوين بصيغة IPv4", +cidrv6:"مدى عناوين بصيغة IPv6",base64:"نَص بترميز base64-encoded", +base64url:"نَص بترميز base64url-encoded",json_string:"نَص على هيئة JSON", +e164:"رقم هاتف بمعيار E.164",jwt:"JWT",template_literal:"مدخل"},r={nan:"NaN"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`مدخلات غير مقبولة: يفترض إدخال instanceof ${e.expected}، ولكن تم إدخال ${a}`:`مدخلات غير مقبولة: يفترض إدخال ${t}، ولكن تم إدخال ${a}` +}case"invalid_value": +return 1===e.values.length?`مدخلات غير مقبولة: يفترض إدخال ${$(e.values[0])}`:`اختيار غير مقبول: يتوقع انتقاء أحد هذه الخيارات: ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?` أكبر من اللازم: يفترض أن تكون ${e.origin??"القيمة"} ${n} ${e.maximum.toString()} ${r.unit??"عنصر"}`:`أكبر من اللازم: يفترض أن تكون ${e.origin??"القيمة"} ${n} ${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`أصغر من اللازم: يفترض لـ ${e.origin} أن يكون ${n} ${e.minimum.toString()} ${r.unit}`:`أصغر من اللازم: يفترض لـ ${e.origin} أن يكون ${n} ${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`نَص غير مقبول: يجب أن يبدأ بـ "${e.prefix}"`:"ends_with"===t.format?`نَص غير مقبول: يجب أن ينتهي بـ "${t.suffix}"`:"includes"===t.format?`نَص غير مقبول: يجب أن يتضمَّن "${t.includes}"`:"regex"===t.format?`نَص غير مقبول: يجب أن يطابق النمط ${t.pattern}`:`${n[t.format]??e.format} غير مقبول` +}case"not_multiple_of": +return`رقم غير مقبول: يجب أن يكون من مضاعفات ${e.divisor}` +;case"unrecognized_keys": +return`معرف${e.keys.length>1?"ات":""} غريب${e.keys.length>1?"ة":""}: ${l(e.keys,"، ")}` +;case"invalid_key":return`معرف غير مقبول في ${e.origin}`;case"invalid_union": +default:return"مدخل غير مقبول";case"invalid_element": +return`مدخل غير مقبول في ${e.origin}`}}};const Qr=()=>{const e={string:{ +unit:"simvol",verb:"olmalıdır"},file:{unit:"bayt",verb:"olmalıdır"},array:{ +unit:"element",verb:"olmalıdır"},set:{unit:"element",verb:"olmalıdır"}} +;function t(t){return e[t]??null}const n={regex:"input",email:"email address", +url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time", +duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address", +cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string", +base64url:"base64url-encoded string",json_string:"JSON string", +e164:"E.164 number",jwt:"JWT",template_literal:"input"},r={nan:"NaN"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Yanlış dəyər: gözlənilən instanceof ${e.expected}, daxil olan ${a}`:`Yanlış dəyər: gözlənilən ${t}, daxil olan ${a}` +}case"invalid_value": +return 1===e.values.length?`Yanlış dəyər: gözlənilən ${$(e.values[0])}`:`Yanlış seçim: aşağıdakılardan biri olmalıdır: ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Çox böyük: gözlənilən ${e.origin??"dəyər"} ${n}${e.maximum.toString()} ${r.unit??"element"}`:`Çox böyük: gözlənilən ${e.origin??"dəyər"} ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Çox kiçik: gözlənilən ${e.origin} ${n}${e.minimum.toString()} ${r.unit}`:`Çox kiçik: gözlənilən ${e.origin} ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Yanlış mətn: "${t.prefix}" ilə başlamalıdır`:"ends_with"===t.format?`Yanlış mətn: "${t.suffix}" ilə bitməlidir`:"includes"===t.format?`Yanlış mətn: "${t.includes}" daxil olmalıdır`:"regex"===t.format?`Yanlış mətn: ${t.pattern} şablonuna uyğun olmalıdır`:`Yanlış ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Yanlış ədəd: ${e.divisor} ilə bölünə bilən olmalıdır` +;case"unrecognized_keys": +return`Tanınmayan açar${e.keys.length>1?"lar":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`${e.origin} daxilində yanlış açar` +;case"invalid_union":default:return"Yanlış dəyər";case"invalid_element": +return`${e.origin} daxilində yanlış dəyər`}}};function Vr(e,t,n,r){ +const a=Math.abs(e),o=a%10,i=a%100;return i>=11&&i<=19?r:1===o?t:o>=2&&o<=4?n:r} +const qr=()=>{const e={string:{unit:{one:"сімвал",few:"сімвалы",many:"сімвалаў" +},verb:"мець"},array:{unit:{one:"элемент",few:"элементы",many:"элементаў"}, +verb:"мець"},set:{unit:{one:"элемент",few:"элементы",many:"элементаў"}, +verb:"мець"},file:{unit:{one:"байт",few:"байты",many:"байтаў"},verb:"мець"}} +;function t(t){return e[t]??null}const n={regex:"увод",email:"email адрас", +url:"URL",emoji:"эмодзі",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"ISO дата і час",date:"ISO дата",time:"ISO час", +duration:"ISO працягласць",ipv4:"IPv4 адрас",ipv6:"IPv6 адрас", +cidrv4:"IPv4 дыяпазон",cidrv6:"IPv6 дыяпазон",base64:"радок у фармаце base64", +base64url:"радок у фармаце base64url",json_string:"JSON радок", +e164:"нумар E.164",jwt:"JWT",template_literal:"увод"},r={nan:"NaN",number:"лік", +array:"масіў"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Няправільны ўвод: чакаўся instanceof ${e.expected}, атрымана ${a}`:`Няправільны ўвод: чакаўся ${t}, атрымана ${a}` +}case"invalid_value": +return 1===e.values.length?`Няправільны ўвод: чакалася ${$(e.values[0])}`:`Няправільны варыянт: чакаўся адзін з ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin);if(r){ +const t=Vr(Number(e.maximum),r.unit.one,r.unit.few,r.unit.many) +;return`Занадта вялікі: чакалася, што ${e.origin??"значэнне"} павінна ${r.verb} ${n}${e.maximum.toString()} ${t}` +} +return`Занадта вялікі: чакалася, што ${e.origin??"значэнне"} павінна быць ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin);if(r){ +const t=Vr(Number(e.minimum),r.unit.one,r.unit.few,r.unit.many) +;return`Занадта малы: чакалася, што ${e.origin} павінна ${r.verb} ${n}${e.minimum.toString()} ${t}` +} +return`Занадта малы: чакалася, што ${e.origin} павінна быць ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Няправільны радок: павінен пачынацца з "${t.prefix}"`:"ends_with"===t.format?`Няправільны радок: павінен заканчвацца на "${t.suffix}"`:"includes"===t.format?`Няправільны радок: павінен змяшчаць "${t.includes}"`:"regex"===t.format?`Няправільны радок: павінен адпавядаць шаблону ${t.pattern}`:`Няправільны ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Няправільны лік: павінен быць кратным ${e.divisor}` +;case"unrecognized_keys": +return`Нераспазнаны ${e.keys.length>1?"ключы":"ключ"}: ${l(e.keys,", ")}` +;case"invalid_key":return`Няправільны ключ у ${e.origin}`;case"invalid_union": +default:return"Няправільны ўвод";case"invalid_element": +return`Няправільнае значэнне ў ${e.origin}`}}};const Wr=()=>{const e={string:{ +unit:"символа",verb:"да съдържа"},file:{unit:"байта",verb:"да съдържа"},array:{ +unit:"елемента",verb:"да съдържа"},set:{unit:"елемента",verb:"да съдържа"}} +;function t(t){return e[t]??null}const n={regex:"вход",email:"имейл адрес", +url:"URL",emoji:"емоджи",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"ISO време",date:"ISO дата",time:"ISO време", +duration:"ISO продължителност",ipv4:"IPv4 адрес",ipv6:"IPv6 адрес", +cidrv4:"IPv4 диапазон",cidrv6:"IPv6 диапазон",base64:"base64-кодиран низ", +base64url:"base64url-кодиран низ",json_string:"JSON низ",e164:"E.164 номер", +jwt:"JWT",template_literal:"вход"},r={nan:"NaN",number:"число",array:"масив"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Невалиден вход: очакван instanceof ${e.expected}, получен ${a}`:`Невалиден вход: очакван ${t}, получен ${a}` +}case"invalid_value": +return 1===e.values.length?`Невалиден вход: очакван ${$(e.values[0])}`:`Невалидна опция: очаквано едно от ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Твърде голямо: очаква се ${e.origin??"стойност"} да съдържа ${n}${e.maximum.toString()} ${r.unit??"елемента"}`:`Твърде голямо: очаква се ${e.origin??"стойност"} да бъде ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Твърде малко: очаква се ${e.origin} да съдържа ${n}${e.minimum.toString()} ${r.unit}`:`Твърде малко: очаква се ${e.origin} да бъде ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;if("starts_with"===t.format)return`Невалиден низ: трябва да започва с "${t.prefix}"` +;if("ends_with"===t.format)return`Невалиден низ: трябва да завършва с "${t.suffix}"` +;if("includes"===t.format)return`Невалиден низ: трябва да включва "${t.includes}"` +;if("regex"===t.format)return`Невалиден низ: трябва да съвпада с ${t.pattern}` +;let r="Невалиден" +;return"emoji"===t.format&&(r="Невалидно"),"datetime"===t.format&&(r="Невалидно"), +"date"===t.format&&(r="Невалидна"), +"time"===t.format&&(r="Невалидно"),"duration"===t.format&&(r="Невалидна"), +`${r} ${n[t.format]??e.format}`}case"not_multiple_of": +return`Невалидно число: трябва да бъде кратно на ${e.divisor}` +;case"unrecognized_keys": +return`Неразпознат${e.keys.length>1?"и":""} ключ${e.keys.length>1?"ове":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Невалиден ключ в ${e.origin}`;case"invalid_union": +default:return"Невалиден вход";case"invalid_element": +return`Невалидна стойност в ${e.origin}`}}};const Xr=()=>{const e={string:{ +unit:"caràcters",verb:"contenir"},file:{unit:"bytes",verb:"contenir"},array:{ +unit:"elements",verb:"contenir"},set:{unit:"elements",verb:"contenir"}} +;function t(t){return e[t]??null}const n={regex:"entrada", +email:"adreça electrònica",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4", +uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2", +ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"data i hora ISO",date:"data ISO", +time:"hora ISO",duration:"durada ISO",ipv4:"adreça IPv4",ipv6:"adreça IPv6", +cidrv4:"rang IPv4",cidrv6:"rang IPv6",base64:"cadena codificada en base64", +base64url:"cadena codificada en base64url",json_string:"cadena JSON", +e164:"número E.164",jwt:"JWT",template_literal:"entrada"},r={nan:"NaN"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Tipus invàlid: s'esperava instanceof ${e.expected}, s'ha rebut ${a}`:`Tipus invàlid: s'esperava ${t}, s'ha rebut ${a}` +}case"invalid_value": +return 1===e.values.length?`Valor invàlid: s'esperava ${$(e.values[0])}`:`Opció invàlida: s'esperava una de ${l(e.values," o ")}` +;case"too_big":{const n=e.inclusive?"com a màxim":"menys de",r=t(e.origin) +;return r?`Massa gran: s'esperava que ${e.origin??"el valor"} contingués ${n} ${e.maximum.toString()} ${r.unit??"elements"}`:`Massa gran: s'esperava que ${e.origin??"el valor"} fos ${n} ${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?"com a mínim":"més de",r=t(e.origin) +;return r?`Massa petit: s'esperava que ${e.origin} contingués ${n} ${e.minimum.toString()} ${r.unit}`:`Massa petit: s'esperava que ${e.origin} fos ${n} ${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Format invàlid: ha de començar amb "${t.prefix}"`:"ends_with"===t.format?`Format invàlid: ha d'acabar amb "${t.suffix}"`:"includes"===t.format?`Format invàlid: ha d'incloure "${t.includes}"`:"regex"===t.format?`Format invàlid: ha de coincidir amb el patró ${t.pattern}`:`Format invàlid per a ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Número invàlid: ha de ser múltiple de ${e.divisor}` +;case"unrecognized_keys": +return`Clau${e.keys.length>1?"s":""} no reconeguda${e.keys.length>1?"s":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Clau invàlida a ${e.origin}`;case"invalid_union": +default:return"Entrada invàlida";case"invalid_element": +return`Element invàlid a ${e.origin}`}}};const Gr=()=>{const e={string:{ +unit:"znaků",verb:"mít"},file:{unit:"bajtů",verb:"mít"},array:{unit:"prvků", +verb:"mít"},set:{unit:"prvků",verb:"mít"}};function t(t){return e[t]??null} +const n={regex:"regulární výraz",email:"e-mailová adresa",url:"URL", +emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid", +guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"datum a čas ve formátu ISO",date:"datum ve formátu ISO", +time:"čas ve formátu ISO",duration:"doba trvání ISO",ipv4:"IPv4 adresa", +ipv6:"IPv6 adresa",cidrv4:"rozsah IPv4",cidrv6:"rozsah IPv6", +base64:"řetězec zakódovaný ve formátu base64", +base64url:"řetězec zakódovaný ve formátu base64url", +json_string:"řetězec ve formátu JSON",e164:"číslo E.164",jwt:"JWT", +template_literal:"vstup"},r={nan:"NaN",number:"číslo",string:"řetězec", +function:"funkce",array:"pole"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Neplatný vstup: očekáváno instanceof ${e.expected}, obdrženo ${a}`:`Neplatný vstup: očekáváno ${t}, obdrženo ${a}` +}case"invalid_value": +return 1===e.values.length?`Neplatný vstup: očekáváno ${$(e.values[0])}`:`Neplatná možnost: očekávána jedna z hodnot ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Hodnota je příliš velká: ${e.origin??"hodnota"} musí mít ${n}${e.maximum.toString()} ${r.unit??"prvků"}`:`Hodnota je příliš velká: ${e.origin??"hodnota"} musí být ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Hodnota je příliš malá: ${e.origin??"hodnota"} musí mít ${n}${e.minimum.toString()} ${r.unit??"prvků"}`:`Hodnota je příliš malá: ${e.origin??"hodnota"} musí být ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Neplatný řetězec: musí začínat na "${t.prefix}"`:"ends_with"===t.format?`Neplatný řetězec: musí končit na "${t.suffix}"`:"includes"===t.format?`Neplatný řetězec: musí obsahovat "${t.includes}"`:"regex"===t.format?`Neplatný řetězec: musí odpovídat vzoru ${t.pattern}`:`Neplatný formát ${n[t.format]??e.format}` +}case"not_multiple_of":return`Neplatné číslo: musí být násobkem ${e.divisor}` +;case"unrecognized_keys":return`Neznámé klíče: ${l(e.keys,", ")}` +;case"invalid_key":return`Neplatný klíč v ${e.origin}`;case"invalid_union": +default:return"Neplatný vstup";case"invalid_element": +return`Neplatná hodnota v ${e.origin}`}}};const Yr=()=>{const e={string:{ +unit:"tegn",verb:"havde"},file:{unit:"bytes",verb:"havde"},array:{ +unit:"elementer",verb:"indeholdt"},set:{unit:"elementer",verb:"indeholdt"}} +;function t(t){return e[t]??null}const n={regex:"input",email:"e-mailadresse", +url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"ISO dato- og klokkeslæt",date:"ISO-dato", +time:"ISO-klokkeslæt",duration:"ISO-varighed",ipv4:"IPv4-område", +ipv6:"IPv6-område",cidrv4:"IPv4-spektrum",cidrv6:"IPv6-spektrum", +base64:"base64-kodet streng",base64url:"base64url-kodet streng", +json_string:"JSON-streng",e164:"E.164-nummer",jwt:"JWT",template_literal:"input" +},r={nan:"NaN",string:"streng",number:"tal",boolean:"boolean",array:"liste", +object:"objekt",set:"sæt",file:"fil"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Ugyldigt input: forventede instanceof ${e.expected}, fik ${a}`:`Ugyldigt input: forventede ${t}, fik ${a}` +}case"invalid_value": +return 1===e.values.length?`Ugyldig værdi: forventede ${$(e.values[0])}`:`Ugyldigt valg: forventede en af følgende ${l(e.values,"|")}` +;case"too_big":{ +const n=e.inclusive?"<=":"<",a=t(e.origin),o=r[e.origin]??e.origin +;return a?`For stor: forventede ${o??"value"} ${a.verb} ${n} ${e.maximum.toString()} ${a.unit??"elementer"}`:`For stor: forventede ${o??"value"} havde ${n} ${e.maximum.toString()}` +}case"too_small":{ +const n=e.inclusive?">=":">",a=t(e.origin),o=r[e.origin]??e.origin +;return a?`For lille: forventede ${o} ${a.verb} ${n} ${e.minimum.toString()} ${a.unit}`:`For lille: forventede ${o} havde ${n} ${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Ugyldig streng: skal starte med "${t.prefix}"`:"ends_with"===t.format?`Ugyldig streng: skal ende med "${t.suffix}"`:"includes"===t.format?`Ugyldig streng: skal indeholde "${t.includes}"`:"regex"===t.format?`Ugyldig streng: skal matche mønsteret ${t.pattern}`:`Ugyldig ${n[t.format]??e.format}` +}case"not_multiple_of":return`Ugyldigt tal: skal være deleligt med ${e.divisor}` +;case"unrecognized_keys": +return`${e.keys.length>1?"Ukendte nøgler":"Ukendt nøgle"}: ${l(e.keys,", ")}` +;case"invalid_key":return`Ugyldig nøgle i ${e.origin}`;case"invalid_union": +return"Ugyldigt input: matcher ingen af de tilladte typer" +;case"invalid_element":return`Ugyldig værdi i ${e.origin}`;default: +return"Ugyldigt input"}}};const Kr=()=>{const e={string:{unit:"Zeichen", +verb:"zu haben"},file:{unit:"Bytes",verb:"zu haben"},array:{unit:"Elemente", +verb:"zu haben"},set:{unit:"Elemente",verb:"zu haben"}};function t(t){ +return e[t]??null}const n={regex:"Eingabe",email:"E-Mail-Adresse",url:"URL", +emoji:"Emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid", +guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"ISO-Datum und -Uhrzeit",date:"ISO-Datum",time:"ISO-Uhrzeit", +duration:"ISO-Dauer",ipv4:"IPv4-Adresse",ipv6:"IPv6-Adresse", +cidrv4:"IPv4-Bereich",cidrv6:"IPv6-Bereich",base64:"Base64-codierter String", +base64url:"Base64-URL-codierter String",json_string:"JSON-String", +e164:"E.164-Nummer",jwt:"JWT",template_literal:"Eingabe"},r={nan:"NaN", +number:"Zahl",array:"Array"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Ungültige Eingabe: erwartet instanceof ${e.expected}, erhalten ${a}`:`Ungültige Eingabe: erwartet ${t}, erhalten ${a}` +}case"invalid_value": +return 1===e.values.length?`Ungültige Eingabe: erwartet ${$(e.values[0])}`:`Ungültige Option: erwartet eine von ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Zu groß: erwartet, dass ${e.origin??"Wert"} ${n}${e.maximum.toString()} ${r.unit??"Elemente"} hat`:`Zu groß: erwartet, dass ${e.origin??"Wert"} ${n}${e.maximum.toString()} ist` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Zu klein: erwartet, dass ${e.origin} ${n}${e.minimum.toString()} ${r.unit} hat`:`Zu klein: erwartet, dass ${e.origin} ${n}${e.minimum.toString()} ist` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Ungültiger String: muss mit "${t.prefix}" beginnen`:"ends_with"===t.format?`Ungültiger String: muss mit "${t.suffix}" enden`:"includes"===t.format?`Ungültiger String: muss "${t.includes}" enthalten`:"regex"===t.format?`Ungültiger String: muss dem Muster ${t.pattern} entsprechen`:`Ungültig: ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Ungültige Zahl: muss ein Vielfaches von ${e.divisor} sein` +;case"unrecognized_keys": +return`${e.keys.length>1?"Unbekannte Schlüssel":"Unbekannter Schlüssel"}: ${l(e.keys,", ")}` +;case"invalid_key":return`Ungültiger Schlüssel in ${e.origin}` +;case"invalid_union":default:return"Ungültige Eingabe";case"invalid_element": +return`Ungültiger Wert in ${e.origin}`}}};const Jr=()=>{const e={string:{ +unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{ +unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{ +unit:"entries",verb:"to have"}};function t(t){return e[t]??null}const n={ +regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID", +uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid", +cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime", +date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address", +ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range", +base64:"base64-encoded string",base64url:"base64url-encoded string", +json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input" +},r={nan:"NaN"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input) +;return`Invalid input: expected ${t}, received ${r[n]??n}`}case"invalid_value": +return 1===e.values.length?`Invalid input: expected ${$(e.values[0])}`:`Invalid option: expected one of ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Too big: expected ${e.origin??"value"} to have ${n}${e.maximum.toString()} ${r.unit??"elements"}`:`Too big: expected ${e.origin??"value"} to be ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Too small: expected ${e.origin} to have ${n}${e.minimum.toString()} ${r.unit}`:`Too small: expected ${e.origin} to be ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Invalid string: must start with "${t.prefix}"`:"ends_with"===t.format?`Invalid string: must end with "${t.suffix}"`:"includes"===t.format?`Invalid string: must include "${t.includes}"`:"regex"===t.format?`Invalid string: must match pattern ${t.pattern}`:`Invalid ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Invalid number: must be a multiple of ${e.divisor}` +;case"unrecognized_keys": +return`Unrecognized key${e.keys.length>1?"s":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Invalid key in ${e.origin}`;case"invalid_union": +default:return"Invalid input";case"invalid_element": +return`Invalid value in ${e.origin}`}}};function ea(){return{localeError:Jr()}} +const ta=()=>{const e={string:{unit:"karaktrojn",verb:"havi"},file:{ +unit:"bajtojn",verb:"havi"},array:{unit:"elementojn",verb:"havi"},set:{ +unit:"elementojn",verb:"havi"}};function t(t){return e[t]??null}const n={ +regex:"enigo",email:"retadreso",url:"URL",emoji:"emoĝio",uuid:"UUID", +uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid", +cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO-datotempo", +date:"ISO-dato",time:"ISO-tempo",duration:"ISO-daŭro",ipv4:"IPv4-adreso", +ipv6:"IPv6-adreso",cidrv4:"IPv4-rango",cidrv6:"IPv6-rango", +base64:"64-ume kodita karaktraro",base64url:"URL-64-ume kodita karaktraro", +json_string:"JSON-karaktraro",e164:"E.164-nombro",jwt:"JWT", +template_literal:"enigo"},r={nan:"NaN",number:"nombro",array:"tabelo", +null:"senvalora"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Nevalida enigo: atendiĝis instanceof ${e.expected}, riceviĝis ${a}`:`Nevalida enigo: atendiĝis ${t}, riceviĝis ${a}` +}case"invalid_value": +return 1===e.values.length?`Nevalida enigo: atendiĝis ${$(e.values[0])}`:`Nevalida opcio: atendiĝis unu el ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Tro granda: atendiĝis ke ${e.origin??"valoro"} havu ${n}${e.maximum.toString()} ${r.unit??"elementojn"}`:`Tro granda: atendiĝis ke ${e.origin??"valoro"} havu ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Tro malgranda: atendiĝis ke ${e.origin} havu ${n}${e.minimum.toString()} ${r.unit}`:`Tro malgranda: atendiĝis ke ${e.origin} estu ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Nevalida karaktraro: devas komenciĝi per "${t.prefix}"`:"ends_with"===t.format?`Nevalida karaktraro: devas finiĝi per "${t.suffix}"`:"includes"===t.format?`Nevalida karaktraro: devas inkluzivi "${t.includes}"`:"regex"===t.format?`Nevalida karaktraro: devas kongrui kun la modelo ${t.pattern}`:`Nevalida ${n[t.format]??e.format}` +}case"not_multiple_of":return`Nevalida nombro: devas esti oblo de ${e.divisor}` +;case"unrecognized_keys": +return`Nekonata${e.keys.length>1?"j":""} ŝlosilo${e.keys.length>1?"j":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Nevalida ŝlosilo en ${e.origin}`;case"invalid_union": +default:return"Nevalida enigo";case"invalid_element": +return`Nevalida valoro en ${e.origin}`}}};const na=()=>{const e={string:{ +unit:"caracteres",verb:"tener"},file:{unit:"bytes",verb:"tener"},array:{ +unit:"elementos",verb:"tener"},set:{unit:"elementos",verb:"tener"}} +;function t(t){return e[t]??null}const n={regex:"entrada", +email:"dirección de correo electrónico",url:"URL",emoji:"emoji",uuid:"UUID", +uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid", +cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"fecha y hora ISO", +date:"fecha ISO",time:"hora ISO",duration:"duración ISO",ipv4:"dirección IPv4", +ipv6:"dirección IPv6",cidrv4:"rango IPv4",cidrv6:"rango IPv6", +base64:"cadena codificada en base64",base64url:"URL codificada en base64", +json_string:"cadena JSON",e164:"número E.164",jwt:"JWT", +template_literal:"entrada"},r={nan:"NaN",string:"texto",number:"número", +boolean:"booleano",array:"arreglo",object:"objeto",set:"conjunto", +file:"archivo",date:"fecha",bigint:"número grande",symbol:"símbolo", +undefined:"indefinido",null:"nulo",function:"función",map:"mapa", +record:"registro",tuple:"tupla",enum:"enumeración",union:"unión", +literal:"literal",promise:"promesa",void:"vacío",never:"nunca", +unknown:"desconocido",any:"cualquiera"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Entrada inválida: se esperaba instanceof ${e.expected}, recibido ${a}`:`Entrada inválida: se esperaba ${t}, recibido ${a}` +}case"invalid_value": +return 1===e.values.length?`Entrada inválida: se esperaba ${$(e.values[0])}`:`Opción inválida: se esperaba una de ${l(e.values,"|")}` +;case"too_big":{ +const n=e.inclusive?"<=":"<",a=t(e.origin),o=r[e.origin]??e.origin +;return a?`Demasiado grande: se esperaba que ${o??"valor"} tuviera ${n}${e.maximum.toString()} ${a.unit??"elementos"}`:`Demasiado grande: se esperaba que ${o??"valor"} fuera ${n}${e.maximum.toString()}` +}case"too_small":{ +const n=e.inclusive?">=":">",a=t(e.origin),o=r[e.origin]??e.origin +;return a?`Demasiado pequeño: se esperaba que ${o} tuviera ${n}${e.minimum.toString()} ${a.unit}`:`Demasiado pequeño: se esperaba que ${o} fuera ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Cadena inválida: debe comenzar con "${t.prefix}"`:"ends_with"===t.format?`Cadena inválida: debe terminar en "${t.suffix}"`:"includes"===t.format?`Cadena inválida: debe incluir "${t.includes}"`:"regex"===t.format?`Cadena inválida: debe coincidir con el patrón ${t.pattern}`:`Inválido ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Número inválido: debe ser múltiplo de ${e.divisor}` +;case"unrecognized_keys": +return`Llave${e.keys.length>1?"s":""} desconocida${e.keys.length>1?"s":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Llave inválida en ${r[e.origin]??e.origin}` +;case"invalid_union":default:return"Entrada inválida";case"invalid_element": +return`Valor inválido en ${r[e.origin]??e.origin}`}}};const ra=()=>{const e={ +string:{unit:"کاراکتر",verb:"داشته باشد"},file:{unit:"بایت",verb:"داشته باشد"}, +array:{unit:"آیتم",verb:"داشته باشد"},set:{unit:"آیتم",verb:"داشته باشد"}} +;function t(t){return e[t]??null}const n={regex:"ورودی",email:"آدرس ایمیل", +url:"URL",emoji:"ایموجی",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"تاریخ و زمان ایزو",date:"تاریخ ایزو",time:"زمان ایزو", +duration:"مدت زمان ایزو",ipv4:"IPv4 آدرس",ipv6:"IPv6 آدرس",cidrv4:"IPv4 دامنه", +cidrv6:"IPv6 دامنه",base64:"base64-encoded رشته", +base64url:"base64url-encoded رشته",json_string:"JSON رشته",e164:"E.164 عدد", +jwt:"JWT",template_literal:"ورودی"},r={nan:"NaN",number:"عدد",array:"آرایه"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`ورودی نامعتبر: می‌بایست instanceof ${e.expected} می‌بود، ${a} دریافت شد`:`ورودی نامعتبر: می‌بایست ${t} می‌بود، ${a} دریافت شد` +}case"invalid_value": +return 1===e.values.length?`ورودی نامعتبر: می‌بایست ${$(e.values[0])} می‌بود`:`گزینه نامعتبر: می‌بایست یکی از ${l(e.values,"|")} می‌بود` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`خیلی بزرگ: ${e.origin??"مقدار"} باید ${n}${e.maximum.toString()} ${r.unit??"عنصر"} باشد`:`خیلی بزرگ: ${e.origin??"مقدار"} باید ${n}${e.maximum.toString()} باشد` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`خیلی کوچک: ${e.origin} باید ${n}${e.minimum.toString()} ${r.unit} باشد`:`خیلی کوچک: ${e.origin} باید ${n}${e.minimum.toString()} باشد` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`رشته نامعتبر: باید با "${t.prefix}" شروع شود`:"ends_with"===t.format?`رشته نامعتبر: باید با "${t.suffix}" تمام شود`:"includes"===t.format?`رشته نامعتبر: باید شامل "${t.includes}" باشد`:"regex"===t.format?`رشته نامعتبر: باید با الگوی ${t.pattern} مطابقت داشته باشد`:`${n[t.format]??e.format} نامعتبر` +}case"not_multiple_of":return`عدد نامعتبر: باید مضرب ${e.divisor} باشد` +;case"unrecognized_keys": +return`کلید${e.keys.length>1?"های":""} ناشناس: ${l(e.keys,", ")}` +;case"invalid_key":return`کلید ناشناس در ${e.origin}`;case"invalid_union": +default:return"ورودی نامعتبر";case"invalid_element": +return`مقدار نامعتبر در ${e.origin}`}}};const aa=()=>{const e={string:{ +unit:"merkkiä",subject:"merkkijonon"},file:{unit:"tavua",subject:"tiedoston"}, +array:{unit:"alkiota",subject:"listan"},set:{unit:"alkiota",subject:"joukon"}, +number:{unit:"",subject:"luvun"},bigint:{unit:"",subject:"suuren kokonaisluvun" +},int:{unit:"",subject:"kokonaisluvun"},date:{unit:"",subject:"päivämäärän"}} +;function t(t){return e[t]??null}const n={regex:"säännöllinen lauseke", +email:"sähköpostiosoite",url:"URL-osoite",emoji:"emoji",uuid:"UUID", +uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid", +cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO-aikaleima", +date:"ISO-päivämäärä",time:"ISO-aika",duration:"ISO-kesto",ipv4:"IPv4-osoite", +ipv6:"IPv6-osoite",cidrv4:"IPv4-alue",cidrv6:"IPv6-alue", +base64:"base64-koodattu merkkijono",base64url:"base64url-koodattu merkkijono", +json_string:"JSON-merkkijono",e164:"E.164-luku",jwt:"JWT", +template_literal:"templaattimerkkijono"},r={nan:"NaN"};return e=>{ +switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Virheellinen tyyppi: odotettiin instanceof ${e.expected}, oli ${a}`:`Virheellinen tyyppi: odotettiin ${t}, oli ${a}` +}case"invalid_value": +return 1===e.values.length?`Virheellinen syöte: täytyy olla ${$(e.values[0])}`:`Virheellinen valinta: täytyy olla yksi seuraavista: ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Liian suuri: ${r.subject} täytyy olla ${n}${e.maximum.toString()} ${r.unit}`.trim():`Liian suuri: arvon täytyy olla ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Liian pieni: ${r.subject} täytyy olla ${n}${e.minimum.toString()} ${r.unit}`.trim():`Liian pieni: arvon täytyy olla ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Virheellinen syöte: täytyy alkaa "${t.prefix}"`:"ends_with"===t.format?`Virheellinen syöte: täytyy loppua "${t.suffix}"`:"includes"===t.format?`Virheellinen syöte: täytyy sisältää "${t.includes}"`:"regex"===t.format?`Virheellinen syöte: täytyy vastata säännöllistä lauseketta ${t.pattern}`:`Virheellinen ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Virheellinen luku: täytyy olla luvun ${e.divisor} monikerta` +;case"unrecognized_keys": +return`${e.keys.length>1?"Tuntemattomat avaimet":"Tuntematon avain"}: ${l(e.keys,", ")}` +;case"invalid_key":return"Virheellinen avain tietueessa";case"invalid_union": +return"Virheellinen unioni";case"invalid_element": +return"Virheellinen arvo joukossa";default:return"Virheellinen syöte"}}} +;const oa=()=>{const e={string:{unit:"caractères",verb:"avoir"},file:{ +unit:"octets",verb:"avoir"},array:{unit:"éléments",verb:"avoir"},set:{ +unit:"éléments",verb:"avoir"}};function t(t){return e[t]??null}const n={ +regex:"entrée",email:"adresse e-mail",url:"URL",emoji:"emoji",uuid:"UUID", +uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid", +cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"date et heure ISO", +date:"date ISO",time:"heure ISO",duration:"durée ISO",ipv4:"adresse IPv4", +ipv6:"adresse IPv6",cidrv4:"plage IPv4",cidrv6:"plage IPv6", +base64:"chaîne encodée en base64",base64url:"chaîne encodée en base64url", +json_string:"chaîne JSON",e164:"numéro E.164",jwt:"JWT", +template_literal:"entrée"},r={nan:"NaN",number:"nombre",array:"tableau"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Entrée invalide : instanceof ${e.expected} attendu, ${a} reçu`:`Entrée invalide : ${t} attendu, ${a} reçu` +}case"invalid_value": +return 1===e.values.length?`Entrée invalide : ${$(e.values[0])} attendu`:`Option invalide : une valeur parmi ${l(e.values,"|")} attendue` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Trop grand : ${e.origin??"valeur"} doit ${r.verb} ${n}${e.maximum.toString()} ${r.unit??"élément(s)"}`:`Trop grand : ${e.origin??"valeur"} doit être ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Trop petit : ${e.origin} doit ${r.verb} ${n}${e.minimum.toString()} ${r.unit}`:`Trop petit : ${e.origin} doit être ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Chaîne invalide : doit commencer par "${t.prefix}"`:"ends_with"===t.format?`Chaîne invalide : doit se terminer par "${t.suffix}"`:"includes"===t.format?`Chaîne invalide : doit inclure "${t.includes}"`:"regex"===t.format?`Chaîne invalide : doit correspondre au modèle ${t.pattern}`:`${n[t.format]??e.format} invalide` +}case"not_multiple_of": +return`Nombre invalide : doit être un multiple de ${e.divisor}` +;case"unrecognized_keys": +return`Clé${e.keys.length>1?"s":""} non reconnue${e.keys.length>1?"s":""} : ${l(e.keys,", ")}` +;case"invalid_key":return`Clé invalide dans ${e.origin}`;case"invalid_union": +default:return"Entrée invalide";case"invalid_element": +return`Valeur invalide dans ${e.origin}`}}};const ia=()=>{const e={string:{ +unit:"caractères",verb:"avoir"},file:{unit:"octets",verb:"avoir"},array:{ +unit:"éléments",verb:"avoir"},set:{unit:"éléments",verb:"avoir"}};function t(t){ +return e[t]??null}const n={regex:"entrée",email:"adresse courriel",url:"URL", +emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid", +guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"date-heure ISO",date:"date ISO",time:"heure ISO",duration:"durée ISO", +ipv4:"adresse IPv4",ipv6:"adresse IPv6",cidrv4:"plage IPv4",cidrv6:"plage IPv6", +base64:"chaîne encodée en base64",base64url:"chaîne encodée en base64url", +json_string:"chaîne JSON",e164:"numéro E.164",jwt:"JWT", +template_literal:"entrée"},r={nan:"NaN"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Entrée invalide : attendu instanceof ${e.expected}, reçu ${a}`:`Entrée invalide : attendu ${t}, reçu ${a}` +}case"invalid_value": +return 1===e.values.length?`Entrée invalide : attendu ${$(e.values[0])}`:`Option invalide : attendu l'une des valeurs suivantes ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"≤":"<",r=t(e.origin) +;return r?`Trop grand : attendu que ${e.origin??"la valeur"} ait ${n}${e.maximum.toString()} ${r.unit}`:`Trop grand : attendu que ${e.origin??"la valeur"} soit ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?"≥":">",r=t(e.origin) +;return r?`Trop petit : attendu que ${e.origin} ait ${n}${e.minimum.toString()} ${r.unit}`:`Trop petit : attendu que ${e.origin} soit ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Chaîne invalide : doit commencer par "${t.prefix}"`:"ends_with"===t.format?`Chaîne invalide : doit se terminer par "${t.suffix}"`:"includes"===t.format?`Chaîne invalide : doit inclure "${t.includes}"`:"regex"===t.format?`Chaîne invalide : doit correspondre au motif ${t.pattern}`:`${n[t.format]??e.format} invalide` +}case"not_multiple_of": +return`Nombre invalide : doit être un multiple de ${e.divisor}` +;case"unrecognized_keys": +return`Clé${e.keys.length>1?"s":""} non reconnue${e.keys.length>1?"s":""} : ${l(e.keys,", ")}` +;case"invalid_key":return`Clé invalide dans ${e.origin}`;case"invalid_union": +default:return"Entrée invalide";case"invalid_element": +return`Valeur invalide dans ${e.origin}`}}};const sa=()=>{const e={string:{ +label:"מחרוזת",gender:"f"},number:{label:"מספר",gender:"m"},boolean:{ +label:"ערך בוליאני",gender:"m"},bigint:{label:"BigInt",gender:"m"},date:{ +label:"תאריך",gender:"m"},array:{label:"מערך",gender:"m"},object:{ +label:"אובייקט",gender:"m"},null:{label:"ערך ריק (null)",gender:"m"},undefined:{ +label:"ערך לא מוגדר (undefined)",gender:"m"},symbol:{label:"סימבול (Symbol)", +gender:"m"},function:{label:"פונקציה",gender:"f"},map:{label:"מפה (Map)", +gender:"f"},set:{label:"קבוצה (Set)",gender:"f"},file:{label:"קובץ",gender:"m"}, +promise:{label:"Promise",gender:"m"},NaN:{label:"NaN",gender:"m"},unknown:{ +label:"ערך לא ידוע",gender:"m"},value:{label:"ערך",gender:"m"}},t={string:{ +unit:"תווים",shortLabel:"קצר",longLabel:"ארוך"},file:{unit:"בייטים", +shortLabel:"קטן",longLabel:"גדול"},array:{unit:"פריטים",shortLabel:"קטן", +longLabel:"גדול"},set:{unit:"פריטים",shortLabel:"קטן",longLabel:"גדול"},number:{ +unit:"",shortLabel:"קטן",longLabel:"גדול"}},n=t=>t?e[t]:void 0,r=t=>{ +const r=n(t);return r?r.label:t??e.unknown.label},a=e=>`ה${r(e)}`,o=e=>{ +const t=n(e);return"f"===(t?.gender??"m")?"צריכה להיות":"צריך להיות" +},i=e=>e?t[e]??null:null,s={regex:{label:"קלט",gender:"m"},email:{ +label:"כתובת אימייל",gender:"f"},url:{label:"כתובת רשת",gender:"f"},emoji:{ +label:"אימוג'י",gender:"m"},uuid:{label:"UUID",gender:"m"},nanoid:{ +label:"nanoid",gender:"m"},guid:{label:"GUID",gender:"m"},cuid:{label:"cuid", +gender:"m"},cuid2:{label:"cuid2",gender:"m"},ulid:{label:"ULID",gender:"m"}, +xid:{label:"XID",gender:"m"},ksuid:{label:"KSUID",gender:"m"},datetime:{ +label:"תאריך וזמן ISO",gender:"m"},date:{label:"תאריך ISO",gender:"m"},time:{ +label:"זמן ISO",gender:"m"},duration:{label:"משך זמן ISO",gender:"m"},ipv4:{ +label:"כתובת IPv4",gender:"f"},ipv6:{label:"כתובת IPv6",gender:"f"},cidrv4:{ +label:"טווח IPv4",gender:"m"},cidrv6:{label:"טווח IPv6",gender:"m"},base64:{ +label:"מחרוזת בבסיס 64",gender:"f"},base64url:{ +label:"מחרוזת בבסיס 64 לכתובות רשת",gender:"f"},json_string:{ +label:"מחרוזת JSON",gender:"f"},e164:{label:"מספר E.164",gender:"m"},jwt:{ +label:"JWT",gender:"m"},ends_with:{label:"קלט",gender:"m"},includes:{ +label:"קלט",gender:"m"},lowercase:{label:"קלט",gender:"m"},starts_with:{ +label:"קלט",gender:"m"},uppercase:{label:"קלט",gender:"m"}},c={nan:"NaN"} +;return t=>{switch(t.code){case"invalid_type":{ +const n=t.expected,a=c[n??""]??r(n),o=q(t.input),i=c[o]??e[o]?.label??o +;return/^[A-Z]/.test(t.expected)?`קלט לא תקין: צריך להיות instanceof ${t.expected}, התקבל ${i}`:`קלט לא תקין: צריך להיות ${a}, התקבל ${i}` +}case"invalid_value":{ +if(1===t.values.length)return`ערך לא תקין: הערך חייב להיות ${$(t.values[0])}` +;const e=t.values.map((e=>$(e))) +;if(2===t.values.length)return`ערך לא תקין: האפשרויות המתאימות הן ${e[0]} או ${e[1]}` +;const n=e[e.length-1] +;return`ערך לא תקין: האפשרויות המתאימות הן ${e.slice(0,-1).join(", ")} או ${n}`} +case"too_big":{const e=i(t.origin),n=a(t.origin??"value") +;if("string"===t.origin)return`${e?.longLabel??"ארוך"} מדי: ${n} צריכה להכיל ${t.maximum.toString()} ${e?.unit??""} ${t.inclusive?"או פחות":"לכל היותר"}`.trim() +;if("number"===t.origin){ +return`גדול מדי: ${n} צריך להיות ${t.inclusive?`קטן או שווה ל-${t.maximum}`:`קטן מ-${t.maximum}`}` +}if("array"===t.origin||"set"===t.origin){ +return`גדול מדי: ${n} ${"set"===t.origin?"צריכה":"צריך"} להכיל ${t.inclusive?`${t.maximum} ${e?.unit??""} או פחות`:`פחות מ-${t.maximum} ${e?.unit??""}`}`.trim() +}const r=t.inclusive?"<=":"<",s=o(t.origin??"value") +;return e?.unit?`${e.longLabel} מדי: ${n} ${s} ${r}${t.maximum.toString()} ${e.unit}`:`${e?.longLabel??"גדול"} מדי: ${n} ${s} ${r}${t.maximum.toString()}` +}case"too_small":{const e=i(t.origin),n=a(t.origin??"value") +;if("string"===t.origin)return`${e?.shortLabel??"קצר"} מדי: ${n} צריכה להכיל ${t.minimum.toString()} ${e?.unit??""} ${t.inclusive?"או יותר":"לפחות"}`.trim() +;if("number"===t.origin){ +return`קטן מדי: ${n} צריך להיות ${t.inclusive?`גדול או שווה ל-${t.minimum}`:`גדול מ-${t.minimum}`}` +}if("array"===t.origin||"set"===t.origin){ +const r="set"===t.origin?"צריכה":"צריך";if(1===t.minimum&&t.inclusive){ +return`קטן מדי: ${n} ${r} להכיל ${t.origin,"לפחות פריט אחד"}`} +return`קטן מדי: ${n} ${r} להכיל ${t.inclusive?`${t.minimum} ${e?.unit??""} או יותר`:`יותר מ-${t.minimum} ${e?.unit??""}`}`.trim() +}const r=t.inclusive?">=":">",s=o(t.origin??"value") +;return e?.unit?`${e.shortLabel} מדי: ${n} ${s} ${r}${t.minimum.toString()} ${e.unit}`:`${e?.shortLabel??"קטן"} מדי: ${n} ${s} ${r}${t.minimum.toString()}` +}case"invalid_format":{const e=t +;if("starts_with"===e.format)return`המחרוזת חייבת להתחיל ב "${e.prefix}"` +;if("ends_with"===e.format)return`המחרוזת חייבת להסתיים ב "${e.suffix}"` +;if("includes"===e.format)return`המחרוזת חייבת לכלול "${e.includes}"` +;if("regex"===e.format)return`המחרוזת חייבת להתאים לתבנית ${e.pattern}` +;const n=s[e.format] +;return`${n?.label??e.format} לא ${"f"===(n?.gender??"m")?"תקינה":"תקין"}`} +case"not_multiple_of":return`מספר לא תקין: חייב להיות מכפלה של ${t.divisor}` +;case"unrecognized_keys": +return`מפתח${t.keys.length>1?"ות":""} לא מזוה${t.keys.length>1?"ים":"ה"}: ${l(t.keys,", ")}` +;case"invalid_key":return"שדה לא תקין באובייקט";case"invalid_union":default: +return"קלט לא תקין";case"invalid_element": +return`ערך לא תקין ב${a(t.origin??"array")}`}}};const la=()=>{const e={string:{ +unit:"karakter",verb:"legyen"},file:{unit:"byte",verb:"legyen"},array:{ +unit:"elem",verb:"legyen"},set:{unit:"elem",verb:"legyen"}};function t(t){ +return e[t]??null}const n={regex:"bemenet",email:"email cím",url:"URL", +emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid", +guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"ISO időbélyeg",date:"ISO dátum",time:"ISO idő", +duration:"ISO időintervallum",ipv4:"IPv4 cím",ipv6:"IPv6 cím", +cidrv4:"IPv4 tartomány",cidrv6:"IPv6 tartomány",base64:"base64-kódolt string", +base64url:"base64url-kódolt string",json_string:"JSON string",e164:"E.164 szám", +jwt:"JWT",template_literal:"bemenet"},r={nan:"NaN",number:"szám",array:"tömb"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Érvénytelen bemenet: a várt érték instanceof ${e.expected}, a kapott érték ${a}`:`Érvénytelen bemenet: a várt érték ${t}, a kapott érték ${a}` +}case"invalid_value": +return 1===e.values.length?`Érvénytelen bemenet: a várt érték ${$(e.values[0])}`:`Érvénytelen opció: valamelyik érték várt ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Túl nagy: ${e.origin??"érték"} mérete túl nagy ${n}${e.maximum.toString()} ${r.unit??"elem"}`:`Túl nagy: a bemeneti érték ${e.origin??"érték"} túl nagy: ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Túl kicsi: a bemeneti érték ${e.origin} mérete túl kicsi ${n}${e.minimum.toString()} ${r.unit}`:`Túl kicsi: a bemeneti érték ${e.origin} túl kicsi ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Érvénytelen string: "${t.prefix}" értékkel kell kezdődnie`:"ends_with"===t.format?`Érvénytelen string: "${t.suffix}" értékkel kell végződnie`:"includes"===t.format?`Érvénytelen string: "${t.includes}" értéket kell tartalmaznia`:"regex"===t.format?`Érvénytelen string: ${t.pattern} mintának kell megfelelnie`:`Érvénytelen ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Érvénytelen szám: ${e.divisor} többszörösének kell lennie` +;case"unrecognized_keys": +return`Ismeretlen kulcs${e.keys.length>1?"s":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Érvénytelen kulcs ${e.origin}`;case"invalid_union": +default:return"Érvénytelen bemenet";case"invalid_element": +return`Érvénytelen érték: ${e.origin}`}}};function ca(e,t,n){ +return 1===Math.abs(e)?t:n}function ua(e){if(!e)return"";const t=e[e.length-1] +;return e+(["ա","ե","ը","ի","ո","ու","օ"].includes(t)?"ն":"ը")}const da=()=>{ +const e={string:{unit:{one:"նշան",many:"նշաններ"},verb:"ունենալ"},file:{unit:{ +one:"բայթ",many:"բայթեր"},verb:"ունենալ"},array:{unit:{one:"տարր",many:"տարրեր" +},verb:"ունենալ"},set:{unit:{one:"տարր",many:"տարրեր"},verb:"ունենալ"}} +;function t(t){return e[t]??null}const n={regex:"մուտք",email:"էլ. հասցե", +url:"URL",emoji:"էմոջի",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"ISO ամսաթիվ և ժամ",date:"ISO ամսաթիվ",time:"ISO ժամ", +duration:"ISO տևողություն",ipv4:"IPv4 հասցե",ipv6:"IPv6 հասցե", +cidrv4:"IPv4 միջակայք",cidrv6:"IPv6 միջակայք",base64:"base64 ձևաչափով տող", +base64url:"base64url ձևաչափով տող",json_string:"JSON տող",e164:"E.164 համար", +jwt:"JWT",template_literal:"մուտք"},r={nan:"NaN",number:"թիվ",array:"զանգված"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Սխալ մուտքագրում․ սպասվում էր instanceof ${e.expected}, ստացվել է ${a}`:`Սխալ մուտքագրում․ սպասվում էր ${t}, ստացվել է ${a}` +}case"invalid_value": +return 1===e.values.length?`Սխալ մուտքագրում․ սպասվում էր ${$(e.values[1])}`:`Սխալ տարբերակ․ սպասվում էր հետևյալներից մեկը՝ ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin);if(r){ +const t=ca(Number(e.maximum),r.unit.one,r.unit.many) +;return`Չափազանց մեծ արժեք․ սպասվում է, որ ${ua(e.origin??"արժեք")} կունենա ${n}${e.maximum.toString()} ${t}` +} +return`Չափազանց մեծ արժեք․ սպասվում է, որ ${ua(e.origin??"արժեք")} լինի ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin);if(r){ +const t=ca(Number(e.minimum),r.unit.one,r.unit.many) +;return`Չափազանց փոքր արժեք․ սպասվում է, որ ${ua(e.origin)} կունենա ${n}${e.minimum.toString()} ${t}` +} +return`Չափազանց փոքր արժեք․ սպասվում է, որ ${ua(e.origin)} լինի ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Սխալ տող․ պետք է սկսվի "${t.prefix}"-ով`:"ends_with"===t.format?`Սխալ տող․ պետք է ավարտվի "${t.suffix}"-ով`:"includes"===t.format?`Սխալ տող․ պետք է պարունակի "${t.includes}"`:"regex"===t.format?`Սխալ տող․ պետք է համապատասխանի ${t.pattern} ձևաչափին`:`Սխալ ${n[t.format]??e.format}` +}case"not_multiple_of":return`Սխալ թիվ․ պետք է բազմապատիկ լինի ${e.divisor}-ի` +;case"unrecognized_keys": +return`Չճանաչված բանալի${e.keys.length>1?"ներ":""}. ${l(e.keys,", ")}` +;case"invalid_key":return`Սխալ բանալի ${ua(e.origin)}-ում`;case"invalid_union": +default:return"Սխալ մուտքագրում";case"invalid_element": +return`Սխալ արժեք ${ua(e.origin)}-ում`}}};const pa=()=>{const e={string:{ +unit:"karakter",verb:"memiliki"},file:{unit:"byte",verb:"memiliki"},array:{ +unit:"item",verb:"memiliki"},set:{unit:"item",verb:"memiliki"}};function t(t){ +return e[t]??null}const n={regex:"input",email:"alamat email",url:"URL", +emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid", +guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"tanggal dan waktu format ISO",date:"tanggal format ISO", +time:"jam format ISO",duration:"durasi format ISO",ipv4:"alamat IPv4", +ipv6:"alamat IPv6",cidrv4:"rentang alamat IPv4",cidrv6:"rentang alamat IPv6", +base64:"string dengan enkode base64",base64url:"string dengan enkode base64url", +json_string:"string JSON",e164:"angka E.164",jwt:"JWT",template_literal:"input" +},r={nan:"NaN"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Input tidak valid: diharapkan instanceof ${e.expected}, diterima ${a}`:`Input tidak valid: diharapkan ${t}, diterima ${a}` +}case"invalid_value": +return 1===e.values.length?`Input tidak valid: diharapkan ${$(e.values[0])}`:`Pilihan tidak valid: diharapkan salah satu dari ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Terlalu besar: diharapkan ${e.origin??"value"} memiliki ${n}${e.maximum.toString()} ${r.unit??"elemen"}`:`Terlalu besar: diharapkan ${e.origin??"value"} menjadi ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Terlalu kecil: diharapkan ${e.origin} memiliki ${n}${e.minimum.toString()} ${r.unit}`:`Terlalu kecil: diharapkan ${e.origin} menjadi ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`String tidak valid: harus dimulai dengan "${t.prefix}"`:"ends_with"===t.format?`String tidak valid: harus berakhir dengan "${t.suffix}"`:"includes"===t.format?`String tidak valid: harus menyertakan "${t.includes}"`:"regex"===t.format?`String tidak valid: harus sesuai pola ${t.pattern}`:`${n[t.format]??e.format} tidak valid` +}case"not_multiple_of": +return`Angka tidak valid: harus kelipatan dari ${e.divisor}` +;case"unrecognized_keys": +return`Kunci tidak dikenali ${e.keys.length>1?"s":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Kunci tidak valid di ${e.origin}`;case"invalid_union": +default:return"Input tidak valid";case"invalid_element": +return`Nilai tidak valid di ${e.origin}`}}};const ha=()=>{const e={string:{ +unit:"stafi",verb:"að hafa"},file:{unit:"bæti",verb:"að hafa"},array:{ +unit:"hluti",verb:"að hafa"},set:{unit:"hluti",verb:"að hafa"}};function t(t){ +return e[t]??null}const n={regex:"gildi",email:"netfang",url:"vefslóð", +emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid", +guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"ISO dagsetning og tími",date:"ISO dagsetning",time:"ISO tími", +duration:"ISO tímalengd",ipv4:"IPv4 address",ipv6:"IPv6 address", +cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded strengur", +base64url:"base64url-encoded strengur",json_string:"JSON strengur", +e164:"E.164 tölugildi",jwt:"JWT",template_literal:"gildi"},r={nan:"NaN", +number:"númer",array:"fylki"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Rangt gildi: Þú slóst inn ${a} þar sem á að vera instanceof ${e.expected}`:`Rangt gildi: Þú slóst inn ${a} þar sem á að vera ${t}` +}case"invalid_value": +return 1===e.values.length?`Rangt gildi: gert ráð fyrir ${$(e.values[0])}`:`Ógilt val: má vera eitt af eftirfarandi ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Of stórt: gert er ráð fyrir að ${e.origin??"gildi"} hafi ${n}${e.maximum.toString()} ${r.unit??"hluti"}`:`Of stórt: gert er ráð fyrir að ${e.origin??"gildi"} sé ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Of lítið: gert er ráð fyrir að ${e.origin} hafi ${n}${e.minimum.toString()} ${r.unit}`:`Of lítið: gert er ráð fyrir að ${e.origin} sé ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Ógildur strengur: verður að byrja á "${t.prefix}"`:"ends_with"===t.format?`Ógildur strengur: verður að enda á "${t.suffix}"`:"includes"===t.format?`Ógildur strengur: verður að innihalda "${t.includes}"`:"regex"===t.format?`Ógildur strengur: verður að fylgja mynstri ${t.pattern}`:`Rangt ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Röng tala: verður að vera margfeldi af ${e.divisor}` +;case"unrecognized_keys": +return`Óþekkt ${e.keys.length>1?"ir lyklar":"ur lykill"}: ${l(e.keys,", ")}` +;case"invalid_key":return`Rangur lykill í ${e.origin}`;case"invalid_union": +default:return"Rangt gildi";case"invalid_element": +return`Rangt gildi í ${e.origin}`}}};const fa=()=>{const e={string:{ +unit:"caratteri",verb:"avere"},file:{unit:"byte",verb:"avere"},array:{ +unit:"elementi",verb:"avere"},set:{unit:"elementi",verb:"avere"}};function t(t){ +return e[t]??null}const n={regex:"input",email:"indirizzo email",url:"URL", +emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid", +guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"data e ora ISO",date:"data ISO",time:"ora ISO",duration:"durata ISO", +ipv4:"indirizzo IPv4",ipv6:"indirizzo IPv6",cidrv4:"intervallo IPv4", +cidrv6:"intervallo IPv6",base64:"stringa codificata in base64", +base64url:"URL codificata in base64",json_string:"stringa JSON", +e164:"numero E.164",jwt:"JWT",template_literal:"input"},r={nan:"NaN", +number:"numero",array:"vettore"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Input non valido: atteso instanceof ${e.expected}, ricevuto ${a}`:`Input non valido: atteso ${t}, ricevuto ${a}` +}case"invalid_value": +return 1===e.values.length?`Input non valido: atteso ${$(e.values[0])}`:`Opzione non valida: atteso uno tra ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Troppo grande: ${e.origin??"valore"} deve avere ${n}${e.maximum.toString()} ${r.unit??"elementi"}`:`Troppo grande: ${e.origin??"valore"} deve essere ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Troppo piccolo: ${e.origin} deve avere ${n}${e.minimum.toString()} ${r.unit}`:`Troppo piccolo: ${e.origin} deve essere ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Stringa non valida: deve iniziare con "${t.prefix}"`:"ends_with"===t.format?`Stringa non valida: deve terminare con "${t.suffix}"`:"includes"===t.format?`Stringa non valida: deve includere "${t.includes}"`:"regex"===t.format?`Stringa non valida: deve corrispondere al pattern ${t.pattern}`:`Invalid ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Numero non valido: deve essere un multiplo di ${e.divisor}` +;case"unrecognized_keys": +return`Chiav${e.keys.length>1?"i":"e"} non riconosciut${e.keys.length>1?"e":"a"}: ${l(e.keys,", ")}` +;case"invalid_key":return`Chiave non valida in ${e.origin}`;case"invalid_union": +default:return"Input non valido";case"invalid_element": +return`Valore non valido in ${e.origin}`}}};const ma=()=>{const e={string:{ +unit:"文字",verb:"である"},file:{unit:"バイト",verb:"である"},array:{unit:"要素",verb:"である"}, +set:{unit:"要素",verb:"である"}};function t(t){return e[t]??null}const n={ +regex:"入力値",email:"メールアドレス",url:"URL",emoji:"絵文字",uuid:"UUID",uuidv4:"UUIDv4", +uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2", +ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO日時",date:"ISO日付",time:"ISO時刻", +duration:"ISO期間",ipv4:"IPv4アドレス",ipv6:"IPv6アドレス",cidrv4:"IPv4範囲", +cidrv6:"IPv6範囲",base64:"base64エンコード文字列",base64url:"base64urlエンコード文字列", +json_string:"JSON文字列",e164:"E.164番号",jwt:"JWT",template_literal:"入力値"},r={ +nan:"NaN",number:"数値",array:"配列"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`無効な入力: instanceof ${e.expected}が期待されましたが、${a}が入力されました`:`無効な入力: ${t}が期待されましたが、${a}が入力されました` +}case"invalid_value": +return 1===e.values.length?`無効な入力: ${$(e.values[0])}が期待されました`:`無効な選択: ${l(e.values,"、")}のいずれかである必要があります` +;case"too_big":{const n=e.inclusive?"以下である":"より小さい",r=t(e.origin) +;return r?`大きすぎる値: ${e.origin??"値"}は${e.maximum.toString()}${r.unit??"要素"}${n}必要があります`:`大きすぎる値: ${e.origin??"値"}は${e.maximum.toString()}${n}必要があります` +}case"too_small":{const n=e.inclusive?"以上である":"より大きい",r=t(e.origin) +;return r?`小さすぎる値: ${e.origin}は${e.minimum.toString()}${r.unit}${n}必要があります`:`小さすぎる値: ${e.origin}は${e.minimum.toString()}${n}必要があります` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`無効な文字列: "${t.prefix}"で始まる必要があります`:"ends_with"===t.format?`無効な文字列: "${t.suffix}"で終わる必要があります`:"includes"===t.format?`無効な文字列: "${t.includes}"を含む必要があります`:"regex"===t.format?`無効な文字列: パターン${t.pattern}に一致する必要があります`:`無効な${n[t.format]??e.format}` +}case"not_multiple_of":return`無効な数値: ${e.divisor}の倍数である必要があります` +;case"unrecognized_keys": +return`認識されていないキー${e.keys.length>1?"群":""}: ${l(e.keys,"、")}`;case"invalid_key": +return`${e.origin}内の無効なキー`;case"invalid_union":default:return"無効な入力" +;case"invalid_element":return`${e.origin}内の無効な値`}}};const ga=()=>{const e={ +string:{unit:"სიმბოლო",verb:"უნდა შეიცავდეს"},file:{unit:"ბაიტი", +verb:"უნდა შეიცავდეს"},array:{unit:"ელემენტი",verb:"უნდა შეიცავდეს"},set:{ +unit:"ელემენტი",verb:"უნდა შეიცავდეს"}};function t(t){return e[t]??null} +const n={regex:"შეყვანა",email:"ელ-ფოსტის მისამართი",url:"URL",emoji:"ემოჯი", +uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID", +cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"თარიღი-დრო",date:"თარიღი",time:"დრო",duration:"ხანგრძლივობა", +ipv4:"IPv4 მისამართი",ipv6:"IPv6 მისამართი",cidrv4:"IPv4 დიაპაზონი", +cidrv6:"IPv6 დიაპაზონი",base64:"base64-კოდირებული სტრინგი", +base64url:"base64url-კოდირებული სტრინგი",json_string:"JSON სტრინგი", +e164:"E.164 ნომერი",jwt:"JWT",template_literal:"შეყვანა"},r={nan:"NaN", +number:"რიცხვი",string:"სტრინგი",boolean:"ბულეანი",function:"ფუნქცია", +array:"მასივი"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`არასწორი შეყვანა: მოსალოდნელი instanceof ${e.expected}, მიღებული ${a}`:`არასწორი შეყვანა: მოსალოდნელი ${t}, მიღებული ${a}` +}case"invalid_value": +return 1===e.values.length?`არასწორი შეყვანა: მოსალოდნელი ${$(e.values[0])}`:`არასწორი ვარიანტი: მოსალოდნელია ერთ-ერთი ${l(e.values,"|")}-დან` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`ზედმეტად დიდი: მოსალოდნელი ${e.origin??"მნიშვნელობა"} ${r.verb} ${n}${e.maximum.toString()} ${r.unit}`:`ზედმეტად დიდი: მოსალოდნელი ${e.origin??"მნიშვნელობა"} იყოს ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`ზედმეტად პატარა: მოსალოდნელი ${e.origin} ${r.verb} ${n}${e.minimum.toString()} ${r.unit}`:`ზედმეტად პატარა: მოსალოდნელი ${e.origin} იყოს ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`არასწორი სტრინგი: უნდა იწყებოდეს "${t.prefix}"-ით`:"ends_with"===t.format?`არასწორი სტრინგი: უნდა მთავრდებოდეს "${t.suffix}"-ით`:"includes"===t.format?`არასწორი სტრინგი: უნდა შეიცავდეს "${t.includes}"-ს`:"regex"===t.format?`არასწორი სტრინგი: უნდა შეესაბამებოდეს შაბლონს ${t.pattern}`:`არასწორი ${n[t.format]??e.format}` +}case"not_multiple_of":return`არასწორი რიცხვი: უნდა იყოს ${e.divisor}-ის ჯერადი` +;case"unrecognized_keys": +return`უცნობი გასაღებ${e.keys.length>1?"ები":"ი"}: ${l(e.keys,", ")}` +;case"invalid_key":return`არასწორი გასაღები ${e.origin}-ში`;case"invalid_union": +default:return"არასწორი შეყვანა";case"invalid_element": +return`არასწორი მნიშვნელობა ${e.origin}-ში`}}};const va=()=>{const e={string:{ +unit:"តួអក្សរ",verb:"គួរមាន"},file:{unit:"បៃ",verb:"គួរមាន"},array:{unit:"ធាតុ", +verb:"គួរមាន"},set:{unit:"ធាតុ",verb:"គួរមាន"}};function t(t){return e[t]??null} +const n={regex:"ទិន្នន័យបញ្ចូល",email:"អាសយដ្ឋានអ៊ីមែល",url:"URL", +emoji:"សញ្ញាអារម្មណ៍",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"កាលបរិច្ឆេទ និងម៉ោង ISO",date:"កាលបរិច្ឆេទ ISO", +time:"ម៉ោង ISO",duration:"រយៈពេល ISO",ipv4:"អាសយដ្ឋាន IPv4", +ipv6:"អាសយដ្ឋាន IPv6",cidrv4:"ដែនអាសយដ្ឋាន IPv4",cidrv6:"ដែនអាសយដ្ឋាន IPv6", +base64:"ខ្សែអក្សរអ៊ិកូដ base64",base64url:"ខ្សែអក្សរអ៊ិកូដ base64url", +json_string:"ខ្សែអក្សរ JSON",e164:"លេខ E.164",jwt:"JWT", +template_literal:"ទិន្នន័យបញ្ចូល"},r={nan:"NaN",number:"លេខ", +array:"អារេ (Array)",null:"គ្មានតម្លៃ (null)"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ instanceof ${e.expected} ប៉ុន្តែទទួលបាន ${a}`:`ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${t} ប៉ុន្តែទទួលបាន ${a}` +}case"invalid_value": +return 1===e.values.length?`ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${$(e.values[0])}`:`ជម្រើសមិនត្រឹមត្រូវ៖ ត្រូវជាមួយក្នុងចំណោម ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`ធំពេក៖ ត្រូវការ ${e.origin??"តម្លៃ"} ${n} ${e.maximum.toString()} ${r.unit??"ធាតុ"}`:`ធំពេក៖ ត្រូវការ ${e.origin??"តម្លៃ"} ${n} ${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`តូចពេក៖ ត្រូវការ ${e.origin} ${n} ${e.minimum.toString()} ${r.unit}`:`តូចពេក៖ ត្រូវការ ${e.origin} ${n} ${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវចាប់ផ្តើមដោយ "${t.prefix}"`:"ends_with"===t.format?`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវបញ្ចប់ដោយ "${t.suffix}"`:"includes"===t.format?`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវមាន "${t.includes}"`:"regex"===t.format?`ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវតែផ្គូផ្គងនឹងទម្រង់ដែលបានកំណត់ ${t.pattern}`:`មិនត្រឹមត្រូវ៖ ${n[t.format]??e.format}` +}case"not_multiple_of":return`លេខមិនត្រឹមត្រូវ៖ ត្រូវតែជាពហុគុណនៃ ${e.divisor}` +;case"unrecognized_keys":return`រកឃើញសោមិនស្គាល់៖ ${l(e.keys,", ")}` +;case"invalid_key":return`សោមិនត្រឹមត្រូវនៅក្នុង ${e.origin}` +;case"invalid_union":default:return"ទិន្នន័យមិនត្រឹមត្រូវ" +;case"invalid_element":return`ទិន្នន័យមិនត្រឹមត្រូវនៅក្នុង ${e.origin}`}}} +;function ba(){return{localeError:va()}}const ya=()=>{const e={string:{ +unit:"문자",verb:"to have"},file:{unit:"바이트",verb:"to have"},array:{unit:"개", +verb:"to have"},set:{unit:"개",verb:"to have"}};function t(t){return e[t]??null} +const n={regex:"입력",email:"이메일 주소",url:"URL",emoji:"이모지",uuid:"UUID", +uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid", +cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO 날짜시간", +date:"ISO 날짜",time:"ISO 시간",duration:"ISO 기간",ipv4:"IPv4 주소",ipv6:"IPv6 주소", +cidrv4:"IPv4 범위",cidrv6:"IPv6 범위",base64:"base64 인코딩 문자열", +base64url:"base64url 인코딩 문자열",json_string:"JSON 문자열",e164:"E.164 번호",jwt:"JWT", +template_literal:"입력"},r={nan:"NaN"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`잘못된 입력: 예상 타입은 instanceof ${e.expected}, 받은 타입은 ${a}입니다`:`잘못된 입력: 예상 타입은 ${t}, 받은 타입은 ${a}입니다` +}case"invalid_value": +return 1===e.values.length?`잘못된 입력: 값은 ${$(e.values[0])} 이어야 합니다`:`잘못된 옵션: ${l(e.values,"또는 ")} 중 하나여야 합니다` +;case"too_big":{ +const n=e.inclusive?"이하":"미만",r="미만"===n?"이어야 합니다":"여야 합니다",a=t(e.origin),o=a?.unit??"요소" +;return a?`${e.origin??"값"}이 너무 큽니다: ${e.maximum.toString()}${o} ${n}${r}`:`${e.origin??"값"}이 너무 큽니다: ${e.maximum.toString()} ${n}${r}` +}case"too_small":{ +const n=e.inclusive?"이상":"초과",r="이상"===n?"이어야 합니다":"여야 합니다",a=t(e.origin),o=a?.unit??"요소" +;return a?`${e.origin??"값"}이 너무 작습니다: ${e.minimum.toString()}${o} ${n}${r}`:`${e.origin??"값"}이 너무 작습니다: ${e.minimum.toString()} ${n}${r}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`잘못된 문자열: "${t.prefix}"(으)로 시작해야 합니다`:"ends_with"===t.format?`잘못된 문자열: "${t.suffix}"(으)로 끝나야 합니다`:"includes"===t.format?`잘못된 문자열: "${t.includes}"을(를) 포함해야 합니다`:"regex"===t.format?`잘못된 문자열: 정규식 ${t.pattern} 패턴과 일치해야 합니다`:`잘못된 ${n[t.format]??e.format}` +}case"not_multiple_of":return`잘못된 숫자: ${e.divisor}의 배수여야 합니다` +;case"unrecognized_keys":return`인식할 수 없는 키: ${l(e.keys,", ")}` +;case"invalid_key":return`잘못된 키: ${e.origin}`;case"invalid_union":default: +return"잘못된 입력";case"invalid_element":return`잘못된 값: ${e.origin}`}}} +;const Oa=e=>e.charAt(0).toUpperCase()+e.slice(1);function wa(e){ +const t=Math.abs(e),n=t%10,r=t%100 +;return r>=11&&r<=19||0===n?"many":1===n?"one":"few"}const xa=()=>{const e={ +string:{unit:{one:"simbolis",few:"simboliai",many:"simbolių"},verb:{smaller:{ +inclusive:"turi būti ne ilgesnė kaip",notInclusive:"turi būti trumpesnė kaip"}, +bigger:{inclusive:"turi būti ne trumpesnė kaip", +notInclusive:"turi būti ilgesnė kaip"}}},file:{unit:{one:"baitas",few:"baitai", +many:"baitų"},verb:{smaller:{inclusive:"turi būti ne didesnis kaip", +notInclusive:"turi būti mažesnis kaip"},bigger:{ +inclusive:"turi būti ne mažesnis kaip",notInclusive:"turi būti didesnis kaip"}} +},array:{unit:{one:"elementą",few:"elementus",many:"elementų"},verb:{smaller:{ +inclusive:"turi turėti ne daugiau kaip",notInclusive:"turi turėti mažiau kaip"}, +bigger:{inclusive:"turi turėti ne mažiau kaip", +notInclusive:"turi turėti daugiau kaip"}}},set:{unit:{one:"elementą", +few:"elementus",many:"elementų"},verb:{smaller:{ +inclusive:"turi turėti ne daugiau kaip",notInclusive:"turi turėti mažiau kaip"}, +bigger:{inclusive:"turi turėti ne mažiau kaip", +notInclusive:"turi turėti daugiau kaip"}}}};function t(t,n,r,a){ +const o=e[t]??null;return null===o?o:{unit:o.unit[n], +verb:o.verb[a][r?"inclusive":"notInclusive"]}}const n={regex:"įvestis", +email:"el. pašto adresas",url:"URL",emoji:"jaustukas",uuid:"UUID", +uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid", +cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO data ir laikas", +date:"ISO data",time:"ISO laikas",duration:"ISO trukmė",ipv4:"IPv4 adresas", +ipv6:"IPv6 adresas",cidrv4:"IPv4 tinklo prefiksas (CIDR)", +cidrv6:"IPv6 tinklo prefiksas (CIDR)",base64:"base64 užkoduota eilutė", +base64url:"base64url užkoduota eilutė",json_string:"JSON eilutė", +e164:"E.164 numeris",jwt:"JWT",template_literal:"įvestis"},r={nan:"NaN", +number:"skaičius",bigint:"sveikasis skaičius",string:"eilutė", +boolean:"loginė reikšmė",undefined:"neapibrėžta reikšmė",function:"funkcija", +symbol:"simbolis",array:"masyvas",object:"objektas",null:"nulinė reikšmė"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Gautas tipas ${a}, o tikėtasi - instanceof ${e.expected}`:`Gautas tipas ${a}, o tikėtasi - ${t}` +}case"invalid_value": +return 1===e.values.length?`Privalo būti ${$(e.values[0])}`:`Privalo būti vienas iš ${l(e.values,"|")} pasirinkimų` +;case"too_big":{ +const n=r[e.origin]??e.origin,a=t(e.origin,wa(Number(e.maximum)),e.inclusive??!1,"smaller") +;if(a?.verb)return`${Oa(n??e.origin??"reikšmė")} ${a.verb} ${e.maximum.toString()} ${a.unit??"elementų"}` +;const o=e.inclusive?"ne didesnis kaip":"mažesnis kaip" +;return`${Oa(n??e.origin??"reikšmė")} turi būti ${o} ${e.maximum.toString()} ${a?.unit}` +}case"too_small":{ +const n=r[e.origin]??e.origin,a=t(e.origin,wa(Number(e.minimum)),e.inclusive??!1,"bigger") +;if(a?.verb)return`${Oa(n??e.origin??"reikšmė")} ${a.verb} ${e.minimum.toString()} ${a.unit??"elementų"}` +;const o=e.inclusive?"ne mažesnis kaip":"didesnis kaip" +;return`${Oa(n??e.origin??"reikšmė")} turi būti ${o} ${e.minimum.toString()} ${a?.unit}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Eilutė privalo prasidėti "${t.prefix}"`:"ends_with"===t.format?`Eilutė privalo pasibaigti "${t.suffix}"`:"includes"===t.format?`Eilutė privalo įtraukti "${t.includes}"`:"regex"===t.format?`Eilutė privalo atitikti ${t.pattern}`:`Neteisingas ${n[t.format]??e.format}` +}case"not_multiple_of":return`Skaičius privalo būti ${e.divisor} kartotinis.` +;case"unrecognized_keys": +return`Neatpažint${e.keys.length>1?"i":"as"} rakt${e.keys.length>1?"ai":"as"}: ${l(e.keys,", ")}` +;case"invalid_key":return"Rastas klaidingas raktas";case"invalid_union":default: +return"Klaidinga įvestis";case"invalid_element":{const t=r[e.origin]??e.origin +;return`${Oa(t??e.origin??"reikšmė")} turi klaidingą įvestį`}}}};const ka=()=>{ +const e={string:{unit:"знаци",verb:"да имаат"},file:{unit:"бајти", +verb:"да имаат"},array:{unit:"ставки",verb:"да имаат"},set:{unit:"ставки", +verb:"да имаат"}};function t(t){return e[t]??null}const n={regex:"внес", +email:"адреса на е-пошта",url:"URL",emoji:"емоџи",uuid:"UUID",uuidv4:"UUIDv4", +uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2", +ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO датум и време", +date:"ISO датум",time:"ISO време",duration:"ISO времетраење",ipv4:"IPv4 адреса", +ipv6:"IPv6 адреса",cidrv4:"IPv4 опсег",cidrv6:"IPv6 опсег", +base64:"base64-енкодирана низа",base64url:"base64url-енкодирана низа", +json_string:"JSON низа",e164:"E.164 број",jwt:"JWT",template_literal:"внес"},r={ +nan:"NaN",number:"број",array:"низа"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Грешен внес: се очекува instanceof ${e.expected}, примено ${a}`:`Грешен внес: се очекува ${t}, примено ${a}` +}case"invalid_value": +return 1===e.values.length?`Invalid input: expected ${$(e.values[0])}`:`Грешана опција: се очекува една ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Премногу голем: се очекува ${e.origin??"вредноста"} да има ${n}${e.maximum.toString()} ${r.unit??"елементи"}`:`Премногу голем: се очекува ${e.origin??"вредноста"} да биде ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Премногу мал: се очекува ${e.origin} да има ${n}${e.minimum.toString()} ${r.unit}`:`Премногу мал: се очекува ${e.origin} да биде ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Неважечка низа: мора да започнува со "${t.prefix}"`:"ends_with"===t.format?`Неважечка низа: мора да завршува со "${t.suffix}"`:"includes"===t.format?`Неважечка низа: мора да вклучува "${t.includes}"`:"regex"===t.format?`Неважечка низа: мора да одгоара на патернот ${t.pattern}`:`Invalid ${n[t.format]??e.format}` +}case"not_multiple_of":return`Грешен број: мора да биде делив со ${e.divisor}` +;case"unrecognized_keys": +return`${e.keys.length>1?"Непрепознаени клучеви":"Непрепознаен клуч"}: ${l(e.keys,", ")}` +;case"invalid_key":return`Грешен клуч во ${e.origin}`;case"invalid_union": +default:return"Грешен внес";case"invalid_element": +return`Грешна вредност во ${e.origin}`}}};const Sa=()=>{const e={string:{ +unit:"aksara",verb:"mempunyai"},file:{unit:"bait",verb:"mempunyai"},array:{ +unit:"elemen",verb:"mempunyai"},set:{unit:"elemen",verb:"mempunyai"}} +;function t(t){return e[t]??null}const n={regex:"input",email:"alamat e-mel", +url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"tarikh masa ISO",date:"tarikh ISO",time:"masa ISO", +duration:"tempoh ISO",ipv4:"alamat IPv4",ipv6:"alamat IPv6",cidrv4:"julat IPv4", +cidrv6:"julat IPv6",base64:"string dikodkan base64", +base64url:"string dikodkan base64url",json_string:"string JSON", +e164:"nombor E.164",jwt:"JWT",template_literal:"input"},r={nan:"NaN", +number:"nombor"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Input tidak sah: dijangka instanceof ${e.expected}, diterima ${a}`:`Input tidak sah: dijangka ${t}, diterima ${a}` +}case"invalid_value": +return 1===e.values.length?`Input tidak sah: dijangka ${$(e.values[0])}`:`Pilihan tidak sah: dijangka salah satu daripada ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Terlalu besar: dijangka ${e.origin??"nilai"} ${r.verb} ${n}${e.maximum.toString()} ${r.unit??"elemen"}`:`Terlalu besar: dijangka ${e.origin??"nilai"} adalah ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Terlalu kecil: dijangka ${e.origin} ${r.verb} ${n}${e.minimum.toString()} ${r.unit}`:`Terlalu kecil: dijangka ${e.origin} adalah ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`String tidak sah: mesti bermula dengan "${t.prefix}"`:"ends_with"===t.format?`String tidak sah: mesti berakhir dengan "${t.suffix}"`:"includes"===t.format?`String tidak sah: mesti mengandungi "${t.includes}"`:"regex"===t.format?`String tidak sah: mesti sepadan dengan corak ${t.pattern}`:`${n[t.format]??e.format} tidak sah` +}case"not_multiple_of":return`Nombor tidak sah: perlu gandaan ${e.divisor}` +;case"unrecognized_keys":return`Kunci tidak dikenali: ${l(e.keys,", ")}` +;case"invalid_key":return`Kunci tidak sah dalam ${e.origin}` +;case"invalid_union":default:return"Input tidak sah";case"invalid_element": +return`Nilai tidak sah dalam ${e.origin}`}}};const _a=()=>{const e={string:{ +unit:"tekens",verb:"heeft"},file:{unit:"bytes",verb:"heeft"},array:{ +unit:"elementen",verb:"heeft"},set:{unit:"elementen",verb:"heeft"}} +;function t(t){return e[t]??null}const n={regex:"invoer",email:"emailadres", +url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"ISO datum en tijd",date:"ISO datum",time:"ISO tijd", +duration:"ISO duur",ipv4:"IPv4-adres",ipv6:"IPv6-adres",cidrv4:"IPv4-bereik", +cidrv6:"IPv6-bereik",base64:"base64-gecodeerde tekst", +base64url:"base64 URL-gecodeerde tekst",json_string:"JSON string", +e164:"E.164-nummer",jwt:"JWT",template_literal:"invoer"},r={nan:"NaN", +number:"getal"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Ongeldige invoer: verwacht instanceof ${e.expected}, ontving ${a}`:`Ongeldige invoer: verwacht ${t}, ontving ${a}` +}case"invalid_value": +return 1===e.values.length?`Ongeldige invoer: verwacht ${$(e.values[0])}`:`Ongeldige optie: verwacht één van ${l(e.values,"|")}` +;case"too_big":{ +const n=e.inclusive?"<=":"<",r=t(e.origin),a="date"===e.origin?"laat":"string"===e.origin?"lang":"groot" +;return r?`Te ${a}: verwacht dat ${e.origin??"waarde"} ${n}${e.maximum.toString()} ${r.unit??"elementen"} ${r.verb}`:`Te ${a}: verwacht dat ${e.origin??"waarde"} ${n}${e.maximum.toString()} is` +}case"too_small":{ +const n=e.inclusive?">=":">",r=t(e.origin),a="date"===e.origin?"vroeg":"string"===e.origin?"kort":"klein" +;return r?`Te ${a}: verwacht dat ${e.origin} ${n}${e.minimum.toString()} ${r.unit} ${r.verb}`:`Te ${a}: verwacht dat ${e.origin} ${n}${e.minimum.toString()} is` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Ongeldige tekst: moet met "${t.prefix}" beginnen`:"ends_with"===t.format?`Ongeldige tekst: moet op "${t.suffix}" eindigen`:"includes"===t.format?`Ongeldige tekst: moet "${t.includes}" bevatten`:"regex"===t.format?`Ongeldige tekst: moet overeenkomen met patroon ${t.pattern}`:`Ongeldig: ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Ongeldig getal: moet een veelvoud van ${e.divisor} zijn` +;case"unrecognized_keys": +return`Onbekende key${e.keys.length>1?"s":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Ongeldige key in ${e.origin}`;case"invalid_union": +default:return"Ongeldige invoer";case"invalid_element": +return`Ongeldige waarde in ${e.origin}`}}};const Aa=()=>{const e={string:{ +unit:"tegn",verb:"å ha"},file:{unit:"bytes",verb:"å ha"},array:{ +unit:"elementer",verb:"å inneholde"},set:{unit:"elementer",verb:"å inneholde"}} +;function t(t){return e[t]??null}const n={regex:"input",email:"e-postadresse", +url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"ISO dato- og klokkeslett",date:"ISO-dato", +time:"ISO-klokkeslett",duration:"ISO-varighet",ipv4:"IPv4-område", +ipv6:"IPv6-område",cidrv4:"IPv4-spekter",cidrv6:"IPv6-spekter", +base64:"base64-enkodet streng",base64url:"base64url-enkodet streng", +json_string:"JSON-streng",e164:"E.164-nummer",jwt:"JWT",template_literal:"input" +},r={nan:"NaN",number:"tall",array:"liste"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Ugyldig input: forventet instanceof ${e.expected}, fikk ${a}`:`Ugyldig input: forventet ${t}, fikk ${a}` +}case"invalid_value": +return 1===e.values.length?`Ugyldig verdi: forventet ${$(e.values[0])}`:`Ugyldig valg: forventet en av ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`For stor(t): forventet ${e.origin??"value"} til å ha ${n}${e.maximum.toString()} ${r.unit??"elementer"}`:`For stor(t): forventet ${e.origin??"value"} til å ha ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`For lite(n): forventet ${e.origin} til å ha ${n}${e.minimum.toString()} ${r.unit}`:`For lite(n): forventet ${e.origin} til å ha ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Ugyldig streng: må starte med "${t.prefix}"`:"ends_with"===t.format?`Ugyldig streng: må ende med "${t.suffix}"`:"includes"===t.format?`Ugyldig streng: må inneholde "${t.includes}"`:"regex"===t.format?`Ugyldig streng: må matche mønsteret ${t.pattern}`:`Ugyldig ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Ugyldig tall: må være et multiplum av ${e.divisor}` +;case"unrecognized_keys": +return`${e.keys.length>1?"Ukjente nøkler":"Ukjent nøkkel"}: ${l(e.keys,", ")}` +;case"invalid_key":return`Ugyldig nøkkel i ${e.origin}`;case"invalid_union": +default:return"Ugyldig input";case"invalid_element": +return`Ugyldig verdi i ${e.origin}`}}};const Ta=()=>{const e={string:{ +unit:"harf",verb:"olmalıdır"},file:{unit:"bayt",verb:"olmalıdır"},array:{ +unit:"unsur",verb:"olmalıdır"},set:{unit:"unsur",verb:"olmalıdır"}} +;function t(t){return e[t]??null}const n={regex:"giren",email:"epostagâh", +url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"ISO hengâmı",date:"ISO tarihi",time:"ISO zamanı", +duration:"ISO müddeti",ipv4:"IPv4 nişânı",ipv6:"IPv6 nişânı", +cidrv4:"IPv4 menzili",cidrv6:"IPv6 menzili",base64:"base64-şifreli metin", +base64url:"base64url-şifreli metin",json_string:"JSON metin", +e164:"E.164 sayısı",jwt:"JWT",template_literal:"giren"},r={nan:"NaN", +number:"numara",array:"saf",null:"gayb"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Fâsit giren: umulan instanceof ${e.expected}, alınan ${a}`:`Fâsit giren: umulan ${t}, alınan ${a}` +}case"invalid_value": +return 1===e.values.length?`Fâsit giren: umulan ${$(e.values[0])}`:`Fâsit tercih: mûteberler ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Fazla büyük: ${e.origin??"value"}, ${n}${e.maximum.toString()} ${r.unit??"elements"} sahip olmalıydı.`:`Fazla büyük: ${e.origin??"value"}, ${n}${e.maximum.toString()} olmalıydı.` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Fazla küçük: ${e.origin}, ${n}${e.minimum.toString()} ${r.unit} sahip olmalıydı.`:`Fazla küçük: ${e.origin}, ${n}${e.minimum.toString()} olmalıydı.` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Fâsit metin: "${t.prefix}" ile başlamalı.`:"ends_with"===t.format?`Fâsit metin: "${t.suffix}" ile bitmeli.`:"includes"===t.format?`Fâsit metin: "${t.includes}" ihtivâ etmeli.`:"regex"===t.format?`Fâsit metin: ${t.pattern} nakşına uymalı.`:`Fâsit ${n[t.format]??e.format}` +}case"not_multiple_of":return`Fâsit sayı: ${e.divisor} katı olmalıydı.` +;case"unrecognized_keys": +return`Tanınmayan anahtar ${e.keys.length>1?"s":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`${e.origin} için tanınmayan anahtar var.` +;case"invalid_union":return"Giren tanınamadı.";case"invalid_element": +return`${e.origin} için tanınmayan kıymet var.`;default: +return"Kıymet tanınamadı."}}};const Ea=()=>{const e={string:{unit:"توکي", +verb:"ولري"},file:{unit:"بایټس",verb:"ولري"},array:{unit:"توکي",verb:"ولري"}, +set:{unit:"توکي",verb:"ولري"}};function t(t){return e[t]??null}const n={ +regex:"ورودي",email:"بریښنالیک",url:"یو آر ال",emoji:"ایموجي",uuid:"UUID", +uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid", +cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"نیټه او وخت", +date:"نېټه",time:"وخت",duration:"موده",ipv4:"د IPv4 پته",ipv6:"د IPv6 پته", +cidrv4:"د IPv4 ساحه",cidrv6:"د IPv6 ساحه",base64:"base64-encoded متن", +base64url:"base64url-encoded متن",json_string:"JSON متن",e164:"د E.164 شمېره", +jwt:"JWT",template_literal:"ورودي"},r={nan:"NaN",number:"عدد",array:"ارې"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`ناسم ورودي: باید instanceof ${e.expected} وای, مګر ${a} ترلاسه شو`:`ناسم ورودي: باید ${t} وای, مګر ${a} ترلاسه شو` +}case"invalid_value": +return 1===e.values.length?`ناسم ورودي: باید ${$(e.values[0])} وای`:`ناسم انتخاب: باید یو له ${l(e.values,"|")} څخه وای` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`ډیر لوی: ${e.origin??"ارزښت"} باید ${n}${e.maximum.toString()} ${r.unit??"عنصرونه"} ولري`:`ډیر لوی: ${e.origin??"ارزښت"} باید ${n}${e.maximum.toString()} وي` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`ډیر کوچنی: ${e.origin} باید ${n}${e.minimum.toString()} ${r.unit} ولري`:`ډیر کوچنی: ${e.origin} باید ${n}${e.minimum.toString()} وي` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`ناسم متن: باید د "${t.prefix}" سره پیل شي`:"ends_with"===t.format?`ناسم متن: باید د "${t.suffix}" سره پای ته ورسيږي`:"includes"===t.format?`ناسم متن: باید "${t.includes}" ولري`:"regex"===t.format?`ناسم متن: باید د ${t.pattern} سره مطابقت ولري`:`${n[t.format]??e.format} ناسم دی` +}case"not_multiple_of":return`ناسم عدد: باید د ${e.divisor} مضرب وي` +;case"unrecognized_keys": +return`ناسم ${e.keys.length>1?"کلیډونه":"کلیډ"}: ${l(e.keys,", ")}` +;case"invalid_key":return`ناسم کلیډ په ${e.origin} کې`;case"invalid_union": +default:return"ناسمه ورودي";case"invalid_element": +return`ناسم عنصر په ${e.origin} کې`}}};const Ca=()=>{const e={string:{ +unit:"znaków",verb:"mieć"},file:{unit:"bajtów",verb:"mieć"},array:{ +unit:"elementów",verb:"mieć"},set:{unit:"elementów",verb:"mieć"}};function t(t){ +return e[t]??null}const n={regex:"wyrażenie",email:"adres email",url:"URL", +emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid", +guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"data i godzina w formacie ISO",date:"data w formacie ISO", +time:"godzina w formacie ISO",duration:"czas trwania ISO",ipv4:"adres IPv4", +ipv6:"adres IPv6",cidrv4:"zakres IPv4",cidrv6:"zakres IPv6", +base64:"ciąg znaków zakodowany w formacie base64", +base64url:"ciąg znaków zakodowany w formacie base64url", +json_string:"ciąg znaków w formacie JSON",e164:"liczba E.164",jwt:"JWT", +template_literal:"wejście"},r={nan:"NaN",number:"liczba",array:"tablica"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Nieprawidłowe dane wejściowe: oczekiwano instanceof ${e.expected}, otrzymano ${a}`:`Nieprawidłowe dane wejściowe: oczekiwano ${t}, otrzymano ${a}` +}case"invalid_value": +return 1===e.values.length?`Nieprawidłowe dane wejściowe: oczekiwano ${$(e.values[0])}`:`Nieprawidłowa opcja: oczekiwano jednej z wartości ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Za duża wartość: oczekiwano, że ${e.origin??"wartość"} będzie mieć ${n}${e.maximum.toString()} ${r.unit??"elementów"}`:`Zbyt duż(y/a/e): oczekiwano, że ${e.origin??"wartość"} będzie wynosić ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Za mała wartość: oczekiwano, że ${e.origin??"wartość"} będzie mieć ${n}${e.minimum.toString()} ${r.unit??"elementów"}`:`Zbyt mał(y/a/e): oczekiwano, że ${e.origin??"wartość"} będzie wynosić ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Nieprawidłowy ciąg znaków: musi zaczynać się od "${t.prefix}"`:"ends_with"===t.format?`Nieprawidłowy ciąg znaków: musi kończyć się na "${t.suffix}"`:"includes"===t.format?`Nieprawidłowy ciąg znaków: musi zawierać "${t.includes}"`:"regex"===t.format?`Nieprawidłowy ciąg znaków: musi odpowiadać wzorcowi ${t.pattern}`:`Nieprawidłow(y/a/e) ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Nieprawidłowa liczba: musi być wielokrotnością ${e.divisor}` +;case"unrecognized_keys": +return`Nierozpoznane klucze${e.keys.length>1?"s":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Nieprawidłowy klucz w ${e.origin}` +;case"invalid_union":default:return"Nieprawidłowe dane wejściowe" +;case"invalid_element":return`Nieprawidłowa wartość w ${e.origin}`}}} +;const $a=()=>{const e={string:{unit:"caracteres",verb:"ter"},file:{ +unit:"bytes",verb:"ter"},array:{unit:"itens",verb:"ter"},set:{unit:"itens", +verb:"ter"}};function t(t){return e[t]??null}const n={regex:"padrão", +email:"endereço de e-mail",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4", +uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2", +ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"data e hora ISO",date:"data ISO", +time:"hora ISO",duration:"duração ISO",ipv4:"endereço IPv4", +ipv6:"endereço IPv6",cidrv4:"faixa de IPv4",cidrv6:"faixa de IPv6", +base64:"texto codificado em base64",base64url:"URL codificada em base64", +json_string:"texto JSON",e164:"número E.164",jwt:"JWT", +template_literal:"entrada"},r={nan:"NaN",number:"número",null:"nulo"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Tipo inválido: esperado instanceof ${e.expected}, recebido ${a}`:`Tipo inválido: esperado ${t}, recebido ${a}` +}case"invalid_value": +return 1===e.values.length?`Entrada inválida: esperado ${$(e.values[0])}`:`Opção inválida: esperada uma das ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Muito grande: esperado que ${e.origin??"valor"} tivesse ${n}${e.maximum.toString()} ${r.unit??"elementos"}`:`Muito grande: esperado que ${e.origin??"valor"} fosse ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Muito pequeno: esperado que ${e.origin} tivesse ${n}${e.minimum.toString()} ${r.unit}`:`Muito pequeno: esperado que ${e.origin} fosse ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Texto inválido: deve começar com "${t.prefix}"`:"ends_with"===t.format?`Texto inválido: deve terminar com "${t.suffix}"`:"includes"===t.format?`Texto inválido: deve incluir "${t.includes}"`:"regex"===t.format?`Texto inválido: deve corresponder ao padrão ${t.pattern}`:`${n[t.format]??e.format} inválido` +}case"not_multiple_of": +return`Número inválido: deve ser múltiplo de ${e.divisor}` +;case"unrecognized_keys": +return`Chave${e.keys.length>1?"s":""} desconhecida${e.keys.length>1?"s":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Chave inválida em ${e.origin}`;case"invalid_union": +return"Entrada inválida";case"invalid_element": +return`Valor inválido em ${e.origin}`;default:return"Campo inválido"}}} +;function Pa(e,t,n,r){const a=Math.abs(e),o=a%10,i=a%100 +;return i>=11&&i<=19?r:1===o?t:o>=2&&o<=4?n:r}const Ia=()=>{const e={string:{ +unit:{one:"символ",few:"символа",many:"символов"},verb:"иметь"},file:{unit:{ +one:"байт",few:"байта",many:"байт"},verb:"иметь"},array:{unit:{one:"элемент", +few:"элемента",many:"элементов"},verb:"иметь"},set:{unit:{one:"элемент", +few:"элемента",many:"элементов"},verb:"иметь"}};function t(t){return e[t]??null} +const n={regex:"ввод",email:"email адрес",url:"URL",emoji:"эмодзи",uuid:"UUID", +uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid", +cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO дата и время", +date:"ISO дата",time:"ISO время",duration:"ISO длительность",ipv4:"IPv4 адрес", +ipv6:"IPv6 адрес",cidrv4:"IPv4 диапазон",cidrv6:"IPv6 диапазон", +base64:"строка в формате base64",base64url:"строка в формате base64url", +json_string:"JSON строка",e164:"номер E.164",jwt:"JWT",template_literal:"ввод" +},r={nan:"NaN",number:"число",array:"массив"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Неверный ввод: ожидалось instanceof ${e.expected}, получено ${a}`:`Неверный ввод: ожидалось ${t}, получено ${a}` +}case"invalid_value": +return 1===e.values.length?`Неверный ввод: ожидалось ${$(e.values[0])}`:`Неверный вариант: ожидалось одно из ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin);if(r){ +const t=Pa(Number(e.maximum),r.unit.one,r.unit.few,r.unit.many) +;return`Слишком большое значение: ожидалось, что ${e.origin??"значение"} будет иметь ${n}${e.maximum.toString()} ${t}` +} +return`Слишком большое значение: ожидалось, что ${e.origin??"значение"} будет ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin);if(r){ +const t=Pa(Number(e.minimum),r.unit.one,r.unit.few,r.unit.many) +;return`Слишком маленькое значение: ожидалось, что ${e.origin} будет иметь ${n}${e.minimum.toString()} ${t}` +} +return`Слишком маленькое значение: ожидалось, что ${e.origin} будет ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Неверная строка: должна начинаться с "${t.prefix}"`:"ends_with"===t.format?`Неверная строка: должна заканчиваться на "${t.suffix}"`:"includes"===t.format?`Неверная строка: должна содержать "${t.includes}"`:"regex"===t.format?`Неверная строка: должна соответствовать шаблону ${t.pattern}`:`Неверный ${n[t.format]??e.format}` +}case"not_multiple_of":return`Неверное число: должно быть кратным ${e.divisor}` +;case"unrecognized_keys": +return`Нераспознанн${e.keys.length>1?"ые":"ый"} ключ${e.keys.length>1?"и":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Неверный ключ в ${e.origin}`;case"invalid_union": +default:return"Неверные входные данные";case"invalid_element": +return`Неверное значение в ${e.origin}`}}};const Da=()=>{const e={string:{ +unit:"znakov",verb:"imeti"},file:{unit:"bajtov",verb:"imeti"},array:{ +unit:"elementov",verb:"imeti"},set:{unit:"elementov",verb:"imeti"}} +;function t(t){return e[t]??null}const n={regex:"vnos",email:"e-poštni naslov", +url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6", +nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID", +ksuid:"KSUID",datetime:"ISO datum in čas",date:"ISO datum",time:"ISO čas", +duration:"ISO trajanje",ipv4:"IPv4 naslov",ipv6:"IPv6 naslov", +cidrv4:"obseg IPv4",cidrv6:"obseg IPv6",base64:"base64 kodiran niz", +base64url:"base64url kodiran niz",json_string:"JSON niz",e164:"E.164 številka", +jwt:"JWT",template_literal:"vnos"},r={nan:"NaN",number:"število",array:"tabela"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Neveljaven vnos: pričakovano instanceof ${e.expected}, prejeto ${a}`:`Neveljaven vnos: pričakovano ${t}, prejeto ${a}` +}case"invalid_value": +return 1===e.values.length?`Neveljaven vnos: pričakovano ${$(e.values[0])}`:`Neveljavna možnost: pričakovano eno izmed ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Preveliko: pričakovano, da bo ${e.origin??"vrednost"} imelo ${n}${e.maximum.toString()} ${r.unit??"elementov"}`:`Preveliko: pričakovano, da bo ${e.origin??"vrednost"} ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Premajhno: pričakovano, da bo ${e.origin} imelo ${n}${e.minimum.toString()} ${r.unit}`:`Premajhno: pričakovano, da bo ${e.origin} ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Neveljaven niz: mora se začeti z "${t.prefix}"`:"ends_with"===t.format?`Neveljaven niz: mora se končati z "${t.suffix}"`:"includes"===t.format?`Neveljaven niz: mora vsebovati "${t.includes}"`:"regex"===t.format?`Neveljaven niz: mora ustrezati vzorcu ${t.pattern}`:`Neveljaven ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Neveljavno število: mora biti večkratnik ${e.divisor}` +;case"unrecognized_keys": +return`Neprepoznan${e.keys.length>1?"i ključi":" ključ"}: ${l(e.keys,", ")}` +;case"invalid_key":return`Neveljaven ključ v ${e.origin}`;case"invalid_union": +default:return"Neveljaven vnos";case"invalid_element": +return`Neveljavna vrednost v ${e.origin}`}}};const Ma=()=>{const e={string:{ +unit:"tecken",verb:"att ha"},file:{unit:"bytes",verb:"att ha"},array:{ +unit:"objekt",verb:"att innehålla"},set:{unit:"objekt",verb:"att innehålla"}} +;function t(t){return e[t]??null}const n={regex:"reguljärt uttryck", +email:"e-postadress",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4", +uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2", +ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO-datum och tid", +date:"ISO-datum",time:"ISO-tid",duration:"ISO-varaktighet", +ipv4:"IPv4-intervall",ipv6:"IPv6-intervall",cidrv4:"IPv4-spektrum", +cidrv6:"IPv6-spektrum",base64:"base64-kodad sträng", +base64url:"base64url-kodad sträng",json_string:"JSON-sträng", +e164:"E.164-nummer",jwt:"JWT",template_literal:"mall-literal"},r={nan:"NaN", +number:"antal",array:"lista"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Ogiltig inmatning: förväntat instanceof ${e.expected}, fick ${a}`:`Ogiltig inmatning: förväntat ${t}, fick ${a}` +}case"invalid_value": +return 1===e.values.length?`Ogiltig inmatning: förväntat ${$(e.values[0])}`:`Ogiltigt val: förväntade en av ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`För stor(t): förväntade ${e.origin??"värdet"} att ha ${n}${e.maximum.toString()} ${r.unit??"element"}`:`För stor(t): förväntat ${e.origin??"värdet"} att ha ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`För lite(t): förväntade ${e.origin??"värdet"} att ha ${n}${e.minimum.toString()} ${r.unit}`:`För lite(t): förväntade ${e.origin??"värdet"} att ha ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Ogiltig sträng: måste börja med "${t.prefix}"`:"ends_with"===t.format?`Ogiltig sträng: måste sluta med "${t.suffix}"`:"includes"===t.format?`Ogiltig sträng: måste innehålla "${t.includes}"`:"regex"===t.format?`Ogiltig sträng: måste matcha mönstret "${t.pattern}"`:`Ogiltig(t) ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Ogiltigt tal: måste vara en multipel av ${e.divisor}` +;case"unrecognized_keys": +return`${e.keys.length>1?"Okända nycklar":"Okänd nyckel"}: ${l(e.keys,", ")}` +;case"invalid_key":return`Ogiltig nyckel i ${e.origin??"värdet"}` +;case"invalid_union":default:return"Ogiltig input";case"invalid_element": +return`Ogiltigt värde i ${e.origin??"värdet"}`}}};const Na=()=>{const e={ +string:{unit:"எழுத்துக்கள்",verb:"கொண்டிருக்க வேண்டும்"},file:{unit:"பைட்டுகள்", +verb:"கொண்டிருக்க வேண்டும்"},array:{unit:"உறுப்புகள்", +verb:"கொண்டிருக்க வேண்டும்"},set:{unit:"உறுப்புகள்",verb:"கொண்டிருக்க வேண்டும்"} +};function t(t){return e[t]??null}const n={regex:"உள்ளீடு", +email:"மின்னஞ்சல் முகவரி",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4", +uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2", +ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO தேதி நேரம்",date:"ISO தேதி", +time:"ISO நேரம்",duration:"ISO கால அளவு",ipv4:"IPv4 முகவரி",ipv6:"IPv6 முகவரி", +cidrv4:"IPv4 வரம்பு",cidrv6:"IPv6 வரம்பு",base64:"base64-encoded சரம்", +base64url:"base64url-encoded சரம்",json_string:"JSON சரம்",e164:"E.164 எண்", +jwt:"JWT",template_literal:"input"},r={nan:"NaN",number:"எண்",array:"அணி", +null:"வெறுமை"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது instanceof ${e.expected}, பெறப்பட்டது ${a}`:`தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${t}, பெறப்பட்டது ${a}` +}case"invalid_value": +return 1===e.values.length?`தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${$(e.values[0])}`:`தவறான விருப்பம்: எதிர்பார்க்கப்பட்டது ${l(e.values,"|")} இல் ஒன்று` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`மிக பெரியது: எதிர்பார்க்கப்பட்டது ${e.origin??"மதிப்பு"} ${n}${e.maximum.toString()} ${r.unit??"உறுப்புகள்"} ஆக இருக்க வேண்டும்`:`மிக பெரியது: எதிர்பார்க்கப்பட்டது ${e.origin??"மதிப்பு"} ${n}${e.maximum.toString()} ஆக இருக்க வேண்டும்` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${e.origin} ${n}${e.minimum.toString()} ${r.unit} ஆக இருக்க வேண்டும்`:`மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${e.origin} ${n}${e.minimum.toString()} ஆக இருக்க வேண்டும்` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`தவறான சரம்: "${t.prefix}" இல் தொடங்க வேண்டும்`:"ends_with"===t.format?`தவறான சரம்: "${t.suffix}" இல் முடிவடைய வேண்டும்`:"includes"===t.format?`தவறான சரம்: "${t.includes}" ஐ உள்ளடக்க வேண்டும்`:"regex"===t.format?`தவறான சரம்: ${t.pattern} முறைபாட்டுடன் பொருந்த வேண்டும்`:`தவறான ${n[t.format]??e.format}` +}case"not_multiple_of":return`தவறான எண்: ${e.divisor} இன் பலமாக இருக்க வேண்டும்` +;case"unrecognized_keys": +return`அடையாளம் தெரியாத விசை${e.keys.length>1?"கள்":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`${e.origin} இல் தவறான விசை`;case"invalid_union": +default:return"தவறான உள்ளீடு";case"invalid_element": +return`${e.origin} இல் தவறான மதிப்பு`}}};const Ra=()=>{const e={string:{ +unit:"ตัวอักษร",verb:"ควรมี"},file:{unit:"ไบต์",verb:"ควรมี"},array:{ +unit:"รายการ",verb:"ควรมี"},set:{unit:"รายการ",verb:"ควรมี"}};function t(t){ +return e[t]??null}const n={regex:"ข้อมูลที่ป้อน",email:"ที่อยู่อีเมล",url:"URL", +emoji:"อิโมจิ",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid", +guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"วันที่เวลาแบบ ISO",date:"วันที่แบบ ISO",time:"เวลาแบบ ISO", +duration:"ช่วงเวลาแบบ ISO",ipv4:"ที่อยู่ IPv4",ipv6:"ที่อยู่ IPv6", +cidrv4:"ช่วง IP แบบ IPv4",cidrv6:"ช่วง IP แบบ IPv6",base64:"ข้อความแบบ Base64", +base64url:"ข้อความแบบ Base64 สำหรับ URL",json_string:"ข้อความแบบ JSON", +e164:"เบอร์โทรศัพท์ระหว่างประเทศ (E.164)",jwt:"โทเคน JWT", +template_literal:"ข้อมูลที่ป้อน"},r={nan:"NaN",number:"ตัวเลข", +array:"อาร์เรย์ (Array)",null:"ไม่มีค่า (null)"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น instanceof ${e.expected} แต่ได้รับ ${a}`:`ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น ${t} แต่ได้รับ ${a}` +}case"invalid_value": +return 1===e.values.length?`ค่าไม่ถูกต้อง: ควรเป็น ${$(e.values[0])}`:`ตัวเลือกไม่ถูกต้อง: ควรเป็นหนึ่งใน ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"ไม่เกิน":"น้อยกว่า",r=t(e.origin) +;return r?`เกินกำหนด: ${e.origin??"ค่า"} ควรมี${n} ${e.maximum.toString()} ${r.unit??"รายการ"}`:`เกินกำหนด: ${e.origin??"ค่า"} ควรมี${n} ${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?"อย่างน้อย":"มากกว่า",r=t(e.origin) +;return r?`น้อยกว่ากำหนด: ${e.origin} ควรมี${n} ${e.minimum.toString()} ${r.unit}`:`น้อยกว่ากำหนด: ${e.origin} ควรมี${n} ${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`รูปแบบไม่ถูกต้อง: ข้อความต้องขึ้นต้นด้วย "${t.prefix}"`:"ends_with"===t.format?`รูปแบบไม่ถูกต้อง: ข้อความต้องลงท้ายด้วย "${t.suffix}"`:"includes"===t.format?`รูปแบบไม่ถูกต้อง: ข้อความต้องมี "${t.includes}" อยู่ในข้อความ`:"regex"===t.format?`รูปแบบไม่ถูกต้อง: ต้องตรงกับรูปแบบที่กำหนด ${t.pattern}`:`รูปแบบไม่ถูกต้อง: ${n[t.format]??e.format}` +}case"not_multiple_of": +return`ตัวเลขไม่ถูกต้อง: ต้องเป็นจำนวนที่หารด้วย ${e.divisor} ได้ลงตัว` +;case"unrecognized_keys":return`พบคีย์ที่ไม่รู้จัก: ${l(e.keys,", ")}` +;case"invalid_key":return`คีย์ไม่ถูกต้องใน ${e.origin}`;case"invalid_union": +return"ข้อมูลไม่ถูกต้อง: ไม่ตรงกับรูปแบบยูเนียนที่กำหนดไว้" +;case"invalid_element":return`ข้อมูลไม่ถูกต้องใน ${e.origin}`;default: +return"ข้อมูลไม่ถูกต้อง"}}};const La=()=>{const e={string:{unit:"karakter", +verb:"olmalı"},file:{unit:"bayt",verb:"olmalı"},array:{unit:"öğe",verb:"olmalı" +},set:{unit:"öğe",verb:"olmalı"}};function t(t){return e[t]??null}const n={ +regex:"girdi",email:"e-posta adresi",url:"URL",emoji:"emoji",uuid:"UUID", +uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid", +cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO tarih ve saat", +date:"ISO tarih",time:"ISO saat",duration:"ISO süre",ipv4:"IPv4 adresi", +ipv6:"IPv6 adresi",cidrv4:"IPv4 aralığı",cidrv6:"IPv6 aralığı", +base64:"base64 ile şifrelenmiş metin", +base64url:"base64url ile şifrelenmiş metin",json_string:"JSON dizesi", +e164:"E.164 sayısı",jwt:"JWT",template_literal:"Şablon dizesi"},r={nan:"NaN"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Geçersiz değer: beklenen instanceof ${e.expected}, alınan ${a}`:`Geçersiz değer: beklenen ${t}, alınan ${a}` +}case"invalid_value": +return 1===e.values.length?`Geçersiz değer: beklenen ${$(e.values[0])}`:`Geçersiz seçenek: aşağıdakilerden biri olmalı: ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Çok büyük: beklenen ${e.origin??"değer"} ${n}${e.maximum.toString()} ${r.unit??"öğe"}`:`Çok büyük: beklenen ${e.origin??"değer"} ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Çok küçük: beklenen ${e.origin} ${n}${e.minimum.toString()} ${r.unit}`:`Çok küçük: beklenen ${e.origin} ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Geçersiz metin: "${t.prefix}" ile başlamalı`:"ends_with"===t.format?`Geçersiz metin: "${t.suffix}" ile bitmeli`:"includes"===t.format?`Geçersiz metin: "${t.includes}" içermeli`:"regex"===t.format?`Geçersiz metin: ${t.pattern} desenine uymalı`:`Geçersiz ${n[t.format]??e.format}` +}case"not_multiple_of":return`Geçersiz sayı: ${e.divisor} ile tam bölünebilmeli` +;case"unrecognized_keys": +return`Tanınmayan anahtar${e.keys.length>1?"lar":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`${e.origin} içinde geçersiz anahtar` +;case"invalid_union":default:return"Geçersiz değer";case"invalid_element": +return`${e.origin} içinde geçersiz değer`}}};const Ba=()=>{const e={string:{ +unit:"символів",verb:"матиме"},file:{unit:"байтів",verb:"матиме"},array:{ +unit:"елементів",verb:"матиме"},set:{unit:"елементів",verb:"матиме"}} +;function t(t){return e[t]??null}const n={regex:"вхідні дані", +email:"адреса електронної пошти",url:"URL",emoji:"емодзі",uuid:"UUID", +uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid", +cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"дата та час ISO", +date:"дата ISO",time:"час ISO",duration:"тривалість ISO",ipv4:"адреса IPv4", +ipv6:"адреса IPv6",cidrv4:"діапазон IPv4",cidrv6:"діапазон IPv6", +base64:"рядок у кодуванні base64",base64url:"рядок у кодуванні base64url", +json_string:"рядок JSON",e164:"номер E.164",jwt:"JWT", +template_literal:"вхідні дані"},r={nan:"NaN",number:"число",array:"масив"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Неправильні вхідні дані: очікується instanceof ${e.expected}, отримано ${a}`:`Неправильні вхідні дані: очікується ${t}, отримано ${a}` +}case"invalid_value": +return 1===e.values.length?`Неправильні вхідні дані: очікується ${$(e.values[0])}`:`Неправильна опція: очікується одне з ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Занадто велике: очікується, що ${e.origin??"значення"} ${r.verb} ${n}${e.maximum.toString()} ${r.unit??"елементів"}`:`Занадто велике: очікується, що ${e.origin??"значення"} буде ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Занадто мале: очікується, що ${e.origin} ${r.verb} ${n}${e.minimum.toString()} ${r.unit}`:`Занадто мале: очікується, що ${e.origin} буде ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Неправильний рядок: повинен починатися з "${t.prefix}"`:"ends_with"===t.format?`Неправильний рядок: повинен закінчуватися на "${t.suffix}"`:"includes"===t.format?`Неправильний рядок: повинен містити "${t.includes}"`:"regex"===t.format?`Неправильний рядок: повинен відповідати шаблону ${t.pattern}`:`Неправильний ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Неправильне число: повинно бути кратним ${e.divisor}` +;case"unrecognized_keys": +return`Нерозпізнаний ключ${e.keys.length>1?"і":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`Неправильний ключ у ${e.origin}`;case"invalid_union": +default:return"Неправильні вхідні дані";case"invalid_element": +return`Неправильне значення у ${e.origin}`}}};function ja(){return{ +localeError:Ba()}}const Ua=()=>{const e={string:{unit:"حروف",verb:"ہونا"},file:{ +unit:"بائٹس",verb:"ہونا"},array:{unit:"آئٹمز",verb:"ہونا"},set:{unit:"آئٹمز", +verb:"ہونا"}};function t(t){return e[t]??null}const n={regex:"ان پٹ", +email:"ای میل ایڈریس",url:"یو آر ایل",emoji:"ایموجی",uuid:"یو یو آئی ڈی", +uuidv4:"یو یو آئی ڈی وی 4",uuidv6:"یو یو آئی ڈی وی 6",nanoid:"نینو آئی ڈی", +guid:"جی یو آئی ڈی",cuid:"سی یو آئی ڈی",cuid2:"سی یو آئی ڈی 2", +ulid:"یو ایل آئی ڈی",xid:"ایکس آئی ڈی",ksuid:"کے ایس یو آئی ڈی", +datetime:"آئی ایس او ڈیٹ ٹائم",date:"آئی ایس او تاریخ",time:"آئی ایس او وقت", +duration:"آئی ایس او مدت",ipv4:"آئی پی وی 4 ایڈریس",ipv6:"آئی پی وی 6 ایڈریس", +cidrv4:"آئی پی وی 4 رینج",cidrv6:"آئی پی وی 6 رینج", +base64:"بیس 64 ان کوڈڈ سٹرنگ",base64url:"بیس 64 یو آر ایل ان کوڈڈ سٹرنگ", +json_string:"جے ایس او این سٹرنگ",e164:"ای 164 نمبر",jwt:"جے ڈبلیو ٹی", +template_literal:"ان پٹ"},r={nan:"NaN",number:"نمبر",array:"آرے",null:"نل"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`غلط ان پٹ: instanceof ${e.expected} متوقع تھا، ${a} موصول ہوا`:`غلط ان پٹ: ${t} متوقع تھا، ${a} موصول ہوا` +}case"invalid_value": +return 1===e.values.length?`غلط ان پٹ: ${$(e.values[0])} متوقع تھا`:`غلط آپشن: ${l(e.values,"|")} میں سے ایک متوقع تھا` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`بہت بڑا: ${e.origin??"ویلیو"} کے ${n}${e.maximum.toString()} ${r.unit??"عناصر"} ہونے متوقع تھے`:`بہت بڑا: ${e.origin??"ویلیو"} کا ${n}${e.maximum.toString()} ہونا متوقع تھا` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`بہت چھوٹا: ${e.origin} کے ${n}${e.minimum.toString()} ${r.unit} ہونے متوقع تھے`:`بہت چھوٹا: ${e.origin} کا ${n}${e.minimum.toString()} ہونا متوقع تھا` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`غلط سٹرنگ: "${t.prefix}" سے شروع ہونا چاہیے`:"ends_with"===t.format?`غلط سٹرنگ: "${t.suffix}" پر ختم ہونا چاہیے`:"includes"===t.format?`غلط سٹرنگ: "${t.includes}" شامل ہونا چاہیے`:"regex"===t.format?`غلط سٹرنگ: پیٹرن ${t.pattern} سے میچ ہونا چاہیے`:`غلط ${n[t.format]??e.format}` +}case"not_multiple_of":return`غلط نمبر: ${e.divisor} کا مضاعف ہونا چاہیے` +;case"unrecognized_keys": +return`غیر تسلیم شدہ کی${e.keys.length>1?"ز":""}: ${l(e.keys,"، ")}` +;case"invalid_key":return`${e.origin} میں غلط کی`;case"invalid_union":default: +return"غلط ان پٹ";case"invalid_element":return`${e.origin} میں غلط ویلیو`}}} +;const za=()=>{const e={string:{unit:"belgi",verb:"bo‘lishi kerak"},file:{ +unit:"bayt",verb:"bo‘lishi kerak"},array:{unit:"element",verb:"bo‘lishi kerak"}, +set:{unit:"element",verb:"bo‘lishi kerak"}};function t(t){return e[t]??null} +const n={regex:"kirish",email:"elektron pochta manzili",url:"URL",emoji:"emoji", +uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID", +cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"ISO sana va vaqti",date:"ISO sana",time:"ISO vaqt", +duration:"ISO davomiylik",ipv4:"IPv4 manzil",ipv6:"IPv6 manzil", +mac:"MAC manzil",cidrv4:"IPv4 diapazon",cidrv6:"IPv6 diapazon", +base64:"base64 kodlangan satr",base64url:"base64url kodlangan satr", +json_string:"JSON satr",e164:"E.164 raqam",jwt:"JWT",template_literal:"kirish" +},r={nan:"NaN",number:"raqam",array:"massiv"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Noto‘g‘ri kirish: kutilgan instanceof ${e.expected}, qabul qilingan ${a}`:`Noto‘g‘ri kirish: kutilgan ${t}, qabul qilingan ${a}` +}case"invalid_value": +return 1===e.values.length?`Noto‘g‘ri kirish: kutilgan ${$(e.values[0])}`:`Noto‘g‘ri variant: quyidagilardan biri kutilgan ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Juda katta: kutilgan ${e.origin??"qiymat"} ${n}${e.maximum.toString()} ${r.unit} ${r.verb}`:`Juda katta: kutilgan ${e.origin??"qiymat"} ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Juda kichik: kutilgan ${e.origin} ${n}${e.minimum.toString()} ${r.unit} ${r.verb}`:`Juda kichik: kutilgan ${e.origin} ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Noto‘g‘ri satr: "${t.prefix}" bilan boshlanishi kerak`:"ends_with"===t.format?`Noto‘g‘ri satr: "${t.suffix}" bilan tugashi kerak`:"includes"===t.format?`Noto‘g‘ri satr: "${t.includes}" ni o‘z ichiga olishi kerak`:"regex"===t.format?`Noto‘g‘ri satr: ${t.pattern} shabloniga mos kelishi kerak`:`Noto‘g‘ri ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Noto‘g‘ri raqam: ${e.divisor} ning karralisi bo‘lishi kerak` +;case"unrecognized_keys": +return`Noma’lum kalit${e.keys.length>1?"lar":""}: ${l(e.keys,", ")}` +;case"invalid_key":return`${e.origin} dagi kalit noto‘g‘ri`;case"invalid_union": +default:return"Noto‘g‘ri kirish";case"invalid_element": +return`${e.origin} da noto‘g‘ri qiymat`}}};const Za=()=>{const e={string:{ +unit:"ký tự",verb:"có"},file:{unit:"byte",verb:"có"},array:{unit:"phần tử", +verb:"có"},set:{unit:"phần tử",verb:"có"}};function t(t){return e[t]??null} +const n={regex:"đầu vào",email:"địa chỉ email",url:"URL",emoji:"emoji", +uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID", +cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"ngày giờ ISO",date:"ngày ISO",time:"giờ ISO", +duration:"khoảng thời gian ISO",ipv4:"địa chỉ IPv4",ipv6:"địa chỉ IPv6", +cidrv4:"dải IPv4",cidrv6:"dải IPv6",base64:"chuỗi mã hóa base64", +base64url:"chuỗi mã hóa base64url",json_string:"chuỗi JSON",e164:"số E.164", +jwt:"JWT",template_literal:"đầu vào"},r={nan:"NaN",number:"số",array:"mảng"} +;return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Đầu vào không hợp lệ: mong đợi instanceof ${e.expected}, nhận được ${a}`:`Đầu vào không hợp lệ: mong đợi ${t}, nhận được ${a}` +}case"invalid_value": +return 1===e.values.length?`Đầu vào không hợp lệ: mong đợi ${$(e.values[0])}`:`Tùy chọn không hợp lệ: mong đợi một trong các giá trị ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Quá lớn: mong đợi ${e.origin??"giá trị"} ${r.verb} ${n}${e.maximum.toString()} ${r.unit??"phần tử"}`:`Quá lớn: mong đợi ${e.origin??"giá trị"} ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Quá nhỏ: mong đợi ${e.origin} ${r.verb} ${n}${e.minimum.toString()} ${r.unit}`:`Quá nhỏ: mong đợi ${e.origin} ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Chuỗi không hợp lệ: phải bắt đầu bằng "${t.prefix}"`:"ends_with"===t.format?`Chuỗi không hợp lệ: phải kết thúc bằng "${t.suffix}"`:"includes"===t.format?`Chuỗi không hợp lệ: phải bao gồm "${t.includes}"`:"regex"===t.format?`Chuỗi không hợp lệ: phải khớp với mẫu ${t.pattern}`:`${n[t.format]??e.format} không hợp lệ` +}case"not_multiple_of":return`Số không hợp lệ: phải là bội số của ${e.divisor}` +;case"unrecognized_keys":return`Khóa không được nhận dạng: ${l(e.keys,", ")}` +;case"invalid_key":return`Khóa không hợp lệ trong ${e.origin}` +;case"invalid_union":default:return"Đầu vào không hợp lệ";case"invalid_element": +return`Giá trị không hợp lệ trong ${e.origin}`}}};const Fa=()=>{const e={ +string:{unit:"字符",verb:"包含"},file:{unit:"字节",verb:"包含"},array:{unit:"项", +verb:"包含"},set:{unit:"项",verb:"包含"}};function t(t){return e[t]??null}const n={ +regex:"输入",email:"电子邮件",url:"URL",emoji:"表情符号",uuid:"UUID",uuidv4:"UUIDv4", +uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2", +ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO日期时间",date:"ISO日期", +time:"ISO时间",duration:"ISO时长",ipv4:"IPv4地址",ipv6:"IPv6地址",cidrv4:"IPv4网段", +cidrv6:"IPv6网段",base64:"base64编码字符串",base64url:"base64url编码字符串", +json_string:"JSON字符串",e164:"E.164号码",jwt:"JWT",template_literal:"输入"},r={ +nan:"NaN",number:"数字",array:"数组",null:"空值(null)"};return e=>{switch(e.code){ +case"invalid_type":{const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`无效输入:期望 instanceof ${e.expected},实际接收 ${a}`:`无效输入:期望 ${t},实际接收 ${a}` +}case"invalid_value": +return 1===e.values.length?`无效输入:期望 ${$(e.values[0])}`:`无效选项:期望以下之一 ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`数值过大:期望 ${e.origin??"值"} ${n}${e.maximum.toString()} ${r.unit??"个元素"}`:`数值过大:期望 ${e.origin??"值"} ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`数值过小:期望 ${e.origin} ${n}${e.minimum.toString()} ${r.unit}`:`数值过小:期望 ${e.origin} ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`无效字符串:必须以 "${t.prefix}" 开头`:"ends_with"===t.format?`无效字符串:必须以 "${t.suffix}" 结尾`:"includes"===t.format?`无效字符串:必须包含 "${t.includes}"`:"regex"===t.format?`无效字符串:必须满足正则表达式 ${t.pattern}`:`无效${n[t.format]??e.format}` +}case"not_multiple_of":return`无效数字:必须是 ${e.divisor} 的倍数` +;case"unrecognized_keys":return`出现未知的键(key): ${l(e.keys,", ")}` +;case"invalid_key":return`${e.origin} 中的键(key)无效`;case"invalid_union":default: +return"无效输入";case"invalid_element":return`${e.origin} 中包含无效值(value)`}}} +;const Ha=()=>{const e={string:{unit:"字元",verb:"擁有"},file:{unit:"位元組",verb:"擁有" +},array:{unit:"項目",verb:"擁有"},set:{unit:"項目",verb:"擁有"}};function t(t){ +return e[t]??null}const n={regex:"輸入",email:"郵件地址",url:"URL",emoji:"emoji", +uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID", +cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"ISO 日期時間",date:"ISO 日期",time:"ISO 時間",duration:"ISO 期間", +ipv4:"IPv4 位址",ipv6:"IPv6 位址",cidrv4:"IPv4 範圍",cidrv6:"IPv6 範圍", +base64:"base64 編碼字串",base64url:"base64url 編碼字串",json_string:"JSON 字串", +e164:"E.164 數值",jwt:"JWT",template_literal:"輸入"},r={nan:"NaN"};return e=>{ +switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`無效的輸入值:預期為 instanceof ${e.expected},但收到 ${a}`:`無效的輸入值:預期為 ${t},但收到 ${a}` +}case"invalid_value": +return 1===e.values.length?`無效的輸入值:預期為 ${$(e.values[0])}`:`無效的選項:預期為以下其中之一 ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`數值過大:預期 ${e.origin??"值"} 應為 ${n}${e.maximum.toString()} ${r.unit??"個元素"}`:`數值過大:預期 ${e.origin??"值"} 應為 ${n}${e.maximum.toString()}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`數值過小:預期 ${e.origin} 應為 ${n}${e.minimum.toString()} ${r.unit}`:`數值過小:預期 ${e.origin} 應為 ${n}${e.minimum.toString()}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`無效的字串:必須以 "${t.prefix}" 開頭`:"ends_with"===t.format?`無效的字串:必須以 "${t.suffix}" 結尾`:"includes"===t.format?`無效的字串:必須包含 "${t.includes}"`:"regex"===t.format?`無效的字串:必須符合格式 ${t.pattern}`:`無效的 ${n[t.format]??e.format}` +}case"not_multiple_of":return`無效的數字:必須為 ${e.divisor} 的倍數` +;case"unrecognized_keys": +return`無法識別的鍵值${e.keys.length>1?"們":""}:${l(e.keys,"、")}`;case"invalid_key": +return`${e.origin} 中有無效的鍵值`;case"invalid_union":default:return"無效的輸入值" +;case"invalid_element":return`${e.origin} 中有無效的值`}}};const Qa=()=>{const e={ +string:{unit:"àmi",verb:"ní"},file:{unit:"bytes",verb:"ní"},array:{unit:"nkan", +verb:"ní"},set:{unit:"nkan",verb:"ní"}};function t(t){return e[t]??null} +const n={regex:"ẹ̀rọ ìbáwọlé",email:"àdírẹ́sì ìmẹ́lì",url:"URL",emoji:"emoji", +uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID", +cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID", +datetime:"àkókò ISO",date:"ọjọ́ ISO",time:"àkókò ISO", +duration:"àkókò tó pé ISO",ipv4:"àdírẹ́sì IPv4",ipv6:"àdírẹ́sì IPv6", +cidrv4:"àgbègbè IPv4",cidrv6:"àgbègbè IPv6",base64:"ọ̀rọ̀ tí a kọ́ ní base64", +base64url:"ọ̀rọ̀ base64url",json_string:"ọ̀rọ̀ JSON",e164:"nọ́mbà E.164", +jwt:"JWT",template_literal:"ẹ̀rọ ìbáwọlé"},r={nan:"NaN",number:"nọ́mbà", +array:"akopọ"};return e=>{switch(e.code){case"invalid_type":{ +const t=r[e.expected]??e.expected,n=q(e.input),a=r[n]??n +;return/^[A-Z]/.test(e.expected)?`Ìbáwọlé aṣìṣe: a ní láti fi instanceof ${e.expected}, àmọ̀ a rí ${a}`:`Ìbáwọlé aṣìṣe: a ní láti fi ${t}, àmọ̀ a rí ${a}` +}case"invalid_value": +return 1===e.values.length?`Ìbáwọlé aṣìṣe: a ní láti fi ${$(e.values[0])}`:`Àṣàyàn aṣìṣe: yan ọ̀kan lára ${l(e.values,"|")}` +;case"too_big":{const n=e.inclusive?"<=":"<",r=t(e.origin) +;return r?`Tó pọ̀ jù: a ní láti jẹ́ pé ${e.origin??"iye"} ${r.verb} ${n}${e.maximum} ${r.unit}`:`Tó pọ̀ jù: a ní láti jẹ́ ${n}${e.maximum}` +}case"too_small":{const n=e.inclusive?">=":">",r=t(e.origin) +;return r?`Kéré ju: a ní láti jẹ́ pé ${e.origin} ${r.verb} ${n}${e.minimum} ${r.unit}`:`Kéré ju: a ní láti jẹ́ ${n}${e.minimum}` +}case"invalid_format":{const t=e +;return"starts_with"===t.format?`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bẹ̀rẹ̀ pẹ̀lú "${t.prefix}"`:"ends_with"===t.format?`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ parí pẹ̀lú "${t.suffix}"`:"includes"===t.format?`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ ní "${t.includes}"`:"regex"===t.format?`Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bá àpẹẹrẹ mu ${t.pattern}`:`Aṣìṣe: ${n[t.format]??e.format}` +}case"not_multiple_of": +return`Nọ́mbà aṣìṣe: gbọ́dọ̀ jẹ́ èyà pípín ti ${e.divisor}` +;case"unrecognized_keys":return`Bọtìnì àìmọ̀: ${l(e.keys,", ")}` +;case"invalid_key":return`Bọtìnì aṣìṣe nínú ${e.origin}`;case"invalid_union": +default:return"Ìbáwọlé aṣìṣe";case"invalid_element": +return`Iye aṣìṣe nínú ${e.origin}`}}} +;const Va=Object.freeze(Object.defineProperty({__proto__:null,ar:function(){ +return{localeError:Hr()}},az:function(){return{localeError:Qr()}},be:function(){ +return{localeError:qr()}},bg:function(){return{localeError:Wr()}},ca:function(){ +return{localeError:Xr()}},cs:function(){return{localeError:Gr()}},da:function(){ +return{localeError:Yr()}},de:function(){return{localeError:Kr()}},en:ea, +eo:function(){return{localeError:ta()}},es:function(){return{localeError:na()}}, +fa:function(){return{localeError:ra()}},fi:function(){return{localeError:aa()}}, +fr:function(){return{localeError:oa()}},frCA:function(){return{localeError:ia()} +},he:function(){return{localeError:sa()}},hu:function(){return{localeError:la()} +},hy:function(){return{localeError:da()}},id:function(){return{localeError:pa()} +},is:function(){return{localeError:ha()}},it:function(){return{localeError:fa()} +},ja:function(){return{localeError:ma()}},ka:function(){return{localeError:ga()} +},kh:function(){return ba()},km:ba,ko:function(){return{localeError:ya()}}, +lt:function(){return{localeError:xa()}},mk:function(){return{localeError:ka()}}, +ms:function(){return{localeError:Sa()}},nl:function(){return{localeError:_a()}}, +no:function(){return{localeError:Aa()}},ota:function(){return{localeError:Ta()} +},pl:function(){return{localeError:Ca()}},ps:function(){return{localeError:Ea()} +},pt:function(){return{localeError:$a()}},ru:function(){return{localeError:Ia()} +},sl:function(){return{localeError:Da()}},sv:function(){return{localeError:Ma()} +},ta:function(){return{localeError:Na()}},th:function(){return{localeError:Ra()} +},tr:function(){return{localeError:La()}},ua:function(){return ja()},uk:ja, +ur:function(){return{localeError:Ua()}},uz:function(){return{localeError:za()}}, +vi:function(){return{localeError:Za()}},yo:function(){return{localeError:Qa()}}, +zhCN:function(){return{localeError:Fa()}},zhTW:function(){return{ +localeError:Ha()}}},Symbol.toStringTag,{value:"Module"}));var qa +;const Wa=Symbol("ZodOutput"),Xa=Symbol("ZodInput");class Ga{constructor(){ +this._map=new WeakMap,this._idmap=new Map}add(e,...t){const n=t[0] +;return this._map.set(e,n), +n&&"object"==typeof n&&"id"in n&&this._idmap.set(n.id,e),this}clear(){ +return this._map=new WeakMap,this._idmap=new Map,this}remove(e){ +const t=this._map.get(e) +;return t&&"object"==typeof t&&"id"in t&&this._idmap.delete(t.id), +this._map.delete(e),this}get(e){const t=e._zod.parent;if(t){const n={ +...this.get(t)??{}};delete n.id;const r={...n,...this._map.get(e)} +;return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){ +return this._map.has(e)}}function Ya(){return new Ga} +(qa=globalThis).__zod_globalRegistry??(qa.__zod_globalRegistry=Ya()) +;const Ka=globalThis.__zod_globalRegistry;function Ja(e,t){return new e({ +type:"string",...C(t)})}function eo(e,t){return new e({type:"string",coerce:!0, +...C(t)})}function to(e,t){return new e({type:"string",format:"email", +check:"string_format",abort:!1,...C(t)})}function no(e,t){return new e({ +type:"string",format:"guid",check:"string_format",abort:!1,...C(t)})} +function ro(e,t){return new e({type:"string",format:"uuid", +check:"string_format",abort:!1,...C(t)})}function ao(e,t){return new e({ +type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...C(t) +})}function oo(e,t){return new e({type:"string",format:"uuid", +check:"string_format",abort:!1,version:"v6",...C(t)})}function io(e,t){ +return new e({type:"string",format:"uuid",check:"string_format",abort:!1, +version:"v7",...C(t)})}function so(e,t){return new e({type:"string", +format:"url",check:"string_format",abort:!1,...C(t)})}function lo(e,t){ +return new e({type:"string",format:"emoji",check:"string_format",abort:!1, +...C(t)})}function co(e,t){return new e({type:"string",format:"nanoid", +check:"string_format",abort:!1,...C(t)})}function uo(e,t){return new e({ +type:"string",format:"cuid",check:"string_format",abort:!1,...C(t)})} +function po(e,t){return new e({type:"string",format:"cuid2", +check:"string_format",abort:!1,...C(t)})}function ho(e,t){return new e({ +type:"string",format:"ulid",check:"string_format",abort:!1,...C(t)})} +function fo(e,t){return new e({type:"string",format:"xid",check:"string_format", +abort:!1,...C(t)})}function mo(e,t){return new e({type:"string",format:"ksuid", +check:"string_format",abort:!1,...C(t)})}function go(e,t){return new e({ +type:"string",format:"ipv4",check:"string_format",abort:!1,...C(t)})} +function vo(e,t){return new e({type:"string",format:"ipv6", +check:"string_format",abort:!1,...C(t)})}function bo(e,t){return new e({ +type:"string",format:"mac",check:"string_format",abort:!1,...C(t)})} +function yo(e,t){return new e({type:"string",format:"cidrv4", +check:"string_format",abort:!1,...C(t)})}function Oo(e,t){return new e({ +type:"string",format:"cidrv6",check:"string_format",abort:!1,...C(t)})} +function wo(e,t){return new e({type:"string",format:"base64", +check:"string_format",abort:!1,...C(t)})}function xo(e,t){return new e({ +type:"string",format:"base64url",check:"string_format",abort:!1,...C(t)})} +function ko(e,t){return new e({type:"string",format:"e164", +check:"string_format",abort:!1,...C(t)})}function So(e,t){return new e({ +type:"string",format:"jwt",check:"string_format",abort:!1,...C(t)})}const _o={ +Any:null,Minute:-1,Second:0,Millisecond:3,Microsecond:6};function Ao(e,t){ +return new e({type:"string",format:"datetime",check:"string_format",offset:!1, +local:!1,precision:null,...C(t)})}function To(e,t){return new e({type:"string", +format:"date",check:"string_format",...C(t)})}function Eo(e,t){return new e({ +type:"string",format:"time",check:"string_format",precision:null,...C(t)})} +function Co(e,t){return new e({type:"string",format:"duration", +check:"string_format",...C(t)})}function $o(e,t){return new e({type:"number", +checks:[],...C(t)})}function Po(e,t){return new e({type:"number",coerce:!0, +checks:[],...C(t)})}function Io(e,t){return new e({type:"number", +check:"number_format",abort:!1,format:"safeint",...C(t)})}function Do(e,t){ +return new e({type:"number",check:"number_format",abort:!1,format:"float32", +...C(t)})}function Mo(e,t){return new e({type:"number",check:"number_format", +abort:!1,format:"float64",...C(t)})}function No(e,t){return new e({ +type:"number",check:"number_format",abort:!1,format:"int32",...C(t)})} +function Ro(e,t){return new e({type:"number",check:"number_format",abort:!1, +format:"uint32",...C(t)})}function Lo(e,t){return new e({type:"boolean",...C(t) +})}function Bo(e,t){return new e({type:"boolean",coerce:!0,...C(t)})} +function jo(e,t){return new e({type:"bigint",...C(t)})}function Uo(e,t){ +return new e({type:"bigint",coerce:!0,...C(t)})}function zo(e,t){return new e({ +type:"bigint",check:"bigint_format",abort:!1,format:"int64",...C(t)})} +function Zo(e,t){return new e({type:"bigint",check:"bigint_format",abort:!1, +format:"uint64",...C(t)})}function Fo(e,t){return new e({type:"symbol",...C(t)}) +}function Ho(e,t){return new e({type:"undefined",...C(t)})}function Qo(e,t){ +return new e({type:"null",...C(t)})}function Vo(e){return new e({type:"any"})} +function qo(e){return new e({type:"unknown"})}function Wo(e,t){return new e({ +type:"never",...C(t)})}function Xo(e,t){return new e({type:"void",...C(t)})} +function Go(e,t){return new e({type:"date",...C(t)})}function Yo(e,t){ +return new e({type:"date",coerce:!0,...C(t)})}function Ko(e,t){return new e({ +type:"nan",...C(t)})}function Jo(e,t){return new It({check:"less_than",...C(t), +value:e,inclusive:!1})}function ei(e,t){return new It({check:"less_than", +...C(t),value:e,inclusive:!0})}function ti(e,t){return new Dt({ +check:"greater_than",...C(t),value:e,inclusive:!1})}function ni(e,t){ +return new Dt({check:"greater_than",...C(t),value:e,inclusive:!0})} +function ri(e){return ti(0,e)}function ai(e){return Jo(0,e)}function oi(e){ +return ei(0,e)}function ii(e){return ni(0,e)}function si(e,t){return new Mt({ +check:"multiple_of",...C(t),value:e})}function li(e,t){return new Lt({ +check:"max_size",...C(t),maximum:e})}function ci(e,t){return new Bt({ +check:"min_size",...C(t),minimum:e})}function ui(e,t){return new jt({ +check:"size_equals",...C(t),size:e})}function di(e,t){return new Ut({ +check:"max_length",...C(t),maximum:e})}function pi(e,t){return new zt({ +check:"min_length",...C(t),minimum:e})}function hi(e,t){return new Zt({ +check:"length_equals",...C(t),length:e})}function fi(e,t){return new Ht({ +check:"string_format",format:"regex",...C(t),pattern:e})}function mi(e){ +return new Qt({check:"string_format",format:"lowercase",...C(e)})} +function gi(e){return new Vt({check:"string_format",format:"uppercase",...C(e)}) +}function vi(e,t){return new qt({check:"string_format",format:"includes", +...C(t),includes:e})}function bi(e,t){return new Wt({check:"string_format", +format:"starts_with",...C(t),prefix:e})}function yi(e,t){return new Xt({ +check:"string_format",format:"ends_with",...C(t),suffix:e})}function Oi(e,t,n){ +return new Yt({check:"property",property:e,schema:t,...C(n)})}function wi(e,t){ +return new Kt({check:"mime_type",mime:e,...C(t)})}function xi(e){return new Jt({ +check:"overwrite",tx:e})}function ki(e){return xi((t=>t.normalize(e)))} +function Si(){return xi((e=>e.trim()))}function _i(){ +return xi((e=>e.toLowerCase()))}function Ai(){return xi((e=>e.toUpperCase()))} +function Ti(){return xi((e=>y(e)))}function Ei(e,t,n){return new e({ +type:"array",element:t,...C(n)})}function Ci(e,t){return new e({type:"file", +...C(t)})}function $i(e,t,n){const r=C(n);r.abort??(r.abort=!0);return new e({ +type:"custom",check:"custom",fn:t,...r})}function Pi(e,t,n){return new e({ +type:"custom",check:"custom",fn:t,...C(n)})}function Ii(e){ +const t=Di((n=>(n.addIssue=e=>{ +if("string"==typeof e)n.issues.push(W(e,n.value,t._zod.def));else{const r=e +;r.fatal&&(r.continue=!1), +r.code??(r.code="custom"),r.input??(r.input=n.value),r.inst??(r.inst=t), +r.continue??(r.continue=!t._zod.def.abort),n.issues.push(W(r))}},e(n.value,n)))) +;return t}function Di(e,t){const n=new $t({check:"custom",...C(t)}) +;return n._zod.check=e,n}function Mi(e){const t=new $t({check:"describe"}) +;return t._zod.onattach=[t=>{const n=Ka.get(t)??{};Ka.add(t,{...n,description:e +})}],t._zod.check=()=>{},t}function Ni(e){const t=new $t({check:"meta"}) +;return t._zod.onattach=[t=>{const n=Ka.get(t)??{};Ka.add(t,{...n,...e}) +}],t._zod.check=()=>{},t}function Ri(e,t){const n=C(t) +;let r=n.truthy??["true","1","yes","on","y","enabled"],a=n.falsy??["false","0","no","off","n","disabled"] +;"sensitive"!==n.case&&(r=r.map((e=>"string"==typeof e?e.toLowerCase():e)), +a=a.map((e=>"string"==typeof e?e.toLowerCase():e))) +;const o=new Set(r),i=new Set(a),s=e.Codec??Dr,l=e.Boolean??Rn,c=new s({ +type:"pipe",in:new(e.String??rn)({type:"string",error:n.error}),out:new l({ +type:"boolean",error:n.error}),transform:(e,t)=>{let r=e +;return"sensitive"!==n.case&&(r=r.toLowerCase()), +!!o.has(r)||!i.has(r)&&(t.issues.push({code:"invalid_value", +expected:"stringbool",values:[...o,...i],input:t.value,inst:c,continue:!1}),{}) +},reverseTransform:(e,t)=>!0===e?r[0]||"true":a[0]||"false",error:n.error}) +;return c}function Li(e,t,n,r={}){const a=C(r),o={...C(r),check:"string_format", +type:"string",format:t,fn:"function"==typeof n?n:e=>n.test(e),...a} +;n instanceof RegExp&&(o.pattern=n);return new e(o)}function Bi(e){ +let t=e?.target??"draft-2020-12" +;return"draft-4"===t&&(t="draft-04"),"draft-7"===t&&(t="draft-07"),{ +processors:e.processors??{},metadataRegistry:e?.metadata??Ka,target:t, +unrepresentable:e?.unrepresentable??"throw",override:e?.override??(()=>{}), +io:e?.io??"output",counter:0,seen:new Map,cycles:e?.cycles??"ref", +reused:e?.reused??"inline",external:e?.external??void 0}}function ji(e,t,n={ +path:[],schemaPath:[]}){var r;const a=e._zod.def,o=t.seen.get(e);if(o){o.count++ +;return n.schemaPath.includes(e)&&(o.cycle=n.path),o.schema}const i={schema:{}, +count:1,cycle:void 0,path:n.path};t.seen.set(e,i) +;const s=e._zod.toJSONSchema?.();if(s)i.schema=s;else{const r={...n, +schemaPath:[...n.schemaPath,e],path:n.path} +;if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,i.schema,r);else{ +const n=i.schema,o=t.processors[a.type] +;if(!o)throw new Error(`[toJSONSchema]: Non-representable type encountered: ${a.type}`) +;o(e,t,n,r)}const o=e._zod.parent +;o&&(i.ref||(i.ref=o),ji(o,t,r),t.seen.get(o).isParent=!0)} +const l=t.metadataRegistry.get(e) +;l&&Object.assign(i.schema,l),"input"===t.io&&Zi(e)&&(delete i.schema.examples, +delete i.schema.default), +"input"===t.io&&i.schema._prefault&&((r=i.schema).default??(r.default=i.schema._prefault)), +delete i.schema._prefault;return t.seen.get(e).schema}function Ui(e,t){ +const n=e.seen.get(t) +;if(!n)throw new Error("Unprocessed schema. This is a bug in Zod.") +;const r=new Map;for(const o of e.seen.entries()){ +const t=e.metadataRegistry.get(o[0])?.id;if(t){const e=r.get(t) +;if(e&&e!==o[0])throw new Error(`Duplicate schema id "${t}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`) +;r.set(t,o[0])}}const a=t=>{if(t[1].schema.$ref)return +;const r=t[1],{ref:a,defId:o}=(t=>{ +const r="draft-2020-12"===e.target?"$defs":"definitions";if(e.external){ +const n=e.external.registry.get(t[0])?.id,a=e.external.uri??(e=>e);if(n)return{ +ref:a(n)};const o=t[1].defId??t[1].schema.id??"schema"+e.counter++ +;return t[1].defId=o,{defId:o,ref:`${a("__shared")}#/${r}/${o}`}} +if(t[1]===n)return{ref:"#"} +;const a=`#/${r}/`,o=t[1].schema.id??"__schema"+e.counter++;return{defId:o, +ref:a+o}})(t);r.def={...r.schema},o&&(r.defId=o);const i=r.schema +;for(const e in i)delete i[e];i.$ref=a} +;if("throw"===e.cycles)for(const o of e.seen.entries()){const e=o[1] +;if(e.cycle)throw new Error(`Cycle detected: #/${e.cycle?.join("/")}/\n\nSet the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`) +}for(const o of e.seen.entries()){const n=o[1];if(t===o[0]){a(o);continue} +if(e.external){const n=e.external.registry.get(o[0])?.id;if(t!==o[0]&&n){a(o) +;continue}}const r=e.metadataRegistry.get(o[0])?.id +;r?a(o):(n.cycle||n.count>1&&"ref"===e.reused)&&a(o)}}function zi(e,t){ +const n=e.seen.get(t) +;if(!n)throw new Error("Unprocessed schema. This is a bug in Zod.");const r=t=>{ +const n=e.seen.get(t);if(null===n.ref)return;const a=n.def??n.schema,o={...a +},i=n.ref;if(n.ref=null,i){r(i);const n=e.seen.get(i),s=n.schema +;!s.$ref||"draft-07"!==e.target&&"draft-04"!==e.target&&"openapi-3.0"!==e.target?Object.assign(a,s):(a.allOf=a.allOf??[], +a.allOf.push(s)),Object.assign(a,o) +;if(t._zod.parent===i)for(const e in a)"$ref"!==e&&"allOf"!==e&&(e in o||delete a[e]) +;if(s.$ref)for(const e in a)"$ref"!==e&&"allOf"!==e&&e in n.def&&JSON.stringify(a[e])===JSON.stringify(n.def[e])&&delete a[e] +}const s=t._zod.parent;if(s&&s!==i){r(s);const t=e.seen.get(s) +;if(t?.schema.$ref&&(a.$ref=t.schema.$ref, +t.def))for(const e in a)"$ref"!==e&&"allOf"!==e&&e in t.def&&JSON.stringify(a[e])===JSON.stringify(t.def[e])&&delete a[e] +}e.override({zodSchema:t,jsonSchema:a,path:n.path??[]})} +;for(const s of[...e.seen.entries()].reverse())r(s[0]);const a={} +;if("draft-2020-12"===e.target?a.$schema="https://json-schema.org/draft/2020-12/schema":"draft-07"===e.target?a.$schema="http://json-schema.org/draft-07/schema#":"draft-04"===e.target?a.$schema="http://json-schema.org/draft-04/schema#":e.target, +e.external?.uri){const n=e.external.registry.get(t)?.id +;if(!n)throw new Error("Schema is missing an `id` property") +;a.$id=e.external.uri(n)}Object.assign(a,n.def??n.schema) +;const o=e.external?.defs??{};for(const s of e.seen.entries()){const e=s[1] +;e.def&&e.defId&&(o[e.defId]=e.def)} +e.external||Object.keys(o).length>0&&("draft-2020-12"===e.target?a.$defs=o:a.definitions=o) +;try{const n=JSON.parse(JSON.stringify(a)) +;return Object.defineProperty(n,"~standard",{value:{...t["~standard"], +jsonSchema:{input:Hi(t,"input",e.processors),output:Hi(t,"output",e.processors)} +},enumerable:!1,writable:!1}),n}catch(i){ +throw new Error("Error converting schema to JSON.")}}function Zi(e,t){ +const n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e) +;const r=e._zod.def;if("transform"===r.type)return!0 +;if("array"===r.type)return Zi(r.element,n) +;if("set"===r.type)return Zi(r.valueType,n) +;if("lazy"===r.type)return Zi(r.getter(),n) +;if("promise"===r.type||"optional"===r.type||"nonoptional"===r.type||"nullable"===r.type||"readonly"===r.type||"default"===r.type||"prefault"===r.type)return Zi(r.innerType,n) +;if("intersection"===r.type)return Zi(r.left,n)||Zi(r.right,n) +;if("record"===r.type||"map"===r.type)return Zi(r.keyType,n)||Zi(r.valueType,n) +;if("pipe"===r.type)return Zi(r.in,n)||Zi(r.out,n);if("object"===r.type){ +for(const e in r.shape)if(Zi(r.shape[e],n))return!0;return!1} +if("union"===r.type){for(const e of r.options)if(Zi(e,n))return!0;return!1} +if("tuple"===r.type){for(const e of r.items)if(Zi(e,n))return!0 +;return!(!r.rest||!Zi(r.rest,n))}return!1}const Fi=(e,t={})=>n=>{const r=Bi({ +...n,processors:t});return ji(e,r),Ui(r,e),zi(r,e)},Hi=(e,t,n={})=>r=>{ +const{libraryOptions:a,target:o}=r??{},i=Bi({...a??{},target:o,io:t,processors:n +});return ji(e,i),Ui(i,e),zi(i,e)},Qi={guid:"uuid",url:"uri", +datetime:"date-time",json_string:"json-string",regex:""},Vi=(e,t,n,r)=>{ +const a=n;a.type="string" +;const{minimum:o,maximum:i,format:s,patterns:l,contentEncoding:c}=e._zod.bag +;if("number"==typeof o&&(a.minLength=o), +"number"==typeof i&&(a.maxLength=i),s&&(a.format=Qi[s]??s, +""===a.format&&delete a.format, +"time"===s&&delete a.format),c&&(a.contentEncoding=c),l&&l.size>0){ +const e=[...l] +;1===e.length?a.pattern=e[0].source:e.length>1&&(a.allOf=[...e.map((e=>({ +..."draft-07"===t.target||"draft-04"===t.target||"openapi-3.0"===t.target?{ +type:"string"}:{},pattern:e.source})))])}},qi=(e,t,n,r)=>{ +const a=n,{minimum:o,maximum:i,format:s,multipleOf:l,exclusiveMaximum:c,exclusiveMinimum:u}=e._zod.bag +;"string"==typeof s&&s.includes("int")?a.type="integer":a.type="number", +"number"==typeof u&&("draft-04"===t.target||"openapi-3.0"===t.target?(a.minimum=u, +a.exclusiveMinimum=!0):a.exclusiveMinimum=u), +"number"==typeof o&&(a.minimum=o,"number"==typeof u&&"draft-04"!==t.target&&(u>=o?delete a.minimum:delete a.exclusiveMinimum)), +"number"==typeof c&&("draft-04"===t.target||"openapi-3.0"===t.target?(a.maximum=c, +a.exclusiveMaximum=!0):a.exclusiveMaximum=c), +"number"==typeof i&&(a.maximum=i,"number"==typeof c&&"draft-04"!==t.target&&(c<=i?delete a.maximum:delete a.exclusiveMaximum)), +"number"==typeof l&&(a.multipleOf=l)},Wi=(e,t,n,r)=>{n.type="boolean" +},Xi=(e,t,n,r)=>{ +if("throw"===t.unrepresentable)throw new Error("BigInt cannot be represented in JSON Schema") +},Gi=(e,t,n,r)=>{ +if("throw"===t.unrepresentable)throw new Error("Symbols cannot be represented in JSON Schema") +},Yi=(e,t,n,r)=>{ +"openapi-3.0"===t.target?(n.type="string",n.nullable=!0,n.enum=[null]):n.type="null" +},Ki=(e,t,n,r)=>{ +if("throw"===t.unrepresentable)throw new Error("Undefined cannot be represented in JSON Schema") +},Ji=(e,t,n,r)=>{ +if("throw"===t.unrepresentable)throw new Error("Void cannot be represented in JSON Schema") +},es=(e,t,n,r)=>{n.not={}},ts=(e,t,n,r)=>{},ns=(e,t,n,r)=>{},rs=(e,t,n,r)=>{ +if("throw"===t.unrepresentable)throw new Error("Date cannot be represented in JSON Schema") +},as=(e,t,n,r)=>{const a=s(e._zod.def.entries) +;a.every((e=>"number"==typeof e))&&(n.type="number"), +a.every((e=>"string"==typeof e))&&(n.type="string"),n.enum=a},os=(e,t,n,r)=>{ +const a=e._zod.def,o=[];for(const i of a.values)if(void 0===i){ +if("throw"===t.unrepresentable)throw new Error("Literal `undefined` cannot be represented in JSON Schema") +}else if("bigint"==typeof i){ +if("throw"===t.unrepresentable)throw new Error("BigInt literals cannot be represented in JSON Schema") +;o.push(Number(i))}else o.push(i);if(0===o.length);else if(1===o.length){ +const e=o[0] +;n.type=null===e?"null":typeof e,"draft-04"===t.target||"openapi-3.0"===t.target?n.enum=[e]:n.const=e +}else o.every((e=>"number"==typeof e))&&(n.type="number"), +o.every((e=>"string"==typeof e))&&(n.type="string"), +o.every((e=>"boolean"==typeof e))&&(n.type="boolean"), +o.every((e=>null===e))&&(n.type="null"),n.enum=o},is=(e,t,n,r)=>{ +if("throw"===t.unrepresentable)throw new Error("NaN cannot be represented in JSON Schema") +},ss=(e,t,n,r)=>{const a=n,o=e._zod.pattern +;if(!o)throw new Error("Pattern not found in template literal");a.type="string", +a.pattern=o.source},ls=(e,t,n,r)=>{const a=n,o={type:"string",format:"binary", +contentEncoding:"binary"},{minimum:i,maximum:s,mime:l}=e._zod.bag +;void 0!==i&&(o.minLength=i), +void 0!==s&&(o.maxLength=s),l?1===l.length?(o.contentMediaType=l[0], +Object.assign(a,o)):(Object.assign(a,o),a.anyOf=l.map((e=>({contentMediaType:e +})))):Object.assign(a,o)},cs=(e,t,n,r)=>{n.type="boolean"},us=(e,t,n,r)=>{ +if("throw"===t.unrepresentable)throw new Error("Custom types cannot be represented in JSON Schema") +},ds=(e,t,n,r)=>{ +if("throw"===t.unrepresentable)throw new Error("Function types cannot be represented in JSON Schema") +},ps=(e,t,n,r)=>{ +if("throw"===t.unrepresentable)throw new Error("Transforms cannot be represented in JSON Schema") +},hs=(e,t,n,r)=>{ +if("throw"===t.unrepresentable)throw new Error("Map cannot be represented in JSON Schema") +},fs=(e,t,n,r)=>{ +if("throw"===t.unrepresentable)throw new Error("Set cannot be represented in JSON Schema") +},ms=(e,t,n,r)=>{const a=n,o=e._zod.def,{minimum:i,maximum:s}=e._zod.bag +;"number"==typeof i&&(a.minItems=i), +"number"==typeof s&&(a.maxItems=s),a.type="array",a.items=ji(o.element,t,{...r, +path:[...r.path,"items"]})},gs=(e,t,n,r)=>{const a=n,o=e._zod.def +;a.type="object",a.properties={};const i=o.shape +;for(const c in i)a.properties[c]=ji(i[c],t,{...r, +path:[...r.path,"properties",c]}) +;const s=new Set(Object.keys(i)),l=new Set([...s].filter((e=>{ +const n=o.shape[e]._zod;return"input"===t.io?void 0===n.optin:void 0===n.optout +}))) +;l.size>0&&(a.required=Array.from(l)),"never"===o.catchall?._zod.def.type?a.additionalProperties=!1:o.catchall?o.catchall&&(a.additionalProperties=ji(o.catchall,t,{ +...r,path:[...r.path,"additionalProperties"] +})):"output"===t.io&&(a.additionalProperties=!1)},vs=(e,t,n,r)=>{ +const a=e._zod.def,o=!1===a.inclusive,i=a.options.map(((e,n)=>ji(e,t,{...r, +path:[...r.path,o?"oneOf":"anyOf",n]})));o?n.oneOf=i:n.anyOf=i},bs=(e,t,n,r)=>{ +const a=e._zod.def,o=ji(a.left,t,{...r,path:[...r.path,"allOf",0] +}),i=ji(a.right,t,{...r,path:[...r.path,"allOf",1] +}),s=e=>"allOf"in e&&1===Object.keys(e).length,l=[...s(o)?o.allOf:[o],...s(i)?i.allOf:[i]] +;n.allOf=l},ys=(e,t,n,r)=>{const a=n,o=e._zod.def;a.type="array" +;const i="draft-2020-12"===t.target?"prefixItems":"items",s="draft-2020-12"===t.target||"openapi-3.0"===t.target?"items":"additionalItems",l=o.items.map(((e,n)=>ji(e,t,{ +...r,path:[...r.path,i,n]}))),c=o.rest?ji(o.rest,t,{...r, +path:[...r.path,s,..."openapi-3.0"===t.target?[o.items.length]:[]]}):null +;"draft-2020-12"===t.target?(a.prefixItems=l, +c&&(a.items=c)):"openapi-3.0"===t.target?(a.items={anyOf:l +},c&&a.items.anyOf.push(c), +a.minItems=l.length,c||(a.maxItems=l.length)):(a.items=l, +c&&(a.additionalItems=c));const{minimum:u,maximum:d}=e._zod.bag +;"number"==typeof u&&(a.minItems=u),"number"==typeof d&&(a.maxItems=d) +},Os=(e,t,n,r)=>{const a=n,o=e._zod.def;a.type="object" +;const i=o.keyType,s=i._zod.bag,l=s?.patterns;if("loose"===o.mode&&l&&l.size>0){ +const e=ji(o.valueType,t,{...r,path:[...r.path,"patternProperties","*"]}) +;a.patternProperties={};for(const t of l)a.patternProperties[t.source]=e +}else"draft-07"!==t.target&&"draft-2020-12"!==t.target||(a.propertyNames=ji(o.keyType,t,{ +...r,path:[...r.path,"propertyNames"] +})),a.additionalProperties=ji(o.valueType,t,{...r, +path:[...r.path,"additionalProperties"]});const c=i._zod.values;if(c){ +const e=[...c].filter((e=>"string"==typeof e||"number"==typeof e)) +;e.length>0&&(a.required=e)}},ws=(e,t,n,r)=>{ +const a=e._zod.def,o=ji(a.innerType,t,r),i=t.seen.get(e) +;"openapi-3.0"===t.target?(i.ref=a.innerType,n.nullable=!0):n.anyOf=[o,{ +type:"null"}]},xs=(e,t,n,r)=>{const a=e._zod.def;ji(a.innerType,t,r) +;t.seen.get(e).ref=a.innerType},ks=(e,t,n,r)=>{const a=e._zod.def +;ji(a.innerType,t,r) +;t.seen.get(e).ref=a.innerType,n.default=JSON.parse(JSON.stringify(a.defaultValue)) +},Ss=(e,t,n,r)=>{const a=e._zod.def;ji(a.innerType,t,r) +;t.seen.get(e).ref=a.innerType, +"input"===t.io&&(n._prefault=JSON.parse(JSON.stringify(a.defaultValue))) +},_s=(e,t,n,r)=>{const a=e._zod.def;ji(a.innerType,t,r);let o +;t.seen.get(e).ref=a.innerType;try{o=a.catchValue(void 0)}catch{ +throw new Error("Dynamic catch values are not supported in JSON Schema")} +n.default=o},As=(e,t,n,r)=>{ +const a=e._zod.def,o="input"===t.io?"transform"===a.in._zod.def.type?a.out:a.in:a.out +;ji(o,t,r);t.seen.get(e).ref=o},Ts=(e,t,n,r)=>{const a=e._zod.def +;ji(a.innerType,t,r);t.seen.get(e).ref=a.innerType,n.readOnly=!0 +},Es=(e,t,n,r)=>{const a=e._zod.def;ji(a.innerType,t,r) +;t.seen.get(e).ref=a.innerType},Cs=(e,t,n,r)=>{const a=e._zod.def +;ji(a.innerType,t,r);t.seen.get(e).ref=a.innerType},$s=(e,t,n,r)=>{ +const a=e._zod.innerType;ji(a,t,r);t.seen.get(e).ref=a},Ps={string:Vi,number:qi, +boolean:Wi,bigint:Xi,symbol:Gi,null:Yi,undefined:Ki,void:Ji,never:es,any:ts, +unknown:ns,date:rs,enum:as,literal:os,nan:is,template_literal:ss,file:ls, +success:cs,custom:us,function:ds,transform:ps,map:hs,set:fs,array:ms,object:gs, +union:vs,intersection:bs,tuple:ys,record:Os,nullable:ws,nonoptional:xs, +default:ks,prefault:Ss,catch:_s,pipe:As,readonly:Ts,promise:Es,optional:Cs, +lazy:$s};function Is(e,t){if("_idmap"in e){const n=e,r=Bi({...t,processors:Ps +}),a={};for(const e of n._idmap.entries()){const[t,n]=e;ji(n,r)}const o={},i={ +registry:n,uri:t?.uri,defs:a};r.external=i;for(const e of n._idmap.entries()){ +const[t,n]=e;Ui(r,n),o[t]=zi(r,n)}if(Object.keys(a).length>0){ +const e="draft-2020-12"===r.target?"$defs":"definitions";o.__shared={[e]:a}} +return{schemas:o}}const n=Bi({...t,processors:Ps}) +;return ji(e,n),Ui(n,e),zi(n,e)}const Ds=Object.freeze(Object.defineProperty({ +__proto__:null},Symbol.toStringTag,{value:"Module" +})),Ms=Object.freeze(Object.defineProperty({__proto__:null,$ZodAny:Zn, +$ZodArray:Wn,$ZodAsyncError:r,$ZodBase64:Tn,$ZodBase64URL:Cn,$ZodBigInt:Ln, +$ZodBigIntFormat:Bn,$ZodBoolean:Rn,$ZodCIDRv4:Sn,$ZodCIDRv6:_n,$ZodCUID:pn, +$ZodCUID2:hn,$ZodCatch:Cr,$ZodCheck:$t,$ZodCheckBigIntFormat:Rt, +$ZodCheckEndsWith:Xt,$ZodCheckGreaterThan:Dt,$ZodCheckIncludes:qt, +$ZodCheckLengthEquals:Zt,$ZodCheckLessThan:It,$ZodCheckLowerCase:Qt, +$ZodCheckMaxLength:Ut,$ZodCheckMaxSize:Lt,$ZodCheckMimeType:Kt, +$ZodCheckMinLength:zt,$ZodCheckMinSize:Bt,$ZodCheckMultipleOf:Mt, +$ZodCheckNumberFormat:Nt,$ZodCheckOverwrite:Jt,$ZodCheckProperty:Yt, +$ZodCheckRegex:Ht,$ZodCheckSizeEquals:jt,$ZodCheckStartsWith:Wt, +$ZodCheckStringFormat:Ft,$ZodCheckUpperCase:Vt,$ZodCodec:Dr,$ZodCustom:Zr, +$ZodCustomStringFormat:Dn,$ZodDate:Vn,$ZodDefault:kr,$ZodDiscriminatedUnion:ar, +$ZodE164:$n,$ZodEmail:ln,$ZodEmoji:un,$ZodEncodeError:a,$ZodEnum:mr,$ZodError:J, +$ZodExactOptional:wr,$ZodFile:vr,$ZodFunction:jr,$ZodGUID:on,$ZodIPv4:wn, +$ZodIPv6:xn,$ZodISODate:bn,$ZodISODateTime:vn,$ZodISODuration:On,$ZodISOTime:yn, +$ZodIntersection:or,$ZodJWT:In,$ZodKSUID:gn,$ZodLazy:zr,$ZodLiteral:gr, +$ZodMAC:kn,$ZodMap:dr,$ZodNaN:$r,$ZodNanoID:dn,$ZodNever:Hn,$ZodNonOptional:Ar, +$ZodNull:zn,$ZodNullable:xr,$ZodNumber:Mn,$ZodNumberFormat:Nn,$ZodObject:Kn, +$ZodObjectJIT:Jn,$ZodOptional:Or,$ZodPipe:Pr,$ZodPrefault:_r,$ZodPromise:Ur, +$ZodReadonly:Rr,$ZodRealError:ee,$ZodRecord:ur,$ZodRegistry:Ga,$ZodSet:hr, +$ZodString:rn,$ZodStringFormat:an,$ZodSuccess:Er,$ZodSymbol:jn, +$ZodTemplateLiteral:Br,$ZodTransform:br,$ZodTuple:lr,$ZodType:nn,$ZodULID:fn, +$ZodURL:cn,$ZodUUID:sn,$ZodUndefined:Un,$ZodUnion:tr,$ZodUnknown:Fn,$ZodVoid:Qn, +$ZodXID:mn,$ZodXor:rr,$brand:n,$constructor:t,$input:Xa,$output:Wa,Doc:en, +JSONSchema:Ds,JSONSchemaGenerator:class{get metadataRegistry(){ +return this.ctx.metadataRegistry}get target(){return this.ctx.target} +get unrepresentable(){return this.ctx.unrepresentable}get override(){ +return this.ctx.override}get io(){return this.ctx.io}get counter(){ +return this.ctx.counter}set counter(e){this.ctx.counter=e}get seen(){ +return this.ctx.seen}constructor(e){let t=e?.target??"draft-2020-12" +;"draft-4"===t&&(t="draft-04"),"draft-7"===t&&(t="draft-07"),this.ctx=Bi({ +processors:Ps,target:t,...e?.metadata&&{metadata:e.metadata}, +...e?.unrepresentable&&{unrepresentable:e.unrepresentable},...e?.override&&{ +override:e.override},...e?.io&&{io:e.io}})}process(e,t={path:[],schemaPath:[]}){ +return ji(e,this.ctx,t)}emit(e,t){ +t&&(t.cycles&&(this.ctx.cycles=t.cycles),t.reused&&(this.ctx.reused=t.reused), +t.external&&(this.ctx.external=t.external)),Ui(this.ctx,e) +;const n=zi(this.ctx,e),{"~standard":r,...a}=n;return a}},NEVER:e, +TimePrecision:_o,_any:Vo,_array:Ei,_base64:wo,_base64url:xo,_bigint:jo, +_boolean:Lo,_catch:function(e,t,n){return new e({type:"catch",innerType:t, +catchValue:"function"==typeof n?n:()=>n})},_check:Di,_cidrv4:yo,_cidrv6:Oo, +_coercedBigint:Uo,_coercedBoolean:Bo,_coercedDate:Yo,_coercedNumber:Po, +_coercedString:eo,_cuid:uo,_cuid2:po,_custom:$i,_date:Go,_decode:ge, +_decodeAsync:Oe,_default:function(e,t,n){return new e({type:"default", +innerType:t,get defaultValue(){return"function"==typeof n?n():S(n)}})}, +_discriminatedUnion:function(e,t,n,r){return new e({type:"union",options:n, +discriminator:t,...C(r)})},_e164:ko,_email:to,_emoji:lo,_encode:fe, +_encodeAsync:be,_endsWith:yi,_enum:function(e,t,n){return new e({type:"enum", +entries:Array.isArray(t)?Object.fromEntries(t.map((e=>[e,e]))):t,...C(n)})}, +_file:Ci,_float32:Do,_float64:Mo,_gt:ti,_gte:ni,_guid:no,_includes:vi,_int:Io, +_int32:No,_int64:zo,_intersection:function(e,t,n){return new e({ +type:"intersection",left:t,right:n})},_ipv4:go,_ipv6:vo,_isoDate:To, +_isoDateTime:Ao,_isoDuration:Co,_isoTime:Eo,_jwt:So,_ksuid:mo, +_lazy:function(e,t){return new e({type:"lazy",getter:t})},_length:hi, +_literal:function(e,t,n){return new e({type:"literal", +values:Array.isArray(t)?t:[t],...C(n)})},_lowercase:mi,_lt:Jo,_lte:ei,_mac:bo, +_map:function(e,t,n,r){return new e({type:"map",keyType:t,valueType:n,...C(r)}) +},_max:ei,_maxLength:di,_maxSize:li,_mime:wi,_min:ni,_minLength:pi,_minSize:ci, +_multipleOf:si,_nan:Ko,_nanoid:co,_nativeEnum:function(e,t,n){return new e({ +type:"enum",entries:t,...C(n)})},_negative:ai,_never:Wo,_nonnegative:ii, +_nonoptional:function(e,t,n){return new e({type:"nonoptional",innerType:t, +...C(n)})},_nonpositive:oi,_normalize:ki,_null:Qo,_nullable:function(e,t){ +return new e({type:"nullable",innerType:t})},_number:$o,_optional:function(e,t){ +return new e({type:"optional",innerType:t})},_overwrite:xi,_parse:ie, +_parseAsync:le,_pipe:function(e,t,n){return new e({type:"pipe",in:t,out:n})}, +_positive:ri,_promise:function(e,t){return new e({type:"promise",innerType:t})}, +_property:Oi,_readonly:function(e,t){return new e({type:"readonly",innerType:t}) +},_record:function(e,t,n,r){return new e({type:"record",keyType:t,valueType:n, +...C(r)})},_refine:Pi,_regex:fi,_safeDecode:Se,_safeDecodeAsync:Ee, +_safeEncode:xe,_safeEncodeAsync:Ae,_safeParse:ue,_safeParseAsync:pe, +_set:function(e,t,n){return new e({type:"set",valueType:t,...C(n)})},_size:ui, +_slugify:Ti,_startsWith:bi,_string:Ja,_stringFormat:Li,_stringbool:Ri, +_success:function(e,t){return new e({type:"success",innerType:t})}, +_superRefine:Ii,_symbol:Fo,_templateLiteral:function(e,t,n){return new e({ +type:"template_literal",parts:t,...C(n)})},_toLowerCase:_i,_toUpperCase:Ai, +_transform:function(e,t){return new e({type:"transform",transform:t})},_trim:Si, +_tuple:function(e,t,n,r){const a=n instanceof nn;return new e({type:"tuple", +items:t,rest:a?n:null,...C(a?r:n)})},_uint32:Ro,_uint64:Zo,_ulid:ho, +_undefined:Ho,_union:function(e,t,n){return new e({type:"union",options:t, +...C(n)})},_unknown:qo,_uppercase:gi,_url:so,_uuid:ro,_uuidv4:ao,_uuidv6:oo, +_uuidv7:io,_void:Xo,_xid:fo,_xor:function(e,t,n){return new e({type:"union", +options:t,inclusive:!1,...C(n)})},clone:E,config:i, +createStandardJSONSchemaMethod:Hi,createToJSONSchemaMethod:Fi,decode:ve, +decodeAsync:we,describe:Mi,encode:me,encodeAsync:ye,extractDefs:Ui,finalize:zi, +flattenError:te,formatError:ne,globalConfig:o,globalRegistry:Ka, +initializeContext:Bi,isValidBase64:An,isValidBase64URL:En,isValidJWT:Pn, +locales:Va,meta:Ni,parse:se,parseAsync:ce,prettifyError:oe,process:ji, +regexes:Ct,registry:Ya,safeDecode:_e,safeDecodeAsync:Ce,safeEncode:ke, +safeEncodeAsync:Te,safeParse:de,safeParseAsync:he,toDotPath:ae,toJSONSchema:Is, +treeifyError:re,util:Y,version:tn},Symbol.toStringTag,{value:"Module" +})),Ns=Object.freeze(Object.defineProperty({__proto__:null,endsWith:yi,gt:ti, +gte:ni,includes:vi,length:hi,lowercase:mi,lt:Jo,lte:ei,maxLength:di,maxSize:li, +mime:wi,minLength:pi,minSize:ci,multipleOf:si,negative:ai,nonnegative:ii, +nonpositive:oi,normalize:ki,overwrite:xi,positive:ri,property:Oi,regex:fi, +size:ui,slugify:Ti,startsWith:bi,toLowerCase:_i,toUpperCase:Ai,trim:Si, +uppercase:gi},Symbol.toStringTag,{value:"Module" +})),Rs=t("ZodISODateTime",((e,t)=>{vn.init(e,t),ul.init(e,t)}));function Ls(e){ +return Ao(Rs,e)}const Bs=t("ZodISODate",((e,t)=>{bn.init(e,t),ul.init(e,t)})) +;function js(e){return To(Bs,e)}const Us=t("ZodISOTime",((e,t)=>{ +yn.init(e,t),ul.init(e,t)}));function zs(e){return Eo(Us,e)} +const Zs=t("ZodISODuration",((e,t)=>{On.init(e,t),ul.init(e,t)})) +;function Fs(e){return Co(Zs,e)}const Hs=Object.freeze(Object.defineProperty({ +__proto__:null,ZodISODate:Bs,ZodISODateTime:Rs,ZodISODuration:Zs,ZodISOTime:Us, +date:js,datetime:Ls,duration:Fs,time:zs},Symbol.toStringTag,{value:"Module" +})),Qs=(e,t)=>{J.init(e,t),e.name="ZodError",Object.defineProperties(e,{format:{ +value:t=>ne(e,t)},flatten:{value:t=>te(e,t)},addIssue:{value:t=>{ +e.issues.push(t),e.message=JSON.stringify(e.issues,c,2)}},addIssues:{value:t=>{ +e.issues.push(...t),e.message=JSON.stringify(e.issues,c,2)}},isEmpty:{ +get:()=>0===e.issues.length}})},Vs=t("ZodError",Qs),qs=t("ZodError",Qs,{ +Parent:Error +}),Ws=ie(qs),Xs=le(qs),Gs=ue(qs),Ys=pe(qs),Ks=fe(qs),Js=ge(qs),el=be(qs),tl=Oe(qs),nl=xe(qs),rl=Se(qs),al=Ae(qs),ol=Ee(qs),il=t("ZodType",((e,t)=>(nn.init(e,t), +Object.assign(e["~standard"],{jsonSchema:{input:Hi(e,"input"), +output:Hi(e,"output")} +}),e.toJSONSchema=Fi(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,"_def",{ +value:t}),e.check=(...n)=>e.clone(v(t,{ +checks:[...t.checks??[],...n.map((e=>"function"==typeof e?{_zod:{check:e,def:{ +check:"custom"},onattach:[]}}:e))]}),{parent:!0 +}),e.with=e.check,e.clone=(t,n)=>E(e,t,n), +e.brand=()=>e,e.register=(t,n)=>(t.add(e,n),e),e.parse=(t,n)=>Ws(e,t,n,{ +callee:e.parse +}),e.safeParse=(t,n)=>Gs(e,t,n),e.parseAsync=async(t,n)=>Xs(e,t,n,{ +callee:e.parseAsync +}),e.safeParseAsync=async(t,n)=>Ys(e,t,n),e.spa=e.safeParseAsync, +e.encode=(t,n)=>Ks(e,t,n), +e.decode=(t,n)=>Js(e,t,n),e.encodeAsync=async(t,n)=>el(e,t,n), +e.decodeAsync=async(t,n)=>tl(e,t,n), +e.safeEncode=(t,n)=>nl(e,t,n),e.safeDecode=(t,n)=>rl(e,t,n), +e.safeEncodeAsync=async(t,n)=>al(e,t,n),e.safeDecodeAsync=async(t,n)=>ol(e,t,n), +e.refine=(t,n)=>e.check(Ju(t,n)), +e.superRefine=t=>e.check(ed(t)),e.overwrite=t=>e.check(xi(t)), +e.optional=()=>bu(e), +e.exactOptional=()=>Ou(e),e.nullable=()=>xu(e),e.nullish=()=>bu(xu(e)), +e.nonoptional=t=>Cu(e,t), +e.array=()=>Bc(e),e.or=t=>Qc([e,t]),e.and=t=>Yc(e,t),e.transform=t=>Lu(e,gu(t)), +e.default=t=>_u(e,t),e.prefault=t=>Tu(e,t),e.catch=t=>Du(e,t),e.pipe=t=>Lu(e,t), +e.readonly=()=>zu(e),e.describe=t=>{const n=e.clone();return Ka.add(n,{ +description:t}),n},Object.defineProperty(e,"description",{ +get:()=>Ka.get(e)?.description,configurable:!0}),e.meta=(...t)=>{ +if(0===t.length)return Ka.get(e);const n=e.clone();return Ka.add(n,t[0]),n +},e.isOptional=()=>e.safeParse(void 0).success, +e.isNullable=()=>e.safeParse(null).success, +e.apply=t=>t(e),e))),sl=t("_ZodString",((e,t)=>{ +rn.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vi(e,t,n) +;const n=e._zod.bag +;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null, +e.regex=(...t)=>e.check(fi(...t)), +e.includes=(...t)=>e.check(vi(...t)),e.startsWith=(...t)=>e.check(bi(...t)), +e.endsWith=(...t)=>e.check(yi(...t)), +e.min=(...t)=>e.check(pi(...t)),e.max=(...t)=>e.check(di(...t)), +e.length=(...t)=>e.check(hi(...t)), +e.nonempty=(...t)=>e.check(pi(1,...t)),e.lowercase=t=>e.check(mi(t)), +e.uppercase=t=>e.check(gi(t)), +e.trim=()=>e.check(Si()),e.normalize=(...t)=>e.check(ki(...t)), +e.toLowerCase=()=>e.check(_i()), +e.toUpperCase=()=>e.check(Ai()),e.slugify=()=>e.check(Ti()) +})),ll=t("ZodString",((e,t)=>{ +rn.init(e,t),sl.init(e,t),e.email=t=>e.check(to(dl,t)), +e.url=t=>e.check(so(Ol,t)), +e.jwt=t=>e.check(So(Jl,t)),e.emoji=t=>e.check(lo(kl,t)), +e.guid=t=>e.check(no(hl,t)), +e.uuid=t=>e.check(ro(ml,t)),e.uuidv4=t=>e.check(ao(ml,t)), +e.uuidv6=t=>e.check(oo(ml,t)), +e.uuidv7=t=>e.check(io(ml,t)),e.nanoid=t=>e.check(co(_l,t)), +e.guid=t=>e.check(no(hl,t)), +e.cuid=t=>e.check(uo(Tl,t)),e.cuid2=t=>e.check(po(Cl,t)), +e.ulid=t=>e.check(ho(Pl,t)), +e.base64=t=>e.check(wo(ql,t)),e.base64url=t=>e.check(xo(Xl,t)), +e.xid=t=>e.check(fo(Dl,t)), +e.ksuid=t=>e.check(mo(Nl,t)),e.ipv4=t=>e.check(go(Ll,t)), +e.ipv6=t=>e.check(vo(zl,t)), +e.cidrv4=t=>e.check(yo(Fl,t)),e.cidrv6=t=>e.check(Oo(Ql,t)), +e.e164=t=>e.check(ko(Yl,t)), +e.datetime=t=>e.check(Ls(t)),e.date=t=>e.check(js(t)), +e.time=t=>e.check(zs(t)),e.duration=t=>e.check(Fs(t))}));function cl(e){ +return Ja(ll,e)}const ul=t("ZodStringFormat",((e,t)=>{an.init(e,t),sl.init(e,t) +})),dl=t("ZodEmail",((e,t)=>{ln.init(e,t),ul.init(e,t)}));function pl(e){ +return to(dl,e)}const hl=t("ZodGUID",((e,t)=>{on.init(e,t),ul.init(e,t)})) +;function fl(e){return no(hl,e)}const ml=t("ZodUUID",((e,t)=>{ +sn.init(e,t),ul.init(e,t)}));function gl(e){return ro(ml,e)}function vl(e){ +return ao(ml,e)}function bl(e){return oo(ml,e)}function yl(e){return io(ml,e)} +const Ol=t("ZodURL",((e,t)=>{cn.init(e,t),ul.init(e,t)}));function wl(e){ +return so(Ol,e)}function xl(e){return so(Ol,{protocol:/^https?$/,hostname:et, +...C(e)})}const kl=t("ZodEmoji",((e,t)=>{un.init(e,t),ul.init(e,t)})) +;function Sl(e){return lo(kl,e)}const _l=t("ZodNanoID",((e,t)=>{ +dn.init(e,t),ul.init(e,t)}));function Al(e){return co(_l,e)} +const Tl=t("ZodCUID",((e,t)=>{pn.init(e,t),ul.init(e,t)}));function El(e){ +return uo(Tl,e)}const Cl=t("ZodCUID2",((e,t)=>{hn.init(e,t),ul.init(e,t)})) +;function $l(e){return po(Cl,e)}const Pl=t("ZodULID",((e,t)=>{ +fn.init(e,t),ul.init(e,t)}));function Il(e){return ho(Pl,e)} +const Dl=t("ZodXID",((e,t)=>{mn.init(e,t),ul.init(e,t)}));function Ml(e){ +return fo(Dl,e)}const Nl=t("ZodKSUID",((e,t)=>{gn.init(e,t),ul.init(e,t)})) +;function Rl(e){return mo(Nl,e)}const Ll=t("ZodIPv4",((e,t)=>{ +wn.init(e,t),ul.init(e,t)}));function Bl(e){return go(Ll,e)} +const jl=t("ZodMAC",((e,t)=>{kn.init(e,t),ul.init(e,t)}));function Ul(e){ +return bo(jl,e)}const zl=t("ZodIPv6",((e,t)=>{xn.init(e,t),ul.init(e,t)})) +;function Zl(e){return vo(zl,e)}const Fl=t("ZodCIDRv4",((e,t)=>{ +Sn.init(e,t),ul.init(e,t)}));function Hl(e){return yo(Fl,e)} +const Ql=t("ZodCIDRv6",((e,t)=>{_n.init(e,t),ul.init(e,t)}));function Vl(e){ +return Oo(Ql,e)}const ql=t("ZodBase64",((e,t)=>{Tn.init(e,t),ul.init(e,t)})) +;function Wl(e){return wo(ql,e)}const Xl=t("ZodBase64URL",((e,t)=>{Cn.init(e,t), +ul.init(e,t)}));function Gl(e){return xo(Xl,e)}const Yl=t("ZodE164",((e,t)=>{ +$n.init(e,t),ul.init(e,t)}));function Kl(e){return ko(Yl,e)} +const Jl=t("ZodJWT",((e,t)=>{In.init(e,t),ul.init(e,t)}));function ec(e){ +return So(Jl,e)}const tc=t("ZodCustomStringFormat",((e,t)=>{ +Dn.init(e,t),ul.init(e,t)}));function nc(e,t,n={}){return Li(tc,e,t,n)} +function rc(e){return Li(tc,"hostname",Je,e)}function ac(e){ +return Li(tc,"hex",gt,e)}function oc(e,t){ +const n=`${e}_${t?.enc??"hex"}`,r=Ct[n] +;if(!r)throw new Error(`Unrecognized hash format: ${n}`);return Li(tc,n,r,t)} +const ic=t("ZodNumber",((e,t)=>{ +Mn.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>qi(e,t,n), +e.gt=(t,n)=>e.check(ti(t,n)), +e.gte=(t,n)=>e.check(ni(t,n)),e.min=(t,n)=>e.check(ni(t,n)), +e.lt=(t,n)=>e.check(Jo(t,n)), +e.lte=(t,n)=>e.check(ei(t,n)),e.max=(t,n)=>e.check(ei(t,n)), +e.int=t=>e.check(cc(t)),e.safe=t=>e.check(cc(t)),e.positive=t=>e.check(ti(0,t)), +e.nonnegative=t=>e.check(ni(0,t)), +e.negative=t=>e.check(Jo(0,t)),e.nonpositive=t=>e.check(ei(0,t)), +e.multipleOf=(t,n)=>e.check(si(t,n)), +e.step=(t,n)=>e.check(si(t,n)),e.finite=()=>e;const n=e._zod.bag +;e.minValue=Math.max(n.minimum??Number.NEGATIVE_INFINITY,n.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null, +e.maxValue=Math.min(n.maximum??Number.POSITIVE_INFINITY,n.exclusiveMaximum??Number.POSITIVE_INFINITY)??null, +e.isInt=(n.format??"").includes("int")||Number.isSafeInteger(n.multipleOf??.5), +e.isFinite=!0,e.format=n.format??null}));function sc(e){return $o(ic,e)} +const lc=t("ZodNumberFormat",((e,t)=>{Nn.init(e,t),ic.init(e,t)})) +;function cc(e){return Io(lc,e)}function uc(e){return Do(lc,e)}function dc(e){ +return Mo(lc,e)}function pc(e){return No(lc,e)}function hc(e){return Ro(lc,e)} +const fc=t("ZodBoolean",((e,t)=>{ +Rn.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>Wi(0,0,t)})) +;function mc(e){return Lo(fc,e)}const gc=t("ZodBigInt",((e,t)=>{ +Ln.init(e,t),il.init(e,t), +e._zod.processJSONSchema=(e,t,n)=>Xi(0,e),e.gte=(t,n)=>e.check(ni(t,n)), +e.min=(t,n)=>e.check(ni(t,n)), +e.gt=(t,n)=>e.check(ti(t,n)),e.gte=(t,n)=>e.check(ni(t,n)), +e.min=(t,n)=>e.check(ni(t,n)), +e.lt=(t,n)=>e.check(Jo(t,n)),e.lte=(t,n)=>e.check(ei(t,n)), +e.max=(t,n)=>e.check(ei(t,n)), +e.positive=t=>e.check(ti(BigInt(0),t)),e.negative=t=>e.check(Jo(BigInt(0),t)), +e.nonpositive=t=>e.check(ei(BigInt(0),t)), +e.nonnegative=t=>e.check(ni(BigInt(0),t)),e.multipleOf=(t,n)=>e.check(si(t,n)) +;const n=e._zod.bag +;e.minValue=n.minimum??null,e.maxValue=n.maximum??null,e.format=n.format??null +}));function vc(e){return jo(gc,e)}const bc=t("ZodBigIntFormat",((e,t)=>{ +Bn.init(e,t),gc.init(e,t)}));function yc(e){return zo(bc,e)}function Oc(e){ +return Zo(bc,e)}const wc=t("ZodSymbol",((e,t)=>{ +jn.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>Gi(0,e)})) +;function xc(e){return Fo(wc,e)}const kc=t("ZodUndefined",((e,t)=>{Un.init(e,t), +il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>Ki(0,e)}));function Sc(e){ +return Ho(kc,e)}const _c=t("ZodNull",((e,t)=>{ +zn.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>Yi(0,e,t)})) +;function Ac(e){return Qo(_c,e)}const Tc=t("ZodAny",((e,t)=>{ +Zn.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>{}}));function Ec(){ +return Vo(Tc)}const Cc=t("ZodUnknown",((e,t)=>{ +Fn.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>{}}));function $c(){ +return qo(Cc)}const Pc=t("ZodNever",((e,t)=>{ +Hn.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>es(0,0,t)})) +;function Ic(e){return Wo(Pc,e)}const Dc=t("ZodVoid",((e,t)=>{ +Qn.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>Ji(0,e)})) +;function Mc(e){return Xo(Dc,e)}const Nc=t("ZodDate",((e,t)=>{ +Vn.init(e,t),il.init(e,t), +e._zod.processJSONSchema=(e,t,n)=>rs(0,e),e.min=(t,n)=>e.check(ni(t,n)), +e.max=(t,n)=>e.check(ei(t,n));const n=e._zod.bag +;e.minDate=n.minimum?new Date(n.minimum):null, +e.maxDate=n.maximum?new Date(n.maximum):null}));function Rc(e){return Go(Nc,e)} +const Lc=t("ZodArray",((e,t)=>{ +Wn.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ms(e,t,n,r), +e.element=t.element, +e.min=(t,n)=>e.check(pi(t,n)),e.nonempty=t=>e.check(pi(1,t)), +e.max=(t,n)=>e.check(di(t,n)), +e.length=(t,n)=>e.check(hi(t,n)),e.unwrap=()=>e.element}));function Bc(e,t){ +return Ei(Lc,e,t)}function jc(e){const t=e._zod.def.shape +;return cu(Object.keys(t))}const Uc=t("ZodObject",((e,t)=>{ +Jn.init(e,t),il.init(e,t), +e._zod.processJSONSchema=(t,n,r)=>gs(e,t,n,r),m(e,"shape",(()=>t.shape)), +e.keyof=()=>cu(Object.keys(e._zod.def.shape)),e.catchall=t=>e.clone({ +...e._zod.def,catchall:t}),e.passthrough=()=>e.clone({...e._zod.def, +catchall:$c()}),e.loose=()=>e.clone({...e._zod.def,catchall:$c() +}),e.strict=()=>e.clone({...e._zod.def,catchall:Ic()}),e.strip=()=>e.clone({ +...e._zod.def,catchall:void 0 +}),e.extend=t=>R(e,t),e.safeExtend=t=>L(e,t),e.merge=t=>B(e,t),e.pick=t=>M(e,t), +e.omit=t=>N(e,t),e.partial=(...t)=>j(vu,e,t[0]),e.required=(...t)=>U(Eu,e,t[0]) +}));function zc(e,t){const n={type:"object",shape:e??{},...C(t)} +;return new Uc(n)}function Zc(e,t){return new Uc({type:"object",shape:e, +catchall:Ic(),...C(t)})}function Fc(e,t){return new Uc({type:"object",shape:e, +catchall:$c(),...C(t)})}const Hc=t("ZodUnion",((e,t)=>{ +tr.init(e,t),il.init(e,t), +e._zod.processJSONSchema=(t,n,r)=>vs(e,t,n,r),e.options=t.options})) +;function Qc(e,t){return new Hc({type:"union",options:e,...C(t)})} +const Vc=t("ZodXor",((e,t)=>{ +Hc.init(e,t),rr.init(e,t),e._zod.processJSONSchema=(t,n,r)=>vs(e,t,n,r), +e.options=t.options}));function qc(e,t){return new Vc({type:"union",options:e, +inclusive:!1,...C(t)})}const Wc=t("ZodDiscriminatedUnion",((e,t)=>{Hc.init(e,t), +ar.init(e,t)}));function Xc(e,t,n){return new Wc({type:"union",options:t, +discriminator:e,...C(n)})}const Gc=t("ZodIntersection",((e,t)=>{ +or.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>bs(e,t,n,r)})) +;function Yc(e,t){return new Gc({type:"intersection",left:e,right:t})} +const Kc=t("ZodTuple",((e,t)=>{ +lr.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ys(e,t,n,r), +e.rest=t=>e.clone({...e._zod.def,rest:t})}));function Jc(e,t,n){ +const r=t instanceof nn;return new Kc({type:"tuple",items:e,rest:r?t:null, +...C(r?n:t)})}const eu=t("ZodRecord",((e,t)=>{ +ur.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Os(e,t,n,r), +e.keyType=t.keyType,e.valueType=t.valueType}));function tu(e,t,n){ +return new eu({type:"record",keyType:e,valueType:t,...C(n)})}function nu(e,t,n){ +const r=E(e);return r._zod.values=void 0,new eu({type:"record",keyType:r, +valueType:t,...C(n)})}function ru(e,t,n){return new eu({type:"record",keyType:e, +valueType:t,mode:"loose",...C(n)})}const au=t("ZodMap",((e,t)=>{ +dr.init(e,t),il.init(e,t), +e._zod.processJSONSchema=(e,t,n)=>hs(0,e),e.keyType=t.keyType, +e.valueType=t.valueType, +e.min=(...t)=>e.check(ci(...t)),e.nonempty=t=>e.check(ci(1,t)), +e.max=(...t)=>e.check(li(...t)),e.size=(...t)=>e.check(ui(...t))})) +;function ou(e,t,n){return new au({type:"map",keyType:e,valueType:t,...C(n)})} +const iu=t("ZodSet",((e,t)=>{ +hr.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>fs(0,e), +e.min=(...t)=>e.check(ci(...t)), +e.nonempty=t=>e.check(ci(1,t)),e.max=(...t)=>e.check(li(...t)), +e.size=(...t)=>e.check(ui(...t))}));function su(e,t){return new iu({type:"set", +valueType:e,...C(t)})}const lu=t("ZodEnum",((e,t)=>{ +mr.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>as(e,0,n), +e.enum=t.entries,e.options=Object.values(t.entries) +;const n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{const a={} +;for(const o of e){if(!n.has(o))throw new Error(`Key ${o} not found in enum`) +;a[o]=t.entries[o]}return new lu({...t,checks:[],...C(r),entries:a}) +},e.exclude=(e,r)=>{const a={...t.entries};for(const t of e){ +if(!n.has(t))throw new Error(`Key ${t} not found in enum`);delete a[t]} +return new lu({...t,checks:[],...C(r),entries:a})}}));function cu(e,t){ +const n=Array.isArray(e)?Object.fromEntries(e.map((e=>[e,e]))):e;return new lu({ +type:"enum",entries:n,...C(t)})}function uu(e,t){return new lu({type:"enum", +entries:e,...C(t)})}const du=t("ZodLiteral",((e,t)=>{ +gr.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>os(e,t,n), +e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){ +if(t.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.") +;return t.values[0]}})}));function pu(e,t){return new du({type:"literal", +values:Array.isArray(e)?e:[e],...C(t)})}const hu=t("ZodFile",((e,t)=>{ +vr.init(e,t), +il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ls(e,0,n),e.min=(t,n)=>e.check(ci(t,n)), +e.max=(t,n)=>e.check(li(t,n)), +e.mime=(t,n)=>e.check(wi(Array.isArray(t)?t:[t],n))}));function fu(e){ +return Ci(hu,e)}const mu=t("ZodTransform",((e,t)=>{ +br.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>ps(0,e), +e._zod.parse=(n,r)=>{if("backward"===r.direction)throw new a(e.constructor.name) +;n.addIssue=r=>{if("string"==typeof r)n.issues.push(W(r,n.value,t));else{ +const t=r +;t.fatal&&(t.continue=!1),t.code??(t.code="custom"),t.input??(t.input=n.value), +t.inst??(t.inst=e),n.issues.push(W(t))}};const o=t.transform(n.value,n) +;return o instanceof Promise?o.then((e=>(n.value=e,n))):(n.value=o,n)}})) +;function gu(e){return new mu({type:"transform",transform:e})} +const vu=t("ZodOptional",((e,t)=>{ +Or.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Cs(e,t,0,r), +e.unwrap=()=>e._zod.def.innerType}));function bu(e){return new vu({ +type:"optional",innerType:e})}const yu=t("ZodExactOptional",((e,t)=>{ +wr.init(e,t), +il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Cs(e,t,0,r),e.unwrap=()=>e._zod.def.innerType +}));function Ou(e){return new yu({type:"optional",innerType:e})} +const wu=t("ZodNullable",((e,t)=>{ +xr.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ws(e,t,n,r), +e.unwrap=()=>e._zod.def.innerType}));function xu(e){return new wu({ +type:"nullable",innerType:e})}function ku(e){return bu(xu(e))} +const Su=t("ZodDefault",((e,t)=>{ +kr.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ks(e,t,n,r), +e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap}));function _u(e,t){ +return new Su({type:"default",innerType:e,get defaultValue(){ +return"function"==typeof t?t():S(t)}})}const Au=t("ZodPrefault",((e,t)=>{ +_r.init(e,t), +il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ss(e,t,n,r),e.unwrap=()=>e._zod.def.innerType +}));function Tu(e,t){return new Au({type:"prefault",innerType:e, +get defaultValue(){return"function"==typeof t?t():S(t)}})} +const Eu=t("ZodNonOptional",((e,t)=>{ +Ar.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>xs(e,t,0,r), +e.unwrap=()=>e._zod.def.innerType}));function Cu(e,t){return new Eu({ +type:"nonoptional",innerType:e,...C(t)})}const $u=t("ZodSuccess",((e,t)=>{ +Er.init(e,t), +il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>cs(0,0,t),e.unwrap=()=>e._zod.def.innerType +}));function Pu(e){return new $u({type:"success",innerType:e})} +const Iu=t("ZodCatch",((e,t)=>{ +Cr.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>_s(e,t,n,r), +e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap}));function Du(e,t){ +return new Iu({type:"catch",innerType:e,catchValue:"function"==typeof t?t:()=>t +})}const Mu=t("ZodNaN",((e,t)=>{ +$r.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>is(0,e)})) +;function Nu(e){return Ko(Mu,e)}const Ru=t("ZodPipe",((e,t)=>{ +Pr.init(e,t),il.init(e,t), +e._zod.processJSONSchema=(t,n,r)=>As(e,t,0,r),e.in=t.in,e.out=t.out})) +;function Lu(e,t){return new Ru({type:"pipe",in:e,out:t})} +const Bu=t("ZodCodec",((e,t)=>{Ru.init(e,t),Dr.init(e,t)}));function ju(e,t,n){ +return new Bu({type:"pipe",in:e,out:t,transform:n.decode, +reverseTransform:n.encode})}const Uu=t("ZodReadonly",((e,t)=>{ +Rr.init(e,t),il.init(e,t), +e._zod.processJSONSchema=(t,n,r)=>Ts(e,t,n,r),e.unwrap=()=>e._zod.def.innerType +}));function zu(e){return new Uu({type:"readonly",innerType:e})} +const Zu=t("ZodTemplateLiteral",((e,t)=>{ +Br.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ss(e,0,n)})) +;function Fu(e,t){return new Zu({type:"template_literal",parts:e,...C(t)})} +const Hu=t("ZodLazy",((e,t)=>{ +zr.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$s(e,t,0,r), +e.unwrap=()=>e._zod.def.getter()}));function Qu(e){return new Hu({type:"lazy", +getter:e})}const Vu=t("ZodPromise",((e,t)=>{ +Ur.init(e,t),il.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Es(e,t,0,r), +e.unwrap=()=>e._zod.def.innerType}));function qu(e){return new Vu({ +type:"promise",innerType:e})}const Wu=t("ZodFunction",((e,t)=>{ +jr.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>ds(0,e)})) +;function Xu(e){return new Wu({type:"function", +input:Array.isArray(e?.input)?Jc(e?.input):e?.input??Bc($c()), +output:e?.output??$c()})}const Gu=t("ZodCustom",((e,t)=>{ +Zr.init(e,t),il.init(e,t),e._zod.processJSONSchema=(e,t,n)=>us(0,e)})) +;function Yu(e){const t=new $t({check:"custom"});return t._zod.check=e,t} +function Ku(e,t){return $i(Gu,e??(()=>!0),t)}function Ju(e,t={}){ +return Pi(Gu,e,t)}function ed(e){return Ii(e)}const td=Mi,nd=Ni +;function rd(e,t={}){const n=new Gu({type:"custom",check:"custom", +fn:t=>t instanceof e,abort:!0,...C(t)}) +;return n._zod.bag.Class=e,n._zod.check=t=>{ +t.value instanceof e||t.issues.push({code:"invalid_type",expected:e.name, +input:t.value,inst:n,path:[...n._zod.def.path??[]]})},n}const ad=(...e)=>Ri({ +Codec:Bu,Boolean:fc,String:ll},...e);function od(e){ +const t=Qu((()=>Qc([cl(e),sc(),mc(),Ac(),Bc(t),tu(cl(),t)])));return t} +function id(e,t){return Lu(gu(e),t)} +const sd=Object.freeze(Object.defineProperty({__proto__:null,ZodAny:Tc, +ZodArray:Lc,ZodBase64:ql,ZodBase64URL:Xl,ZodBigInt:gc,ZodBigIntFormat:bc, +ZodBoolean:fc,ZodCIDRv4:Fl,ZodCIDRv6:Ql,ZodCUID:Tl,ZodCUID2:Cl,ZodCatch:Iu, +ZodCodec:Bu,ZodCustom:Gu,ZodCustomStringFormat:tc,ZodDate:Nc,ZodDefault:Su, +ZodDiscriminatedUnion:Wc,ZodE164:Yl,ZodEmail:dl,ZodEmoji:kl,ZodEnum:lu, +ZodExactOptional:yu,ZodFile:hu,ZodFunction:Wu,ZodGUID:hl,ZodIPv4:Ll,ZodIPv6:zl, +ZodIntersection:Gc,ZodJWT:Jl,ZodKSUID:Nl,ZodLazy:Hu,ZodLiteral:du,ZodMAC:jl, +ZodMap:au,ZodNaN:Mu,ZodNanoID:_l,ZodNever:Pc,ZodNonOptional:Eu,ZodNull:_c, +ZodNullable:wu,ZodNumber:ic,ZodNumberFormat:lc,ZodObject:Uc,ZodOptional:vu, +ZodPipe:Ru,ZodPrefault:Au,ZodPromise:Vu,ZodReadonly:Uu,ZodRecord:eu,ZodSet:iu, +ZodString:ll,ZodStringFormat:ul,ZodSuccess:$u,ZodSymbol:wc, +ZodTemplateLiteral:Zu,ZodTransform:mu,ZodTuple:Kc,ZodType:il,ZodULID:Pl, +ZodURL:Ol,ZodUUID:ml,ZodUndefined:kc,ZodUnion:Hc,ZodUnknown:Cc,ZodVoid:Dc, +ZodXID:Dl,ZodXor:Vc,_ZodString:sl,_default:_u,_function:Xu,any:Ec,array:Bc, +base64:Wl,base64url:Gl,bigint:vc,boolean:mc,catch:Du,check:Yu,cidrv4:Hl, +cidrv6:Vl,codec:ju,cuid:El,cuid2:$l,custom:Ku,date:Rc,describe:td, +discriminatedUnion:Xc,e164:Kl,email:pl,emoji:Sl,enum:cu,exactOptional:Ou, +file:fu,float32:uc,float64:dc,function:Xu,guid:fl,hash:oc,hex:ac,hostname:rc, +httpUrl:xl,instanceof:rd,int:cc,int32:pc,int64:yc,intersection:Yc,ipv4:Bl, +ipv6:Zl,json:od,jwt:ec,keyof:jc,ksuid:Rl,lazy:Qu,literal:pu,looseObject:Fc, +looseRecord:ru,mac:Ul,map:ou,meta:nd,nan:Nu,nanoid:Al,nativeEnum:uu,never:Ic, +nonoptional:Cu,null:Ac,nullable:xu,nullish:ku,number:sc,object:zc,optional:bu, +partialRecord:nu,pipe:Lu,prefault:Tu,preprocess:id,promise:qu,readonly:zu, +record:tu,refine:Ju,set:su,strictObject:Zc,string:cl,stringFormat:nc, +stringbool:ad,success:Pu,superRefine:ed,symbol:xc,templateLiteral:Fu, +transform:gu,tuple:Jc,uint32:hc,uint64:Oc,ulid:Il,undefined:Sc,union:Qc, +unknown:$c,url:wl,uuid:gl,uuidv4:vl,uuidv6:bl,uuidv7:yl,void:Mc,xid:Ml,xor:qc +},Symbol.toStringTag,{value:"Module"}));var ld;ld||(ld={});const cd={...sd, +...Ns,iso:Hs +},ud=new Set(["$schema","$ref","$defs","definitions","$id","id","$comment","$anchor","$vocabulary","$dynamicRef","$dynamicAnchor","type","enum","const","anyOf","oneOf","allOf","not","properties","required","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","items","prefixItems","additionalItems","minItems","maxItems","uniqueItems","contains","minContains","maxContains","minLength","maxLength","pattern","format","minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf","description","default","contentEncoding","contentMediaType","contentSchema","unevaluatedItems","unevaluatedProperties","if","then","else","dependentSchemas","dependentRequired","nullable","readOnly"]) +;function dd(e,t){if(void 0!==e.not){ +if("object"==typeof e.not&&0===Object.keys(e.not).length)return cd.never() +;throw new Error("not is not supported in Zod (except { not: {} } for never)")} +if(void 0!==e.unevaluatedItems)throw new Error("unevaluatedItems is not supported") +;if(void 0!==e.unevaluatedProperties)throw new Error("unevaluatedProperties is not supported") +;if(void 0!==e.if||void 0!==e.then||void 0!==e.else)throw new Error("Conditional schemas (if/then/else) are not supported") +;if(void 0!==e.dependentSchemas||void 0!==e.dependentRequired)throw new Error("dependentSchemas and dependentRequired are not supported") +;if(e.$ref){const n=e.$ref;if(t.refs.has(n))return t.refs.get(n) +;if(t.processing.has(n))return cd.lazy((()=>{ +if(!t.refs.has(n))throw new Error(`Circular reference not resolved: ${n}`) +;return t.refs.get(n)}));t.processing.add(n);const r=function(e,t){ +if(!e.startsWith("#"))throw new Error("External $ref is not supported, only local refs (#/...) are allowed") +;const n=e.slice(1).split("/").filter(Boolean) +;if(0===n.length)return t.rootSchema +;const r="draft-2020-12"===t.version?"$defs":"definitions";if(n[0]===r){ +const r=n[1];if(!r||!t.defs[r])throw new Error(`Reference not found: ${e}`) +;return t.defs[r]}throw new Error(`Reference not found: ${e}`)}(n,t),a=pd(r,t) +;return t.refs.set(n,a),t.processing.delete(n),a}if(void 0!==e.enum){ +const n=e.enum +;if("openapi-3.0"===t.version&&!0===e.nullable&&1===n.length&&null===n[0])return cd.null() +;if(0===n.length)return cd.never();if(1===n.length)return cd.literal(n[0]) +;if(n.every((e=>"string"==typeof e)))return cd.enum(n) +;const r=n.map((e=>cd.literal(e))) +;return r.length<2?r[0]:cd.union([r[0],r[1],...r.slice(2)])} +if(void 0!==e.const)return cd.literal(e.const);const n=e.type +;if(Array.isArray(n)){const r=n.map((n=>dd({...e,type:n},t))) +;return 0===r.length?cd.never():1===r.length?r[0]:cd.union(r)} +if(!n)return cd.any();let r;switch(n){case"string":{let t=cd.string() +;if(e.format){const n=e.format +;"email"===n?t=t.check(cd.email()):"uri"===n||"uri-reference"===n?t=t.check(cd.url()):"uuid"===n||"guid"===n?t=t.check(cd.uuid()):"date-time"===n?t=t.check(cd.iso.datetime()):"date"===n?t=t.check(cd.iso.date()):"time"===n?t=t.check(cd.iso.time()):"duration"===n?t=t.check(cd.iso.duration()):"ipv4"===n?t=t.check(cd.ipv4()):"ipv6"===n?t=t.check(cd.ipv6()):"mac"===n?t=t.check(cd.mac()):"cidr"===n?t=t.check(cd.cidrv4()):"cidr-v6"===n?t=t.check(cd.cidrv6()):"base64"===n?t=t.check(cd.base64()):"base64url"===n?t=t.check(cd.base64url()):"e164"===n?t=t.check(cd.e164()):"jwt"===n?t=t.check(cd.jwt()):"emoji"===n?t=t.check(cd.emoji()):"nanoid"===n?t=t.check(cd.nanoid()):"cuid"===n?t=t.check(cd.cuid()):"cuid2"===n?t=t.check(cd.cuid2()):"ulid"===n?t=t.check(cd.ulid()):"xid"===n?t=t.check(cd.xid()):"ksuid"===n&&(t=t.check(cd.ksuid())) +} +"number"==typeof e.minLength&&(t=t.min(e.minLength)),"number"==typeof e.maxLength&&(t=t.max(e.maxLength)), +e.pattern&&(t=t.regex(new RegExp(e.pattern))),r=t;break}case"number": +case"integer":{let t="integer"===n?cd.number().int():cd.number() +;"number"==typeof e.minimum&&(t=t.min(e.minimum)), +"number"==typeof e.maximum&&(t=t.max(e.maximum)), +"number"==typeof e.exclusiveMinimum?t=t.gt(e.exclusiveMinimum):!0===e.exclusiveMinimum&&"number"==typeof e.minimum&&(t=t.gt(e.minimum)), +"number"==typeof e.exclusiveMaximum?t=t.lt(e.exclusiveMaximum):!0===e.exclusiveMaximum&&"number"==typeof e.maximum&&(t=t.lt(e.maximum)), +"number"==typeof e.multipleOf&&(t=t.multipleOf(e.multipleOf)),r=t;break} +case"boolean":r=cd.boolean();break;case"null":r=cd.null();break;case"object":{ +const n={},a=e.properties||{},o=new Set(e.required||[]) +;for(const[e,r]of Object.entries(a)){const a=pd(r,t) +;n[e]=o.has(e)?a:a.optional()}if(e.propertyNames){ +const a=pd(e.propertyNames,t),o=e.additionalProperties&&"object"==typeof e.additionalProperties?pd(e.additionalProperties,t):cd.any() +;if(0===Object.keys(n).length){r=cd.record(a,o);break} +const i=cd.object(n).passthrough(),s=cd.looseRecord(a,o);r=cd.intersection(i,s) +;break}if(e.patternProperties){const a=e.patternProperties,o=Object.keys(a),i=[] +;for(const e of o){const n=pd(a[e],t),r=cd.string().regex(new RegExp(e)) +;i.push(cd.looseRecord(r,n))}const s=[] +;if(Object.keys(n).length>0&&s.push(cd.object(n).passthrough()), +s.push(...i),0===s.length)r=cd.object({}).passthrough();else if(1===s.length)r=s[0];else{ +let e=cd.intersection(s[0],s[1]) +;for(let t=2;tpd(e,t))),i=a&&"object"==typeof a&&!Array.isArray(a)?pd(a,t):void 0 +;r=i?cd.tuple(o).rest(i):cd.tuple(o), +"number"==typeof e.minItems&&(r=r.check(cd.minLength(e.minItems))), +"number"==typeof e.maxItems&&(r=r.check(cd.maxLength(e.maxItems))) +}else if(Array.isArray(a)){ +const n=a.map((e=>pd(e,t))),o=e.additionalItems&&"object"==typeof e.additionalItems?pd(e.additionalItems,t):void 0 +;r=o?cd.tuple(n).rest(o):cd.tuple(n), +"number"==typeof e.minItems&&(r=r.check(cd.minLength(e.minItems))), +"number"==typeof e.maxItems&&(r=r.check(cd.maxLength(e.maxItems))) +}else if(void 0!==a){const n=pd(a,t);let o=cd.array(n) +;"number"==typeof e.minItems&&(o=o.min(e.minItems)), +"number"==typeof e.maxItems&&(o=o.max(e.maxItems)),r=o}else r=cd.array(cd.any()) +;break}default:throw new Error(`Unsupported type: ${n}`)} +return e.description&&(r=r.describe(e.description)), +void 0!==e.default&&(r=r.default(e.default)),r}function pd(e,t){ +if("boolean"==typeof e)return e?cd.any():cd.never();let n=dd(e,t) +;const r=e.type||void 0!==e.enum||void 0!==e.const +;if(e.anyOf&&Array.isArray(e.anyOf)){ +const a=e.anyOf.map((e=>pd(e,t))),o=cd.union(a);n=r?cd.intersection(n,o):o} +if(e.oneOf&&Array.isArray(e.oneOf)){ +const a=e.oneOf.map((e=>pd(e,t))),o=cd.xor(a);n=r?cd.intersection(n,o):o} +if(e.allOf&&Array.isArray(e.allOf))if(0===e.allOf.length)n=r?n:cd.any();else{ +let a=r?n:pd(e.allOf[0],t) +;for(let n=r?0:1;n0&&t.registry.add(n,a),n}function hd(e){ +return eo(ll,e)}const fd=Object.freeze(Object.defineProperty({__proto__:null, +bigint:function(e){return Uo(gc,e)},boolean:function(e){return Bo(fc,e)}, +date:function(e){return Yo(Nc,e)},number:function(e){return Po(ic,e)},string:hd +},Symbol.toStringTag,{value:"Module"}));i(ea()) +;const md=Object.freeze(Object.defineProperty({__proto__:null,$brand:n, +$input:Xa,$output:Wa,NEVER:e,TimePrecision:_o,ZodAny:Tc,ZodArray:Lc, +ZodBase64:ql,ZodBase64URL:Xl,ZodBigInt:gc,ZodBigIntFormat:bc,ZodBoolean:fc, +ZodCIDRv4:Fl,ZodCIDRv6:Ql,ZodCUID:Tl,ZodCUID2:Cl,ZodCatch:Iu,ZodCodec:Bu, +ZodCustom:Gu,ZodCustomStringFormat:tc,ZodDate:Nc,ZodDefault:Su, +ZodDiscriminatedUnion:Wc,ZodE164:Yl,ZodEmail:dl,ZodEmoji:kl,ZodEnum:lu, +ZodError:Vs,ZodExactOptional:yu,ZodFile:hu,get ZodFirstPartyTypeKind(){return ld +},ZodFunction:Wu,ZodGUID:hl,ZodIPv4:Ll,ZodIPv6:zl,ZodISODate:Bs, +ZodISODateTime:Rs,ZodISODuration:Zs,ZodISOTime:Us,ZodIntersection:Gc, +ZodIssueCode:{invalid_type:"invalid_type",too_big:"too_big", +too_small:"too_small",invalid_format:"invalid_format", +not_multiple_of:"not_multiple_of",unrecognized_keys:"unrecognized_keys", +invalid_union:"invalid_union",invalid_key:"invalid_key", +invalid_element:"invalid_element",invalid_value:"invalid_value",custom:"custom" +},ZodJWT:Jl,ZodKSUID:Nl,ZodLazy:Hu,ZodLiteral:du,ZodMAC:jl,ZodMap:au,ZodNaN:Mu, +ZodNanoID:_l,ZodNever:Pc,ZodNonOptional:Eu,ZodNull:_c,ZodNullable:wu, +ZodNumber:ic,ZodNumberFormat:lc,ZodObject:Uc,ZodOptional:vu,ZodPipe:Ru, +ZodPrefault:Au,ZodPromise:Vu,ZodReadonly:Uu,ZodRealError:qs,ZodRecord:eu, +ZodSet:iu,ZodString:ll,ZodStringFormat:ul,ZodSuccess:$u,ZodSymbol:wc, +ZodTemplateLiteral:Zu,ZodTransform:mu,ZodTuple:Kc,ZodType:il,ZodULID:Pl, +ZodURL:Ol,ZodUUID:ml,ZodUndefined:kc,ZodUnion:Hc,ZodUnknown:Cc,ZodVoid:Dc, +ZodXID:Dl,ZodXor:Vc,_ZodString:sl,_default:_u,_function:Xu,any:Ec,array:Bc, +base64:Wl,base64url:Gl,bigint:vc,boolean:mc,catch:Du,check:Yu,cidrv4:Hl, +cidrv6:Vl,clone:E,codec:ju,coerce:fd,config:i,core:Ms,cuid:El,cuid2:$l, +custom:Ku,date:Rc,decode:Js,decodeAsync:tl,describe:td,discriminatedUnion:Xc, +e164:Kl,email:pl,emoji:Sl,encode:Ks,encodeAsync:el,endsWith:yi,enum:cu, +exactOptional:Ou,file:fu,flattenError:te,float32:uc,float64:dc,formatError:ne, +fromJSONSchema:function(e,t){if("boolean"==typeof e)return e?cd.any():cd.never() +;const n=function(e,t){const n=e.$schema +;return"https://json-schema.org/draft/2020-12/schema"===n?"draft-2020-12":"http://json-schema.org/draft-07/schema#"===n?"draft-7":"http://json-schema.org/draft-04/schema#"===n?"draft-4":t??"draft-2020-12" +}(e,t?.defaultTarget);return pd(e,{version:n,defs:e.$defs||e.definitions||{}, +refs:new Map,processing:new Set,rootSchema:e,registry:t?.registry??Ka})}, +function:Xu,getErrorMap:function(){return i().customError},globalRegistry:Ka, +gt:ti,gte:ni,guid:fl,hash:oc,hex:ac,hostname:rc,httpUrl:xl,includes:vi, +instanceof:rd,int:cc,int32:pc,int64:yc,intersection:Yc,ipv4:Bl,ipv6:Zl,iso:Hs, +json:od,jwt:ec,keyof:jc,ksuid:Rl,lazy:Qu,length:hi,literal:pu,locales:Va, +looseObject:Fc,looseRecord:ru,lowercase:mi,lt:Jo,lte:ei,mac:Ul,map:ou, +maxLength:di,maxSize:li,meta:nd,mime:wi,minLength:pi,minSize:ci,multipleOf:si, +nan:Nu,nanoid:Al,nativeEnum:uu,negative:ai,never:Ic,nonnegative:ii, +nonoptional:Cu,nonpositive:oi,normalize:ki,null:Ac,nullable:xu,nullish:ku, +number:sc,object:zc,optional:bu,overwrite:xi,parse:Ws,parseAsync:Xs, +partialRecord:nu,pipe:Lu,positive:ri,prefault:Tu,preprocess:id,prettifyError:oe, +promise:qu,property:Oi,readonly:zu,record:tu,refine:Ju,regex:fi,regexes:Ct, +registry:Ya,safeDecode:rl,safeDecodeAsync:ol,safeEncode:nl,safeEncodeAsync:al, +safeParse:Gs,safeParseAsync:Ys,set:su,setErrorMap:function(e){i({customError:e}) +},size:ui,slugify:Ti,startsWith:bi,strictObject:Zc,string:cl,stringFormat:nc, +stringbool:ad,success:Pu,superRefine:ed,symbol:xc,templateLiteral:Fu, +toJSONSchema:Is,toLowerCase:_i,toUpperCase:Ai,transform:gu,treeifyError:re, +trim:Si,tuple:Jc,uint32:hc,uint64:Oc,ulid:Il,undefined:Sc,union:Qc,unknown:$c, +uppercase:gi,url:wl,util:Y,uuid:gl,uuidv4:vl,uuidv6:bl,uuidv7:yl,void:Mc,xid:Ml, +xor:qc},Symbol.toStringTag,{value:"Module"})),gd=zc({title:cl().optional(), +component:$c(),props:tu(cl(),Ec()).optional()}),vd=zc({ +"request.section":Bc(gd).optional(),"response.section":Bc(gd).optional() +}),bd=zc({onBeforeRequest:Xu({input:[zc({request:rd(Request)})]}).optional(), +onResponseReceived:Xu({input:[zc({response:rd(Response),operation:tu(cl(),Ec()) +})]}).optional()}),yd=Xu({input:[],output:zc({name:cl(),views:vd.optional(), +hooks:bd.optional()}) +}),Od="https://api.scalar.com/request-proxy",wd="https://proxy.scalar.com",xd=md.object({ +title:md.string().optional(),slug:md.string().optional(), +authentication:md.any().optional(),baseServerURL:md.string().optional(), +hideClientButton:md.boolean().optional().default(!1).catch(!1), +proxyUrl:md.string().optional(), +searchHotKey:md.enum(["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]).optional(), +servers:md.array(md.any()).optional(), +showSidebar:md.boolean().optional().default(!0).catch(!0), +showDeveloperTools:md.enum(["always","localhost","never"]).optional().default("localhost").catch("localhost"), +showToolbar:md.enum(["always","localhost","never"]).optional().default("localhost").catch("localhost"), +operationTitleSource:md.enum(["summary","path"]).optional().default("summary").catch("summary"), +theme:md.enum(["alternate","default","moon","purple","solarized","bluePlanet","deepSpace","saturn","kepler","elysiajs","fastify","mars","laserwave","none"]).optional().default("default").catch("default"), +_integration:md.enum(["adonisjs","astro","docusaurus","dotnet","elysiajs","express","fastapi","fastify","go","hono","html","laravel","litestar","nestjs","nextjs","nitro","nuxt","platformatic","react","rust","svelte","vue"]).nullable().optional(), +onRequestSent:md.function({input:[md.string()],output:md.void()}).optional(), +persistAuth:md.boolean().optional().default(!1).catch(!1), +plugins:md.array(yd).optional(),telemetry:md.boolean().optional().default(!0) +}),kd=md.object({default:md.boolean().default(!1).optional().catch(!1), +url:md.string().optional(), +content:md.union([md.string(),md.null(),md.record(md.string(),md.any()),md.function({ +input:[],output:md.record(md.string(),md.any())})]).optional(), +title:md.string().optional(),slug:md.string().optional(),spec:md.object({ +url:md.string().optional(), +content:md.union([md.string(),md.null(),md.record(md.string(),md.any()),md.function({ +input:[],output:md.record(md.string(),md.any())})]).optional()}).optional(), +agent:md.object({key:md.string().optional(),disabled:md.boolean().optional() +}).optional()});xd.extend(kd.shape);const Sd=zc({name:cl().regex(/^x-/), +component:$c(),renderer:$c().optional()}),_d=zc({component:$c(), +renderer:$c().optional(),props:tu(cl(),Ec()).optional()}),Ad=zc({ +"content.end":Bc(_d).optional()}),Td=Xu({input:[],output:zc({name:cl(), +extensions:Bc(Sd),views:Ad.optional()})}),Ed=Ku(),Cd=xd.extend({ +layout:cu(["modern","classic"]).optional().default("modern").catch("modern"), +proxy:cl().optional(),fetch:Ed.optional(),plugins:Bc(Td).optional(), +isEditable:mc().optional().default(!1).catch(!1), +isLoading:mc().optional().default(!1).catch(!1), +hideModels:mc().optional().default(!1).catch(!1), +documentDownloadType:cu(["yaml","json","both","direct","none"]).optional().default("both").catch("both"), +hideDownloadButton:mc().optional(), +hideTestRequestButton:mc().optional().default(!1).catch(!1), +hideSearch:mc().optional().default(!1).catch(!1), +showOperationId:mc().optional().default(!1).catch(!1),darkMode:mc().optional(), +forceDarkModeState:cu(["dark","light"]).optional(), +hideDarkModeToggle:mc().optional().default(!1).catch(!1), +metaData:Ec().optional(),favicon:cl().optional(), +hiddenClients:Qc([tu(cl(),Qc([mc(),Bc(cl())])),Bc(cl()),pu(!0)]).optional(), +defaultHttpClient:zc({targetKey:Ku(),clientKey:cl()}).optional(), +customCss:cl().optional(),onSpecUpdate:Xu({input:[cl()],output:Mc() +}).optional(),onServerChange:Xu({input:[cl()],output:Mc()}).optional(), +onDocumentSelect:Xu({input:[]}).optional(),onLoaded:Xu().optional(), +onBeforeRequest:Xu({input:[zc({request:rd(Request)})]}).optional(), +onShowMore:Xu({input:[cl()]}).optional(),onSidebarClick:Xu({input:[cl()] +}).optional(),pathRouting:zc({basePath:cl()}).optional(), +generateHeadingSlug:Xu({input:[zc({slug:cl().default("headingSlug")})], +output:cl()}).optional(),generateModelSlug:Xu({input:[zc({ +name:cl().default("modelName")})],output:cl()}).optional(),generateTagSlug:Xu({ +input:[zc({name:cl().default("tagName")})],output:cl()}).optional(), +generateOperationSlug:Xu({input:[zc({path:cl(),operationId:cl().optional(), +method:cl(),summary:cl().optional()})],output:cl()}).optional(), +generateWebhookSlug:Xu({input:[zc({name:cl(),method:cl().optional()})], +output:cl()}).optional(),redirect:Xu({input:[cl()], +output:cl().nullable().optional()}).optional(), +withDefaultFonts:mc().optional().default(!0).catch(!0), +defaultOpenAllTags:mc().optional().default(!1).catch(!1), +expandAllModelSections:mc().optional().default(!1).catch(!1), +expandAllResponses:mc().optional().default(!1).catch(!1), +tagsSorter:Qc([pu("alpha"),Xu({input:[Ec(),Ec()],output:sc()})]).optional(), +operationsSorter:Qc([pu("alpha"),pu("method"),Xu({input:[Ec(),Ec()],output:sc() +})]).optional(), +orderSchemaPropertiesBy:Qc([pu("alpha"),pu("preserve")]).optional().default("alpha").catch("alpha"), +orderRequiredPropertiesFirst:mc().optional().default(!0).catch(!0) +}),$d=Cd.extend(kd.shape).transform((e=>(e.hideDownloadButton&&(console.warn("[DEPRECATED] You're using the deprecated 'hideDownloadButton' attribute. Use 'documentDownloadType: 'none'' instead."), +e.documentDownloadType="none"), +e.spec?.url&&(console.warn("[DEPRECATED] You're using the deprecated 'spec.url' attribute. Remove the spec prefix and move the 'url' attribute to the top level."), +e.url=e.spec.url, +delete e.spec),e.spec?.content&&(console.warn("[DEPRECATED] You're using the deprecated 'spec.content' attribute. Remove the spec prefix and move the 'content' attribute to the top level."), +e.content=e.spec.content, +delete e.spec),e.proxy&&(console.warn("[DEPRECATED] You're using the deprecated 'proxy' attribute, rename it to 'proxyUrl' or update the package."), +e.proxyUrl||(e.proxyUrl=e.proxy), +delete e.proxy),e.proxyUrl===Od&&(console.warn(`[DEPRECATED] Warning: configuration.proxyUrl points to our old proxy (${Od}).`), +console.warn(`[DEPRECATED] We are overwriting the value and use the new proxy URL (${wd}) instead.`), +console.warn(`[DEPRECATED] Action Required: You should manually update your configuration to use the new URL (${wd}). Read more: https://github.com/scalar/scalar`), +e.proxyUrl=wd), +e.showToolbar&&"localhost"!==e.showToolbar&&(console.warn("[DEPRECATED] You're using the deprecated 'showToolbar' attribute. Use 'showDeveloperTools' instead."), +e.showDeveloperTools=e.showToolbar,delete e.showToolbar),e)));function Pd(e,t){ +const n=[],r=t.resolveKeyData||(e=>e.key),a=t.resolveValueData||(e=>e.value) +;for(const[o,i]of Object.entries(e))n.push(...(Array.isArray(i)?i:[i]).map((e=>{ +const n={key:o,value:e},i=a(n) +;return"object"==typeof i?Pd(i,t):Array.isArray(i)?i:{ +["function"==typeof t.key?t.key(n):t.key]:r(n), +["function"==typeof t.value?t.value(n):t.value]:i}})).flat());return n} +function Id(e,t){return Object.entries(e).map((([e,n])=>{ +if("object"==typeof n&&(n=Id(n,t)),t.resolve){const r=t.resolve({key:e,value:n}) +;if(void 0!==r)return r} +return"number"==typeof n&&(n=n.toString()),"string"==typeof n&&t.wrapValue&&(n=n.replace(new RegExp(t.wrapValue,"g"),`\\${t.wrapValue}`), +n=`${t.wrapValue}${n}${t.wrapValue}`),`${e}${t.keyValueSeparator||""}${n}` +})).join(t.entrySeparator||"")}zc({ +cdn:cl().optional().default("https://cdn.jsdelivr.net/npm/@scalar/api-reference"), +pageTitle:cl().optional().default("Scalar API Reference")}) +;const Dd=new Set(["title","titleTemplate","script","style","noscript"]),Md=new Set(["base","meta","link","style","script","noscript"]),Nd=new Set(["title","titleTemplate","templateParams","base","htmlAttrs","bodyAttrs","meta","link","style","script","noscript"]),Rd=new Set(["base","title","titleTemplate","bodyAttrs","htmlAttrs","templateParams"]),Ld=new Set(["tagPosition","tagPriority","tagDuplicateStrategy","children","innerHTML","textContent","processTemplateParams"]),Bd="undefined"!=typeof window +;function jd(e){let t=9 +;for(let n=0;n>>9)).toString(16).substring(1,8).toLowerCase()} +function Ud(e){if(e._h)return e._h;if(e._d)return jd(e._d) +;let t=`${e.tag}:${e.textContent||e.innerHTML||""}:` +;for(const n in e.props)t+=`${n}:${String(e.props[n])},`;return jd(t)} +const zd=e=>({keyValue:e,metaKey:"property"}),Zd=e=>({keyValue:e}),Fd={ +appleItunesApp:{unpack:{entrySeparator:", ", +resolve:({key:e,value:t})=>`${Vd(e)}=${t}`}}, +articleExpirationTime:zd("article:expiration_time"), +articleModifiedTime:zd("article:modified_time"), +articlePublishedTime:zd("article:published_time"), +bookReleaseDate:zd("book:release_date"),charset:{metaKey:"charset"}, +contentSecurityPolicy:{unpack:{entrySeparator:"; ", +resolve:({key:e,value:t})=>`${Vd(e)} ${t}`},metaKey:"http-equiv"},contentType:{ +metaKey:"http-equiv"},defaultStyle:{metaKey:"http-equiv"}, +fbAppId:zd("fb:app_id"),msapplicationConfig:Zd("msapplication-Config"), +msapplicationTileColor:Zd("msapplication-TileColor"), +msapplicationTileImage:Zd("msapplication-TileImage"), +ogAudioSecureUrl:zd("og:audio:secure_url"),ogAudioUrl:zd("og:audio"), +ogImageSecureUrl:zd("og:image:secure_url"),ogImageUrl:zd("og:image"), +ogSiteName:zd("og:site_name"),ogVideoSecureUrl:zd("og:video:secure_url"), +ogVideoUrl:zd("og:video"),profileFirstName:zd("profile:first_name"), +profileLastName:zd("profile:last_name"),profileUsername:zd("profile:username"), +refresh:{metaKey:"http-equiv",unpack:{entrySeparator:";", +resolve({key:e,value:t}){if("seconds"===e)return`${t}`}}},robots:{unpack:{ +entrySeparator:", ", +resolve:({key:e,value:t})=>"boolean"==typeof t?`${Vd(e)}`:`${Vd(e)}:${t}`}}, +xUaCompatible:{metaKey:"http-equiv"} +},Hd=new Set(["og","book","article","profile"]);function Qd(e){ +const t=Vd(e),n=t.indexOf(":") +;return Hd.has(t.substring(0,n))?"property":Fd[e]?.metaKey||"name"} +function Vd(e){ +const t=e.replace(/([A-Z])/g,"-$1").toLowerCase(),n=t.indexOf("-"),r=t.substring(0,n) +;return"twitter"===r||Hd.has(r)?e.replace(/([A-Z])/g,":$1").toLowerCase():t} +function qd(e){if(Array.isArray(e))return e.map((e=>qd(e))) +;if("object"!=typeof e||Array.isArray(e))return e;const t={} +;for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[Vd(n)]=qd(e[n])) +;return t}function Wd(e,t){const n=Fd[t] +;return"refresh"===t?`${e.seconds};url=${e.url}`:Id(qd(e),{ +keyValueSeparator:"=",entrySeparator:", ", +resolve:({value:e,key:t})=>null===e?"":"boolean"==typeof e?`${t}`:void 0, +...n?.unpack})} +const Xd=new Set(["og:image","og:video","og:audio","twitter:image"]) +;function Gd(e){const t={};for(const n in e){ +if(!Object.prototype.hasOwnProperty.call(e,n))continue;const r=e[n] +;"false"!==String(r)&&n&&(t[n]=r)}return t}function Yd(e,t){ +const n=Gd(t),r=Vd(e),a=Qd(r);if(Xd.has(r)){const t={} +;for(const r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[`${e}${"url"===r?"":`${r[0].toUpperCase()}${r.slice(1)}`}`]=n[r]) +;return Kd(t).sort(((e,t)=>(e[a]?.length||0)-(t[a]?.length||0)))}return[{[a]:r, +...n}]}function Kd(e){const t=[],n={};for(const a in e){ +if(!Object.prototype.hasOwnProperty.call(e,a))continue;const r=e[a] +;if(Array.isArray(r))for(const e of r)t.push(..."string"==typeof e?Kd({[a]:e +}):Yd(a,e));else if("object"==typeof r&&r){if(Xd.has(Vd(a))){t.push(...Yd(a,r)) +;continue}n[a]=Gd(r)}else n[a]=r}const r=Pd(n,{key:({key:e})=>Qd(e), +value:({key:e})=>"charset"===e?"charset":"content", +resolveKeyData:({key:e})=>function(e){return Fd[e]?.keyValue||Vd(e)}(e), +resolveValueData:({value:e,key:t})=>null===e?"_null":"object"==typeof e?Wd(e,t):"number"==typeof e?e.toString():e +});return[...t,...r].map((e=>("_null"===e.content&&(e.content=null),e)))} +function Jd(e,t,n,r){ +const a=r||np("object"!=typeof t||"function"==typeof t||t instanceof Promise?{ +["script"===e||"noscript"===e||"style"===e?"innerHTML":"textContent"]:t}:{...t +},"templateParams"===e||"titleTemplate"===e) +;if(a instanceof Promise)return a.then((r=>Jd(e,t,n,r)));const o={tag:e,props:a} +;for(const i of Ld){const e=void 0!==o.props[i]?o.props[i]:n[i] +;void 0!==e&&(("innerHTML"!==i&&"textContent"!==i&&"children"!==i||Dd.has(o.tag))&&(o["children"===i?"innerHTML":i]=e), +delete o.props[i])} +return o.props.body&&(o.tagPosition="bodyClose",delete o.props.body), +"script"===o.tag&&"object"==typeof o.innerHTML&&(o.innerHTML=JSON.stringify(o.innerHTML), +o.props.type=o.props.type||"application/json"), +Array.isArray(o.props.content)?o.props.content.map((e=>({...o,props:{...o.props, +content:e}}))):o}function ep(e,t){const n="class"===e?" ":";" +;return t&&"object"==typeof t&&!Array.isArray(t)&&(t=Object.entries(t).filter((([,e])=>e)).map((([t,n])=>"style"===e?`${t}:${n}`:t))), +String(Array.isArray(t)?t.join(n):t)?.split(n).filter((e=>Boolean(e.trim()))).join(n) +}function tp(e,t,n,r){for(let a=r;a(e[r]=o,tp(e,t,n,a)))) +;if(!t&&!Ld.has(r)){const t=String(e[r]),n=r.startsWith("data-") +;"true"===t||""===t?e[r]=!n||"true":e[r]||(n&&"false"===t?e[r]="false":delete e[r]) +}}else e[r]=ep(r,e[r])}}function np(e,t=!1){const n=tp(e,t,Object.keys(e),0) +;return n instanceof Promise?n.then((()=>e)):e}const rp=10;function ap(e,t,n){ +for(let r=n;r(t[r]=n,ap(e,t,r)))) +;Array.isArray(n)?e.push(...n):e.push(n)}}function op(e){ +const t=[],n=e.resolvedInput;for(const i in n){ +if(!Object.prototype.hasOwnProperty.call(n,i))continue;const r=n[i] +;if(void 0!==r&&Nd.has(i))if(Array.isArray(r))for(const n of r)t.push(Jd(i,n,e));else t.push(Jd(i,r,e)) +}if(0===t.length)return[];const r=[] +;return a=ap(r,t,0),o=()=>r.map(((t,n)=>(t._e=e._i, +e.mode&&(t._m=e.mode),t._p=(e._i<{if(e===hp||!o.includes(e))return e +;const n=function(e,t,n=!1){let r +;if("s"===t||"pageTitle"===t)r=e.pageTitle;else if(t.includes(".")){ +const n=t.indexOf(".");r=e[t.substring(0,n)]?.[t.substring(n+1)]}else r=e[t] +;if(void 0!==r)return n?(r||"").replace(/"/g,'\\"'):r||""}(t,e.slice(1),r) +;return void 0!==n?n:e +})).trim(),i&&(e.endsWith(hp)&&(e=e.slice(0,-10)),e.startsWith(hp)&&(e=e.slice(10)), +e=e.replace(fp,n).trim()),e}function gp(e,t){ +return null==e?t||null:"function"==typeof e?e(t):e}function vp(e,t={}){ +const n=t.delayFn||(e=>setTimeout(e,10)) +;return e._domDebouncedUpdatePromise=e._domDebouncedUpdatePromise||new Promise((r=>n((()=>async function(e,t={}){ +const n=t.document||e.resolvedOptions.document;if(!n||!e.dirty)return;const r={ +shouldRender:!0,tags:[]} +;return await e.hooks.callHook("dom:beforeRender",r),r.shouldRender?(e._domUpdatePromise||(e._domUpdatePromise=new Promise((async t=>{ +const r=(await e.resolveTags()).map((e=>({tag:e,id:Md.has(e.tag)?Ud(e):e.tag, +shouldRender:!0})));let a=e._dom;if(!a){a={elMap:{htmlAttrs:n.documentElement, +bodyAttrs:n.body}};const e=new Set;for(const t of["body","head"]){ +const r=n[t]?.children;for(const t of r){const n=t.tagName.toLowerCase() +;if(!Md.has(n))continue;const r={tag:n, +props:await np(t.getAttributeNames().reduce(((e,n)=>({...e,[n]:t.getAttribute(n) +})),{})),innerHTML:t.innerHTML},o=pp(r);let i=o,s=1 +;for(;i&&e.has(i);)i=`${o}:${s++}` +;i&&(r._d=i,e.add(i)),a.elMap[t.getAttribute("data-hid")||Ud(r)]=t}}} +function o(e,t,n){const r=`${e}:${t}` +;a.sideEffects[r]=n,delete a.pendingSideEffects[r]} +function i({id:e,$el:t,tag:r}){const i=r.tag.endsWith("Attrs") +;if(a.elMap[e]=t,i||(r.textContent&&r.textContent!==t.textContent&&(t.textContent=r.textContent), +r.innerHTML&&r.innerHTML!==t.innerHTML&&(t.innerHTML=r.innerHTML), +o(e,"el",(()=>{a.elMap[e]?.remove(),delete a.elMap[e] +}))),r._eventHandlers)for(const a in r._eventHandlers)Object.prototype.hasOwnProperty.call(r._eventHandlers,a)&&""!==t.getAttribute(`data-${a}`)&&(("bodyAttrs"===r.tag?n.defaultView:t).addEventListener(a.substring(2),r._eventHandlers[a].bind(t)), +t.setAttribute(`data-${a}`,""));for(const n in r.props){ +if(!Object.prototype.hasOwnProperty.call(r.props,n))continue +;const a=r.props[n],s=`attr:${n}`;if("class"===n){if(!a)continue +;for(const n of a.split(" "))i&&o(e,`${s}:${n}`,(()=>t.classList.remove(n))), +!t.classList.contains(n)&&t.classList.add(n)}else if("style"===n){if(!a)continue +;for(const n of a.split(";")){ +const r=n.indexOf(":"),a=n.substring(0,r).trim(),i=n.substring(r+1).trim() +;o(e,`${s}:${a}`,(()=>{t.style.removeProperty(a)})),t.style.setProperty(a,i)} +}else t.getAttribute(n)!==a&&t.setAttribute(n,!0===a?"":String(a)), +i&&o(e,s,(()=>t.removeAttribute(n)))}}a.pendingSideEffects={...a.sideEffects +},a.sideEffects={};const s=[],l={bodyClose:void 0,bodyOpen:void 0,head:void 0} +;for(const e of r){const{tag:t,shouldRender:r,id:o}=e +;r&&("title"!==t.tag?(e.$el=e.$el||a.elMap[o], +e.$el?i(e):Md.has(t.tag)&&s.push(e)):n.title=t.textContent)}for(const e of s){ +const t=e.tag.tagPosition||"head" +;e.$el=n.createElement(e.tag.tag),i(e),l[t]=l[t]||n.createDocumentFragment(), +l[t].appendChild(e.$el)} +for(const c of r)await e.hooks.callHook("dom:renderTag",c,n,o) +;l.head&&n.head.appendChild(l.head), +l.bodyOpen&&n.body.insertBefore(l.bodyOpen,n.body.firstChild), +l.bodyClose&&n.body.appendChild(l.bodyClose) +;for(const e in a.pendingSideEffects)a.pendingSideEffects[e]() +;e._dom=a,await e.hooks.callHook("dom:rendered",{renders:r}),t() +})).finally((()=>{e._domUpdatePromise=void 0,e.dirty=!1 +}))),e._domUpdatePromise):void 0}(e,t).then((()=>{ +delete e._domDebouncedUpdatePromise,r()}))))))}function bp(e){return t=>{ +const n=t.resolvedOptions.document?.head.querySelector('script[id="unhead:payload"]')?.innerHTML||!1 +;return n&&t.push(JSON.parse(n)),{mode:"client",hooks:{"entries:updated":t=>{ +vp(t,e)}}}}}function yp(e,t={},n){for(const r in e){ +const a=e[r],o=n?`${n}:${r}`:r +;"object"==typeof a&&null!==a?yp(a,t,o):"function"==typeof a&&(t[o]=a)}return t} +const Op={run:e=>e()},wp=void 0!==console.createTask?console.createTask:()=>Op +;function xp(e,t){const n=t.shift(),r=wp(n) +;return e.reduce(((e,n)=>e.then((()=>r.run((()=>n(...t)))))),Promise.resolve())} +function kp(e,t){const n=t.shift(),r=wp(n) +;return Promise.all(e.map((e=>r.run((()=>e(...t))))))}function Sp(e,t){ +for(const n of[...e])n(t)}class _p{constructor(){ +this._hooks={},this._before=void 0, +this._after=void 0,this._deprecatedMessages=void 0, +this._deprecatedHooks={},this.hook=this.hook.bind(this), +this.callHook=this.callHook.bind(this), +this.callHookWith=this.callHookWith.bind(this)}hook(e,t,n={}){ +if(!e||"function"!=typeof t)return()=>{};const r=e;let a +;for(;this._deprecatedHooks[e];)a=this._deprecatedHooks[e],e=a.to +;if(a&&!n.allowDeprecated){let e=a.message +;e||(e=`${r} hook has been deprecated`+(a.to?`, please use ${a.to}`:"")), +this._deprecatedMessages||(this._deprecatedMessages=new Set), +this._deprecatedMessages.has(e)||(console.warn(e), +this._deprecatedMessages.add(e))}if(!t.name)try{Object.defineProperty(t,"name",{ +get:()=>"_"+e.replace(/\W+/g,"_")+"_hook_cb",configurable:!0})}catch{} +return this._hooks[e]=this._hooks[e]||[],this._hooks[e].push(t),()=>{ +t&&(this.removeHook(e,t),t=void 0)}}hookOnce(e,t){ +let n,r=(...e)=>("function"==typeof n&&n(),n=void 0,r=void 0,t(...e)) +;return n=this.hook(e,r),n}removeHook(e,t){if(this._hooks[e]){ +const n=this._hooks[e].indexOf(t) +;-1!==n&&this._hooks[e].splice(n,1),0===this._hooks[e].length&&delete this._hooks[e] +}}deprecateHook(e,t){this._deprecatedHooks[e]="string"==typeof t?{to:t}:t +;const n=this._hooks[e]||[];delete this._hooks[e] +;for(const r of n)this.hook(e,r)}deprecateHooks(e){ +Object.assign(this._deprecatedHooks,e) +;for(const t in e)this.deprecateHook(t,e[t])}addHooks(e){ +const t=yp(e),n=Object.keys(t).map((e=>this.hook(e,t[e])));return()=>{ +for(const e of n.splice(0,n.length))e()}}removeHooks(e){const t=yp(e) +;for(const n in t)this.removeHook(n,t[n])}removeAllHooks(){ +for(const e in this._hooks)delete this._hooks[e]}callHook(e,...t){ +return t.unshift(e),this.callHookWith(xp,e,...t)}callHookParallel(e,...t){ +return t.unshift(e),this.callHookWith(kp,e,...t)}callHookWith(e,t,...n){ +const r=this._before||this._after?{name:t,args:n,context:{}}:void 0 +;this._before&&Sp(this._before,r) +;const a=e(t in this._hooks?[...this._hooks[t]]:[],n) +;return a instanceof Promise?a.finally((()=>{this._after&&r&&Sp(this._after,r) +})):(this._after&&r&&Sp(this._after,r),a)}beforeEach(e){ +return this._before=this._before||[],this._before.push(e),()=>{ +if(void 0!==this._before){const t=this._before.indexOf(e) +;-1!==t&&this._before.splice(t,1)}}}afterEach(e){ +return this._after=this._after||[],this._after.push(e),()=>{ +if(void 0!==this._after){const t=this._after.indexOf(e) +;-1!==t&&this._after.splice(t,1)}}}} +const Ap=new Set(["templateParams","htmlAttrs","bodyAttrs"]),Tp={hooks:{ +"tag:normalise":({tag:e})=>{e.props.hid&&(e.key=e.props.hid,delete e.props.hid), +e.props.vmid&&(e.key=e.props.vmid, +delete e.props.vmid),e.props.key&&(e.key=e.props.key,delete e.props.key) +;const t=pp(e) +;!t||t.startsWith("meta:og:")||t.startsWith("meta:twitter:")||delete e.key +;const n=t||!!e.key&&`${e.tag}:${e.key}`;n&&(e._d=n)},"tags:resolve":e=>{ +const t=Object.create(null);for(const r of e.tags){ +const e=(r.key?`${r.tag}:${r.key}`:r._d)||Ud(r),n=t[e];if(n){ +let a=r?.tagDuplicateStrategy;if(!a&&Ap.has(r.tag)&&(a="merge"),"merge"===a){ +const a=n.props +;a.style&&r.props.style&&(";"!==a.style[a.style.length-1]&&(a.style+=";"), +r.props.style=`${a.style} ${r.props.style}`), +a.class&&r.props.class?r.props.class=`${a.class} ${r.props.class}`:a.class&&(r.props.class=a.class), +t[e].props={...a,...r.props};continue}if(r._e===n._e){ +n._duped=n._duped||[],r._d=`${n._d}:${n._duped.length+1}`,n._duped.push(r) +;continue}if(cp(r)>cp(n))continue} +r.innerHTML||r.textContent||0!==Object.keys(r.props).length||!Md.has(r.tag)?t[e]=r:delete t[e] +}const n=[];for(const r in t){const e=t[r],a=e._duped +;n.push(e),a&&(delete e._duped,n.push(...a))} +e.tags=n,e.tags=e.tags.filter((e=>!("meta"===e.tag&&(e.props.name||e.props.property)&&!e.props.content))) +}}},Ep=new Set(["script","link","bodyAttrs"]),Cp=e=>({hooks:{"tags:resolve":t=>{ +for(const n of t.tags){if(!Ep.has(n.tag))continue;const t=n.props +;for(const r in t){if("o"!==r[0]||"n"!==r[1])continue +;if(!Object.prototype.hasOwnProperty.call(t,r))continue;const a=t[r] +;"function"==typeof a&&(e.ssr&&ip.has(r)?t[r]=`this.dataset.${r}fired = true`:delete t[r], +n._eventHandlers=n._eventHandlers||{},n._eventHandlers[r]=a)} +e.ssr&&n._eventHandlers&&(n.props.src||n.props.href)&&(n.key=n.key||jd(n.props.src||n.props.href)) +}},"dom:renderTag":({$el:e,tag:t})=>{const n=e?.dataset;if(n)for(const r in n){ +if(!r.endsWith("fired"))continue;const n=r.slice(0,-5) +;ip.has(n)&&t._eventHandlers?.[n]?.call(e,new Event(n.substring(2)))}}} +}),$p=new Set(["link","style","script","noscript"]),Pp={hooks:{ +"tag:normalise":({tag:e})=>{ +e.key&&$p.has(e.tag)&&(e.props["data-hid"]=e._h=jd(e.key))}}},Ip={mode:"server", +hooks:{"tags:beforeResolve":e=>{const t={};let n=!1 +;for(const r of e.tags)"server"!==r._m||"titleTemplate"!==r.tag&&"templateParams"!==r.tag&&"title"!==r.tag||(t[r.tag]="title"===r.tag||"titleTemplate"===r.tag?r.textContent:r.props, +n=!0);n&&e.tags.push({tag:"script",innerHTML:JSON.stringify(t),props:{ +id:"unhead:payload",type:"application/json"}})}}},Dp={hooks:{"tags:resolve":e=>{ +for(const t of e.tags)if("string"==typeof t.tagPriority)for(const{prefix:n,offset:r}of up){ +if(!t.tagPriority.startsWith(n))continue +;const a=t.tagPriority.substring(n.length),o=e.tags.find((e=>e._d===a))?._p +;if(void 0!==o){t._p=o+r;break}}e.tags.sort(((e,t)=>{const n=cp(e),r=cp(t) +;return nr?1:e._p-t._p}))}}},Mp={meta:"content",link:"href", +htmlAttrs:"lang"},Np=["innerHTML","textContent"],Rp=e=>({hooks:{ +"tags:resolve":t=>{const{tags:n}=t;let r;for(let e=0;e"title"===e.tag))?.textContent||"",a,o) +;for(const e of n){if(!1===e.processTemplateParams)continue;const t=Mp[e.tag] +;if(t&&"string"==typeof e.props[t])e.props[t]=mp(e.props[t],a,o);else if(e.processTemplateParams||"titleTemplate"===e.tag||"title"===e.tag)for(const n of Np)"string"==typeof e[n]&&(e[n]=mp(e[n],a,o,"script"===e.tag&&e.props.type.endsWith("json"))) +}e._templateParams=a,e._separator=o},"tags:afterResolve":({tags:t})=>{let n +;for(let e=0;e{const{tags:t}=e;let n,r +;for(let a=0;a{ +for(const t of e.tags)"string"==typeof t.innerHTML&&(!t.innerHTML||"application/ld+json"!==t.props.type&&"application/json"!==t.props.type?t.innerHTML=t.innerHTML.replace(new RegExp(`{s.dirty=!0,t.callHook("entries:updated",s)} +;let a=0,o=[];const i=[],s={plugins:i,dirty:!1,resolvedOptions:e,hooks:t, +headEntries:()=>o,use(e){const r="function"==typeof e?e(s):e +;r.key&&i.some((e=>e.key===r.key))||(i.push(r), +zp(r.mode,n)&&t.addHooks(r.hooks||{}))},push(e,t){delete t?.head;const i={ +_i:a++,input:e,...t};return zp(i.mode,n)&&(o.push(i),r()),{dispose(){ +o=o.filter((e=>e._i!==i._i)),r()},patch(e){ +for(const t of o)t._i===i._i&&(t.input=i.input=e);r()}}},async resolveTags(){ +const e={tags:[],entries:[...o]};await t.callHook("entries:resolve",e) +;for(const n of e.entries){const r=n.resolvedInput||n.input +;if(n.resolvedInput=await(n.transform?n.transform(r):r), +n.resolvedInput)for(const a of await op(n)){const r={tag:a,entry:n, +resolvedOptions:s.resolvedOptions} +;await t.callHook("tag:normalise",r),e.tags.push(r.tag)}} +return await t.callHook("tags:beforeResolve",e), +await t.callHook("tags:resolve",e), +await t.callHook("tags:afterResolve",e),e.tags},ssr:n} +;return[Tp,Ip,Cp,Pp,Dp,Rp,Lp,Bp,...e?.plugins||[]].forEach((e=>s.use(e))), +s.hooks.callHook("init",s),s}(e);return t.use(bp()),jp=t}function zp(e,t){ +return!e||"server"===e&&t||"client"===e&&!t}function Zp(e){ +const t=Object.create(null);for(const n of e.split(","))t[n]=1;return e=>e in t} +const Fp={},Hp=[],Qp=()=>{},Vp=()=>!1,qp=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Wp=e=>e.startsWith("onUpdate:"),Xp=Object.assign,Gp=(e,t)=>{ +const n=e.indexOf(t);n>-1&&e.splice(n,1) +},Yp=Object.prototype.hasOwnProperty,Kp=(e,t)=>Yp.call(e,t),Jp=Array.isArray,eh=e=>"[object Map]"===ch(e),th=e=>"[object Set]"===ch(e),nh=e=>"[object Date]"===ch(e),rh=e=>"function"==typeof e,ah=e=>"string"==typeof e,oh=e=>"symbol"==typeof e,ih=e=>null!==e&&"object"==typeof e,sh=e=>(ih(e)||rh(e))&&rh(e.then)&&rh(e.catch),lh=Object.prototype.toString,ch=e=>lh.call(e),uh=e=>ch(e).slice(8,-1),dh=e=>"[object Object]"===ch(e),ph=e=>ah(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,hh=Zp(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),fh=e=>{ +const t=Object.create(null);return n=>t[n]||(t[n]=e(n)) +},mh=/-\w/g,gh=fh((e=>e.replace(mh,(e=>e.slice(1).toUpperCase())))),vh=/\B([A-Z])/g,bh=fh((e=>e.replace(vh,"-$1").toLowerCase())),yh=fh((e=>e.charAt(0).toUpperCase()+e.slice(1))),Oh=fh((e=>e?`on${yh(e)}`:"")),wh=(e,t)=>!Object.is(e,t),xh=(e,...t)=>{ +for(let n=0;n{ +Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n}) +},Sh=e=>{const t=parseFloat(e);return isNaN(t)?e:t},_h=e=>{ +const t=ah(e)?Number(e):NaN;return isNaN(t)?e:t};let Ah +;const Th=()=>Ah||(Ah="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{}) +;function Eh(e){if(Jp(e)){const t={};for(let n=0;n{if(e){ +const n=e.split($h);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t} +function Dh(e){let t="";if(ah(e))t=e;else if(Jp(e))for(let n=0;nLh(e,t)))} +const jh=e=>!(!e||!0!==e.__v_isRef),Uh=e=>ah(e)?e:null==e?"":Jp(e)||ih(e)&&(e.toString===lh||!rh(e.toString))?jh(e)?Uh(e.value):JSON.stringify(e,zh,2):String(e),zh=(e,t)=>jh(t)?zh(e,t.value):eh(t)?{ +[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n],r)=>(e[Zh(t,r)+" =>"]=n, +e)),{})}:th(t)?{[`Set(${t.size})`]:[...t.values()].map((e=>Zh(e))) +}:oh(t)?Zh(t):!ih(t)||Jp(t)||dh(t)?t:String(t),Zh=(e,t="")=>{var n +;return oh(e)?`Symbol(${null!=(n=e.description)?n:t})`:e};function Fh(e){ +return null==e?"initial":"string"==typeof e?""===e?" ":e:String(e)}let Hh,Qh +;class Vh{constructor(e=!1){ +this.detached=e,this._active=!0,this._on=0,this.effects=[], +this.cleanups=[],this._isPaused=!1, +this.parent=Hh,!e&&Hh&&(this.index=(Hh.scopes||(Hh.scopes=[])).push(this)-1)} +get active(){return this._active}pause(){if(this._active){let e,t +;if(this._isPaused=!0, +this.scopes)for(e=0,t=this.scopes.length;e0&&0==--this._on&&(Hh=this.prevScope,this.prevScope=void 0)}stop(e){ +if(this._active){let t,n +;for(this._active=!1,t=0,n=this.effects.length;t0)return;if(Jh){let e=Jh +;for(Jh=void 0;e;){const t=e.next;e.next=void 0,e.flags&=-9,e=t}}let e +;for(;Kh;){let n=Kh;for(Kh=void 0;n;){const r=n.next +;if(n.next=void 0,n.flags&=-9,1&n.flags)try{n.trigger()}catch(t){e||(e=t)}n=r}} +if(e)throw e}function af(e){ +for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink, +t.dep.activeLink=t}function of(e){let t,n=e.depsTail,r=n;for(;r;){ +const e=r.prevDep +;-1===r.version?(r===n&&(n=e),cf(r),uf(r)):t=r,r.dep.activeLink=r.prevActiveLink, +r.prevActiveLink=void 0,r=e}e.deps=t,e.depsTail=n}function sf(e){ +for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(lf(t.dep.computed)||t.dep.version!==t.version))return!0 +;return!!e._dirty}function lf(e){if(4&e.flags&&!(16&e.flags))return +;if(e.flags&=-17,e.globalVersion===gf)return +;if(e.globalVersion=gf,!e.isSSR&&128&e.flags&&(!e.deps&&!e._dirty||!sf(e)))return +;e.flags|=2;const t=e.dep,n=Qh,r=df;Qh=e,df=!0;try{af(e);const n=e.fn(e._value) +;(0===t.version||wh(n,e._value))&&(e.flags|=128,e._value=n,t.version++) +}catch(a){throw t.version++,a}finally{Qh=n,df=r,of(e),e.flags&=-3}} +function cf(e,t=!1){const{dep:n,prevSub:r,nextSub:a}=e +;if(r&&(r.nextSub=a,e.prevSub=void 0), +a&&(a.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){ +n.computed.flags&=-5;for(let e=n.computed.deps;e;e=e.nextDep)cf(e,!0)} +t||--n.sc||!n.map||n.map.delete(n.key)}function uf(e){ +const{prevDep:t,nextDep:n}=e +;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let df=!0 +;const pf=[];function hf(){pf.push(df),df=!1}function ff(){const e=pf.pop() +;df=void 0===e||e}function mf(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){ +const e=Qh;Qh=void 0;try{t()}finally{Qh=e}}}let gf=0;class vf{constructor(e,t){ +this.sub=e, +this.dep=t,this.version=t.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0 +}}class bf{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0, +this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0} +track(e){if(!Qh||!df||Qh===this.computed)return;let t=this.activeLink +;if(void 0===t||t.sub!==Qh)t=this.activeLink=new vf(Qh,this), +Qh.deps?(t.prevDep=Qh.depsTail, +Qh.depsTail.nextDep=t,Qh.depsTail=t):Qh.deps=Qh.depsTail=t, +yf(t);else if(-1===t.version&&(t.version=this.version,t.nextDep)){ +const e=t.nextDep +;e.prevDep=t.prevDep,t.prevDep&&(t.prevDep.nextDep=e),t.prevDep=Qh.depsTail, +t.nextDep=void 0,Qh.depsTail.nextDep=t,Qh.depsTail=t,Qh.deps===t&&(Qh.deps=e)} +return t}trigger(e){this.version++,gf++,this.notify(e)}notify(e){nf();try{0 +;for(let e=this.subs;e;e=e.prevSub)e.sub.notify()&&e.sub.dep.notify()}finally{ +rf()}}}function yf(e){if(e.dep.sc++,4&e.sub.flags){const t=e.dep.computed +;if(t&&!e.dep.subs){t.flags|=20;for(let e=t.deps;e;e=e.nextDep)yf(e)} +const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}} +const Of=new WeakMap,wf=Symbol(""),xf=Symbol(""),kf=Symbol("") +;function Sf(e,t,n){if(df&&Qh){let t=Of.get(e);t||Of.set(e,t=new Map) +;let r=t.get(n);r||(t.set(n,r=new bf),r.map=t,r.key=n),r.track()}} +function _f(e,t,n,r,a,o){const i=Of.get(e);if(!i)return void gf++;const s=e=>{ +e&&e.trigger()};if(nf(),"clear"===t)i.forEach(s);else{const a=Jp(e),o=a&&ph(n) +;if(a&&"length"===n){const e=Number(r);i.forEach(((t,n)=>{ +("length"===n||n===kf||!oh(n)&&n>=e)&&s(t)})) +}else switch((void 0!==n||i.has(void 0))&&s(i.get(n)),o&&s(i.get(kf)),t){ +case"add":a?o&&s(i.get("length")):(s(i.get(wf)),eh(e)&&s(i.get(xf)));break +;case"delete":a||(s(i.get(wf)),eh(e)&&s(i.get(xf)));break;case"set": +eh(e)&&s(i.get(wf))}}rf()}function Af(e){const t=hm(e) +;return t===e?t:(Sf(t,0,kf),dm(e)?t:t.map(mm))}function Tf(e){ +return Sf(e=hm(e),0,kf),e}function Ef(e,t){ +return um(e)?cm(e)?gm(mm(t)):gm(t):mm(t)}const Cf={__proto__:null, +[Symbol.iterator](){return $f(this,Symbol.iterator,(e=>Ef(this,e)))}, +concat(...e){return Af(this).concat(...e.map((e=>Jp(e)?Af(e):e)))},entries(){ +return $f(this,"entries",(e=>(e[1]=Ef(this,e[1]),e)))},every(e,t){ +return If(this,"every",e,t,void 0,arguments)},filter(e,t){ +return If(this,"filter",e,t,(e=>e.map((e=>Ef(this,e)))),arguments)},find(e,t){ +return If(this,"find",e,t,(e=>Ef(this,e)),arguments)},findIndex(e,t){ +return If(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){ +return If(this,"findLast",e,t,(e=>Ef(this,e)),arguments)},findLastIndex(e,t){ +return If(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){ +return If(this,"forEach",e,t,void 0,arguments)},includes(...e){ +return Mf(this,"includes",e)},indexOf(...e){return Mf(this,"indexOf",e)}, +join(e){return Af(this).join(e)},lastIndexOf(...e){ +return Mf(this,"lastIndexOf",e)},map(e,t){ +return If(this,"map",e,t,void 0,arguments)},pop(){return Nf(this,"pop")}, +push(...e){return Nf(this,"push",e)},reduce(e,...t){return Df(this,"reduce",e,t) +},reduceRight(e,...t){return Df(this,"reduceRight",e,t)},shift(){ +return Nf(this,"shift")},some(e,t){return If(this,"some",e,t,void 0,arguments)}, +splice(...e){return Nf(this,"splice",e)},toReversed(){ +return Af(this).toReversed()},toSorted(e){return Af(this).toSorted(e)}, +toSpliced(...e){return Af(this).toSpliced(...e)},unshift(...e){ +return Nf(this,"unshift",e)},values(){return $f(this,"values",(e=>Ef(this,e)))}} +;function $f(e,t,n){const r=Tf(e),a=r[t]();return r===e||dm(e)||(a._next=a.next, +a.next=()=>{const e=a._next();return e.done||(e.value=n(e.value)),e}),a} +const Pf=Array.prototype;function If(e,t,n,r,a,o){ +const i=Tf(e),s=i!==e&&!dm(e),l=i[t];if(l!==Pf[t]){const t=l.apply(e,o) +;return s?mm(t):t}let c=n;i!==e&&(s?c=function(t,r){ +return n.call(this,Ef(e,t),r,e)}:n.length>2&&(c=function(t,r){ +return n.call(this,t,r,e)}));const u=l.call(i,c,r);return s&&a?a(u):u} +function Df(e,t,n,r){const a=Tf(e);let o=n +;return a!==e&&(dm(e)?n.length>3&&(o=function(t,r,a){return n.call(this,t,r,a,e) +}):o=function(t,r,a){return n.call(this,t,Ef(e,r),a,e)}),a[t](o,...r)} +function Mf(e,t,n){const r=hm(e);Sf(r,0,kf);const a=r[t](...n) +;return-1!==a&&!1!==a||!pm(n[0])?a:(n[0]=hm(n[0]),r[t](...n))} +function Nf(e,t,n=[]){hf(),nf();const r=hm(e)[t].apply(e,n);return rf(),ff(),r} +const Rf=Zp("__proto__,__v_isRef,__isVue"),Lf=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter(oh)) +;function Bf(e){oh(e)||(e=String(e));const t=hm(this) +;return Sf(t,0,e),t.hasOwnProperty(e)}class jf{constructor(e=!1,t=!1){ +this._isReadonly=e,this._isShallow=t}get(e,t,n){ +if("__v_skip"===t)return e.__v_skip;const r=this._isReadonly,a=this._isShallow +;if("__v_isReactive"===t)return!r;if("__v_isReadonly"===t)return r +;if("__v_isShallow"===t)return a +;if("__v_raw"===t)return n===(r?a?am:rm:a?nm:tm).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0 +;const o=Jp(e);if(!r){let e;if(o&&(e=Cf[t]))return e +;if("hasOwnProperty"===t)return Bf}const i=Reflect.get(e,t,vm(e)?e:n) +;if(oh(t)?Lf.has(t):Rf(t))return i;if(r||Sf(e,0,t),a)return i;if(vm(i)){ +const e=o&&ph(t)?i:i.value;return r&&ih(e)?im(e):e}return ih(i)?r?im(i):om(i):i} +}class Uf extends jf{constructor(e=!1){super(!1,e)}set(e,t,n,r){let a=e[t] +;const o=Jp(e)&&ph(t);if(!this._isShallow){const e=um(a) +;if(dm(n)||um(n)||(a=hm(a),n=hm(n)),!o&&vm(a)&&!vm(n))return e||(a.value=n),!0} +const i=o?Number(t)e,qf=e=>Reflect.getPrototypeOf(e) +;function Wf(e){return function(...t){ +return"delete"!==e&&("clear"===e?void 0:this)}}function Xf(e,t){const n={get(n){ +const r=this.__v_raw,a=hm(r),o=hm(n);e||(wh(n,o)&&Sf(a,0,n),Sf(a,0,o)) +;const{has:i}=qf(a),s=t?Vf:e?gm:mm +;return i.call(a,n)?s(r.get(n)):i.call(a,o)?s(r.get(o)):void(r!==a&&r.get(n))}, +get size(){const t=this.__v_raw;return!e&&Sf(hm(t),0,wf),t.size},has(t){ +const n=this.__v_raw,r=hm(n),a=hm(t) +;return e||(wh(t,a)&&Sf(r,0,t),Sf(r,0,a)),t===a?n.has(t):n.has(t)||n.has(a)}, +forEach(n,r){const a=this,o=a.__v_raw,i=hm(o),s=t?Vf:e?gm:mm +;return!e&&Sf(i,0,wf),o.forEach(((e,t)=>n.call(r,s(e),s(t),a)))}};Xp(n,e?{ +add:Wf("add"),set:Wf("set"),delete:Wf("delete"),clear:Wf("clear")}:{add(e){ +t||dm(e)||um(e)||(e=hm(e));const n=hm(this) +;return qf(n).has.call(n,e)||(n.add(e),_f(n,"add",e,e)),this},set(e,n){ +t||dm(n)||um(n)||(n=hm(n));const r=hm(this),{has:a,get:o}=qf(r) +;let i=a.call(r,e);i||(e=hm(e),i=a.call(r,e));const s=o.call(r,e) +;return r.set(e,n),i?wh(n,s)&&_f(r,"set",e,n):_f(r,"add",e,n),this},delete(e){ +const t=hm(this),{has:n,get:r}=qf(t);let a=n.call(t,e) +;a||(e=hm(e),a=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e) +;return a&&_f(t,"delete",e,void 0),o},clear(){ +const e=hm(this),t=0!==e.size,n=e.clear();return t&&_f(e,"clear",void 0,void 0), +n}});return["keys","values","entries",Symbol.iterator].forEach((r=>{ +n[r]=function(e,t,n){return function(...r){ +const a=this.__v_raw,o=hm(a),i=eh(o),s="entries"===e||e===Symbol.iterator&&i,l="keys"===e&&i,c=a[e](...r),u=n?Vf:t?gm:mm +;return!t&&Sf(o,0,l?xf:wf),{next(){const{value:e,done:t}=c.next();return t?{ +value:e,done:t}:{value:s?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){ +return this}}}}(r,e,t)})),n}function Gf(e,t){const n=Xf(e,t) +;return(t,r,a)=>"__v_isReactive"===r?!e:"__v_isReadonly"===r?e:"__v_raw"===r?t:Reflect.get(Kp(n,r)&&r in t?n:t,r,a) +}const Yf={get:Gf(!1,!1)},Kf={get:Gf(!1,!0)},Jf={get:Gf(!0,!1)},em={ +get:Gf(!0,!0)},tm=new WeakMap,nm=new WeakMap,rm=new WeakMap,am=new WeakMap +;function om(e){return um(e)?e:lm(e,!1,Zf,Yf,tm)}function im(e){ +return lm(e,!0,Ff,Jf,rm)}function sm(e){return lm(e,!0,Qf,em,am)} +function lm(e,t,n,r,a){if(!ih(e))return e +;if(e.__v_raw&&(!t||!e.__v_isReactive))return e +;const o=(i=e).__v_skip||!Object.isExtensible(i)?0:function(e){switch(e){ +case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap": +case"WeakSet":return 2;default:return 0}}(uh(i));var i;if(0===o)return e +;const s=a.get(e);if(s)return s;const l=new Proxy(e,2===o?r:n) +;return a.set(e,l),l}function cm(e){ +return um(e)?cm(e.__v_raw):!(!e||!e.__v_isReactive)}function um(e){ +return!(!e||!e.__v_isReadonly)}function dm(e){return!(!e||!e.__v_isShallow)} +function pm(e){return!!e&&!!e.__v_raw}function hm(e){const t=e&&e.__v_raw +;return t?hm(t):e}function fm(e){ +return!Kp(e,"__v_skip")&&Object.isExtensible(e)&&kh(e,"__v_skip",!0),e} +const mm=e=>ih(e)?om(e):e,gm=e=>ih(e)?im(e):e;function vm(e){ +return!!e&&!0===e.__v_isRef}function bm(e){return Om(e,!1)}function ym(e){ +return Om(e,!0)}function Om(e,t){return vm(e)?e:new wm(e,t)}class wm{ +constructor(e,t){ +this.dep=new bf,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=t?e:hm(e), +this._value=t?e:mm(e),this.__v_isShallow=t}get value(){ +return this.dep.track(),this._value}set value(e){ +const t=this._rawValue,n=this.__v_isShallow||dm(e)||um(e) +;e=n?e:hm(e),wh(e,t)&&(this._rawValue=e, +this._value=n?e:mm(e),this.dep.trigger())}}function xm(e){return vm(e)?e.value:e +}function km(e){return rh(e)?e():xm(e)}const Sm={ +get:(e,t,n)=>"__v_raw"===t?e:xm(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const a=e[t] +;return vm(a)&&!vm(n)?(a.value=n,!0):Reflect.set(e,t,n,r)}};function _m(e){ +return cm(e)?e:new Proxy(e,Sm)}class Am{constructor(e){ +this.__v_isRef=!0,this._value=void 0 +;const t=this.dep=new bf,{get:n,set:r}=e(t.track.bind(t),t.trigger.bind(t)) +;this._get=n,this._set=r}get value(){return this._value=this._get()} +set value(e){this._set(e)}}function Tm(e){return new Am(e)}function Em(e){ +const t=Jp(e)?new Array(e.length):{};for(const n in e)t[n]=Im(e,n);return t} +class Cm{constructor(e,t,n){ +this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0, +this._value=void 0,this._raw=hm(e);let r=!0,a=e;if(!Jp(e)||!ph(String(t)))do{ +r=!pm(a)||dm(a)}while(r&&(a=a.__v_raw));this._shallow=r}get value(){ +let e=this._object[this._key] +;return this._shallow&&(e=xm(e)),this._value=void 0===e?this._defaultValue:e} +set value(e){if(this._shallow&&vm(this._raw[this._key])){ +const t=this._object[this._key];if(vm(t))return void(t.value=e)} +this._object[this._key]=e}get dep(){return function(e,t){const n=Of.get(e) +;return n&&n.get(t)}(this._raw,this._key)}}class $m{constructor(e){ +this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0} +get value(){return this._value=this._getter()}}function Pm(e,t,n){ +return vm(e)?e:rh(e)?new $m(e):ih(e)&&arguments.length>1?Im(e,t,n):bm(e)} +function Im(e,t,n){return new Cm(e,t,n)}class Dm{constructor(e,t,n){ +this.fn=e,this.setter=t, +this._value=void 0,this.dep=new bf(this),this.__v_isRef=!0, +this.deps=void 0,this.depsTail=void 0, +this.flags=16,this.globalVersion=gf-1,this.next=void 0, +this.effect=this,this.__v_isReadonly=!t,this.isSSR=n}notify(){if(this.flags|=16, +!(8&this.flags)&&Qh!==this)return tf(this,!0),!0}get value(){ +const e=this.dep.track() +;return lf(this),e&&(e.version=this.dep.version),this._value}set value(e){ +this.setter&&this.setter(e)}}const Mm={},Nm=new WeakMap;let Rm +;function Lm(e,t,n=Fp){ +const{immediate:r,deep:a,once:o,scheduler:i,augmentJob:s,call:l}=n,c=e=>a?e:dm(e)||!1===a||0===a?Bm(e,1):Bm(e) +;let u,d,p,h,f=!1,m=!1 +;if(vm(e)?(d=()=>e.value,f=dm(e)):cm(e)?(d=()=>c(e),f=!0):Jp(e)?(m=!0, +f=e.some((e=>cm(e)||dm(e))), +d=()=>e.map((e=>vm(e)?e.value:cm(e)?c(e):rh(e)?l?l(e,2):e():void 0))):d=rh(e)?t?l?()=>l(e,2):e:()=>{ +if(p){hf();try{p()}finally{ff()}}const t=Rm;Rm=u;try{return l?l(e,3,[h]):e(h) +}finally{Rm=t}}:Qp,t&&a){const e=d,t=!0===a?1/0:a;d=()=>Bm(e(),t)} +const g=Wh(),v=()=>{u.stop(),g&&g.active&&Gp(g.effects,u)};if(o&&t){const e=t +;t=(...t)=>{e(...t),v()}}let b=m?new Array(e.length).fill(Mm):Mm;const y=e=>{ +if(1&u.flags&&(u.dirty||e))if(t){const e=u.run() +;if(a||f||(m?e.some(((e,t)=>wh(e,b[t]))):wh(e,b))){p&&p();const n=Rm;Rm=u;try{ +const n=[e,b===Mm?void 0:m&&b[0]===Mm?[]:b,h];b=e,l?l(t,3,n):t(...n)}finally{ +Rm=n}}}else u.run()} +;return s&&s(y),u=new Yh(d),u.scheduler=i?()=>i(y,!1):y,h=e=>function(e,t=!1,n=Rm){ +if(n){let t=Nm.get(n);t||Nm.set(n,t=[]),t.push(e)}}(e,!1,u),p=u.onStop=()=>{ +const e=Nm.get(u);if(e){if(l)l(e,4);else for(const t of e)t();Nm.delete(u)} +},t?r?y(!0):b=u.run():i?i(y.bind(null,!0),!0):u.run(), +v.pause=u.pause.bind(u),v.resume=u.resume.bind(u),v.stop=v,v} +function Bm(e,t=1/0,n){if(t<=0||!ih(e)||e.__v_skip)return e +;if(((n=n||new Map).get(e)||0)>=t)return e +;if(n.set(e,t),t--,vm(e))Bm(e.value,t,n);else if(Jp(e))for(let r=0;r{ +Bm(e,t,n)}));else if(dh(e)){for(const r in e)Bm(e[r],t,n) +;for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Bm(e[r],t,n) +}return e}function jm(e,t,n,r){try{return r?e(...r):e()}catch(a){zm(a,t,n)}} +function Um(e,t,n,r){if(rh(e)){const a=jm(e,t,n,r) +;return a&&sh(a)&&a.catch((e=>{zm(e,t,n)})),a}if(Jp(e)){const a=[] +;for(let o=0;o=tg(n)?Zm.push(e):Zm.splice(function(e){ +let t=Fm+1,n=Zm.length;for(;t>>1,a=Zm[r],o=tg(a) +;otg(e)-tg(t))) +;if(Hm.length=0,Qm)return void Qm.push(...e);for(Qm=e,Vm=0;Vmnull==e.id?2&e.flags?-1:1/0:e.id;function ng(e){try{ +for(Fm=0;Fm{ +r._d&&Qb(-1);const a=og(t);let o;try{o=e(...n)}finally{og(a),r._d&&Qb(1)} +return o};return r._n=!0,r._c=!0,r._d=!0,r}function sg(e,t){ +if(null===rg)return e;const n=_y(rg),r=e.dirs||(e.dirs=[]) +;for(let a=0;a1)return n&&rh(t)?t.call(r&&r.proxy):t}}function dg(){ +return!(!fy()&&!eb)}const pg=Symbol.for("v-scx"),hg=()=>ug(pg);function fg(e,t){ +return gg(e,null,t)}function mg(e,t,n){return gg(e,t,n)}function gg(e,t,n=Fp){ +const{immediate:r,deep:a,flush:o,once:i}=n,s=Xp({},n),l=t&&r||!t&&"post"!==o +;let c;if(Oy)if("sync"===o){const e=hg() +;c=e.__watcherHandles||(e.__watcherHandles=[])}else if(!l){const e=()=>{} +;return e.stop=Qp,e.resume=Qp,e.pause=Qp,e}const u=hy +;s.call=(e,t,n)=>Um(e,u,t,n);let d=!1;"post"===o?s.scheduler=e=>{ +Eb(e,u&&u.suspense)}:"sync"!==o&&(d=!0,s.scheduler=(e,t)=>{t?e():Gm(e) +}),s.augmentJob=e=>{t&&(e.flags|=4),d&&(e.flags|=2,u&&(e.id=u.uid,e.i=u))} +;const p=Lm(e,t,s);return Oy&&(c?c.push(p):l&&p()),p}function vg(e,t,n){ +const r=this.proxy,a=ah(e)?e.includes(".")?bg(r,e):()=>r[e]:e.bind(r,r);let o +;rh(t)?o=t:(o=t.handler,n=t);const i=vy(this),s=gg(a,o.bind(r),n);return i(),s} +function bg(e,t){const n=t.split(".");return()=>{let t=e +;for(let e=0;ee.__isTeleport,wg=e=>e&&(e.disabled||""===e.disabled),xg=e=>e&&(e.defer||""===e.defer),kg=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,Sg=e=>"function"==typeof MathMLElement&&e instanceof MathMLElement,_g=(e,t)=>{ +const n=e&&e.to;if(ah(n)){if(t){return t(n)}return null}return n},Ag={ +name:"Teleport",__isTeleport:!0,process(e,t,n,r,a,o,i,s,l,c){ +const{mc:u,pc:d,pbc:p,o:{insert:h,querySelector:f,createText:m,createComment:g}}=c,v=wg(t.props) +;let{shapeFlag:b,children:y,dynamicChildren:O}=t;if(null==e){ +const e=t.el=m(""),c=t.anchor=m("");h(e,n,r),h(c,n,r);const d=(e,t)=>{ +16&b&&u(y,e,t,a,o,i,s,l)},p=()=>{const e=t.target=_g(t.props,f),n=$g(e,t,m,h) +;e&&("svg"!==i&&kg(e)?i="svg":"mathml"!==i&&Sg(e)&&(i="mathml"), +a&&a.isCE&&(a.ce._teleportTargets||(a.ce._teleportTargets=new Set)).add(e), +v||(d(e,n),Cg(t,!1)))} +;v&&(d(n,c),Cg(t,!0)),xg(t.props)?(t.el.__isMounted=!1,Eb((()=>{ +p(),delete t.el.__isMounted}),o)):p()}else{ +if(xg(t.props)&&!1===e.el.__isMounted)return void Eb((()=>{ +Ag.process(e,t,n,r,a,o,i,s,l,c)}),o);t.el=e.el,t.targetStart=e.targetStart +;const u=t.anchor=e.anchor,h=t.target=e.target,m=t.targetAnchor=e.targetAnchor,g=wg(e.props),b=g?n:h,y=g?u:m +;if("svg"===i||kg(h)?i="svg":("mathml"===i||Sg(h))&&(i="mathml"), +O?(p(e.dynamicChildren,O,b,a,o,i,s), +Ib(e,t,!0)):l||d(e,t,b,y,a,o,i,s,!1),v)g?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Tg(t,n,u,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){ +const e=t.target=_g(t.props,f);e&&Tg(t,e,null,c,0)}else g&&Tg(t,h,m,c,1);Cg(t,v) +}},remove(e,t,n,{um:r,o:{remove:a}},o){ +const{shapeFlag:i,children:s,anchor:l,targetStart:c,targetAnchor:u,target:d,props:p}=e +;if(d&&(a(c),a(u)),o&&a(l),16&i){const e=o||!wg(p);for(let a=0;a{const t=e.subTree +;return t.component?Ng(t.component):t};function Rg(e){let t=e[0] +;if(e.length>1)for(const n of e)if(n.type!==jb){t=n;break}return t}const Lg={ +name:"BaseTransition",props:Mg,setup(e,{slots:t}){const n=fy(),r=function(){ +const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map} +;return cv((()=>{e.isMounted=!0})),pv((()=>{e.isUnmounting=!0})),e}() +;return()=>{const a=t.default&&Fg(t.default(),!0);if(!a||!a.length)return +;const o=Rg(a),i=hm(e),{mode:s}=i;if(r.isLeaving)return Ug(o);const l=zg(o) +;if(!l)return Ug(o);let c=jg(l,i,r,n,(e=>c=e));l.type!==jb&&Zg(l,c) +;let u=n.subTree&&zg(n.subTree);if(u&&u.type!==jb&&!Gb(u,l)&&Ng(n).type!==jb){ +let e=jg(u,i,r,n) +;if(Zg(u,e),"out-in"===s&&l.type!==jb)return r.isLeaving=!0,e.afterLeave=()=>{ +r.isLeaving=!1,8&n.job.flags||n.update(),delete e.afterLeave,u=void 0},Ug(o) +;"in-out"===s&&l.type!==jb?e.delayLeave=(e,t,n)=>{ +Bg(r,u)[String(u.key)]=u,e[Pg]=()=>{ +t(),e[Pg]=void 0,delete c.delayedLeave,u=void 0},c.delayedLeave=()=>{ +n(),delete c.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return o}}} +;function Bg(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type) +;return r||(r=Object.create(null),n.set(t.type,r)),r}function jg(e,t,n,r,a){ +const{appear:o,mode:i,persisted:s=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:p,onLeave:h,onAfterLeave:f,onLeaveCancelled:m,onBeforeAppear:g,onAppear:v,onAfterAppear:b,onAppearCancelled:y}=t,O=String(e.key),w=Bg(n,e),x=(e,t)=>{ +e&&Um(e,r,9,t)},k=(e,t)=>{const n=t[1] +;x(e,t),Jp(e)?e.every((e=>e.length<=1))&&n():e.length<=1&&n()},S={mode:i, +persisted:s,beforeEnter(t){let r=l;if(!n.isMounted){if(!o)return;r=g||l} +t[Pg]&&t[Pg](!0);const a=w[O];a&&Gb(e,a)&&a.el[Pg]&&a.el[Pg](),x(r,[t])}, +enter(e){let t=c,r=u,a=d;if(!n.isMounted){if(!o)return;t=v||c,r=b||u,a=y||d} +let i=!1;const s=e[Ig]=t=>{ +i||(i=!0,x(t?a:r,[e]),S.delayedLeave&&S.delayedLeave(),e[Ig]=void 0)} +;t?k(t,[e,s]):s()},leave(t,r){const a=String(e.key) +;if(t[Ig]&&t[Ig](!0),n.isUnmounting)return r();x(p,[t]);let o=!1 +;const i=t[Pg]=n=>{o||(o=!0,r(),x(n?m:f,[t]),t[Pg]=void 0,w[a]===e&&delete w[a]) +};w[a]=e,h?k(h,[t,i]):i()},clone(e){const o=jg(e,t,n,r,a);return a&&a(o),o}} +;return S}function Ug(e){if(tv(e))return(e=ny(e)).children=null,e} +function zg(e){if(!tv(e))return Og(e.type)&&e.children?Rg(e.children):e +;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e +;if(n){if(16&t)return n[0];if(32&t&&rh(n.default))return n.default()}} +function Zg(e,t){ +6&e.shapeFlag&&e.component?(e.transition=t,Zg(e.component.subTree,t)):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent), +e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t} +function Fg(e,t=!1,n){let r=[],a=0;for(let o=0;o1)for(let o=0;oXp({name:e.name},t,{setup:e}))():e} +function Qg(){const e=fy() +;return e?(e.appContext.config.idPrefix||"v")+"-"+e.ids[0]+e.ids[1]++:""} +function Vg(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function qg(e){ +const t=fy(),n=ym(null);if(t){const r=t.refs===Fp?t.refs={}:t.refs +;Object.defineProperty(r,e,{enumerable:!0,get:()=>n.value,set:e=>n.value=e})} +return n}const Wg=new WeakMap;function Xg(e,t,n,r,a=!1){ +if(Jp(e))return void e.forEach(((e,o)=>Xg(e,t&&(Jp(t)?t[o]:t),n,r,a))) +;if(Kg(r)&&!a)return void(512&r.shapeFlag&&r.type.__asyncResolved&&r.component.subTree.component&&Xg(e,t,n,r.component.subTree)) +;const o=4&r.shapeFlag?_y(r.component):r.el,i=a?null:o,{i:s,r:l}=e,c=t&&t.r,u=s.refs===Fp?s.refs={}:s.refs,d=s.setupState,p=hm(d),h=d===Fp?Vp:e=>Kp(p,e) +;if(null!=c&&c!==l)if(Gg(t),ah(c))u[c]=null,h(c)&&(d[c]=null);else if(vm(c)){ +c.value=null;const e=t;e.k&&(u[e.k]=null)}if(rh(l))jm(l,s,12,[i,u]);else{ +const t=ah(l),r=vm(l);if(t||r){const s=()=>{if(e.f){ +const n=t?h(l)?d[l]:u[l]:l.value +;if(a)Jp(n)&&Gp(n,o);else if(Jp(n))n.includes(o)||n.push(o);else if(t)u[l]=[o], +h(l)&&(d[l]=u[l]);else{const t=[o];l.value=t,e.k&&(u[e.k]=t)} +}else t?(u[l]=i,h(l)&&(d[l]=i)):r&&(l.value=i,e.k&&(u[e.k]=i))};if(i){ +const t=()=>{s(),Wg.delete(e)};t.id=-1,Wg.set(e,t),Eb(t,n)}else Gg(e),s()}}} +function Gg(e){const t=Wg.get(e);t&&(t.flags|=8,Wg.delete(e))} +const Yg=e=>8===e.nodeType;Th().requestIdleCallback,Th().cancelIdleCallback +;const Kg=e=>!!e.type.__asyncLoader;function Jg(e){rh(e)&&(e={loader:e}) +;const{loader:t,loadingComponent:n,errorComponent:r,delay:a=200,hydrate:o,timeout:i,suspensible:s=!0,onError:l}=e +;let c,u=null,d=0;const p=()=>{let e;return u||(e=u=t().catch((e=>{ +if(e=e instanceof Error?e:new Error(String(e)),l)return new Promise(((t,n)=>{ +l(e,(()=>t((d++,u=null,p()))),(()=>n(e)),d+1)}));throw e +})).then((t=>e!==u&&u?u:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default), +c=t,t))))};return Hg({name:"AsyncComponentWrapper",__asyncLoader:p, +__asyncHydrate(e,t,n){let r=!1;(t.bu||(t.bu=[])).push((()=>r=!0));const a=()=>{ +r||n()},i=o?()=>{const n=o(a,(t=>function(e,t){if(Yg(e)&&"["===e.data){ +let n=1,r=e.nextSibling;for(;r;){if(1===r.nodeType){if(!1===t(r))break +}else if(Yg(r))if("]"===r.data){if(0==--n)break}else"["===r.data&&n++ +;r=r.nextSibling}}else t(e)}(e,t)));n&&(t.bum||(t.bum=[])).push(n)}:a +;c?i():p().then((()=>!t.isUnmounted&&i()))},get __asyncResolved(){return c}, +setup(){const e=hy;if(Vg(e),c)return()=>ev(c,e);const t=t=>{u=null,zm(t,e,13,!r) +} +;if(s&&e.suspense||Oy)return p().then((t=>()=>ev(t,e))).catch((e=>(t(e),()=>r?ey(r,{ +error:e}):null)));const o=bm(!1),l=bm(),d=bm(!!a);return a&&setTimeout((()=>{ +d.value=!1}),a),null!=i&&setTimeout((()=>{if(!o.value&&!l.value){ +const e=new Error(`Async component timed out after ${i}ms.`);t(e),l.value=e} +}),i),p().then((()=>{o.value=!0,e.parent&&tv(e.parent.vnode)&&e.parent.update() +})).catch((e=>{t(e),l.value=e})),()=>o.value&&c?ev(c,e):l.value&&r?ey(r,{ +error:l.value}):n&&!d.value?ev(n,e):void 0}})}function ev(e,t){ +const{ref:n,props:r,children:a,ce:o}=t.vnode,i=ey(e,r,a) +;return i.ref=n,i.ce=o,delete t.vnode.ce,i}const tv=e=>e.type.__isKeepAlive +;function nv(e,t){av(e,"a",t)}function rv(e,t){av(e,"da",t)} +function av(e,t,n=hy){const r=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){ +if(t.isDeactivated)return;t=t.parent}return e()});if(iv(t,r,n),n){let e=n.parent +;for(;e&&e.parent;)tv(e.parent.vnode)&&ov(r,t,n,e),e=e.parent}} +function ov(e,t,n,r){const a=iv(t,e,r,!0);hv((()=>{Gp(r[t],a)}),n)} +function iv(e,t,n=hy,r=!1){if(n){ +const a=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...r)=>{hf() +;const a=vy(n),o=Um(t,n,e,r);return a(),ff(),o}) +;return r?a.unshift(o):a.push(o),o}}const sv=e=>(t,n=hy)=>{ +Oy&&"sp"!==e||iv(e,((...e)=>t(...e)),n) +},lv=sv("bm"),cv=sv("m"),uv=sv("bu"),dv=sv("u"),pv=sv("bum"),hv=sv("um"),fv=sv("sp"),mv=sv("rtg"),gv=sv("rtc") +;function vv(e,t=hy){iv("ec",e,t)}const bv="components";function yv(e,t){ +return xv(bv,e,!0,t)||e}const Ov=Symbol.for("v-ndc");function wv(e){ +return ah(e)?xv(bv,e,!1)||e:e||Ov}function xv(e,t,n=!0,r=!1){const a=rg||hy +;if(a){const n=a.type;{const e=Ay(n,!1) +;if(e&&(e===t||e===gh(t)||e===yh(gh(t))))return n} +const o=kv(a[e]||n[e],t)||kv(a.appContext[e],t);return!o&&r?n:o}} +function kv(e,t){return e&&(e[t]||e[gh(t)]||e[yh(gh(t))])}function Sv(e,t,n,r){ +let a;const o=n,i=Jp(e);if(i||ah(e)){let n=!1,r=!1 +;i&&cm(e)&&(n=!dm(e),r=um(e),e=Tf(e)),a=new Array(e.length) +;for(let i=0,s=e.length;it(e,n,void 0,o)));else{ +const n=Object.keys(e);a=new Array(n.length);for(let r=0,i=n.length;r{ +const t=r.fn(...e);return t&&(t.key=r.key),t}:r.fn)}return e} +function Av(e,t,n={},r,a){if(rg.ce||rg.parent&&Kg(rg.parent)&&rg.parent.ce){ +const e=Object.keys(n).length>0 +;return"default"!==t&&(n.name=t),Fb(),Wb(Lb,null,[ey("slot",n,r&&r())],e?-2:64)} +let o=e[t];o&&o._c&&(o._d=!1),Fb() +;const i=o&&Tv(o(n)),s=n.key||i&&i.key,l=Wb(Lb,{ +key:(s&&!oh(s)?s:`_${t}`)+(!i&&r?"_fb":"")},i||(r?r():[]),i&&1===e._?64:-2) +;return!a&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),o&&o._c&&(o._d=!0),l} +function Tv(e){ +return e.some((e=>!Xb(e)||e.type!==jb&&!(e.type===Lb&&!Tv(e.children))))?e:null} +function Ev(e,t){const n={};for(const r in e)n[Oh(r)]=e[r];return n} +const Cv=e=>e?yy(e)?_y(e):Cv(e.parent):null,$v=Xp(Object.create(null),{$:e=>e, +$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs, +$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Cv(e.parent),$root:e=>Cv(e.root), +$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Fv(e),$forceUpdate:e=>e.f||(e.f=()=>{ +Gm(e.update)}),$nextTick:e=>e.n||(e.n=Xm.bind(e.proxy)),$watch:e=>vg.bind(e) +}),Pv=(e,t)=>e!==Fp&&!e.__isScriptSetup&&Kp(e,t),Iv={get({_:e},t){ +if("__v_skip"===t)return!0 +;const{ctx:n,setupState:r,data:a,props:o,accessCache:i,type:s,appContext:l}=e +;if("$"!==t[0]){const e=i[t];if(void 0!==e)switch(e){case 1:return r[t];case 2: +return a[t];case 4:return n[t];case 3:return o[t]}else{if(Pv(r,t))return i[t]=1, +r[t];if(a!==Fp&&Kp(a,t))return i[t]=2,a[t];if(Kp(o,t))return i[t]=3,o[t] +;if(n!==Fp&&Kp(n,t))return i[t]=4,n[t];jv&&(i[t]=0)}}const c=$v[t];let u,d +;return c?("$attrs"===t&&Sf(e.attrs,0,""), +c(e)):(u=s.__cssModules)&&(u=u[t])?u:n!==Fp&&Kp(n,t)?(i[t]=4, +n[t]):(d=l.config.globalProperties,Kp(d,t)?d[t]:void 0)},set({_:e},t,n){ +const{data:r,setupState:a,ctx:o}=e +;return Pv(a,t)?(a[t]=n,!0):r!==Fp&&Kp(r,t)?(r[t]=n, +!0):!Kp(e.props,t)&&(("$"!==t[0]||!(t.slice(1)in e))&&(o[t]=n,!0))}, +has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:a,props:o,type:i}},s){ +let l +;return!!(n[s]||e!==Fp&&"$"!==s[0]&&Kp(e,s)||Pv(t,s)||Kp(o,s)||Kp(r,s)||Kp($v,s)||Kp(a.config.globalProperties,s)||(l=i.__cssModules)&&l[s]) +},defineProperty(e,t,n){ +return null!=n.get?e._.accessCache[t]=0:Kp(n,"value")&&this.set(e,t,n.value,null), +Reflect.defineProperty(e,t,n)}};function Dv(){return Nv().slots}function Mv(){ +return Nv().attrs}function Nv(e){const t=fy() +;return t.setupContext||(t.setupContext=Sy(t))}function Rv(e){ +return Jp(e)?e.reduce(((e,t)=>(e[t]=null,e)),{}):e}function Lv(e,t){ +const n=Rv(e);for(const r in t){if(r.startsWith("__skip"))continue;let e=n[r] +;e?Jp(e)||rh(e)?e=n[r]={type:e,default:t[r]}:e.default=t[r]:null===e&&(e=n[r]={ +default:t[r]}),e&&t[`__skip_${r}`]&&(e.skipFactory=!0)}return n} +function Bv(e,t){return e&&t?Jp(e)&&Jp(t)?e.concat(t):Xp({},Rv(e),Rv(t)):e||t} +let jv=!0;function Uv(e){const t=Fv(e),n=e.proxy,r=e.ctx +;jv=!1,t.beforeCreate&&zv(t.beforeCreate,e,"bc") +;const{data:a,computed:o,methods:i,watch:s,provide:l,inject:c,created:u,beforeMount:d,mounted:p,beforeUpdate:h,updated:f,activated:m,deactivated:g,beforeDestroy:v,beforeUnmount:b,destroyed:y,unmounted:O,render:w,renderTracked:x,renderTriggered:k,errorCaptured:S,serverPrefetch:_,expose:A,inheritAttrs:T,components:E,directives:C,filters:$}=t +;if(c&&function(e,t,n=Qp){Jp(e)&&(e=qv(e));for(const r in e){const n=e[r];let a +;a=ih(n)?"default"in n?ug(n.from||r,n.default,!0):ug(n.from||r):ug(n), +vm(a)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>a.value, +set:e=>a.value=e}):t[r]=a}}(c,r,null),i)for(const I in i){const e=i[I] +;rh(e)&&(r[I]=e.bind(n))}if(a){const t=a.call(n,n);ih(t)&&(e.data=om(t))} +if(jv=!0,o)for(const I in o){ +const e=o[I],t=rh(e)?e.bind(n,n):rh(e.get)?e.get.bind(n,n):Qp,a=!rh(e)&&rh(e.set)?e.set.bind(n):Qp,i=Ty({ +get:t,set:a});Object.defineProperty(r,I,{enumerable:!0,configurable:!0, +get:()=>i.value,set:e=>i.value=e})}if(s)for(const I in s)Zv(s[I],r,n,I);if(l){ +const e=rh(l)?l.call(n):l;Reflect.ownKeys(e).forEach((t=>{cg(t,e[t])}))} +function P(e,t){Jp(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))} +if(u&&zv(u,e,"c"), +P(lv,d),P(cv,p),P(uv,h),P(dv,f),P(nv,m),P(rv,g),P(vv,S),P(gv,x),P(mv,k),P(pv,b), +P(hv,O),P(fv,_),Jp(A))if(A.length){const t=e.exposed||(e.exposed={}) +;A.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t, +enumerable:!0})}))}else e.exposed||(e.exposed={}) +;w&&e.render===Qp&&(e.render=w),null!=T&&(e.inheritAttrs=T),E&&(e.components=E), +C&&(e.directives=C),_&&Vg(e)}function zv(e,t,n){ +Um(Jp(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function Zv(e,t,n,r){ +let a=r.includes(".")?bg(n,r):()=>n[r];if(ah(e)){const n=t[e];rh(n)&&mg(a,n) +}else if(rh(e))mg(a,e.bind(n));else if(ih(e))if(Jp(e))e.forEach((e=>Zv(e,t,n,r)));else{ +const r=rh(e.handler)?e.handler.bind(n):t[e.handler];rh(r)&&mg(a,r,e)}} +function Fv(e){ +const t=e.type,{mixins:n,extends:r}=t,{mixins:a,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,s=o.get(t) +;let l;return s?l=s:a.length||n||r?(l={},a.length&&a.forEach((e=>Hv(l,e,i,!0))), +Hv(l,t,i)):l=t,ih(t)&&o.set(t,l),l}function Hv(e,t,n,r=!1){ +const{mixins:a,extends:o}=t;o&&Hv(e,o,n,!0),a&&a.forEach((t=>Hv(e,t,n,!0))) +;for(const i in t)if(r&&"expose"===i);else{const r=Qv[i]||n&&n[i] +;e[i]=r?r(e[i],t[i]):t[i]}return e}const Qv={data:Vv,props:Gv,emits:Gv, +methods:Xv,computed:Xv,beforeCreate:Wv,created:Wv,beforeMount:Wv,mounted:Wv, +beforeUpdate:Wv,updated:Wv,beforeDestroy:Wv,beforeUnmount:Wv,destroyed:Wv, +unmounted:Wv,activated:Wv,deactivated:Wv,errorCaptured:Wv,serverPrefetch:Wv, +components:Xv,directives:Xv,watch:function(e,t){if(!e)return t;if(!t)return e +;const n=Xp(Object.create(null),e);for(const r in t)n[r]=Wv(e[r],t[r]);return n +},provide:Vv,inject:function(e,t){return Xv(qv(e),qv(t))}};function Vv(e,t){ +return t?e?function(){ +return Xp(rh(e)?e.call(this,this):e,rh(t)?t.call(this,this):t)}:t:e} +function qv(e){if(Jp(e)){const t={};for(let n=0;n(a.has(e)||(e&&rh(e.install)?(a.add(e),e.install(s,...t)):rh(e)&&(a.add(e), +e(s,...t))),s),mixin:e=>(r.mixins.includes(e)||r.mixins.push(e),s), +component:(e,t)=>t?(r.components[e]=t,s):r.components[e], +directive:(e,t)=>t?(r.directives[e]=t,s):r.directives[e],mount(a,o,l){if(!i){ +const o=s._ceVNode||ey(t,n) +;return o.appContext=r,!0===l?l="svg":!1===l&&(l=void 0), +e(o,a,l),i=!0,s._container=a,a.__vue_app__=s,_y(o.component)}},onUnmount(e){ +o.push(e)},unmount(){ +i&&(Um(o,s._instance,16),e(null,s._container),delete s._container.__vue_app__)}, +provide:(e,t)=>(r.provides[e]=t,s),runWithContext(e){const t=eb;eb=s;try{ +return e()}finally{eb=t}}};return s}}let eb=null;function tb(e,t,n=Fp){ +const r=fy(),a=gh(t),o=bh(t),i=nb(e,a),s=Tm(((i,s)=>{let l,c,u=Fp +;return gg((()=>{const t=e[a];wh(l,t)&&(l=t,s())}),null,{flush:"sync"}),{ +get:()=>(i(),n.get?n.get(l):l),set(e){const i=n.set?n.set(e):e +;if(!(wh(i,l)||u!==Fp&&wh(e,u)))return;const d=r.vnode.props +;d&&(t in d||a in d||o in d)&&(`onUpdate:${t}`in d||`onUpdate:${a}`in d||`onUpdate:${o}`in d)||(l=e, +s()),r.emit(`update:${t}`,i),wh(e,i)&&wh(e,u)&&!wh(i,c)&&s(),u=e,c=i}}})) +;return s[Symbol.iterator]=()=>{let e=0;return{next:()=>e<2?{value:e++?i||Fp:s, +done:!1}:{done:!0}}},s} +const nb=(e,t)=>"modelValue"===t||"model-value"===t?e.modelModifiers:e[`${t}Modifiers`]||e[`${gh(t)}Modifiers`]||e[`${bh(t)}Modifiers`] +;function rb(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||Fp;let a=n +;const o=t.startsWith("update:"),i=o&&nb(r,t.slice(7));let s +;i&&(i.trim&&(a=n.map((e=>ah(e)?e.trim():e))),i.number&&(a=n.map(Sh))) +;let l=r[s=Oh(t)]||r[s=Oh(gh(t))];!l&&o&&(l=r[s=Oh(bh(t))]),l&&Um(l,e,6,a) +;const c=r[s+"Once"];if(c){if(e.emitted){if(e.emitted[s])return +}else e.emitted={};e.emitted[s]=!0,Um(c,e,6,a)}}const ab=new WeakMap +;function ob(e,t,n=!1){const r=n?ab:t.emitsCache,a=r.get(e) +;if(void 0!==a)return a;const o=e.emits;let i={},s=!1;if(!rh(e)){const r=e=>{ +const n=ob(e,t,!0);n&&(s=!0,Xp(i,n))} +;!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends), +e.mixins&&e.mixins.forEach(r)} +return o||s?(Jp(o)?o.forEach((e=>i[e]=null)):Xp(i,o), +ih(e)&&r.set(e,i),i):(ih(e)&&r.set(e,null),null)}function ib(e,t){ +return!(!e||!qp(t))&&(t=t.slice(2).replace(/Once$/,""), +Kp(e,t[0].toLowerCase()+t.slice(1))||Kp(e,bh(t))||Kp(e,t))}function sb(e){ +const{type:t,vnode:n,proxy:r,withProxy:a,propsOptions:[o],slots:i,attrs:s,emit:l,render:c,renderCache:u,props:d,data:p,setupState:h,ctx:f,inheritAttrs:m}=e,g=og(e) +;let v,b;try{if(4&n.shapeFlag){const e=a||r,t=e;v=iy(c.call(t,e,u,d,h,p,f)),b=s +}else{const e=t;0,v=iy(e.length>1?e(d,{attrs:s,slots:i,emit:l +}):e(d,null)),b=t.props?s:lb(s)}}catch(O){zb.length=0,zm(O,e,1),v=ey(jb)}let y=v +;if(b&&!1!==m){const e=Object.keys(b),{shapeFlag:t}=y +;e.length&&7&t&&(o&&e.some(Wp)&&(b=cb(b,o)),y=ny(y,b,!1,!0))} +return n.dirs&&(y=ny(y,null,!1,!0), +y.dirs=y.dirs?y.dirs.concat(n.dirs):n.dirs),n.transition&&Zg(y,n.transition), +v=y,og(g),v}const lb=e=>{let t +;for(const n in e)("class"===n||"style"===n||qp(n))&&((t||(t={}))[n]=e[n]) +;return t},cb=(e,t)=>{const n={} +;for(const r in e)Wp(r)&&r.slice(9)in t||(n[r]=e[r]);return n} +;function ub(e,t,n){const r=Object.keys(t) +;if(r.length!==Object.keys(e).length)return!0;for(let a=0;aObject.create(db),hb=e=>Object.getPrototypeOf(e)===db +;function fb(e,t,n,r=!1){const a={},o=pb() +;e.propsDefaults=Object.create(null),mb(e,t,a,o) +;for(const i in e.propsOptions[0])i in a||(a[i]=void 0) +;n?e.props=r?a:lm(a,!1,Hf,Kf,nm):e.type.props?e.props=a:e.props=o,e.attrs=o} +function mb(e,t,n,r){const[a,o]=e.propsOptions;let i,s=!1;if(t)for(let l in t){ +if(hh(l))continue;const c=t[l];let u +;a&&Kp(a,u=gh(l))?o&&o.includes(u)?(i||(i={}))[u]=c:n[u]=c:ib(e.emitsOptions,l)||l in r&&c===r[l]||(r[l]=c, +s=!0)}if(o){const t=hm(n),r=i||Fp;for(let i=0;i{l=!0;const[n,r]=bb(e,t,!0) +;Xp(i,n),r&&s.push(...r)} +;!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends), +e.mixins&&e.mixins.forEach(r)}if(!o&&!l)return ih(e)&&r.set(e,Hp),Hp +;if(Jp(o))for(let u=0;u"_"===e||"_ctx"===e||"$stable"===e,wb=e=>Jp(e)?e.map(iy):[iy(e)],xb=(e,t,n)=>{ +if(t._n)return t;const r=ig(((...e)=>wb(t(...e))),n);return r._c=!1,r +},kb=(e,t,n)=>{const r=e._ctx;for(const a in e){if(Ob(a))continue;const n=e[a] +;if(rh(n))t[a]=xb(0,n,r);else if(null!=n){const e=wb(n);t[a]=()=>e}} +},Sb=(e,t)=>{const n=wb(t);e.slots.default=()=>n},_b=(e,t,n)=>{ +for(const r in t)!n&&Ob(r)||(e[r]=t[r])},Ab=(e,t,n)=>{const r=e.slots=pb() +;if(32&e.vnode.shapeFlag){const e=t._;e?(_b(r,t,n),n&&kh(r,"_",e,!0)):kb(t,r) +}else t&&Sb(e,t)},Tb=(e,t,n)=>{const{vnode:r,slots:a}=e;let o=!0,i=Fp +;if(32&r.shapeFlag){const e=t._ +;e?n&&1===e?o=!1:_b(a,t,n):(o=!t.$stable,kb(t,a)),i=t}else t&&(Sb(e,t),i={ +default:1});if(o)for(const s in a)Ob(s)||null!=i[s]||delete a[s] +},Eb=function(e,t){ +t&&t.pendingBranch?Jp(e)?t.effects.push(...e):t.effects.push(e):Km(e)} +;function Cb(e){return function(e,t){Th().__VUE__=!0 +;const{insert:n,remove:r,patchProp:a,createElement:o,createText:i,createComment:s,setText:l,setElementText:c,parentNode:u,nextSibling:d,setScopeId:p=Qp,insertStaticContent:h}=e,f=(e,t,n,r=null,a=null,o=null,i=void 0,s=null,l=!!t.dynamicChildren)=>{ +if(e===t)return +;e&&!Gb(e,t)&&(r=Z(e),L(e,a,o,!0),e=null),-2===t.patchFlag&&(l=!1, +t.dynamicChildren=null);const{type:c,ref:u,shapeFlag:d}=t;switch(c){case Bb: +m(e,t,n,r);break;case jb:g(e,t,n,r);break;case Ub:null==e&&v(t,n,r,i);break +;case Lb:T(e,t,n,r,a,o,i,s,l);break;default: +1&d?O(e,t,n,r,a,o,i,s,l):6&d?E(e,t,n,r,a,o,i,s,l):(64&d||128&d)&&c.process(e,t,n,r,a,o,i,s,l,Q) +} +null!=u&&a?Xg(u,e&&e.ref,o,t||e,!t):null==u&&e&&null!=e.ref&&Xg(e.ref,null,o,e,!0) +},m=(e,t,r,a)=>{if(null==e)n(t.el=i(t.children),r,a);else{const n=t.el=e.el +;t.children!==e.children&&l(n,t.children)}},g=(e,t,r,a)=>{ +null==e?n(t.el=s(t.children||""),r,a):t.el=e.el},v=(e,t,n,r)=>{ +[e.el,e.anchor]=h(e.children,t,n,r,e.el,e.anchor)},b=({el:e,anchor:t},r,a)=>{ +let o;for(;e&&e!==t;)o=d(e),n(e,r,a),e=o;n(t,r,a)},y=({el:e,anchor:t})=>{let n +;for(;e&&e!==t;)n=d(e),r(e),e=n;r(t)},O=(e,t,n,r,a,o,i,s,l)=>{ +if("svg"===t.type?i="svg":"math"===t.type&&(i="mathml"), +null==e)w(t,n,r,a,o,i,s,l);else{const n=e.el&&e.el._isVueCE?e.el:null;try{ +n&&n._beginPatch(),S(e,t,a,o,i,s,l)}finally{n&&n._endPatch()}} +},w=(e,t,r,i,s,l,u,d)=>{let p,h;const{props:f,shapeFlag:m,transition:g,dirs:v}=e +;if(p=e.el=o(e.type,l,f&&f.is,f), +8&m?c(p,e.children):16&m&&k(e.children,p,null,i,s,$b(e,l),u,d), +v&&lg(e,null,i,"created"),x(p,e,e.scopeId,u,i),f){ +for(const e in f)"value"===e||hh(e)||a(p,e,null,f[e],l,i) +;"value"in f&&a(p,"value",null,f.value,l),(h=f.onVnodeBeforeMount)&&uy(h,i,e)} +v&&lg(e,null,i,"beforeMount");const b=function(e,t){ +return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}(s,g) +;b&&g.beforeEnter(p),n(p,t,r),((h=f&&f.onVnodeMounted)||b||v)&&Eb((()=>{ +h&&uy(h,i,e),b&&g.enter(p),v&&lg(e,null,i,"mounted")}),s)},x=(e,t,n,r,a)=>{ +if(n&&p(e,n),r)for(let o=0;o{ +for(let c=l;c{const l=t.el=e.el +;let{patchFlag:u,dynamicChildren:d,dirs:p}=t;u|=16&e.patchFlag +;const h=e.props||Fp,f=t.props||Fp;let m +;if(n&&Pb(n,!1),(m=f.onVnodeBeforeUpdate)&&uy(m,n,t,e), +p&&lg(t,e,n,"beforeUpdate"), +n&&Pb(n,!0),(h.innerHTML&&null==f.innerHTML||h.textContent&&null==f.textContent)&&c(l,""), +d?_(e.dynamicChildren,d,l,n,r,$b(t,o),i):s||D(e,t,l,null,n,r,$b(t,o),i,!1),u>0){ +if(16&u)A(l,h,f,n,o);else if(2&u&&h.class!==f.class&&a(l,"class",null,f.class,o), +4&u&&a(l,"style",h.style,f.style,o),8&u){const e=t.dynamicProps +;for(let t=0;t{m&&uy(m,n,t,e),p&&lg(t,e,n,"updated")}),r) +},_=(e,t,n,r,a,o,i)=>{for(let s=0;s{if(t!==n){ +if(t!==Fp)for(const i in t)hh(i)||i in n||a(e,i,t[i],null,o,r) +;for(const i in n){if(hh(i))continue;const s=n[i],l=t[i] +;s!==l&&"value"!==i&&a(e,i,l,s,o,r)}"value"in n&&a(e,"value",t.value,n.value,o)} +},T=(e,t,r,a,o,s,l,c,u)=>{const d=t.el=e?e.el:i(""),p=t.anchor=e?e.anchor:i("") +;let{patchFlag:h,dynamicChildren:f,slotScopeIds:m}=t +;m&&(c=c?c.concat(m):m),null==e?(n(d,r,a), +n(p,r,a),k(t.children||[],r,p,o,s,l,c,u)):h>0&&64&h&&f&&e.dynamicChildren&&e.dynamicChildren.length===f.length?(_(e.dynamicChildren,f,r,o,s,l,c), +(null!=t.key||o&&t===o.subTree)&&Ib(e,t,!0)):D(e,t,r,p,o,s,l,c,u) +},E=(e,t,n,r,a,o,i,s,l)=>{ +t.slotScopeIds=s,null==e?512&t.shapeFlag?a.ctx.activate(t,n,r,i,l):C(t,n,r,a,o,i,l):$(e,t,l) +},C=(e,t,n,r,a,o,i)=>{const s=e.component=function(e,t,n){ +const r=e.type,a=(t?t.appContext:e.appContext)||dy,o={uid:py++,vnode:e,type:r, +parent:t,appContext:a,root:null,next:null,subTree:null,effect:null,update:null, +job:null,scope:new Vh(!0),render:null,proxy:null,exposed:null,exposeProxy:null, +withProxy:null,provides:t?t.provides:Object.create(a.provides), +ids:t?t.ids:["",0,0],accessCache:null,renderCache:[],components:null, +directives:null,propsOptions:bb(r,a),emitsOptions:ob(r,a),emit:null, +emitted:null,propsDefaults:Fp,inheritAttrs:r.inheritAttrs,ctx:Fp,data:Fp, +props:Fp,attrs:Fp,slots:Fp,refs:Fp,setupState:Fp,setupContext:null,suspense:n, +suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1, +isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null, +um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};o.ctx={_:o +},o.root=t?t.root:o,o.emit=rb.bind(null,o),e.ce&&e.ce(o);return o}(e,r,a) +;if(tv(e)&&(s.ctx.renderer=Q),function(e,t=!1,n=!1){t&&gy(t) +;const{props:r,children:a}=e.vnode,o=yy(e);fb(e,r,o,t),Ab(e,a,n||t) +;const i=o?function(e,t){const n=e.type +;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Iv);const{setup:r}=n +;if(r){hf() +;const n=e.setupContext=r.length>1?Sy(e):null,a=vy(e),o=jm(r,e,0,[e.props,n]),i=sh(o) +;if(ff(),a(),!i&&!e.sp||Kg(e)||Vg(e),i){if(o.then(by,by),t)return o.then((t=>{ +wy(e,t)})).catch((t=>{zm(t,e,0)}));e.asyncDep=o}else wy(e,o)}else xy(e) +}(e,t):void 0;t&&gy(!1)}(s,!1,i),s.asyncDep){if(a&&a.registerDep(s,P,i),!e.el){ +const r=s.subTree=ey(jb);g(null,r,t,n),e.placeholder=r.el}}else P(s,e,t,n,a,o,i) +},$=(e,t,n)=>{const r=t.component=e.component;if(function(e,t,n){ +const{props:r,children:a,component:o}=e,{props:i,children:s,patchFlag:l}=t,c=o.emitsOptions +;if(t.dirs||t.transition)return!0 +;if(!(n&&l>=0))return!(!a&&!s||s&&s.$stable)||r!==i&&(r?!i||ub(r,i,c):!!i) +;if(1024&l)return!0;if(16&l)return r?ub(r,i,c):!!i;if(8&l){ +const e=t.dynamicProps;for(let t=0;t{const s=()=>{if(e.isMounted){ +let{next:t,bu:n,u:r,parent:l,vnode:c}=e;{const n=Db(e) +;if(n)return t&&(t.el=c.el,I(e,t,i)),void n.asyncDep.then((()=>{ +e.isUnmounted||s()}))}let d,p=t +;Pb(e,!1),t?(t.el=c.el,I(e,t,i)):t=c,n&&xh(n),(d=t.props&&t.props.onVnodeBeforeUpdate)&&uy(d,l,t,c), +Pb(e,!0);const h=sb(e),m=e.subTree +;e.subTree=h,f(m,h,u(m.el),Z(m),e,a,o),t.el=h.el, +null===p&&function({vnode:e,parent:t},n){for(;t;){const r=t.subTree +;if(r.suspense&&r.suspense.activeBranch===e&&(r.el=e.el),r!==e)break +;(e=t.vnode).el=n,t=t.parent} +}(e,h.el),r&&Eb(r,a),(d=t.props&&t.props.onVnodeUpdated)&&Eb((()=>uy(d,l,t,c)),a) +}else{let i;const{el:s,props:l}=t,{bm:c,m:u,parent:d,root:p,type:h}=e,m=Kg(t) +;Pb(e,!1),c&&xh(c),!m&&(i=l&&l.onVnodeBeforeMount)&&uy(i,d,t),Pb(e,!0);{ +p.ce&&!1!==p.ce._def.shadowRoot&&p.ce._injectChildStyle(h) +;const i=e.subTree=sb(e);f(null,i,n,r,e,a,o),t.el=i.el} +if(u&&Eb(u,a),!m&&(i=l&&l.onVnodeMounted)){const e=t;Eb((()=>uy(i,d,e)),a)} +(256&t.shapeFlag||d&&Kg(d.vnode)&&256&d.vnode.shapeFlag)&&e.a&&Eb(e.a,a), +e.isMounted=!0,t=n=r=null}};e.scope.on();const l=e.effect=new Yh(s) +;e.scope.off();const c=e.update=l.run.bind(l),d=e.job=l.runIfDirty.bind(l) +;d.i=e,d.id=e.uid,l.scheduler=()=>Gm(d),Pb(e,!0),c()},I=(e,t,n)=>{t.component=e +;const r=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,r){ +const{props:a,attrs:o,vnode:{patchFlag:i}}=e,s=hm(a),[l]=e.propsOptions;let c=!1 +;if(!(r||i>0)||16&i){let r;mb(e,t,a,o)&&(c=!0) +;for(const o in s)t&&(Kp(t,o)||(r=bh(o))!==o&&Kp(t,r))||(l?!n||void 0===n[o]&&void 0===n[r]||(a[o]=gb(l,s,o,void 0,e,!0)):delete a[o]) +;if(o!==s)for(const e in o)t&&Kp(t,e)||(delete o[e],c=!0)}else if(8&i){ +const n=e.vnode.dynamicProps;for(let r=0;r{ +const u=e&&e.children,d=e?e.shapeFlag:0,p=t.children,{patchFlag:h,shapeFlag:f}=t +;if(h>0){if(128&h)return void N(u,p,n,r,a,o,i,s,l) +;if(256&h)return void M(u,p,n,r,a,o,i,s,l)} +8&f?(16&d&&z(u,a,o),p!==u&&c(n,p)):16&d?16&f?N(u,p,n,r,a,o,i,s,l):z(u,a,o,!0):(8&d&&c(n,""), +16&f&&k(p,n,r,a,o,i,s,l))},M=(e,t,n,r,a,o,i,s,l)=>{t=t||Hp +;const c=(e=e||Hp).length,u=t.length,d=Math.min(c,u);let p;for(p=0;pu?z(e,a,o,!0,!1,d):k(t,n,r,a,o,i,s,l,d)},N=(e,t,n,r,a,o,i,s,l)=>{let c=0 +;const u=t.length;let d=e.length-1,p=u-1;for(;c<=d&&c<=p;){ +const r=e[c],u=t[c]=l?sy(t[c]):iy(t[c]);if(!Gb(r,u))break +;f(r,u,n,null,a,o,i,s,l),c++}for(;c<=d&&c<=p;){ +const r=e[d],c=t[p]=l?sy(t[p]):iy(t[p]);if(!Gb(r,c))break +;f(r,c,n,null,a,o,i,s,l),d--,p--}if(c>d){if(c<=p){const e=p+1,d=ep)for(;c<=d;)L(e[c],a,o,!0),c++;else{const h=c,m=c,g=new Map +;for(c=m;c<=p;c++){const e=t[c]=l?sy(t[c]):iy(t[c]);null!=e.key&&g.set(e.key,c)} +let v,b=0;const y=p-m+1;let O=!1,w=0;const x=new Array(y);for(c=0;c=y){L(r,a,o,!0);continue}let u +;if(null!=r.key)u=g.get(r.key);else for(v=m;v<=p;v++)if(0===x[v-m]&&Gb(r,t[v])){ +u=v;break} +void 0===u?L(r,a,o,!0):(x[u-m]=c+1,u>=w?w=u:O=!0,f(r,t[u],n,null,a,o,i,s,l),b++) +}const k=O?function(e){const t=e.slice(),n=[0];let r,a,o,i,s;const l=e.length +;for(r=0;r>1,e[n[s]]0&&(t[r]=n[o-1]),n[o]=r)}}o=n.length,i=n[o-1] +;for(;o-- >0;)n[o]=i,i=t[i];return n}(x):Hp;for(v=k.length-1,c=y-1;c>=0;c--){ +const e=m+c,d=t[e],p=t[e+1],h=e+1{const{el:s,type:l,transition:c,children:u,shapeFlag:d}=e +;if(6&d)return void R(e.component.subTree,t,a,o) +;if(128&d)return void e.suspense.move(t,a,o);if(64&d)return void l.move(e,t,a,Q) +;if(l===Lb){n(s,t,a);for(let e=0;ec.enter(s)),i);else{ +const{leave:o,delayLeave:i,afterLeave:l}=c,u=()=>{ +e.ctx.isUnmounted?r(s):n(s,t,a)},d=()=>{s._isLeaving&&s[Pg](!0),o(s,(()=>{ +u(),l&&l()}))};i?i(s,u,d):d()}else n(s,t,a)},L=(e,t,n,r=!1,a=!1)=>{ +const{type:o,props:i,ref:s,children:l,dynamicChildren:c,shapeFlag:u,patchFlag:d,dirs:p,cacheIndex:h}=e +;if(-2===d&&(a=!1), +null!=s&&(hf(),Xg(s,null,n,e,!0),ff()),null!=h&&(t.renderCache[h]=void 0), +256&u)return void t.ctx.deactivate(e);const f=1&u&&p,m=!Kg(e);let g +;if(m&&(g=i&&i.onVnodeBeforeUnmount)&&uy(g,t,e),6&u)U(e.component,n,r);else{ +if(128&u)return void e.suspense.unmount(n,r) +;f&&lg(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,Q,r):c&&!c.hasOnce&&(o!==Lb||d>0&&64&d)?z(c,t,n,!1,!0):(o===Lb&&384&d||!a&&16&u)&&z(l,t,n), +r&&B(e)}(m&&(g=i&&i.onVnodeUnmounted)||f)&&Eb((()=>{ +g&&uy(g,t,e),f&&lg(e,null,t,"unmounted")}),n)},B=e=>{ +const{type:t,el:n,anchor:a,transition:o}=e;if(t===Lb)return void j(n,a) +;if(t===Ub)return void y(e);const i=()=>{ +r(n),o&&!o.persisted&&o.afterLeave&&o.afterLeave()} +;if(1&e.shapeFlag&&o&&!o.persisted){const{leave:t,delayLeave:r}=o,a=()=>t(n,i) +;r?r(e.el,i,a):a()}else i()},j=(e,t)=>{let n;for(;e!==t;)n=d(e),r(e),e=n;r(t) +},U=(e,t,n)=>{const{bum:r,scope:a,job:o,subTree:i,um:s,m:l,a:c}=e +;Mb(l),Mb(c),r&&xh(r),a.stop(),o&&(o.flags|=8,L(i,e,t,n)),s&&Eb(s,t),Eb((()=>{ +e.isUnmounted=!0}),t)},z=(e,t,n,r=!1,a=!1,o=0)=>{ +for(let i=o;i{ +if(6&e.shapeFlag)return Z(e.component.subTree) +;if(128&e.shapeFlag)return e.suspense.next() +;const t=d(e.anchor||e.el),n=t&&t[yg];return n?d(n):t};let F=!1 +;const H=(e,t,n)=>{let r +;null==e?t._vnode&&(L(t._vnode,null,null,!0),r=t._vnode.component):f(t._vnode||null,e,t,null,null,null,n), +t._vnode=e,F||(F=!0,Jm(r),eg(),F=!1)},Q={p:f,um:L,m:R,r:B,mt:C,mc:k,pc:D,pbc:_, +n:Z,o:e};let V;return{render:H,hydrate:V,createApp:Jv(H)}}(e)} +function $b({type:e,props:t},n){ +return"svg"===n&&"foreignObject"===e||"mathml"===n&&"annotation-xml"===e&&t&&t.encoding&&t.encoding.includes("html")?void 0:n +}function Pb({effect:e,job:t},n){ +n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Ib(e,t,n=!1){ +const r=e.children,a=t.children;if(Jp(r)&&Jp(a))for(let o=0;oe.__isSuspense +;const Lb=Symbol.for("v-fgt"),Bb=Symbol.for("v-txt"),jb=Symbol.for("v-cmt"),Ub=Symbol.for("v-stc"),zb=[] +;let Zb=null;function Fb(e=!1){zb.push(Zb=e?null:[])}let Hb=1 +;function Qb(e,t=!1){Hb+=e,e<0&&Zb&&t&&(Zb.hasOnce=!0)}function Vb(e){ +return e.dynamicChildren=Hb>0?Zb||Hp:null, +zb.pop(),Zb=zb[zb.length-1]||null,Hb>0&&Zb&&Zb.push(e),e} +function qb(e,t,n,r,a,o){return Vb(Jb(e,t,n,r,a,o,!0))}function Wb(e,t,n,r,a){ +return Vb(ey(e,t,n,r,a,!0))}function Xb(e){return!!e&&!0===e.__v_isVNode} +function Gb(e,t){return e.type===t.type&&e.key===t.key} +const Yb=({key:e})=>null!=e?e:null,Kb=({ref:e,ref_key:t,ref_for:n})=>("number"==typeof e&&(e=""+e), +null!=e?ah(e)||vm(e)||rh(e)?{i:rg,r:e,k:t,f:!!n}:e:null) +;function Jb(e,t=null,n=null,r=0,a=null,o=(e===Lb?0:1),i=!1,s=!1){const l={ +__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Yb(t),ref:t&&Kb(t),scopeId:ag, +slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null, +ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null, +targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r, +dynamicProps:a,dynamicChildren:null,appContext:null,ctx:rg} +;return s?(ly(l,n),128&o&&e.normalize(l)):n&&(l.shapeFlag|=ah(n)?8:16), +Hb>0&&!i&&Zb&&(l.patchFlag>0||6&o)&&32!==l.patchFlag&&Zb.push(l),l} +const ey=function(e,t=null,n=null,r=0,a=null,o=!1){e&&e!==Ov||(e=jb);if(Xb(e)){ +const r=ny(e,t,!0) +;return n&&ly(r,n),Hb>0&&!o&&Zb&&(6&r.shapeFlag?Zb[Zb.indexOf(e)]=r:Zb.push(r)), +r.patchFlag=-2,r}i=e,rh(i)&&"__vccOpts"in i&&(e=e.__vccOpts);var i;if(t){t=ty(t) +;let{class:e,style:n}=t +;e&&!ah(e)&&(t.class=Dh(e)),ih(n)&&(pm(n)&&!Jp(n)&&(n=Xp({},n)),t.style=Eh(n))} +const s=ah(e)?1:Rb(e)?128:Og(e)?64:ih(e)?4:rh(e)?2:0;return Jb(e,t,n,r,a,s,o,!0) +};function ty(e){return e?pm(e)||hb(e)?Xp({},e):e:null} +function ny(e,t,n=!1,r=!1){ +const{props:a,ref:o,patchFlag:i,children:s,transition:l}=e,c=t?cy(a||{},t):a,u={ +__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Yb(c), +ref:t&&t.ref?n&&o?Jp(o)?o.concat(Kb(t)):[o,Kb(t)]:Kb(t):o,scopeId:e.scopeId, +slotScopeIds:e.slotScopeIds,children:s,target:e.target, +targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount, +shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Lb?-1===i?16:16|i:i, +dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren, +appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component, +suspense:e.suspense,ssContent:e.ssContent&&ny(e.ssContent), +ssFallback:e.ssFallback&&ny(e.ssFallback),placeholder:e.placeholder,el:e.el, +anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&r&&Zg(u,l.clone(u)),u} +function ry(e=" ",t=0){return ey(Bb,null,e,t)}function ay(e,t){ +const n=ey(Ub,null,e);return n.staticCount=t,n}function oy(e="",t=!1){ +return t?(Fb(),Wb(jb,null,e)):ey(jb,null,e)}function iy(e){ +return null==e||"boolean"==typeof e?ey(jb):Jp(e)?ey(Lb,null,e.slice()):Xb(e)?sy(e):ey(Bb,null,String(e)) +}function sy(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:ny(e)} +function ly(e,t){let n=0;const{shapeFlag:r}=e +;if(null==t)t=null;else if(Jp(t))n=16;else if("object"==typeof t){if(65&r){ +const n=t.default;return void(n&&(n._c&&(n._d=!1),ly(e,n()),n._c&&(n._d=!0)))}{ +n=32;const r=t._ +;r||hb(t)?3===r&&rg&&(1===rg.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=rg} +}else rh(t)?(t={default:t,_ctx:rg},n=32):(t=String(t),64&r?(n=16,t=[ry(t)]):n=8) +;e.children=t,e.shapeFlag|=n}function cy(...e){const t={} +;for(let n=0;nhy||rg;let my,gy;{ +const e=Th(),t=(t,n)=>{let r;return(r=e[t])||(r=e[t]=[]),r.push(n),e=>{ +r.length>1?r.forEach((t=>t(e))):r[0](e)}} +;my=t("__VUE_INSTANCE_SETTERS__",(e=>hy=e)), +gy=t("__VUE_SSR_SETTERS__",(e=>Oy=e))}const vy=e=>{const t=hy +;return my(e),e.scope.on(),()=>{e.scope.off(),my(t)}},by=()=>{ +hy&&hy.scope.off(),my(null)};function yy(e){return 4&e.vnode.shapeFlag}let Oy=!1 +;function wy(e,t,n){ +rh(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ih(t)&&(e.setupState=_m(t)), +xy(e)}function xy(e,t,n){const r=e.type;e.render||(e.render=r.render||Qp);{ +const t=vy(e);hf();try{Uv(e)}finally{ff(),t()}}}const ky={ +get:(e,t)=>(Sf(e,0,""),e[t])};function Sy(e){const t=t=>{e.exposed=t||{}} +;return{attrs:new Proxy(e.attrs,ky),slots:e.slots,emit:e.emit,expose:t}} +function _y(e){ +return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(_m(fm(e.exposed)),{ +get:(t,n)=>n in t?t[n]:n in $v?$v[n](e):void 0,has:(e,t)=>t in e||t in $v +})):e.proxy}function Ay(e,t=!0){ +return rh(e)?e.displayName||e.name:e.name||t&&e.__name}const Ty=(e,t)=>{ +const n=function(e,t,n=!1){let r,a +;return rh(e)?r=e:(r=e.get,a=e.set),new Dm(r,a,n)}(e,0,Oy);return n} +;function Ey(e,t,n){try{Qb(-1);const r=arguments.length +;return 2===r?ih(t)&&!Jp(t)?Xb(t)?ey(e,null,[t]):ey(e,t):ey(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):3===r&&Xb(n)&&(n=[n]), +ey(e,t,n))}finally{Qb(1)}}const Cy="3.5.26";let $y +;const Py="undefined"!=typeof window&&window.trustedTypes;if(Py)try{ +$y=Py.createPolicy("vue",{createHTML:e=>e})}catch(zw){} +const Iy=$y?e=>$y.createHTML(e):e=>e,Dy="undefined"!=typeof document?document:null,My=Dy&&Dy.createElement("template"),Ny={ +insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode +;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{ +const a="svg"===t?Dy.createElementNS("http://www.w3.org/2000/svg",e):"mathml"===t?Dy.createElementNS("http://www.w3.org/1998/Math/MathML",e):n?Dy.createElement(e,{ +is:n}):Dy.createElement(e) +;return"select"===e&&r&&null!=r.multiple&&a.setAttribute("multiple",r.multiple), +a},createText:e=>Dy.createTextNode(e),createComment:e=>Dy.createComment(e), +setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t}, +parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling, +querySelector:e=>Dy.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")}, +insertStaticContent(e,t,n,r,a,o){const i=n?n.previousSibling:t.lastChild +;if(a&&(a===o||a.nextSibling))for(;t.insertBefore(a.cloneNode(!0),n), +a!==o&&(a=a.nextSibling););else{ +My.innerHTML=Iy("svg"===r?`${e}`:"mathml"===r?`${e}`:e) +;const a=My.content;if("svg"===r||"mathml"===r){const e=a.firstChild +;for(;e.firstChild;)a.appendChild(e.firstChild);a.removeChild(e)} +t.insertBefore(a,n)} +return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]} +},Ry="transition",Ly="animation",By=Symbol("_vtc"),jy={name:String,type:String, +css:{type:Boolean,default:!0},duration:[String,Number,Object], +enterFromClass:String,enterActiveClass:String,enterToClass:String, +appearFromClass:String,appearActiveClass:String,appearToClass:String, +leaveFromClass:String,leaveActiveClass:String,leaveToClass:String +},Uy=Xp({},Mg,jy),zy=e=>(e.displayName="Transition", +e.props=Uy,e),Zy=zy(((e,{slots:t})=>Ey(Lg,function(e){const t={} +;for(const E in e)E in jy||(t[E]=e[E]);if(!1===e.css)return t +;const{name:n="v",type:r,duration:a,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:l=o,appearActiveClass:c=i,appearToClass:u=s,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,f=function(e){ +if(null==e)return null;if(ih(e))return[Qy(e.enter),Qy(e.leave)];{const t=Qy(e) +;return[t,t]} +}(a),m=f&&f[0],g=f&&f[1],{onBeforeEnter:v,onEnter:b,onEnterCancelled:y,onLeave:O,onLeaveCancelled:w,onBeforeAppear:x=v,onAppear:k=b,onAppearCancelled:S=y}=t,_=(e,t,n,r)=>{ +e._enterCancelled=r,qy(e,t?u:s),qy(e,t?c:i),n&&n()},A=(e,t)=>{ +e._isLeaving=!1,qy(e,d),qy(e,h),qy(e,p),t&&t()},T=e=>(t,n)=>{ +const a=e?k:b,i=()=>_(t,e,n);Fy(a,[t,i]),Wy((()=>{ +qy(t,e?l:o),Vy(t,e?u:s),Hy(a)||Gy(t,r,m,i)}))};return Xp(t,{onBeforeEnter(e){ +Fy(v,[e]),Vy(e,o),Vy(e,i)},onBeforeAppear(e){Fy(x,[e]),Vy(e,l),Vy(e,c)}, +onEnter:T(!1),onAppear:T(!0),onLeave(e,t){e._isLeaving=!0;const n=()=>A(e,t) +;Vy(e,d),e._enterCancelled?(Vy(e,p),Jy(e)):(Jy(e),Vy(e,p)),Wy((()=>{ +e._isLeaving&&(qy(e,d),Vy(e,h),Hy(O)||Gy(e,r,g,n))})),Fy(O,[e,n])}, +onEnterCancelled(e){_(e,!1,void 0,!0),Fy(y,[e])},onAppearCancelled(e){ +_(e,!0,void 0,!0),Fy(S,[e])},onLeaveCancelled(e){A(e),Fy(w,[e])}}) +}(e),t))),Fy=(e,t=[])=>{Jp(e)?e.forEach((e=>e(...t))):e&&e(...t) +},Hy=e=>!!e&&(Jp(e)?e.some((e=>e.length>1)):e.length>1);function Qy(e){ +return _h(e)}function Vy(e,t){ +t.split(/\s+/).forEach((t=>t&&e.classList.add(t))), +(e[By]||(e[By]=new Set)).add(t)}function qy(e,t){ +t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const n=e[By] +;n&&(n.delete(t),n.size||(e[By]=void 0))}function Wy(e){ +requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let Xy=0 +;function Gy(e,t,n,r){const a=e._endId=++Xy,o=()=>{a===e._endId&&r()} +;if(null!=n)return setTimeout(o,n) +;const{type:i,timeout:s,propCount:l}=function(e,t){ +const n=window.getComputedStyle(e),r=e=>(n[e]||"").split(", "),a=r(`${Ry}Delay`),o=r(`${Ry}Duration`),i=Yy(a,o),s=r(`${Ly}Delay`),l=r(`${Ly}Duration`),c=Yy(s,l) +;let u=null,d=0,p=0 +;t===Ry?i>0&&(u=Ry,d=i,p=o.length):t===Ly?c>0&&(u=Ly,d=c,p=l.length):(d=Math.max(i,c), +u=d>0?i>c?Ry:Ly:null,p=u?u===Ry?o.length:l.length:0) +;const h=u===Ry&&/\b(?:transform|all)(?:,|$)/.test(r(`${Ry}Property`).toString()) +;return{type:u,timeout:d,propCount:p,hasTransform:h}}(e,t);if(!i)return r() +;const c=i+"end";let u=0;const d=()=>{e.removeEventListener(c,p),o()},p=t=>{ +t.target===e&&++u>=l&&d()};setTimeout((()=>{uKy(t)+Ky(e[n]))))}function Ky(e){ +return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function Jy(e){ +return(e?e.ownerDocument:document).body.offsetHeight} +const eO=Symbol("_vod"),tO=Symbol("_vsh"),nO={name:"show", +beforeMount(e,{value:t},{transition:n}){ +e[eO]="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):rO(e,t) +},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)}, +updated(e,{value:t,oldValue:n},{transition:r}){ +!t!=!n&&(r?t?(r.beforeEnter(e),rO(e,!0),r.enter(e)):r.leave(e,(()=>{rO(e,!1) +})):rO(e,t))},beforeUnmount(e,{value:t}){rO(e,t)}};function rO(e,t){ +e.style.display=t?e[eO]:"none",e[tO]=!t}const aO=Symbol("");function oO(e){ +const t=fy();if(!t)return;const n=t.ut=(n=e(t.proxy))=>{ +Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach((e=>sO(e,n))) +},r=()=>{const r=e(t.proxy);t.ce?sO(t.ce,r):iO(t.subTree,r),n(r)};uv((()=>{Km(r) +})),cv((()=>{mg(r,Qp,{flush:"post"});const e=new MutationObserver(r) +;e.observe(t.subTree.el.parentNode,{childList:!0}),hv((()=>e.disconnect()))}))} +function iO(e,t){if(128&e.shapeFlag){const n=e.suspense +;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push((()=>{ +iO(n.activeBranch,t)}))}for(;e.component;)e=e.component.subTree +;if(1&e.shapeFlag&&e.el)sO(e.el,t);else if(e.type===Lb)e.children.forEach((e=>iO(e,t)));else if(e.type===Ub){ +let{el:n,anchor:r}=e;for(;n&&(sO(n,t),n!==r);)n=n.nextSibling}}function sO(e,t){ +if(1===e.nodeType){const n=e.style;let r="";for(const e in t){const a=Fh(t[e]) +;n.setProperty(`--${e}`,a),r+=`--${e}: ${a};`}n[aO]=r}} +const lO=/(?:^|;)\s*display\s*:/;const cO=/\s*!important$/;function uO(e,t,n){ +if(Jp(n))n.forEach((n=>uO(e,t,n)));else if(null==n&&(n=""), +t.startsWith("--"))e.setProperty(t,n);else{const r=function(e,t){const n=pO[t] +;if(n)return n;let r=gh(t);if("filter"!==r&&r in e)return pO[t]=r;r=yh(r) +;for(let a=0;a{if(e._vts){ +if(e._vts<=n.attached)return}else e._vts=Date.now();Um(function(e,t){if(Jp(t)){ +const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{ +n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t +}(e,n.value),t,5,[e])};return n.value=e,n.attached=xO(),n}(r,a);gO(e,n,i,s) +}else i&&(!function(e,t,n,r){e.removeEventListener(t,n,r)}(e,n,i,s),o[t]=void 0) +}}const yO=/(?:Once|Passive|Capture)$/;let OO=0 +;const wO=Promise.resolve(),xO=()=>OO||(wO.then((()=>OO=0)),OO=Date.now()) +;const kO=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123 +;const SO=e=>{const t=e.props["onUpdate:modelValue"]||!1 +;return Jp(t)?e=>xh(t,e):t};function _O(e){e.target.composing=!0}function AO(e){ +const t=e.target +;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))} +const TO=Symbol("_assign");function EO(e,t,n){ +return t&&(e=e.trim()),n&&(e=Sh(e)),e}const CO={ +created(e,{modifiers:{lazy:t,trim:n,number:r}},a){e[TO]=SO(a) +;const o=r||a.props&&"number"===a.props.type;gO(e,t?"change":"input",(t=>{ +t.target.composing||e[TO](EO(e.value,n,o))})),(n||o)&&gO(e,"change",(()=>{ +e.value=EO(e.value,n,o) +})),t||(gO(e,"compositionstart",_O),gO(e,"compositionend",AO),gO(e,"change",AO)) +},mounted(e,{value:t}){e.value=null==t?"":t}, +beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:a,number:o}},i){ +if(e[TO]=SO(i),e.composing)return;const s=null==t?"":t +;if((!o&&"number"!==e.type||/^0\d/.test(e.value)?e.value:Sh(e.value))!==s){ +if(document.activeElement===e&&"range"!==e.type){if(r&&t===n)return +;if(a&&e.value.trim()===s)return}e.value=s}}},$O={deep:!0,created(e,t,n){ +e[TO]=SO(n),gO(e,"change",(()=>{ +const t=e._modelValue,n=NO(e),r=e.checked,a=e[TO];if(Jp(t)){ +const e=Bh(t,n),o=-1!==e;if(r&&!o)a(t.concat(n));else if(!r&&o){const n=[...t] +;n.splice(e,1),a(n)}}else if(th(t)){const e=new Set(t) +;r?e.add(n):e.delete(n),a(e)}else a(RO(e,r))}))},mounted:PO,beforeUpdate(e,t,n){ +e[TO]=SO(n),PO(e,t,n)}};function PO(e,{value:t,oldValue:n},r){let a +;if(e._modelValue=t, +Jp(t))a=Bh(t,r.props.value)>-1;else if(th(t))a=t.has(r.props.value);else{ +if(t===n)return;a=Lh(t,RO(e,!0))}e.checked!==a&&(e.checked=a)}const IO={ +created(e,{value:t},n){ +e.checked=Lh(t,n.props.value),e[TO]=SO(n),gO(e,"change",(()=>{e[TO](NO(e))}))}, +beforeUpdate(e,{value:t,oldValue:n},r){ +e[TO]=SO(r),t!==n&&(e.checked=Lh(t,r.props.value))}},DO={deep:!0, +created(e,{value:t,modifiers:{number:n}},r){const a=th(t);gO(e,"change",(()=>{ +const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?Sh(NO(e)):NO(e))) +;e[TO](e.multiple?a?new Set(t):t:t[0]),e._assigning=!0,Xm((()=>{e._assigning=!1 +}))})),e[TO]=SO(r)},mounted(e,{value:t}){MO(e,t)},beforeUpdate(e,t,n){ +e[TO]=SO(n)},updated(e,{value:t}){e._assigning||MO(e,t)}};function MO(e,t){ +const n=e.multiple,r=Jp(t);if(!n||r||th(t)){ +for(let a=0,o=e.options.length;aString(e)===String(i))):Bh(t,i)>-1 +}else o.selected=t.has(i);else if(Lh(NO(o),t))return void(e.selectedIndex!==a&&(e.selectedIndex=a)) +}n||-1===e.selectedIndex||(e.selectedIndex=-1)}}function NO(e){ +return"_value"in e?e._value:e.value}function RO(e,t){ +const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const LO={ +created(e,t,n){BO(e,t,n,null,"created")},mounted(e,t,n){BO(e,t,n,null,"mounted") +},beforeUpdate(e,t,n,r){BO(e,t,n,r,"beforeUpdate")},updated(e,t,n,r){ +BO(e,t,n,r,"updated")}};function BO(e,t,n,r,a){const o=function(e,t){switch(e){ +case"SELECT":return DO;case"TEXTAREA":return CO;default:switch(t){ +case"checkbox":return $O;case"radio":return IO;default:return CO}} +}(e.tagName,n.props&&n.props.type)[a];o&&o(e,t,n,r)} +const jO=["ctrl","shift","alt","meta"],UO={stop:e=>e.stopPropagation(), +prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget, +ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey, +left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button, +right:e=>"button"in e&&2!==e.button, +exact:(e,t)=>jO.some((n=>e[`${n}Key`]&&!t.includes(n)))},zO=(e,t)=>{ +const n=e._withMods||(e._withMods={}),r=t.join(".") +;return n[r]||(n[r]=(n,...r)=>{for(let e=0;e{ +const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=n=>{ +if(!("key"in n))return;const r=bh(n.key) +;return t.some((e=>e===r||ZO[e]===r))?e(n):void 0})},HO=Xp({ +patchProp:(e,t,n,r,a,o)=>{const i="svg"===a;"class"===t?function(e,t,n){ +const r=e[By] +;r&&(t=(t?[t,...r]:[...r]).join(" ")),null==t?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t +}(e,r,i):"style"===t?function(e,t,n){const r=e.style,a=ah(n);let o=!1;if(n&&!a){ +if(t)if(ah(t))for(const e of t.split(";")){ +const t=e.slice(0,e.indexOf(":")).trim();null==n[t]&&uO(r,t,"") +}else for(const e in t)null==n[e]&&uO(r,e,"") +;for(const e in n)"display"===e&&(o=!0),uO(r,e,n[e])}else if(a){if(t!==n){ +const e=r[aO];e&&(n+=";"+e),r.cssText=n,o=lO.test(n)} +}else t&&e.removeAttribute("style") +;eO in e&&(e[eO]=o?r.display:"",e[tO]&&(r.display="none")) +}(e,n,r):qp(t)?Wp(t)||bO(e,t,0,r,o):("."===t[0]?(t=t.slice(1), +1):"^"===t[0]?(t=t.slice(1),0):function(e,t,n,r){ +if(r)return"innerHTML"===t||"textContent"===t||!!(t in e&&kO(t)&&rh(n)) +;if("spellcheck"===t||"draggable"===t||"translate"===t||"autocorrect"===t)return!1 +;if("sandbox"===t&&"IFRAME"===e.tagName)return!1;if("form"===t)return!1 +;if("list"===t&&"INPUT"===e.tagName)return!1 +;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if("width"===t||"height"===t){ +const t=e.tagName;if("IMG"===t||"VIDEO"===t||"CANVAS"===t||"SOURCE"===t)return!1 +}if(kO(t)&&ah(n))return!1;return t in e +}(e,t,r,i))?(mO(e,t,r),e.tagName.includes("-")||"value"!==t&&"checked"!==t&&"selected"!==t||fO(e,t,r,i,0,"value"!==t)):!e._isVueCE||!/[A-Z]/.test(t)&&ah(r)?("true-value"===t?e._trueValue=r:"false-value"===t&&(e._falseValue=r), +fO(e,t,r,i)):mO(e,gh(t),r,0,t)}},Ny);let QO;function VO(){return QO||(QO=Cb(HO)) +}const qO=(...e)=>{VO().render(...e)},WO=(...e)=>{ +const t=VO().createApp(...e),{mount:n}=t;return t.mount=e=>{const r=function(e){ +if(ah(e)){return document.querySelector(e)}return e}(e);if(!r)return +;const a=t._component +;rh(a)||a.render||a.template||(a.template=r.innerHTML),1===r.nodeType&&(r.textContent="") +;const o=n(r,!1,function(e){if(e instanceof SVGElement)return"svg" +;if("function"==typeof MathMLElement&&e instanceof MathMLElement)return"mathml" +}(r)) +;return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")), +o},t};const XO="3"===Cy[0];function GO(e){ +if(e instanceof Promise||e instanceof Date||e instanceof RegExp)return e +;const t="function"==typeof(n=e)?n():xm(n);var n;if(!e||!t)return t +;if(Array.isArray(t))return t.map((e=>GO(e)));if("object"==typeof t){const e={} +;for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&("titleTemplate"===n||"o"===n[0]&&"n"===n[1]?e[n]=xm(t[n]):e[n]=GO(t[n])) +;return e}return t}const YO={hooks:{"entries:resolve":e=>{ +for(const t of e.entries)t.resolvedInput=GO(t.input)}}},KO="usehead" +;function JO(e={}){ +e.domDelayFn=e.domDelayFn||(e=>Xm((()=>setTimeout((()=>e()),0))));const t=Up(e) +;return t.use(YO),t.install=function(e){return{install(t){ +XO&&(t.config.globalProperties.$unhead=e, +t.config.globalProperties.$head=e,t.provide(KO,e))}}.install}(t),t} +const ew="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},tw="__unhead_injection_handler__" +;function nw(){if(tw in ew)return ew[tw]();return ug(KO)||jp} +function rw(e,t={}){const n=t.head||nw() +;if(n)return n.ssr?n.push(e,t):function(e,t,n={}){const r=bm(!1),a=bm({}) +;fg((()=>{a.value=r.value?{}:GO(t)}));const o=e.push(a.value,n);mg(a,(e=>{ +o.patch(e)}));fy()&&(pv((()=>{o.dispose()})),rv((()=>{r.value=!0})),nv((()=>{ +r.value=!1})));return o}(n,e,t)}function aw(e){ +"function"==typeof queueMicrotask?queueMicrotask(e):Promise.resolve().then(e).catch((e=>setTimeout((()=>{ +throw e}))))}function ow(){let e=[],t={ +addEventListener:(e,n,r,a)=>(e.addEventListener(n,r,a), +t.add((()=>e.removeEventListener(n,r,a)))),requestAnimationFrame(...e){ +let n=requestAnimationFrame(...e);t.add((()=>cancelAnimationFrame(n)))}, +nextFrame(...e){t.requestAnimationFrame((()=>{t.requestAnimationFrame(...e)}))}, +setTimeout(...e){let n=setTimeout(...e);t.add((()=>clearTimeout(n)))}, +microTask(...e){let n={current:!0};return aw((()=>{n.current&&e[0]() +})),t.add((()=>{n.current=!1}))},style(e,t,n){let r=e.style.getPropertyValue(t) +;return Object.assign(e.style,{[t]:n}),this.add((()=>{Object.assign(e.style,{ +[t]:r})}))},group(e){let t=ow();return e(t),this.add((()=>t.dispose()))}, +add:t=>(e.push(t),()=>{let n=e.indexOf(t);if(n>=0)for(let t of e.splice(n,1))t() +}),dispose(){for(let t of e.splice(0))t()}};return t}var iw +;let sw=Symbol("headlessui.useid"),lw=0;const cw=null!=(iw=Qg)?iw:function(){ +return ug(sw,(()=>""+ ++lw))()};function uw(e){var t +;if(null==e||null==e.value)return null;let n=null!=(t=e.value.$el)?t:e.value +;return n instanceof Node?n:null}function dw(e,t,...n){if(e in t){let r=t[e] +;return"function"==typeof r?r(...n):r} +let r=new Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map((e=>`"${e}"`)).join(", ")}.`) +;throw Error.captureStackTrace&&Error.captureStackTrace(r,dw),r} +var pw=Object.defineProperty,hw=(e,t,n)=>(((e,t,n)=>{t in e?pw(e,t,{ +enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n +})(e,"symbol"!=typeof t?t+"":t,n),n);let fw=new class{constructor(){ +hw(this,"current",this.detect()),hw(this,"currentId",0)}set(e){ +this.current!==e&&(this.currentId=0,this.current=e)}reset(){ +this.set(this.detect())}nextId(){return++this.currentId}get isServer(){ +return"server"===this.current}get isClient(){return"client"===this.current} +detect(){ +return"undefined"==typeof window||"undefined"==typeof document?"server":"client" +}};function mw(e){if(fw.isServer)return null +;if(e instanceof Node)return e.ownerDocument +;if(null!=e&&e.hasOwnProperty("value")){let t=uw(e);if(t)return t.ownerDocument} +return document} +let gw=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map((e=>`${e}:not([tabindex='-1'])`)).join(",") +;var vw,bw,yw,Ow=((yw=Ow||{})[yw.First=1]="First", +yw[yw.Previous=2]="Previous",yw[yw.Next=4]="Next", +yw[yw.Last=8]="Last",yw[yw.WrapAround=16]="WrapAround", +yw[yw.NoScroll=32]="NoScroll", +yw),ww=((bw=ww||{})[bw.Error=0]="Error",bw[bw.Overflow=1]="Overflow", +bw[bw.Success=2]="Success", +bw[bw.Underflow=3]="Underflow",bw),xw=((vw=xw||{})[vw.Previous=-1]="Previous", +vw[vw.Next=1]="Next",vw);function kw(e=document.body){ +return null==e?[]:Array.from(e.querySelectorAll(gw)).sort(((e,t)=>Math.sign((e.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))) +}var Sw=(e=>(e[e.Strict=0]="Strict",e[e.Loose=1]="Loose",e))(Sw||{}) +;function _w(e,t=0){var n;return e!==(null==(n=mw(e))?void 0:n.body)&&dw(t,{ +0:()=>e.matches(gw),1(){let t=e;for(;null!==t;){if(t.matches(gw))return!0 +;t=t.parentElement}return!1}})}function Aw(e){let t=mw(e);Xm((()=>{ +t&&!_w(t.activeElement,0)&&Ew(e)}))} +var Tw=(e=>(e[e.Keyboard=0]="Keyboard",e[e.Mouse=1]="Mouse",e))(Tw||{}) +;function Ew(e){null==e||e.focus({preventScroll:!0})} +"undefined"!=typeof window&&"undefined"!=typeof document&&(document.addEventListener("keydown",(e=>{ +e.metaKey||e.altKey||e.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible="") +}),!0),document.addEventListener("click",(e=>{ +1===e.detail?delete document.documentElement.dataset.headlessuiFocusVisible:0===e.detail&&(document.documentElement.dataset.headlessuiFocusVisible="") +}),!0));let Cw=["textarea","input"].join(",");function $w(e,t=e=>e){ +return e.slice().sort(((e,n)=>{let r=t(e),a=t(n);if(null===r||null===a)return 0 +;let o=r.compareDocumentPosition(a) +;return o&Node.DOCUMENT_POSITION_FOLLOWING?-1:o&Node.DOCUMENT_POSITION_PRECEDING?1:0 +}))}function Pw(e,t,{sorted:n=!0,relativeTo:r=null,skipElements:a=[]}={}){var o +;let i=null!=(o=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:null==e?void 0:e.ownerDocument)?o:document,s=Array.isArray(e)?n?$w(e):e:kw(e) +;a.length>0&&s.length>1&&(s=s.filter((e=>!a.includes(e)))), +r=null!=r?r:i.activeElement;let l,c=(()=>{if(5&t)return 1;if(10&t)return-1 +;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last") +})(),u=(()=>{if(1&t)return 0;if(2&t)return Math.max(0,s.indexOf(r))-1 +;if(4&t)return Math.max(0,s.indexOf(r))+1;if(8&t)return s.length-1 +;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last") +})(),d=32&t?{preventScroll:!0}:{},p=0,h=s.length;do{if(p>=h||p+h<=0)return 0 +;let e=u+p;if(16&t)e=(e+h)%h;else{if(e<0)return 3;if(e>=h)return 1} +l=s[e],null==l||l.focus(d),p+=c}while(l!==i.activeElement) +;return 6&t&&function(e){var t,n +;return null!=(n=null==(t=null==e?void 0:e.matches)?void 0:t.call(e,Cw))&&n +}(l)&&l.select(),2}function Iw(){ +return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0 +}function Dw(){return Iw()||/Android/gi.test(window.navigator.userAgent)} +function Mw(e,t,n){fw.isServer||fg((r=>{ +document.addEventListener(e,t,n),r((()=>document.removeEventListener(e,t,n)))})) +}function Nw(e,t,n){fw.isServer||fg((r=>{ +window.addEventListener(e,t,n),r((()=>window.removeEventListener(e,t,n)))}))} +function Rw(e,t,n=Ty((()=>!0))){function r(r,a){ +if(!n.value||r.defaultPrevented)return;let o=a(r) +;if(null===o||!o.getRootNode().contains(o))return;let i=function e(t){ +return"function"==typeof t?e(t()):Array.isArray(t)||t instanceof Set?t:[t]}(e) +;for(let e of i){if(null===e)continue;let t=e instanceof HTMLElement?e:uw(e) +;if(null!=t&&t.contains(o)||r.composed&&r.composedPath().includes(t))return} +return!_w(o,Sw.Loose)&&-1!==o.tabIndex&&r.preventDefault(),t(r,o)}let a=bm(null) +;Mw("pointerdown",(e=>{var t,r +;n.value&&(a.value=(null==(r=null==(t=e.composedPath)?void 0:t.call(e))?void 0:r[0])||e.target) +}),!0),Mw("mousedown",(e=>{var t,r +;n.value&&(a.value=(null==(r=null==(t=e.composedPath)?void 0:t.call(e))?void 0:r[0])||e.target) +}),!0),Mw("click",(e=>{Dw()||a.value&&(r(e,(()=>a.value)),a.value=null) +}),!0),Mw("touchend",(e=>r(e,(()=>e.target instanceof HTMLElement?e.target:null))),!0), +Nw("blur",(e=>r(e,(()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null))),!0) +}function Lw(e,t){if(e)return e;let n=null!=t?t:"button" +;return"string"==typeof n&&"button"===n.toLowerCase()?"button":void 0} +function Bw(e,t){let n=bm(Lw(e.value.type,e.value.as));return cv((()=>{ +n.value=Lw(e.value.type,e.value.as)})),fg((()=>{var e +;n.value||uw(t)&&uw(t)instanceof HTMLButtonElement&&(null==(e=uw(t))||!e.hasAttribute("type"))&&(n.value="button") +})),n}function jw(e){return[e.screenX,e.screenY]}function Uw(){let e=bm([-1,-1]) +;return{wasMoved(t){let n=jw(t) +;return(e.value[0]!==n[0]||e.value[1]!==n[1])&&(e.value=n,!0)},update(t){ +e.value=jw(t)}}} +var zw,Zw=(e=>(e[e.None=0]="None",e[e.RenderStrategy=1]="RenderStrategy", +e[e.Static=2]="Static", +e))(Zw||{}),Fw=((zw=Fw||{})[zw.Unmount=0]="Unmount",zw[zw.Hidden=1]="Hidden",zw) +;function Hw({visible:e=!0,features:t=0,ourProps:n,theirProps:r,...a}){var o +;let i=qw(r,n),s=Object.assign(a,{props:i});if(e||2&t&&i.static)return Qw(s) +;if(1&t){return dw(null==(o=i.unmount)||o?0:1,{0:()=>null,1:()=>Qw({...a,props:{ +...i,hidden:!0,style:{display:"none"}}})})}return Qw(s)} +function Qw({props:e,attrs:t,slots:n,slot:r,name:a}){var o,i +;let{as:s,...l}=Ww(e,["unmount","static"]),c=null==(o=n.default)?void 0:o.call(n,r),u={} +;if(r){let e=!1,t=[] +;for(let[n,a]of Object.entries(r))"boolean"==typeof a&&(e=!0),!0===a&&t.push(n) +;e&&(u["data-headlessui-state"]=t.join(" "))}if("template"===s){ +if(c=Vw(null!=c?c:[]),Object.keys(l).length>0||Object.keys(t).length>0){ +let[e,...n]=null!=c?c:[];if(!function(e){ +return null!=e&&("string"==typeof e.type||"object"==typeof e.type||"function"==typeof e.type) +}(e)||n.length>0)throw new Error(['Passing props on "template"!',"",`The current component <${a} /> is rendering a "template".`,"However we need to passthrough the following props:",Object.keys(l).concat(Object.keys(t)).map((e=>e.trim())).filter(((e,t,n)=>n.indexOf(e)===t)).sort(((e,t)=>e.localeCompare(t))).map((e=>` - ${e}`)).join("\n"),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "template".',"Render a single element as the child so that we can forward the props onto that element."].map((e=>` - ${e}`)).join("\n")].join("\n")) +;let r=qw(null!=(i=e.props)?i:{},l,u),o=ny(e,r,!0) +;for(let t in r)t.startsWith("on")&&(o.props||(o.props={}),o.props[t]=r[t]) +;return o}return Array.isArray(c)&&1===c.length?c[0]:c} +return Ey(s,Object.assign({},l,u),{default:()=>c})}function Vw(e){ +return e.flatMap((e=>e.type===Lb?Vw(e.children):[e]))}function qw(...e){ +if(0===e.length)return{};if(1===e.length)return e[0];let t={},n={} +;for(let r of e)for(let e in r)e.startsWith("on")&&"function"==typeof r[e]?(null!=n[e]||(n[e]=[]), +n[e].push(r[e])):t[e]=r[e] +;if(t.disabled||t["aria-disabled"])return Object.assign(t,Object.fromEntries(Object.keys(n).map((e=>[e,void 0])))) +;for(let r in n)Object.assign(t,{[r](e,...t){let a=n[r];for(let n of a){ +if(e instanceof Event&&e.defaultPrevented)return;n(e,...t)}}});return t} +function Ww(e,t=[]){let n=Object.assign({},e);for(let r of t)r in n&&delete n[r] +;return n} +var Xw=(e=>(e[e.None=1]="None",e[e.Focusable=2]="Focusable",e[e.Hidden=4]="Hidden", +e))(Xw||{});let Gw=Hg({name:"Hidden",props:{as:{type:[Object,String], +default:"div"},features:{type:Number,default:1}}, +setup:(e,{slots:t,attrs:n})=>()=>{var r;let{features:a,...o}=e;return Hw({ +ourProps:{"aria-hidden":!(2&~a)||(null!=(r=o["aria-hidden"])?r:void 0), +hidden:!(4&~a)||void 0,style:{position:"fixed",top:1,left:1,width:1,height:0, +padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)", +whiteSpace:"nowrap",borderWidth:"0",...!(4&~a)&&!!(2&~a)&&{display:"none"}}}, +theirProps:o,slot:{},attrs:n,slots:t,name:"Hidden"})}}),Yw=Symbol("Context") +;var Kw=(e=>(e[e.Open=1]="Open",e[e.Closed=2]="Closed",e[e.Closing=4]="Closing", +e[e.Opening=8]="Opening",e))(Kw||{});function Jw(){return ug(Yw,null)} +function ex(e){cg(Yw,e)} +var tx,nx=((tx=nx||{}).Space=" ",tx.Enter="Enter",tx.Escape="Escape", +tx.Backspace="Backspace", +tx.Delete="Delete",tx.ArrowLeft="ArrowLeft",tx.ArrowUp="ArrowUp", +tx.ArrowRight="ArrowRight",tx.ArrowDown="ArrowDown",tx.Home="Home",tx.End="End", +tx.PageUp="PageUp",tx.PageDown="PageDown",tx.Tab="Tab",tx);let rx=[] +;!function(e){function t(){ +"loading"!==document.readyState&&(e(),document.removeEventListener("DOMContentLoaded",t)) +} +"undefined"!=typeof window&&"undefined"!=typeof document&&(document.addEventListener("DOMContentLoaded",t), +t())}((()=>{function e(e){ +e.target instanceof HTMLElement&&e.target!==document.body&&rx[0]!==e.target&&(rx.unshift(e.target), +rx=rx.filter((e=>null!=e&&e.isConnected)),rx.splice(10))} +window.addEventListener("click",e,{capture:!0 +}),window.addEventListener("mousedown",e,{capture:!0 +}),window.addEventListener("focus",e,{capture:!0 +}),document.body.addEventListener("click",e,{capture:!0 +}),document.body.addEventListener("mousedown",e,{capture:!0 +}),document.body.addEventListener("focus",e,{capture:!0})})) +;var ax,ox=((ax=ox||{})[ax.First=0]="First", +ax[ax.Previous=1]="Previous",ax[ax.Next=2]="Next", +ax[ax.Last=3]="Last",ax[ax.Specific=4]="Specific",ax[ax.Nothing=5]="Nothing",ax) +;function ix(e,t){let n=t.resolveItems();if(n.length<=0)return null +;let r=t.resolveActiveIndex(),a=null!=r?r:-1;switch(e.focus){case 0: +for(let e=0;e=0;--e)if(!t.resolveDisabled(n[e],e,n))return e;return r +;case 2:for(let e=a+1;e=0;--e)if(!t.resolveDisabled(n[e],e,n))return e;return r +;case 4:for(let r=0;r{ +(e=null!=e?e:window).addEventListener(t,n,r), +a((()=>e.removeEventListener(t,n,r)))}))}var dx=(e=>(e[e.Forwards=0]="Forwards", +e[e.Backwards=1]="Backwards",e))(dx||{});function px(){let e=bm(0) +;return Nw("keydown",(t=>{"Tab"===t.key&&(e.value=t.shiftKey?1:0)})),e} +function hx(e){if(!e)return new Set;if("function"==typeof e)return new Set(e()) +;let t=new Set;for(let n of e.value){let e=uw(n) +;e instanceof HTMLElement&&t.add(e)}return t} +var fx=(e=>(e[e.None=1]="None",e[e.InitialFocus=2]="InitialFocus", +e[e.TabLock=4]="TabLock", +e[e.FocusLock=8]="FocusLock",e[e.RestoreFocus=16]="RestoreFocus", +e[e.All=30]="All",e))(fx||{});let mx=Object.assign(Hg({name:"FocusTrap",props:{ +as:{type:[Object,String],default:"div"},initialFocus:{type:Object,default:null}, +features:{type:Number,default:30},containers:{type:[Object,Function], +default:bm(new Set)}},inheritAttrs:!1,setup(e,{attrs:t,slots:n,expose:r}){ +let a=bm(null);r({el:a,$el:a});let o=Ty((()=>mw(a))),i=bm(!1) +;cv((()=>i.value=!0)),hv((()=>i.value=!1)),function({ownerDocument:e},t){ +let n=function(e){let t=bm(rx.slice());return mg([e],(([e],[n])=>{ +!0===n&&!1===e?aw((()=>{t.value.splice(0) +})):!1===n&&!0===e&&(t.value=rx.slice())}),{flush:"post"}),()=>{var e +;return null!=(e=t.value.find((e=>null!=e&&e.isConnected)))?e:null}}(t) +;cv((()=>{fg((()=>{var r,a +;t.value||(null==(r=e.value)?void 0:r.activeElement)===(null==(a=e.value)?void 0:a.body)&&Ew(n()) +}),{flush:"post"})})),hv((()=>{t.value&&Ew(n())}))}({ownerDocument:o +},Ty((()=>i.value&&Boolean(16&e.features)))) +;let s=function({ownerDocument:e,container:t,initialFocus:n},r){ +let a=bm(null),o=bm(!1) +;return cv((()=>o.value=!0)),hv((()=>o.value=!1)),cv((()=>{mg([t,n,r],((i,s)=>{ +if(i.every(((e,t)=>(null==s?void 0:s[t])===e))||!r.value)return;let l=uw(t) +;l&&aw((()=>{var t,r;if(!o.value)return +;let i=uw(n),s=null==(t=e.value)?void 0:t.activeElement;if(i){ +if(i===s)return void(a.value=s)}else if(l.contains(s))return void(a.value=s) +;i?Ew(i):Pw(l,Ow.First|Ow.NoScroll)===ww.Error&&console.warn("There are no focusable elements inside the "), +a.value=null==(r=e.value)?void 0:r.activeElement}))}),{immediate:!0,flush:"post" +})})),a}({ownerDocument:o,container:a,initialFocus:Ty((()=>e.initialFocus)) +},Ty((()=>i.value&&Boolean(2&e.features)))) +;!function({ownerDocument:e,container:t,containers:n,previousActiveElement:r},a){ +var o;ux(null==(o=e.value)?void 0:o.defaultView,"focus",(e=>{if(!a.value)return +;let o=hx(n);uw(t)instanceof HTMLElement&&o.add(uw(t));let i=r.value +;if(!i)return;let s=e.target +;s&&s instanceof HTMLElement?gx(o,s)?(r.value=s,Ew(s)):(e.preventDefault(), +e.stopPropagation(),Ew(i)):Ew(r.value)}),!0)}({ownerDocument:o,container:a, +containers:e.containers,previousActiveElement:s +},Ty((()=>i.value&&Boolean(8&e.features))));let l=px();function c(e){let t=uw(a) +;t&&dw(l.value,{[dx.Forwards]:()=>{Pw(t,Ow.First,{skipElements:[e.relatedTarget] +})},[dx.Backwards]:()=>{Pw(t,Ow.Last,{skipElements:[e.relatedTarget]})}})} +let u=bm(!1);function d(e){ +"Tab"===e.key&&(u.value=!0,requestAnimationFrame((()=>{u.value=!1})))} +function p(t){if(!i.value)return;let n=hx(e.containers) +;uw(a)instanceof HTMLElement&&n.add(uw(a));let r=t.relatedTarget +;r instanceof HTMLElement&&"true"!==r.dataset.headlessuiFocusGuard&&(gx(n,r)||(u.value?Pw(uw(a),dw(l.value,{ +[dx.Forwards]:()=>Ow.Next,[dx.Backwards]:()=>Ow.Previous})|Ow.WrapAround,{ +relativeTo:t.target}):t.target instanceof HTMLElement&&Ew(t.target)))} +return()=>{let r={ref:a,onKeydown:d,onFocusout:p +},{features:o,initialFocus:i,containers:s,...l}=e +;return Ey(Lb,[Boolean(4&o)&&Ey(Gw,{as:"button",type:"button", +"data-headlessui-focus-guard":!0,onFocus:c,features:Xw.Focusable}),Hw({ +ourProps:r,theirProps:{...t,...l},slot:{},attrs:t,slots:n,name:"FocusTrap" +}),Boolean(4&o)&&Ey(Gw,{as:"button",type:"button", +"data-headlessui-focus-guard":!0,onFocus:c,features:Xw.Focusable})])}}}),{ +features:fx});function gx(e,t){for(let n of e)if(n.contains(t))return!0;return!1 +}function vx(){let e;return{before({doc:t}){var n;let r=t.documentElement +;e=(null!=(n=t.defaultView)?n:window).innerWidth-r.clientWidth}, +after({doc:t,d:n}){let r=t.documentElement,a=r.clientWidth-r.offsetWidth,o=e-a +;n.style(r,"paddingRight",`${o}px`)}}}function bx(e){let t={} +;for(let n of e)Object.assign(t,n(t));return t}let yx=function(e,t){ +let n=e(),r=new Set;return{getSnapshot:()=>n, +subscribe:e=>(r.add(e),()=>r.delete(e)),dispatch(e,...a){let o=t[e].call(n,...a) +;o&&(n=o,r.forEach((e=>e())))}}}((()=>new Map),{PUSH(e,t){var n +;let r=null!=(n=this.get(e))?n:{doc:e,count:0,d:ow(),meta:new Set} +;return r.count++,r.meta.add(t),this.set(e,r),this},POP(e,t){let n=this.get(e) +;return n&&(n.count--,n.meta.delete(t)),this}, +SCROLL_PREVENT({doc:e,d:t,meta:n}){let r={doc:e,d:t,meta:bx(n)},a=[Iw()?{ +before({doc:e,d:t,meta:n}){function r(e){ +return n.containers.flatMap((e=>e())).some((t=>t.contains(e)))} +t.microTask((()=>{var n +;if("auto"!==window.getComputedStyle(e.documentElement).scrollBehavior){ +let n=ow() +;n.style(e.documentElement,"scrollBehavior","auto"),t.add((()=>t.microTask((()=>n.dispose())))) +}let a=null!=(n=window.scrollY)?n:window.pageYOffset,o=null +;t.addEventListener(e,"click",(t=>{if(t.target instanceof HTMLElement)try{ +let n=t.target.closest("a");if(!n)return +;let{hash:a}=new URL(n.href),i=e.querySelector(a);i&&!r(i)&&(o=i)}catch{}}),!0), +t.addEventListener(e,"touchstart",(e=>{ +if(e.target instanceof HTMLElement)if(r(e.target)){let n=e.target +;for(;n.parentElement&&r(n.parentElement);)n=n.parentElement +;t.style(n,"overscrollBehavior","contain") +}else t.style(e.target,"touchAction","none") +})),t.addEventListener(e,"touchmove",(e=>{if(e.target instanceof HTMLElement){ +if("INPUT"===e.target.tagName)return;if(r(e.target)){let t=e.target +;for(;t.parentElement&&""!==t.dataset.headlessuiPortal&&!(t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth);)t=t.parentElement +;""===t.dataset.headlessuiPortal&&e.preventDefault()}else e.preventDefault()} +}),{passive:!1}),t.add((()=>{var e +;let t=null!=(e=window.scrollY)?e:window.pageYOffset +;a!==t&&window.scrollTo(0,a),o&&o.isConnected&&(o.scrollIntoView({ +block:"nearest"}),o=null)}))}))}}:{},vx(),{before({doc:e,d:t}){ +t.style(e.documentElement,"overflow","hidden")}}] +;a.forEach((({before:e})=>null==e?void 0:e(r))), +a.forEach((({after:e})=>null==e?void 0:e(r)))},SCROLL_ALLOW({d:e}){e.dispose()}, +TEARDOWN({doc:e}){this.delete(e)}});function Ox(e,t,n){let r=function(e){ +let t=ym(e.getSnapshot());return hv(e.subscribe((()=>{t.value=e.getSnapshot() +}))),t}(yx),a=Ty((()=>{let t=e.value?r.value.get(e.value):void 0 +;return!!t&&t.count>0}));return mg([e,t],(([e,t],[r],a)=>{if(!e||!t)return +;yx.dispatch("PUSH",e,n);let o=!1;a((()=>{ +o||(yx.dispatch("POP",null!=r?r:e,n),o=!0)}))}),{immediate:!0}),a} +yx.subscribe((()=>{let e=yx.getSnapshot(),t=new Map +;for(let[n]of e)t.set(n,n.documentElement.style.overflow) +;for(let n of e.values()){let e="hidden"===t.get(n.doc),r=0!==n.count +;(r&&!e||!r&&e)&&yx.dispatch(n.count>0?"SCROLL_PREVENT":"SCROLL_ALLOW",n), +0===n.count&&yx.dispatch("TEARDOWN",n)}}));let wx=new Map,xx=new Map +;function kx(e,t=bm(!0)){fg((n=>{var r;if(!t.value)return;let a=uw(e) +;if(!a)return;n((function(){var e;if(!a)return;let t=null!=(e=xx.get(a))?e:1 +;if(1===t?xx.delete(a):xx.set(a,t-1),1!==t)return;let n=wx.get(a) +;n&&(null===n["aria-hidden"]?a.removeAttribute("aria-hidden"):a.setAttribute("aria-hidden",n["aria-hidden"]), +a.inert=n.inert,wx.delete(a))}));let o=null!=(r=xx.get(a))?r:0 +;xx.set(a,o+1),0===o&&(wx.set(a,{"aria-hidden":a.getAttribute("aria-hidden"), +inert:a.inert}),a.setAttribute("aria-hidden","true"),a.inert=!0)}))} +function Sx({defaultContainers:e=[],portals:t,mainTreeNodeRef:n}={}){ +let r=bm(null),a=mw(r);function o(){var n,o,i;let s=[] +;for(let t of e)null!==t&&(t instanceof HTMLElement?s.push(t):"value"in t&&t.value instanceof HTMLElement&&s.push(t.value)) +;if(null!=t&&t.value)for(let e of t.value)s.push(e) +;for(let e of null!=(n=null==a?void 0:a.querySelectorAll("html > *, body > *"))?n:[])e!==document.body&&e!==document.head&&e instanceof HTMLElement&&"headlessui-portal-root"!==e.id&&(e.contains(uw(r))||e.contains(null==(i=null==(o=uw(r))?void 0:o.getRootNode())?void 0:i.host)||s.some((t=>e.contains(t)))||s.push(e)) +;return s}return{resolveContainers:o,contains:e=>o().some((t=>t.contains(e))), +mainTreeNodeRef:r,MainTreeNode:()=>null!=n?null:Ey(Gw,{features:Xw.Hidden,ref:r +})}}let _x=Symbol("ForcePortalRootContext");let Ax=Hg({name:"ForcePortalRoot", +props:{as:{type:[Object,String],default:"template"},force:{type:Boolean, +default:!1}},setup:(e,{slots:t,attrs:n})=>(cg(_x,e.force),()=>{ +let{force:r,...a}=e;return Hw({theirProps:a,ourProps:{},slot:{},slots:t,attrs:n, +name:"ForcePortalRoot"})})}),Tx=Symbol("StackContext") +;var Ex=(e=>(e[e.Add=0]="Add",e[e.Remove=1]="Remove",e))(Ex||{}) +;function Cx({type:e,enabled:t,element:n,onUpdate:r}){let a=ug(Tx,(()=>{})) +;function o(...e){null==r||r(...e),a(...e)}cv((()=>{mg(t,((t,r)=>{ +t?o(0,e,n):!0===r&&o(1,e,n)}),{immediate:!0,flush:"sync"})})),hv((()=>{ +t.value&&o(1,e,n)})),cg(Tx,o)}let $x=Symbol("DescriptionContext") +;const Px=new WeakMap;function Ix(e,t){let n=t(function(e){var t +;return null!=(t=Px.get(e))?t:0}(e));return n<=0?Px.delete(e):Px.set(e,n),n} +let Dx=Hg({name:"Portal",props:{as:{type:[Object,String],default:"div"}}, +setup(e,{slots:t,attrs:n}){ +let r=bm(null),a=Ty((()=>mw(r))),o=ug(_x,!1),i=ug(Rx,null),s=bm(!0===o||null==i?function(e){ +let t=mw(e);if(!t){if(null===e)return null +;throw new Error(`[Headless UI]: Cannot find ownerDocument for contextElement: ${e}`) +}let n=t.getElementById("headlessui-portal-root");if(n)return n +;let r=t.createElement("div") +;return r.setAttribute("id","headlessui-portal-root"),t.body.appendChild(r) +}(r.value):i.resolveTarget());s.value&&Ix(s.value,(e=>e+1));let l=bm(!1) +;cv((()=>{l.value=!0})),fg((()=>{o||null!=i&&(s.value=i.resolveTarget())})) +;let c=ug(Mx,null),u=!1,d=fy();return mg(r,(()=>{if(u||!c)return;let e=uw(r) +;e&&(hv(c.register(e),d),u=!0)})),hv((()=>{var e,t +;let n=null==(e=a.value)?void 0:e.getElementById("headlessui-portal-root") +;!n||s.value!==n||Ix(s.value,(e=>e-1))||s.value.children.length>0||null==(t=s.value.parentElement)||t.removeChild(s.value) +})),()=>{if(!l.value||null===s.value)return null;let a={ref:r, +"data-headlessui-portal":""};return Ey(Eg,{to:s.value},Hw({ourProps:a, +theirProps:e,slot:{},attrs:n,slots:t,name:"Portal"}))}} +}),Mx=Symbol("PortalParentContext");function Nx(){let e=ug(Mx,null),t=bm([]) +;function n(n){let r=t.value.indexOf(n) +;-1!==r&&t.value.splice(r,1),e&&e.unregister(n)}let r={register:function(r){ +return t.value.push(r),e&&e.register(r),()=>n(r)},unregister:n,portals:t} +;return[t,Hg({name:"PortalWrapper",setup:(e,{slots:t})=>(cg(Mx,r),()=>{var e +;return null==(e=t.default)?void 0:e.call(t)})})]} +let Rx=Symbol("PortalGroupContext"),Lx=Hg({name:"PortalGroup",props:{as:{ +type:[Object,String],default:"template"},target:{type:Object,default:null}}, +setup(e,{attrs:t,slots:n}){let r=om({resolveTarget:()=>e.target}) +;return cg(Rx,r),()=>{let{target:r,...a}=e;return Hw({theirProps:a,ourProps:{}, +slot:{},attrs:t,slots:n,name:"PortalGroup"})}}}) +;var Bx,jx=((Bx=jx||{})[Bx.Open=0]="Open",Bx[Bx.Closed=1]="Closed",Bx) +;let Ux=Symbol("DialogContext");function zx(e){let t=ug(Ux,null);if(null===t){ +let t=new Error(`<${e} /> is missing a parent component.`) +;throw Error.captureStackTrace&&Error.captureStackTrace(t,zx),t}return t} +let Zx="DC8F892D-2EBD-447C-A4C8-A03058436FF4",Fx=Hg({name:"Dialog", +inheritAttrs:!1,props:{as:{type:[Object,String],default:"div"},static:{ +type:Boolean,default:!1},unmount:{type:Boolean,default:!0},open:{ +type:[Boolean,String],default:Zx},initialFocus:{type:Object,default:null},id:{ +type:String,default:null},role:{type:String,default:"dialog"}},emits:{ +close:e=>!0},setup(e,{emit:t,attrs:n,slots:r,expose:a}){var o,i +;let s=null!=(o=e.id)?o:`headlessui-dialog-${cw()}`,l=bm(!1);cv((()=>{l.value=!0 +})) +;let c=!1,u=Ty((()=>"dialog"===e.role||"alertdialog"===e.role?e.role:(c||(c=!0, +console.warn(`Invalid role [${u}] passed to . Only \`dialog\` and and \`alertdialog\` are supported. Using \`dialog\` instead.`)), +"dialog"))),d=bm(0),p=Jw(),h=Ty((()=>e.open===Zx&&null!==p?(p.value&Kw.Open)===Kw.Open:e.open)),f=bm(null),m=Ty((()=>mw(f))) +;if(a({el:f,$el:f +}),e.open===Zx&&null===p)throw new Error("You forgot to provide an `open` prop to the `Dialog`.") +;if("boolean"!=typeof h.value)throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${h.value===Zx?void 0:e.open}`) +;let g=Ty((()=>l.value&&h.value?0:1)),v=Ty((()=>0===g.value)),b=Ty((()=>d.value>1)),y=null!==ug(Ux,null),[O,w]=Nx(),{resolveContainers:x,mainTreeNodeRef:k,MainTreeNode:S}=Sx({ +portals:O,defaultContainers:[Ty((()=>{var e +;return null!=(e=D.panelRef.value)?e:f.value}))] +}),_=Ty((()=>b.value?"parent":"leaf")),A=Ty((()=>null!==p&&(p.value&Kw.Closing)===Kw.Closing)),T=Ty((()=>!y&&!A.value&&v.value)),E=Ty((()=>{ +var e,t,n +;return null!=(n=Array.from(null!=(t=null==(e=m.value)?void 0:e.querySelectorAll("body > *"))?t:[]).find((e=>"headlessui-portal-root"!==e.id&&(e.contains(uw(k))&&e instanceof HTMLElement))))?n:null +}));kx(E,T);let C=Ty((()=>!!b.value||v.value)),$=Ty((()=>{var e,t,n +;return null!=(n=Array.from(null!=(t=null==(e=m.value)?void 0:e.querySelectorAll("[data-headlessui-portal]"))?t:[]).find((e=>e.contains(uw(k))&&e instanceof HTMLElement)))?n:null +}));kx($,C),Cx({type:"Dialog",enabled:Ty((()=>0===g.value)),element:f, +onUpdate:(e,t)=>{if("Dialog"===t)return dw(e,{[Ex.Add]:()=>d.value+=1, +[Ex.Remove]:()=>d.value-=1})}}) +;let P=function({slot:e=bm({}),name:t="Description",props:n={}}={}){let r=bm([]) +;return cg($x,{register:function(e){return r.value.push(e),()=>{ +let t=r.value.indexOf(e);-1!==t&&r.value.splice(t,1)}},slot:e,name:t,props:n +}),Ty((()=>r.value.length>0?r.value.join(" "):void 0))}({ +name:"DialogDescription",slot:Ty((()=>({open:h.value})))}),I=bm(null),D={ +titleId:I,panelRef:bm(null),dialogState:g,setTitleId(e){I.value!==e&&(I.value=e) +},close(){t("close",!1)}};cg(Ux,D);let M=Ty((()=>!(!v.value||b.value))) +;Rw(x,((e,t)=>{e.preventDefault(),D.close(),Xm((()=>null==t?void 0:t.focus())) +}),M);let N=Ty((()=>!(b.value||0!==g.value))) +;ux(null==(i=m.value)?void 0:i.defaultView,"keydown",(e=>{ +N.value&&(e.defaultPrevented||e.key===nx.Escape&&(e.preventDefault(), +e.stopPropagation(),D.close()))}));let R=Ty((()=>!(A.value||0!==g.value||y))) +;return Ox(m,R,(e=>{var t;return{containers:[...null!=(t=e.containers)?t:[],x]} +})),fg((e=>{if(0!==g.value)return;let t=uw(f);if(!t)return +;let n=new ResizeObserver((e=>{for(let t of e){ +let e=t.target.getBoundingClientRect() +;0===e.x&&0===e.y&&0===e.width&&0===e.height&&D.close()}})) +;n.observe(t),e((()=>n.disconnect()))})),()=>{ +let{open:t,initialFocus:a,...o}=e,i={...n,ref:f,id:s,role:u.value, +"aria-modal":0===g.value||void 0,"aria-labelledby":I.value, +"aria-describedby":P.value},l={open:0===g.value};return Ey(Ax,{force:!0 +},(()=>[Ey(Dx,(()=>Ey(Lx,{target:f.value},(()=>Ey(Ax,{force:!1},(()=>Ey(mx,{ +initialFocus:a,containers:x,features:v.value?dw(_.value,{ +parent:mx.features.RestoreFocus,leaf:mx.features.All&~mx.features.FocusLock +}):mx.features.None},(()=>Ey(w,{},(()=>Hw({ourProps:i,theirProps:{...o,...n}, +slot:l,attrs:n,slots:r,visible:0===g.value,features:Zw.RenderStrategy|Zw.Static, +name:"Dialog"}))))))))))),Ey(S)]))}}}),Hx=Hg({name:"DialogPanel",props:{as:{ +type:[Object,String],default:"div"},id:{type:String,default:null}}, +setup(e,{attrs:t,slots:n,expose:r}){var a +;let o=null!=(a=e.id)?a:`headlessui-dialog-panel-${cw()}`,i=zx("DialogPanel") +;function s(e){e.stopPropagation()}return r({el:i.panelRef,$el:i.panelRef +}),()=>{let{...r}=e;return Hw({ourProps:{id:o,ref:i.panelRef,onClick:s}, +theirProps:r,slot:{open:0===i.dialogState.value},attrs:t,slots:n, +name:"DialogPanel"})}}}),Qx=Hg({name:"DialogTitle",props:{as:{ +type:[Object,String],default:"h2"},id:{type:String,default:null}}, +setup(e,{attrs:t,slots:n}){var r +;let a=null!=(r=e.id)?r:`headlessui-dialog-title-${cw()}`,o=zx("DialogTitle") +;return cv((()=>{o.setTitleId(a),hv((()=>o.setTitleId(null)))})),()=>{ +let{...r}=e;return Hw({ourProps:{id:a},theirProps:r,slot:{ +open:0===o.dialogState.value},attrs:t,slots:n,name:"DialogTitle"})}}}) +;var Vx=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(Vx||{}) +;let qx=Symbol("DisclosureContext");function Wx(e){let t=ug(qx,null) +;if(null===t){ +let t=new Error(`<${e} /> is missing a parent component.`) +;throw Error.captureStackTrace&&Error.captureStackTrace(t,Wx),t}return t} +let Xx=Symbol("DisclosurePanelContext");let Gx=Hg({name:"Disclosure",props:{as:{ +type:[Object,String],default:"template"},defaultOpen:{type:[Boolean],default:!1} +},setup(e,{slots:t,attrs:n}){ +let r=bm(e.defaultOpen?0:1),a=bm(null),o=bm(null),i={ +buttonId:bm(`headlessui-disclosure-button-${cw()}`), +panelId:bm(`headlessui-disclosure-panel-${cw()}`),disclosureState:r,panel:a, +button:o,toggleDisclosure(){r.value=dw(r.value,{0:1,1:0})},closeDisclosure(){ +1!==r.value&&(r.value=1)},close(e){i.closeDisclosure() +;let t=e?e instanceof HTMLElement?e:e.value instanceof HTMLElement?uw(e):uw(i.button):uw(i.button) +;null==t||t.focus()}};return cg(qx,i),ex(Ty((()=>dw(r.value,{0:Kw.Open, +1:Kw.Closed})))),()=>{let{defaultOpen:a,...o}=e;return Hw({theirProps:o, +ourProps:{},slot:{open:0===r.value,close:i.close},slots:t,attrs:n, +name:"Disclosure"})}}}),Yx=Hg({name:"DisclosureButton",props:{as:{ +type:[Object,String],default:"button"},disabled:{type:[Boolean],default:!1},id:{ +type:String,default:null}},setup(e,{attrs:t,slots:n,expose:r}){ +let a=Wx("DisclosureButton"),o=ug(Xx,null),i=Ty((()=>null!==o&&o.value===a.panelId.value)) +;cv((()=>{i.value||null!==e.id&&(a.buttonId.value=e.id)})),hv((()=>{ +i.value||(a.buttonId.value=null)}));let s=bm(null);r({el:s,$el:s +}),i.value||fg((()=>{a.button.value=s.value}));let l=Bw(Ty((()=>({as:e.as, +type:t.type}))),s);function c(){var t +;e.disabled||(i.value?(a.toggleDisclosure(), +null==(t=uw(a.button))||t.focus()):a.toggleDisclosure())}function u(t){var n +;if(!e.disabled)if(i.value)switch(t.key){case nx.Space:case nx.Enter: +t.preventDefault(), +t.stopPropagation(),a.toggleDisclosure(),null==(n=uw(a.button))||n.focus() +}else switch(t.key){case nx.Space:case nx.Enter: +t.preventDefault(),t.stopPropagation(),a.toggleDisclosure()}}function d(e){ +if(e.key===nx.Space)e.preventDefault()}return()=>{var r;let o={ +open:0===a.disclosureState.value},{id:p,...h}=e;return Hw({ourProps:i.value?{ +ref:s,type:l.value,onClick:c,onKeydown:u}:{id:null!=(r=a.buttonId.value)?r:p, +ref:s,type:l.value,"aria-expanded":0===a.disclosureState.value, +"aria-controls":0===a.disclosureState.value||uw(a.panel)?a.panelId.value:void 0, +disabled:!!e.disabled||void 0,onClick:c,onKeydown:u,onKeyup:d},theirProps:h, +slot:o,attrs:t,slots:n,name:"DisclosureButton"})}}}),Kx=Hg({ +name:"DisclosurePanel",props:{as:{type:[Object,String],default:"div"},static:{ +type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String, +default:null}},setup(e,{attrs:t,slots:n,expose:r}){let a=Wx("DisclosurePanel") +;cv((()=>{null!==e.id&&(a.panelId.value=e.id)})),hv((()=>{a.panelId.value=null +})),r({el:a.panel,$el:a.panel}),cg(Xx,a.panelId) +;let o=Jw(),i=Ty((()=>null!==o?(o.value&Kw.Open)===Kw.Open:0===a.disclosureState.value)) +;return()=>{var r;let o={open:0===a.disclosureState.value,close:a.close +},{id:s,...l}=e;return Hw({ourProps:{id:null!=(r=a.panelId.value)?r:s, +ref:a.panel},theirProps:l,slot:o,attrs:t,slots:n, +features:Zw.RenderStrategy|Zw.Static,visible:i.value,name:"DisclosurePanel"})}} +}),Jx=/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g +;function ek(e){var t,n;let r=null!=(t=e.innerText)?t:"",a=e.cloneNode(!0) +;if(!(a instanceof HTMLElement))return r;let o=!1 +;for(let s of a.querySelectorAll('[hidden],[aria-hidden],[role="img"]'))s.remove(), +o=!0;let i=o?null!=(n=a.innerText)?n:"":r +;return Jx.test(i)&&(i=i.replace(Jx,"")),i}function tk(e){let t=bm(""),n=bm("") +;return()=>{let r=uw(e);if(!r)return"";let a=r.innerText +;if(t.value===a)return n.value;let o=function(e){ +let t=e.getAttribute("aria-label");if("string"==typeof t)return t.trim() +;let n=e.getAttribute("aria-labelledby");if(n){let e=n.split(" ").map((e=>{ +let t=document.getElementById(e);if(t){let e=t.getAttribute("aria-label") +;return"string"==typeof e?e.trim():ek(t).trim()}return null})).filter(Boolean) +;if(e.length>0)return e.join(", ")}return ek(e).trim()}(r).trim().toLowerCase() +;return t.value=a,n.value=o,o}}function nk(e,t){return e===t} +var rk=(e=>(e[e.Open=0]="Open", +e[e.Closed=1]="Closed",e))(rk||{}),ak=(e=>(e[e.Single=0]="Single", +e[e.Multi=1]="Multi", +e))(ak||{}),ok=(e=>(e[e.Pointer=0]="Pointer",e[e.Other=1]="Other",e))(ok||{}) +;let ik=Symbol("ListboxContext");function sk(e){let t=ug(ik,null);if(null===t){ +let t=new Error(`<${e} /> is missing a parent component.`) +;throw Error.captureStackTrace&&Error.captureStackTrace(t,sk),t}return t} +let lk=Hg({name:"Listbox",emits:{"update:modelValue":e=>!0},props:{as:{ +type:[Object,String],default:"template"},disabled:{type:[Boolean],default:!1}, +by:{type:[String,Function],default:()=>nk},horizontal:{type:[Boolean],default:!1 +},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{ +type:[Object,String,Number,Boolean],default:void 0},form:{type:String, +optional:!0},name:{type:String,optional:!0},multiple:{type:[Boolean],default:!1} +},inheritAttrs:!1,setup(e,{slots:t,attrs:n,emit:r}){ +let a=bm(1),o=bm(null),i=bm(null),s=bm(null),l=bm([]),c=bm(""),u=bm(null),d=bm(1) +;function p(e=e=>e){ +let t=null!==u.value?l.value[u.value]:null,n=$w(e(l.value.slice()),(e=>uw(e.dataRef.domRef))),r=t?n.indexOf(t):null +;return-1===r&&(r=null),{options:n,activeOptionIndex:r}} +let h=Ty((()=>e.multiple?1:0)),[f,m]=function(e,t,n){ +let r=bm(null==n?void 0:n.value),a=Ty((()=>void 0!==e.value)) +;return[Ty((()=>a.value?e.value:r.value)),function(e){ +return a.value||(r.value=e),null==t?void 0:t(e)}] +}(Ty((()=>e.modelValue)),(e=>r("update:modelValue",e)),Ty((()=>e.defaultValue))),g=Ty((()=>void 0===f.value?dw(h.value,{ +1:[],0:void 0}):f.value)),v={listboxState:a,value:g,mode:h,compare(t,n){ +if("string"==typeof e.by){let r=e.by +;return(null==t?void 0:t[r])===(null==n?void 0:n[r])}return e.by(t,n)}, +orientation:Ty((()=>e.horizontal?"horizontal":"vertical")),labelRef:o, +buttonRef:i,optionsRef:s,disabled:Ty((()=>e.disabled)),options:l,searchQuery:c, +activeOptionIndex:u,activationTrigger:d,closeListbox(){ +e.disabled||1!==a.value&&(a.value=1,u.value=null)},openListbox(){ +e.disabled||0!==a.value&&(a.value=0)},goToOption(t,n,r){ +if(e.disabled||1===a.value)return;let o=p(),i=ix(t===ox.Specific?{ +focus:ox.Specific,id:n}:{focus:t},{resolveItems:()=>o.options, +resolveActiveIndex:()=>o.activeOptionIndex,resolveId:e=>e.id, +resolveDisabled:e=>e.dataRef.disabled}) +;c.value="",u.value=i,d.value=null!=r?r:1,l.value=o.options},search(t){ +if(e.disabled||1===a.value)return;let n=""!==c.value?0:1 +;c.value+=t.toLowerCase() +;let r=(null!==u.value?l.value.slice(u.value+n).concat(l.value.slice(0,u.value+n)):l.value).find((e=>e.dataRef.textValue.startsWith(c.value)&&!e.dataRef.disabled)),o=r?l.value.indexOf(r):-1 +;-1===o||o===u.value||(u.value=o,d.value=1)},clearSearch(){ +e.disabled||1!==a.value&&""!==c.value&&(c.value="")},registerOption(e,t){ +let n=p((n=>[...n,{id:e,dataRef:t}])) +;l.value=n.options,u.value=n.activeOptionIndex},unregisterOption(e){ +let t=p((t=>{let n=t.findIndex((t=>t.id===e));return-1!==n&&t.splice(n,1),t})) +;l.value=t.options,u.value=t.activeOptionIndex,d.value=1},theirOnChange(t){ +e.disabled||m(t)},select(t){e.disabled||m(dw(h.value,{0:()=>t,1:()=>{ +let e=hm(v.value.value).slice(),n=hm(t),r=e.findIndex((e=>v.compare(n,hm(e)))) +;return-1===r?e.push(n):e.splice(r,1),e}}))}};Rw([i,s],((e,t)=>{var n +;v.closeListbox(), +_w(t,Sw.Loose)||(e.preventDefault(),null==(n=uw(i))||n.focus()) +}),Ty((()=>0===a.value))),cg(ik,v),ex(Ty((()=>dw(a.value,{0:Kw.Open,1:Kw.Closed +}))));let b=Ty((()=>{var e;return null==(e=uw(i))?void 0:e.closest("form")})) +;return cv((()=>{mg([b],(()=>{ +if(b.value&&void 0!==e.defaultValue)return b.value.addEventListener("reset",t), +()=>{var e;null==(e=b.value)||e.removeEventListener("reset",t)};function t(){ +v.theirOnChange(e.defaultValue)}}),{immediate:!0})})),()=>{ +let{name:r,modelValue:o,disabled:i,form:s,...l}=e,c={open:0===a.value, +disabled:i,value:g.value};return Ey(Lb,[...null!=r&&null!=g.value?sx({ +[r]:g.value}).map((([e,t])=>Ey(Gw,function(e){let t=Object.assign({},e) +;for(let n in t)void 0===t[n]&&delete t[n];return t}({features:Xw.Hidden,key:e, +as:"input",type:"hidden",hidden:!0,readOnly:!0,form:s,disabled:i,name:e,value:t +})))):[],Hw({ourProps:{},theirProps:{...n, +...Ww(l,["defaultValue","onUpdate:modelValue","horizontal","multiple","by"])}, +slot:c,slots:t,attrs:n,name:"Listbox"})])}}}),ck=Hg({name:"ListboxLabel",props:{ +as:{type:[Object,String],default:"label"},id:{type:String,default:null}}, +setup(e,{attrs:t,slots:n}){var r +;let a=null!=(r=e.id)?r:`headlessui-listbox-label-${cw()}`,o=sk("ListboxLabel") +;function i(){var e;null==(e=uw(o.buttonRef))||e.focus({preventScroll:!0})} +return()=>{let r={open:0===o.listboxState.value,disabled:o.disabled.value +},{...s}=e;return Hw({ourProps:{id:a,ref:o.labelRef,onClick:i},theirProps:s, +slot:r,attrs:t,slots:n,name:"ListboxLabel"})}}}),uk=Hg({name:"ListboxButton", +props:{as:{type:[Object,String],default:"button"},id:{type:String,default:null} +},setup(e,{attrs:t,slots:n,expose:r}){var a +;let o=null!=(a=e.id)?a:`headlessui-listbox-button-${cw()}`,i=sk("ListboxButton") +;function s(e){switch(e.key){case nx.Space:case nx.Enter:case nx.ArrowDown: +e.preventDefault(),i.openListbox(),Xm((()=>{var e +;null==(e=uw(i.optionsRef))||e.focus({preventScroll:!0 +}),i.value.value||i.goToOption(ox.First)}));break;case nx.ArrowUp: +e.preventDefault(),i.openListbox(),Xm((()=>{var e +;null==(e=uw(i.optionsRef))||e.focus({preventScroll:!0 +}),i.value.value||i.goToOption(ox.Last)}))}}function l(e){ +if(e.key===nx.Space)e.preventDefault()}function c(e){ +i.disabled.value||(0===i.listboxState.value?(i.closeListbox(),Xm((()=>{var e +;return null==(e=uw(i.buttonRef))?void 0:e.focus({preventScroll:!0}) +}))):(e.preventDefault(),i.openListbox(),function(e){ +requestAnimationFrame((()=>requestAnimationFrame(e)))}((()=>{var e +;return null==(e=uw(i.optionsRef))?void 0:e.focus({preventScroll:!0})}))))}r({ +el:i.buttonRef,$el:i.buttonRef});let u=Bw(Ty((()=>({as:e.as,type:t.type +}))),i.buttonRef);return()=>{var r,a;let d={open:0===i.listboxState.value, +disabled:i.disabled.value,value:i.value.value},{...p}=e;return Hw({ourProps:{ +ref:i.buttonRef,id:o,type:u.value,"aria-haspopup":"listbox", +"aria-controls":null==(r=uw(i.optionsRef))?void 0:r.id, +"aria-expanded":0===i.listboxState.value, +"aria-labelledby":i.labelRef.value?[null==(a=uw(i.labelRef))?void 0:a.id,o].join(" "):void 0, +disabled:!0===i.disabled.value||void 0,onKeydown:s,onKeyup:l,onClick:c}, +theirProps:p,slot:d,attrs:t,slots:n,name:"ListboxButton"})}}}),dk=Hg({ +name:"ListboxOptions",props:{as:{type:[Object,String],default:"ul"},static:{ +type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String, +default:null}},setup(e,{attrs:t,slots:n,expose:r}){var a +;let o=null!=(a=e.id)?a:`headlessui-listbox-options-${cw()}`,i=sk("ListboxOptions"),s=bm(null) +;function l(e){switch(s.value&&clearTimeout(s.value),e.key){case nx.Space: +if(""!==i.searchQuery.value)return e.preventDefault(), +e.stopPropagation(),i.search(e.key);case nx.Enter: +if(e.preventDefault(),e.stopPropagation(),null!==i.activeOptionIndex.value){ +let e=i.options.value[i.activeOptionIndex.value];i.select(e.dataRef.value)} +0===i.mode.value&&(i.closeListbox(),Xm((()=>{var e +;return null==(e=uw(i.buttonRef))?void 0:e.focus({preventScroll:!0})})));break +;case dw(i.orientation.value,{vertical:nx.ArrowDown,horizontal:nx.ArrowRight}): +return e.preventDefault(),e.stopPropagation(),i.goToOption(ox.Next) +;case dw(i.orientation.value,{vertical:nx.ArrowUp,horizontal:nx.ArrowLeft}): +return e.preventDefault(),e.stopPropagation(),i.goToOption(ox.Previous) +;case nx.Home:case nx.PageUp: +return e.preventDefault(),e.stopPropagation(),i.goToOption(ox.First) +;case nx.End:case nx.PageDown: +return e.preventDefault(),e.stopPropagation(),i.goToOption(ox.Last) +;case nx.Escape: +e.preventDefault(),e.stopPropagation(),i.closeListbox(),Xm((()=>{var e +;return null==(e=uw(i.buttonRef))?void 0:e.focus({preventScroll:!0})}));break +;case nx.Tab:e.preventDefault(),e.stopPropagation();break;default: +1===e.key.length&&(i.search(e.key), +s.value=setTimeout((()=>i.clearSearch()),350))}}r({el:i.optionsRef, +$el:i.optionsRef}) +;let c=Jw(),u=Ty((()=>null!==c?(c.value&Kw.Open)===Kw.Open:0===i.listboxState.value)) +;return()=>{var r,a;let s={open:0===i.listboxState.value},{...c}=e;return Hw({ +ourProps:{ +"aria-activedescendant":null===i.activeOptionIndex.value||null==(r=i.options.value[i.activeOptionIndex.value])?void 0:r.id, +"aria-multiselectable":1===i.mode.value||void 0, +"aria-labelledby":null==(a=uw(i.buttonRef))?void 0:a.id, +"aria-orientation":i.orientation.value,id:o,onKeydown:l,role:"listbox", +tabIndex:0,ref:i.optionsRef},theirProps:c,slot:s,attrs:t,slots:n, +features:Zw.RenderStrategy|Zw.Static,visible:u.value,name:"ListboxOptions"})}} +}),pk=Hg({name:"ListboxOption",props:{as:{type:[Object,String],default:"li"}, +value:{type:[Object,String,Number,Boolean]},disabled:{type:Boolean,default:!1}, +id:{type:String,default:null}},setup(e,{slots:t,attrs:n,expose:r}){var a +;let o=null!=(a=e.id)?a:`headlessui-listbox-option-${cw()}`,i=sk("ListboxOption"),s=bm(null) +;r({el:s,$el:s}) +;let l=Ty((()=>null!==i.activeOptionIndex.value&&i.options.value[i.activeOptionIndex.value].id===o)),c=Ty((()=>dw(i.mode.value,{ +0:()=>i.compare(hm(i.value.value),hm(e.value)), +1:()=>hm(i.value.value).some((t=>i.compare(hm(t),hm(e.value)))) +}))),u=Ty((()=>dw(i.mode.value,{1:()=>{var e;let t=hm(i.value.value) +;return(null==(e=i.options.value.find((e=>t.some((t=>i.compare(hm(t),hm(e.dataRef.value)))))))?void 0:e.id)===o +},0:()=>c.value}))),d=tk(s),p=Ty((()=>({disabled:e.disabled,value:e.value, +get textValue(){return d()},domRef:s})));function h(t){ +if(e.disabled)return t.preventDefault() +;i.select(e.value),0===i.mode.value&&(i.closeListbox(),Xm((()=>{var e +;return null==(e=uw(i.buttonRef))?void 0:e.focus({preventScroll:!0})})))} +function f(){if(e.disabled)return i.goToOption(ox.Nothing) +;i.goToOption(ox.Specific,o)} +cv((()=>i.registerOption(o,p))),hv((()=>i.unregisterOption(o))),cv((()=>{ +mg([i.listboxState,c],(()=>{0===i.listboxState.value&&c.value&&dw(i.mode.value,{ +1:()=>{u.value&&i.goToOption(ox.Specific,o)},0:()=>{i.goToOption(ox.Specific,o)} +})}),{immediate:!0})})),fg((()=>{ +0===i.listboxState.value&&l.value&&0!==i.activationTrigger.value&&Xm((()=>{ +var e,t +;return null==(t=null==(e=uw(s))?void 0:e.scrollIntoView)?void 0:t.call(e,{ +block:"nearest"})}))}));let m=Uw();function g(e){m.update(e)}function v(t){ +m.wasMoved(t)&&(e.disabled||l.value||i.goToOption(ox.Specific,o,0))} +function b(t){m.wasMoved(t)&&(e.disabled||l.value&&i.goToOption(ox.Nothing))} +return()=>{let{disabled:r}=e,a={active:l.value,selected:c.value,disabled:r +},{value:i,disabled:u,...d}=e;return Hw({ourProps:{id:o,ref:s,role:"option", +tabIndex:!0===r?void 0:-1,"aria-disabled":!0===r||void 0, +"aria-selected":c.value,disabled:void 0,onClick:h,onFocus:f,onPointerenter:g, +onMouseenter:g,onPointermove:v,onMousemove:v,onPointerleave:b,onMouseleave:b}, +theirProps:d,slot:a,attrs:n,slots:t,name:"ListboxOption"})}}}) +;var hk=(e=>(e[e.Open=0]="Open", +e[e.Closed=1]="Closed",e))(hk||{}),fk=(e=>(e[e.Pointer=0]="Pointer", +e[e.Other=1]="Other",e))(fk||{});let mk=Symbol("MenuContext");function gk(e){ +let t=ug(mk,null);if(null===t){ +let t=new Error(`<${e} /> is missing a parent component.`) +;throw Error.captureStackTrace&&Error.captureStackTrace(t,gk),t}return t} +let vk=Hg({name:"Menu",props:{as:{type:[Object,String],default:"template"}}, +setup(e,{slots:t,attrs:n}){ +let r=bm(1),a=bm(null),o=bm(null),i=bm([]),s=bm(""),l=bm(null),c=bm(1) +;function u(e=e=>e){ +let t=null!==l.value?i.value[l.value]:null,n=$w(e(i.value.slice()),(e=>uw(e.dataRef.domRef))),r=t?n.indexOf(t):null +;return-1===r&&(r=null),{items:n,activeItemIndex:r}}let d={menuState:r, +buttonRef:a,itemsRef:o,items:i,searchQuery:s,activeItemIndex:l, +activationTrigger:c,closeMenu:()=>{r.value=1,l.value=null}, +openMenu:()=>r.value=0,goToItem(e,t,n){let r=u(),a=ix(e===ox.Specific?{ +focus:ox.Specific,id:t}:{focus:e},{resolveItems:()=>r.items, +resolveActiveIndex:()=>r.activeItemIndex,resolveId:e=>e.id, +resolveDisabled:e=>e.dataRef.disabled}) +;s.value="",l.value=a,c.value=null!=n?n:1,i.value=r.items},search(e){ +let t=""!==s.value?0:1;s.value+=e.toLowerCase() +;let n=(null!==l.value?i.value.slice(l.value+t).concat(i.value.slice(0,l.value+t)):i.value).find((e=>e.dataRef.textValue.startsWith(s.value)&&!e.dataRef.disabled)),r=n?i.value.indexOf(n):-1 +;-1===r||r===l.value||(l.value=r,c.value=1)},clearSearch(){s.value=""}, +registerItem(e,t){let n=u((n=>[...n,{id:e,dataRef:t}])) +;i.value=n.items,l.value=n.activeItemIndex,c.value=1},unregisterItem(e){ +let t=u((t=>{let n=t.findIndex((t=>t.id===e));return-1!==n&&t.splice(n,1),t})) +;i.value=t.items,l.value=t.activeItemIndex,c.value=1}};return Rw([a,o],((e,t)=>{ +var n +;d.closeMenu(),_w(t,Sw.Loose)||(e.preventDefault(),null==(n=uw(a))||n.focus()) +}),Ty((()=>0===r.value))),cg(mk,d),ex(Ty((()=>dw(r.value,{0:Kw.Open,1:Kw.Closed +})))),()=>{let a={open:0===r.value,close:d.closeMenu};return Hw({ourProps:{}, +theirProps:e,slot:a,slots:t,attrs:n,name:"Menu"})}}}),bk=Hg({name:"MenuButton", +props:{disabled:{type:Boolean,default:!1},as:{type:[Object,String], +default:"button"},id:{type:String,default:null}}, +setup(e,{attrs:t,slots:n,expose:r}){var a +;let o=null!=(a=e.id)?a:`headlessui-menu-button-${cw()}`,i=gk("MenuButton") +;function s(e){switch(e.key){case nx.Space:case nx.Enter:case nx.ArrowDown: +e.preventDefault(),e.stopPropagation(),i.openMenu(),Xm((()=>{var e +;null==(e=uw(i.itemsRef))||e.focus({preventScroll:!0}),i.goToItem(ox.First)})) +;break;case nx.ArrowUp: +e.preventDefault(),e.stopPropagation(),i.openMenu(),Xm((()=>{var e +;null==(e=uw(i.itemsRef))||e.focus({preventScroll:!0}),i.goToItem(ox.Last)}))}} +function l(e){if(e.key===nx.Space)e.preventDefault()}function c(t){ +e.disabled||(0===i.menuState.value?(i.closeMenu(),Xm((()=>{var e +;return null==(e=uw(i.buttonRef))?void 0:e.focus({preventScroll:!0}) +}))):(t.preventDefault(),i.openMenu(),function(e){ +requestAnimationFrame((()=>requestAnimationFrame(e)))}((()=>{var e +;return null==(e=uw(i.itemsRef))?void 0:e.focus({preventScroll:!0})}))))}r({ +el:i.buttonRef,$el:i.buttonRef});let u=Bw(Ty((()=>({as:e.as,type:t.type +}))),i.buttonRef);return()=>{var r;let a={open:0===i.menuState.value},{...d}=e +;return Hw({ourProps:{ref:i.buttonRef,id:o,type:u.value,"aria-haspopup":"menu", +"aria-controls":null==(r=uw(i.itemsRef))?void 0:r.id, +"aria-expanded":0===i.menuState.value,onKeydown:s,onKeyup:l,onClick:c}, +theirProps:d,slot:a,attrs:t,slots:n,name:"MenuButton"})}}}),yk=Hg({ +name:"MenuItems",props:{as:{type:[Object,String],default:"div"},static:{ +type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String, +default:null}},setup(e,{attrs:t,slots:n,expose:r}){var a +;let o=null!=(a=e.id)?a:`headlessui-menu-items-${cw()}`,i=gk("MenuItems"),s=bm(null) +;function l(e){var t;switch(s.value&&clearTimeout(s.value),e.key){case nx.Space: +if(""!==i.searchQuery.value)return e.preventDefault(), +e.stopPropagation(),i.search(e.key);case nx.Enter: +if(e.preventDefault(),e.stopPropagation(),null!==i.activeItemIndex.value){ +null==(t=uw(i.items.value[i.activeItemIndex.value].dataRef.domRef))||t.click()} +i.closeMenu(),Aw(uw(i.buttonRef));break;case nx.ArrowDown: +return e.preventDefault(),e.stopPropagation(),i.goToItem(ox.Next) +;case nx.ArrowUp: +return e.preventDefault(),e.stopPropagation(),i.goToItem(ox.Previous) +;case nx.Home:case nx.PageUp: +return e.preventDefault(),e.stopPropagation(),i.goToItem(ox.First);case nx.End: +case nx.PageDown: +return e.preventDefault(),e.stopPropagation(),i.goToItem(ox.Last) +;case nx.Escape:e.preventDefault(),e.stopPropagation(),i.closeMenu(),Xm((()=>{ +var e;return null==(e=uw(i.buttonRef))?void 0:e.focus({preventScroll:!0})})) +;break;case nx.Tab: +e.preventDefault(),e.stopPropagation(),i.closeMenu(),Xm((()=>function(e,t){ +return Pw(kw(),t,{relativeTo:e}) +}(uw(i.buttonRef),e.shiftKey?Ow.Previous:Ow.Next)));break;default: +1===e.key.length&&(i.search(e.key), +s.value=setTimeout((()=>i.clearSearch()),350))}}function c(e){ +if(e.key===nx.Space)e.preventDefault()}r({el:i.itemsRef,$el:i.itemsRef +}),function({container:e,accept:t,walk:n,enabled:r}){fg((()=>{let a=e.value +;if(!a||void 0!==r&&!r.value)return;let o=mw(e);if(!o)return +;let i=Object.assign((e=>t(e)),{acceptNode:t +}),s=o.createTreeWalker(a,NodeFilter.SHOW_ELEMENT,i,!1) +;for(;s.nextNode();)n(s.currentNode)}))}({container:Ty((()=>uw(i.itemsRef))), +enabled:Ty((()=>0===i.menuState.value)), +accept:e=>"menuitem"===e.getAttribute("role")?NodeFilter.FILTER_REJECT:e.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT, +walk(e){e.setAttribute("role","none")}}) +;let u=Jw(),d=Ty((()=>null!==u?(u.value&Kw.Open)===Kw.Open:0===i.menuState.value)) +;return()=>{var r,a;let s={open:0===i.menuState.value},{...u}=e;return Hw({ +ourProps:{ +"aria-activedescendant":null===i.activeItemIndex.value||null==(r=i.items.value[i.activeItemIndex.value])?void 0:r.id, +"aria-labelledby":null==(a=uw(i.buttonRef))?void 0:a.id,id:o,onKeydown:l, +onKeyup:c,role:"menu",tabIndex:0,ref:i.itemsRef},theirProps:u,slot:s,attrs:t, +slots:n,features:Zw.RenderStrategy|Zw.Static,visible:d.value,name:"MenuItems"})} +}}),Ok=Hg({name:"MenuItem",inheritAttrs:!1,props:{as:{type:[Object,String], +default:"template"},disabled:{type:Boolean,default:!1},id:{type:String, +default:null}},setup(e,{slots:t,attrs:n,expose:r}){var a +;let o=null!=(a=e.id)?a:`headlessui-menu-item-${cw()}`,i=gk("MenuItem"),s=bm(null) +;r({el:s,$el:s}) +;let l=Ty((()=>null!==i.activeItemIndex.value&&i.items.value[i.activeItemIndex.value].id===o)),c=tk(s),u=Ty((()=>({ +disabled:e.disabled,get textValue(){return c()},domRef:s})));function d(t){ +if(e.disabled)return t.preventDefault();i.closeMenu(),Aw(uw(i.buttonRef))} +function p(){if(e.disabled)return i.goToItem(ox.Nothing) +;i.goToItem(ox.Specific,o)} +cv((()=>i.registerItem(o,u))),hv((()=>i.unregisterItem(o))),fg((()=>{ +0===i.menuState.value&&l.value&&0!==i.activationTrigger.value&&Xm((()=>{var e,t +;return null==(t=null==(e=uw(s))?void 0:e.scrollIntoView)?void 0:t.call(e,{ +block:"nearest"})}))}));let h=Uw();function f(e){h.update(e)}function m(t){ +h.wasMoved(t)&&(e.disabled||l.value||i.goToItem(ox.Specific,o,0))}function g(t){ +h.wasMoved(t)&&(e.disabled||l.value&&i.goToItem(ox.Nothing))}return()=>{ +let{disabled:r,...a}=e,c={active:l.value,disabled:r,close:i.closeMenu} +;return Hw({ourProps:{id:o,ref:s,role:"menuitem",tabIndex:!0===r?void 0:-1, +"aria-disabled":!0===r||void 0,onClick:d,onFocus:p,onPointerenter:f, +onMouseenter:f,onPointermove:m,onMousemove:m,onPointerleave:g,onMouseleave:g}, +theirProps:{...n,...a},slot:c,attrs:n,slots:t,name:"MenuItem"})}}}) +;var wk,xk=((wk=xk||{})[wk.Open=0]="Open",wk[wk.Closed=1]="Closed",wk) +;let kk=Symbol("PopoverContext");function Sk(e){let t=ug(kk,null);if(null===t){ +let t=new Error(`<${e} /> is missing a parent <${Ek.name} /> component.`) +;throw Error.captureStackTrace&&Error.captureStackTrace(t,Sk),t}return t} +let _k=Symbol("PopoverGroupContext");function Ak(){return ug(_k,null)} +let Tk=Symbol("PopoverPanelContext");let Ek=Hg({name:"Popover",inheritAttrs:!1, +props:{as:{type:[Object,String],default:"div"}}, +setup(e,{slots:t,attrs:n,expose:r}){var a;let o=bm(null);r({el:o,$el:o}) +;let i=bm(1),s=bm(null),l=bm(null),c=bm(null),u=bm(null),d=Ty((()=>mw(o))),p=Ty((()=>{ +var e,t;if(!uw(s)||!uw(u))return!1 +;for(let c of document.querySelectorAll("body > *"))if(Number(null==c?void 0:c.contains(uw(s)))^Number(null==c?void 0:c.contains(uw(u))))return!0 +;let n=kw(),r=n.indexOf(uw(s)),a=(r+n.length-1)%n.length,o=(r+1)%n.length,i=n[a],l=n[o] +;return!(null!=(e=uw(u))&&e.contains(i)||null!=(t=uw(u))&&t.contains(l))})),h={ +popoverState:i,buttonId:bm(null),panelId:bm(null),panel:u,button:s, +isPortalled:p,beforePanelSentinel:l,afterPanelSentinel:c,togglePopover(){ +i.value=dw(i.value,{0:1,1:0})},closePopover(){1!==i.value&&(i.value=1)}, +close(e){h.closePopover() +;let t=e?e instanceof HTMLElement?e:e.value instanceof HTMLElement?uw(e):uw(h.button):uw(h.button) +;null==t||t.focus()}};cg(kk,h),ex(Ty((()=>dw(i.value,{0:Kw.Open,1:Kw.Closed})))) +;let f={buttonId:h.buttonId,panelId:h.panelId,close(){h.closePopover()} +},m=Ak(),g=null==m?void 0:m.registerPopover,[v,b]=Nx(),y=Sx({ +mainTreeNodeRef:null==m?void 0:m.mainTreeNodeRef,portals:v, +defaultContainers:[s,u]}) +;return fg((()=>null==g?void 0:g(f))),ux(null==(a=d.value)?void 0:a.defaultView,"focus",(e=>{ +var t,n +;e.target!==window&&e.target instanceof HTMLElement&&0===i.value&&(function(){ +var e,t,n,r +;return null!=(r=null==m?void 0:m.isFocusWithinPopoverGroup())?r:(null==(e=d.value)?void 0:e.activeElement)&&((null==(t=uw(s))?void 0:t.contains(d.value.activeElement))||(null==(n=uw(u))?void 0:n.contains(d.value.activeElement))) +}()||s&&u&&(y.contains(e.target)||null!=(t=uw(h.beforePanelSentinel))&&t.contains(e.target)||null!=(n=uw(h.afterPanelSentinel))&&n.contains(e.target)||h.closePopover())) +}),!0),Rw(y.resolveContainers,((e,t)=>{var n +;h.closePopover(),_w(t,Sw.Loose)||(e.preventDefault(), +null==(n=uw(s))||n.focus())}),Ty((()=>0===i.value))),()=>{let r={ +open:0===i.value,close:h.close};return Ey(Lb,[Ey(b,{},(()=>Hw({theirProps:{...e, +...n},ourProps:{ref:o},slot:r,slots:t,attrs:n,name:"Popover" +}))),Ey(y.MainTreeNode)])}}}),Ck=Hg({name:"PopoverButton",props:{as:{ +type:[Object,String],default:"button"},disabled:{type:[Boolean],default:!1},id:{ +type:String,default:null}},inheritAttrs:!1,setup(e,{attrs:t,slots:n,expose:r}){ +var a +;let o=null!=(a=e.id)?a:`headlessui-popover-button-${cw()}`,i=Sk("PopoverButton"),s=Ty((()=>mw(i.button))) +;r({el:i.button,$el:i.button}),cv((()=>{i.buttonId.value=o})),hv((()=>{ +i.buttonId.value=null})) +;let l=Ak(),c=null==l?void 0:l.closeOthers,u=ug(Tk,null),d=Ty((()=>null!==u&&u.value===i.panelId.value)),p=bm(null),h=`headlessui-focus-sentinel-${cw()}` +;d.value||fg((()=>{i.button.value=uw(p)}));let f=Bw(Ty((()=>({as:e.as, +type:t.type}))),p);function m(e){var t,n,r,a,o;if(d.value){ +if(1===i.popoverState.value)return;switch(e.key){case nx.Space:case nx.Enter: +e.preventDefault(), +null==(n=(t=e.target).click)||n.call(t),i.closePopover(),null==(r=uw(i.button))||r.focus() +}}else switch(e.key){case nx.Space:case nx.Enter: +e.preventDefault(),e.stopPropagation(), +1===i.popoverState.value&&(null==c||c(i.buttonId.value)),i.togglePopover();break +;case nx.Escape: +if(0!==i.popoverState.value)return null==c?void 0:c(i.buttonId.value) +;if(!uw(i.button)||null!=(a=s.value)&&a.activeElement&&(null==(o=uw(i.button))||!o.contains(s.value.activeElement)))return +;e.preventDefault(),e.stopPropagation(),i.closePopover()}}function g(e){ +d.value||e.key===nx.Space&&e.preventDefault()}function v(t){var n,r +;e.disabled||(d.value?(i.closePopover(), +null==(n=uw(i.button))||n.focus()):(t.preventDefault(), +t.stopPropagation(),1===i.popoverState.value&&(null==c||c(i.buttonId.value)), +i.togglePopover(),null==(r=uw(i.button))||r.focus()))}function b(e){ +e.preventDefault(),e.stopPropagation()}let y=px();function O(){let e=uw(i.panel) +;e&&dw(y.value,{[dx.Forwards]:()=>Pw(e,Ow.First), +[dx.Backwards]:()=>Pw(e,Ow.Last) +})===ww.Error&&Pw(kw().filter((e=>"true"!==e.dataset.headlessuiFocusGuard)),dw(y.value,{ +[dx.Forwards]:Ow.Next,[dx.Backwards]:Ow.Previous}),{relativeTo:uw(i.button)})} +return()=>{let r=0===i.popoverState.value,a={open:r},{...s}=e,l=d.value?{ref:p, +type:f.value,onKeydown:m,onClick:v}:{ref:p,id:o,type:f.value, +"aria-expanded":0===i.popoverState.value, +"aria-controls":uw(i.panel)?i.panelId.value:void 0, +disabled:!!e.disabled||void 0,onKeydown:m,onKeyup:g,onClick:v,onMousedown:b} +;return Ey(Lb,[Hw({ourProps:l,theirProps:{...t,...s},slot:a,attrs:t,slots:n, +name:"PopoverButton"}),r&&!d.value&&i.isPortalled.value&&Ey(Gw,{id:h, +features:Xw.Focusable,"data-headlessui-focus-guard":!0,as:"button", +type:"button",onFocus:O})])}}}),$k=Hg({name:"PopoverPanel",props:{as:{ +type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{ +type:Boolean,default:!0},focus:{type:Boolean,default:!1},id:{type:String, +default:null}},inheritAttrs:!1,setup(e,{attrs:t,slots:n,expose:r}){var a +;let o=null!=(a=e.id)?a:`headlessui-popover-panel-${cw()}`,{focus:i}=e,s=Sk("PopoverPanel"),l=Ty((()=>mw(s.panel))),c=`headlessui-focus-sentinel-before-${cw()}`,u=`headlessui-focus-sentinel-after-${cw()}` +;r({el:s.panel,$el:s.panel}),cv((()=>{s.panelId.value=o})),hv((()=>{ +s.panelId.value=null})),cg(Tk,s.panelId),fg((()=>{var e,t +;if(!i||0!==s.popoverState.value||!s.panel)return +;let n=null==(e=l.value)?void 0:e.activeElement +;null!=(t=uw(s.panel))&&t.contains(n)||Pw(uw(s.panel),Ow.First)})) +;let d=Jw(),p=Ty((()=>null!==d?(d.value&Kw.Open)===Kw.Open:0===s.popoverState.value)) +;function h(e){var t,n;if(e.key===nx.Escape){ +if(0!==s.popoverState.value||!uw(s.panel)||l.value&&(null==(t=uw(s.panel))||!t.contains(l.value.activeElement)))return +;e.preventDefault(), +e.stopPropagation(),s.closePopover(),null==(n=uw(s.button))||n.focus()}} +function f(e){var t,n,r,a,o;let i=e.relatedTarget +;i&&uw(s.panel)&&(null!=(t=uw(s.panel))&&t.contains(i)||(s.closePopover(), +(null!=(r=null==(n=uw(s.beforePanelSentinel))?void 0:n.contains)&&r.call(n,i)||null!=(o=null==(a=uw(s.afterPanelSentinel))?void 0:a.contains)&&o.call(a,i))&&i.focus({ +preventScroll:!0})))}let m=px();function g(){let e=uw(s.panel);e&&dw(m.value,{ +[dx.Forwards]:()=>{var t +;Pw(e,Ow.First)===ww.Error&&(null==(t=uw(s.afterPanelSentinel))||t.focus())}, +[dx.Backwards]:()=>{var e;null==(e=uw(s.button))||e.focus({preventScroll:!0})}}) +}function v(){let e=uw(s.panel);e&&dw(m.value,{[dx.Forwards]:()=>{ +let e=uw(s.button),t=uw(s.panel);if(!e)return +;let n=kw(),r=n.indexOf(e),a=n.slice(0,r+1),o=[...n.slice(r+1),...a] +;for(let i of o.slice())if("true"===i.dataset.headlessuiFocusGuard||null!=t&&t.contains(i)){ +let e=o.indexOf(i);-1!==e&&o.splice(e,1)}Pw(o,Ow.First,{sorted:!1})}, +[dx.Backwards]:()=>{var t +;Pw(e,Ow.Previous)===ww.Error&&(null==(t=uw(s.button))||t.focus())}})} +return()=>{let r={open:0===s.popoverState.value,close:s.close},{focus:a,...l}=e +;return Hw({ourProps:{ref:s.panel,id:o,onKeydown:h, +onFocusout:i&&0===s.popoverState.value?f:void 0,tabIndex:-1},theirProps:{...t, +...l},attrs:t,slot:r,slots:{...n,default:(...e)=>{var t +;return[Ey(Lb,[p.value&&s.isPortalled.value&&Ey(Gw,{id:c, +ref:s.beforePanelSentinel,features:Xw.Focusable, +"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:g +}),null==(t=n.default)?void 0:t.call(n,...e),p.value&&s.isPortalled.value&&Ey(Gw,{ +id:u,ref:s.afterPanelSentinel,features:Xw.Focusable, +"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:v})])]}}, +features:Zw.RenderStrategy|Zw.Static,visible:p.value,name:"PopoverPanel"})}} +}),Pk=Hg({props:{onFocus:{type:Function,required:!0}},setup(e){let t=bm(!0) +;return()=>t.value?Ey(Gw,{as:"button",type:"button",features:Xw.Focusable, +onFocus(n){n.preventDefault();let r,a=50;r=requestAnimationFrame((function n(){ +var o +;if(!(a--<=0))return null!=(o=e.onFocus)&&o.call(e)?(t.value=!1,void cancelAnimationFrame(r)):void(r=requestAnimationFrame(n)) +;r&&cancelAnimationFrame(r)}))}}):null}}) +;var Ik,Dk=(e=>(e[e.Forwards=0]="Forwards", +e[e.Backwards=1]="Backwards",e))(Dk||{}),Mk=((Ik=Mk||{})[Ik.Less=-1]="Less", +Ik[Ik.Equal=0]="Equal",Ik[Ik.Greater=1]="Greater",Ik) +;let Nk=Symbol("TabsContext");function Rk(e){let t=ug(Nk,null);if(null===t){ +let t=new Error(`<${e} /> is missing a parent component.`) +;throw Error.captureStackTrace&&Error.captureStackTrace(t,Rk),t}return t} +let Lk=Symbol("TabsSSRContext"),Bk=Hg({name:"TabGroup",emits:{change:e=>!0}, +props:{as:{type:[Object,String],default:"template"},selectedIndex:{ +type:[Number],default:null},defaultIndex:{type:[Number],default:0},vertical:{ +type:[Boolean],default:!1},manual:{type:[Boolean],default:!1}},inheritAttrs:!1, +setup(e,{slots:t,attrs:n,emit:r}){var a +;let o=bm(null!=(a=e.selectedIndex)?a:e.defaultIndex),i=bm([]),s=bm([]),l=Ty((()=>null!==e.selectedIndex)),c=Ty((()=>l.value?e.selectedIndex:o.value)) +;function u(e){var t +;let n=$w(d.tabs.value,uw),r=$w(d.panels.value,uw),a=n.filter((e=>{var t +;return!(null!=(t=uw(e))&&t.hasAttribute("disabled"))}));if(e<0||e>n.length-1){ +let t=dw(null===o.value?0:Math.sign(e-o.value),{[-1]:()=>1, +0:()=>dw(Math.sign(e),{[-1]:()=>0,0:()=>0,1:()=>1}),1:()=>0}),i=dw(t,{ +0:()=>n.indexOf(a[0]),1:()=>n.indexOf(a[a.length-1])}) +;-1!==i&&(o.value=i),d.tabs.value=n,d.panels.value=r}else{ +let i=n.slice(0,e),s=[...n.slice(e),...i].find((e=>a.includes(e)));if(!s)return +;let l=null!=(t=n.indexOf(s))?t:d.selectedIndex.value +;-1===l&&(l=d.selectedIndex.value),o.value=l,d.tabs.value=n,d.panels.value=r}} +let d={selectedIndex:Ty((()=>{var t,n +;return null!=(n=null!=(t=o.value)?t:e.defaultIndex)?n:null})), +orientation:Ty((()=>e.vertical?"vertical":"horizontal")), +activation:Ty((()=>e.manual?"manual":"auto")),tabs:i,panels:s, +setSelectedIndex(e){c.value!==e&&r("change",e),l.value||u(e)},registerTab(e){ +var t;if(i.value.includes(e))return;let n=i.value[o.value] +;if(i.value.push(e),i.value=$w(i.value,uw),!l.value){ +let e=null!=(t=i.value.indexOf(n))?t:o.value;-1!==e&&(o.value=e)}}, +unregisterTab(e){let t=i.value.indexOf(e);-1!==t&&i.value.splice(t,1)}, +registerPanel(e){s.value.includes(e)||(s.value.push(e),s.value=$w(s.value,uw))}, +unregisterPanel(e){let t=s.value.indexOf(e);-1!==t&&s.value.splice(t,1)}} +;cg(Nk,d);let p=bm({tabs:[],panels:[]}),h=bm(!1);cv((()=>{h.value=!0 +})),cg(Lk,Ty((()=>h.value?null:p.value)));let f=Ty((()=>e.selectedIndex)) +;return cv((()=>{mg([f],(()=>{var t +;return u(null!=(t=e.selectedIndex)?t:e.defaultIndex)}),{immediate:!0}) +})),fg((()=>{if(!l.value||null==c.value||d.tabs.value.length<=0)return +;let e=$w(d.tabs.value,uw) +;e.some(((e,t)=>uw(d.tabs.value[t])!==uw(e)))&&d.setSelectedIndex(e.findIndex((e=>uw(e)===uw(d.tabs.value[c.value])))) +})),()=>{let r={selectedIndex:o.value};return Ey(Lb,[i.value.length<=0&&Ey(Pk,{ +onFocus:()=>{for(let e of i.value){let t=uw(e) +;if(0===(null==t?void 0:t.tabIndex))return t.focus(),!0}return!1}}),Hw({ +theirProps:{...n, +...Ww(e,["selectedIndex","defaultIndex","manual","vertical","onChange"])}, +ourProps:{},slot:r,slots:t,attrs:n,name:"TabGroup"})])}}}),jk=Hg({ +name:"TabList",props:{as:{type:[Object,String],default:"div"}}, +setup(e,{attrs:t,slots:n}){let r=Rk("TabList");return()=>{let a={ +selectedIndex:r.selectedIndex.value};return Hw({ourProps:{role:"tablist", +"aria-orientation":r.orientation.value},theirProps:e,slot:a,attrs:t,slots:n, +name:"TabList"})}}}),Uk=Hg({name:"Tab",props:{as:{type:[Object,String], +default:"button"},disabled:{type:[Boolean],default:!1},id:{type:String, +default:null}},setup(e,{attrs:t,slots:n,expose:r}){var a +;let o=null!=(a=e.id)?a:`headlessui-tabs-tab-${cw()}`,i=Rk("Tab"),s=bm(null);r({ +el:s,$el:s}),cv((()=>i.registerTab(s))),hv((()=>i.unregisterTab(s))) +;let l=ug(Lk),c=Ty((()=>{if(l.value){let e=l.value.tabs.indexOf(o) +;return-1===e?l.value.tabs.push(o)-1:e}return-1})),u=Ty((()=>{ +let e=i.tabs.value.indexOf(s);return-1===e?c.value:e +})),d=Ty((()=>u.value===i.selectedIndex.value));function p(e){var t;let n=e() +;if(n===ww.Success&&"auto"===i.activation.value){ +let e=null==(t=mw(s))?void 0:t.activeElement,n=i.tabs.value.findIndex((t=>uw(t)===e)) +;-1!==n&&i.setSelectedIndex(n)}return n}function h(e){ +let t=i.tabs.value.map((e=>uw(e))).filter(Boolean) +;if(e.key===nx.Space||e.key===nx.Enter)return e.preventDefault(), +e.stopPropagation(),void i.setSelectedIndex(u.value);switch(e.key){case nx.Home: +case nx.PageUp: +return e.preventDefault(),e.stopPropagation(),p((()=>Pw(t,Ow.First))) +;case nx.End:case nx.PageDown: +return e.preventDefault(),e.stopPropagation(),p((()=>Pw(t,Ow.Last)))} +return p((()=>dw(i.orientation.value,{ +vertical:()=>e.key===nx.ArrowUp?Pw(t,Ow.Previous|Ow.WrapAround):e.key===nx.ArrowDown?Pw(t,Ow.Next|Ow.WrapAround):ww.Error, +horizontal:()=>e.key===nx.ArrowLeft?Pw(t,Ow.Previous|Ow.WrapAround):e.key===nx.ArrowRight?Pw(t,Ow.Next|Ow.WrapAround):ww.Error +})))===ww.Success?e.preventDefault():void 0}let f=bm(!1);function m(){var t +;f.value||(f.value=!0,!e.disabled&&(null==(t=uw(s))||t.focus({preventScroll:!0 +}),i.setSelectedIndex(u.value),aw((()=>{f.value=!1}))))}function g(e){ +e.preventDefault()}let v=Bw(Ty((()=>({as:e.as,type:t.type}))),s);return()=>{ +var r,a;let l={selected:d.value,disabled:null!=(r=e.disabled)&&r},{...c}=e +;return Hw({ourProps:{ref:s,onKeydown:h,onMousedown:g,onClick:m,id:o,role:"tab", +type:v.value,"aria-controls":null==(a=uw(i.panels.value[u.value]))?void 0:a.id, +"aria-selected":d.value,tabIndex:d.value?0:-1,disabled:!!e.disabled||void 0}, +theirProps:c,slot:l,attrs:t,slots:n,name:"Tab"})}}}),zk=Hg({name:"TabPanels", +props:{as:{type:[Object,String],default:"div"}},setup(e,{slots:t,attrs:n}){ +let r=Rk("TabPanels");return()=>{let a={selectedIndex:r.selectedIndex.value} +;return Hw({theirProps:e,ourProps:{},slot:a,attrs:n,slots:t,name:"TabPanels"})}} +}),Zk=Hg({name:"TabPanel",props:{as:{type:[Object,String],default:"div"}, +static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{ +type:String,default:null},tabIndex:{type:Number,default:0}}, +setup(e,{attrs:t,slots:n,expose:r}){var a +;let o=null!=(a=e.id)?a:`headlessui-tabs-panel-${cw()}`,i=Rk("TabPanel"),s=bm(null) +;r({el:s,$el:s}),cv((()=>i.registerPanel(s))),hv((()=>i.unregisterPanel(s))) +;let l=ug(Lk),c=Ty((()=>{if(l.value){let e=l.value.panels.indexOf(o) +;return-1===e?l.value.panels.push(o)-1:e}return-1})),u=Ty((()=>{ +let e=i.panels.value.indexOf(s);return-1===e?c.value:e +})),d=Ty((()=>u.value===i.selectedIndex.value));return()=>{var r;let a={ +selected:d.value},{tabIndex:l,...c}=e,p={ref:s,id:o,role:"tabpanel", +"aria-labelledby":null==(r=uw(i.tabs.value[u.value]))?void 0:r.id, +tabIndex:d.value?l:-1};return d.value||!e.unmount||e.static?Hw({ourProps:p, +theirProps:c,slot:a,attrs:t,slots:n,features:Zw.Static|Zw.RenderStrategy, +visible:d.value,name:"TabPanel"}):Ey(Gw,{as:"span","aria-hidden":!0,...p})}}}) +;function Fk(e){var t,n,r="" +;if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){ +var a=e.length;for(t=0;t"boolean"==typeof e?`${e}`:0===e?"0":e,Vk=(e=new Map,t=null,n)=>({ +nextPart:e,validators:t,classGroupId:n}),qk="-",Wk=[],Xk=e=>{ +const t=Kk(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e +;return{getClassGroupId:e=>{if(e.startsWith("[")&&e.endsWith("]"))return Yk(e) +;const n=e.split(qk),r=""===n[0]&&n.length>1?1:0;return Gk(n,r,t)}, +getConflictingClassGroupIds:(e,t)=>{if(t){const t=r[e],a=n[e] +;return t?a?((e,t)=>{const n=new Array(e.length+t.length) +;for(let r=0;r{if(0===e.length-t)return n.classGroupId +;const r=e[t],a=n.nextPart.get(r);if(a){const n=Gk(e,t+1,a);if(n)return n} +const o=n.validators;if(null===o)return +;const i=0===t?e.join(qk):e.slice(t).join(qk),s=o.length;for(let l=0;l-1===e.slice(1,-1).indexOf(":")?void 0:(()=>{ +const t=e.slice(1,-1),n=t.indexOf(":"),r=t.slice(0,n) +;return r?"arbitrary.."+r:void 0})(),Kk=e=>{const{theme:t,classGroups:n}=e +;return Jk(n,t)},Jk=(e,t)=>{const n=Vk();for(const r in e){const a=e[r] +;eS(a,n,r,t)}return n},eS=(e,t,n,r)=>{const a=e.length;for(let o=0;o{ +"string"!=typeof e?"function"!=typeof e?aS(e,t,n,r):rS(e,t,n,r):nS(e,t,n) +},nS=(e,t,n)=>{(""===e?t:oS(t,e)).classGroupId=n},rS=(e,t,n,r)=>{ +iS(e)?eS(e(r),t,n,r):(null===t.validators&&(t.validators=[]), +t.validators.push(((e,t)=>({classGroupId:e,validator:t}))(n,e))) +},aS=(e,t,n,r)=>{const a=Object.entries(e),o=a.length;for(let i=0;i{let n=e +;const r=t.split(qk),a=r.length;for(let o=0;o"isThemeGetter"in e&&!0===e.isThemeGetter,sS=e=>{if(e<1)return{ +get:()=>{},set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null) +;const a=(a,o)=>{n[a]=o,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){ +let t=n[e];return void 0!==t?t:void 0!==(t=r[e])?(a(e,t),t):void 0},set(e,t){ +e in n?n[e]=t:a(e,t)}}},lS=[],cS=(e,t,n,r,a)=>({modifiers:e, +hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r, +isExternal:a}),uS=e=>{const{prefix:t,experimentalParseClassName:n}=e;let r=e=>{ +const t=[];let n,r=0,a=0,o=0;const i=e.length;for(let u=0;uo?n-o:void 0)} +;if(t){const e=t+":",n=r +;r=t=>t.startsWith(e)?n(t.slice(e.length)):cS(lS,!1,t,void 0,!0)}if(n){const e=r +;r=t=>n({className:t,parseClassName:e})}return r},dS=e=>{const t=new Map +;return e.orderSensitiveModifiers.forEach(((e,n)=>{t.set(e,1e6+n)})),e=>{ +const n=[];let r=[];for(let a=0;a0&&(r.sort(),n.push(...r),r=[]),n.push(o)):r.push(o)} +return r.length>0&&(r.sort(),n.push(...r)),n}},pS=/\s+/,hS=e=>{ +if("string"==typeof e)return e;let t,n="" +;for(let r=0;r{let n,r,a,o;const i=e=>{const t=r(e);if(t)return t +;const o=((e,t)=>{ +const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:a,sortModifiers:o}=t,i=[],s=e.trim().split(pS) +;let l="";for(let c=s.length-1;c>=0;c-=1){ +const e=s[c],{isExternal:t,modifiers:u,hasImportantModifier:d,baseClassName:p,maybePostfixModifierPosition:h}=n(e) +;if(t){l=e+(l.length>0?" "+l:l);continue}let f=!!h,m=r(f?p.substring(0,h):p) +;if(!m){if(!f){l=e+(l.length>0?" "+l:l);continue}if(m=r(p),!m){ +l=e+(l.length>0?" "+l:l);continue}f=!1} +const g=0===u.length?"":1===u.length?u[0]:o(u).join(":"),v=d?g+"!":g,b=v+m +;if(i.indexOf(b)>-1)continue;i.push(b);const y=a(m,f) +;for(let n=0;n0?" "+l:l)} +return l})(e,n);return a(e,o),o};return o=s=>{ +const l=t.reduce(((e,t)=>t(e)),e());return n=(e=>({cache:sS(e.cacheSize), +parseClassName:uS(e),sortModifiers:dS(e),...Xk(e) +}))(l),r=n.cache.get,a=n.cache.set,o=i,i(s)},(...e)=>o(((...e)=>{ +let t,n,r=0,a="";for(;r{const t=t=>t[e]||mS;return t.isThemeGetter=!0,t +},vS=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,bS=/^\((?:(\w[\w-]*):)?(.+)\)$/i,yS=/^\d+\/\d+$/,OS=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,wS=/\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$/,xS=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,kS=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,SS=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,_S=e=>yS.test(e),AS=e=>!!e&&!Number.isNaN(Number(e)),TS=e=>!!e&&Number.isInteger(Number(e)),ES=e=>e.endsWith("%")&&AS(e.slice(0,-1)),CS=e=>OS.test(e),$S=()=>!0,PS=e=>wS.test(e)&&!xS.test(e),IS=()=>!1,DS=e=>kS.test(e),MS=e=>SS.test(e),NS=e=>!LS(e)&&!FS(e),RS=e=>GS(e,e_,IS),LS=e=>vS.test(e),BS=e=>GS(e,t_,PS),jS=e=>GS(e,n_,AS),US=e=>GS(e,KS,IS),zS=e=>GS(e,JS,MS),ZS=e=>GS(e,a_,DS),FS=e=>bS.test(e),HS=e=>YS(e,t_),QS=e=>YS(e,r_),VS=e=>YS(e,KS),qS=e=>YS(e,e_),WS=e=>YS(e,JS),XS=e=>YS(e,a_,!0),GS=(e,t,n)=>{ +const r=vS.exec(e);return!!r&&(r[1]?t(r[1]):n(r[2]))},YS=(e,t,n=!1)=>{ +const r=bS.exec(e);return!!r&&(r[1]?t(r[1]):n) +},KS=e=>"position"===e||"percentage"===e,JS=e=>"image"===e||"url"===e,e_=e=>"length"===e||"size"===e||"bg-size"===e,t_=e=>"length"===e,n_=e=>"number"===e,r_=e=>"family-name"===e,a_=e=>"shadow"===e,o_=()=>{ +const e=gS("color"),t=gS("font"),n=gS("text"),r=gS("font-weight"),a=gS("tracking"),o=gS("leading"),i=gS("breakpoint"),s=gS("container"),l=gS("spacing"),c=gS("radius"),u=gS("shadow"),d=gS("inset-shadow"),p=gS("text-shadow"),h=gS("drop-shadow"),f=gS("blur"),m=gS("perspective"),g=gS("aspect"),v=gS("ease"),b=gS("animate"),y=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom",FS,LS],O=()=>[FS,LS,l],w=()=>[_S,"full","auto",...O()],x=()=>[TS,"none","subgrid",FS,LS],k=()=>["auto",{ +span:["full",TS,FS,LS] +},TS,FS,LS],S=()=>[TS,"auto",FS,LS],_=()=>["auto","min","max","fr",FS,LS],A=()=>["auto",...O()],T=()=>[_S,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...O()],E=()=>[e,FS,LS],C=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom",VS,US,{ +position:[FS,LS]}],$=()=>["auto","cover","contain",qS,RS,{size:[FS,LS] +}],P=()=>[ES,HS,BS],I=()=>["","none","full",c,FS,LS],D=()=>["",AS,HS,BS],M=()=>[AS,ES,VS,US],N=()=>["","none",f,FS,LS],R=()=>["none",AS,FS,LS],L=()=>["none",AS,FS,LS],B=()=>[AS,FS,LS],j=()=>[_S,"full",...O()] +;return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"], +aspect:["video"],blur:[CS],breakpoint:[CS],color:[$S],container:[CS], +"drop-shadow":[CS],ease:["in","out","in-out"],font:[NS], +"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"], +"inset-shadow":[CS],leading:["none","tight","snug","normal","relaxed","loose"], +perspective:["dramatic","near","normal","midrange","distant","none"], +radius:[CS],shadow:[CS],spacing:["px",AS],text:[CS],"text-shadow":[CS], +tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{ +aspect:[{aspect:["auto","square",_S,LS,FS,g]}],container:["container"], +columns:[{columns:[AS,LS,FS,s]}],"break-after":[{ +"break-after":["auto","avoid","all","avoid-page","page","left","right","column"] +}],"break-before":[{ +"break-before":["auto","avoid","all","avoid-page","page","left","right","column"] +}],"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:y()}],overflow:[{overflow:["auto","hidden","clip","visible","scroll"]}], +"overflow-x":[{"overflow-x":["auto","hidden","clip","visible","scroll"]}], +"overflow-y":[{"overflow-y":["auto","hidden","clip","visible","scroll"]}], +overscroll:[{overscroll:["auto","contain","none"]}],"overscroll-x":[{ +"overscroll-x":["auto","contain","none"]}],"overscroll-y":[{ +"overscroll-y":["auto","contain","none"]}], +position:["static","fixed","absolute","relative","sticky"],inset:[{inset:w()}], +"inset-x":[{"inset-x":w()}],"inset-y":[{"inset-y":w()}],start:[{start:w()}], +end:[{end:w()}],top:[{top:w()}],right:[{right:w()}],bottom:[{bottom:w()}], +left:[{left:w()}],visibility:["visible","invisible","collapse"],z:[{ +z:[TS,"auto",FS,LS]}],basis:[{basis:[_S,"full","auto",s,...O()]}], +"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}], +"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{ +flex:[AS,_S,"auto","initial","none",LS]}],grow:[{grow:["",AS,FS,LS]}],shrink:[{ +shrink:["",AS,FS,LS]}],order:[{order:[TS,"first","last","none",FS,LS]}], +"grid-cols":[{"grid-cols":x()}],"col-start-end":[{col:k()}],"col-start":[{ +"col-start":S()}],"col-end":[{"col-end":S()}],"grid-rows":[{"grid-rows":x()}], +"row-start-end":[{row:k()}],"row-start":[{"row-start":S()}],"row-end":[{ +"row-end":S()}],"grid-flow":[{ +"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{ +"auto-cols":_()}],"auto-rows":[{"auto-rows":_()}],gap:[{gap:O()}],"gap-x":[{ +"gap-x":O()}],"gap-y":[{"gap-y":O()}],"justify-content":[{ +justify:["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe","normal"] +}],"justify-items":[{ +"justify-items":["start","end","center","stretch","center-safe","end-safe","normal"] +}],"justify-self":[{ +"justify-self":["auto","start","end","center","stretch","center-safe","end-safe"] +}],"align-content":[{ +content:["normal","start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"] +}],"align-items":[{ +items:["start","end","center","stretch","center-safe","end-safe",{ +baseline:["","last"]}]}],"align-self":[{ +self:["auto","start","end","center","stretch","center-safe","end-safe",{ +baseline:["","last"]}]}],"place-content":[{ +"place-content":["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"] +}],"place-items":[{ +"place-items":["start","end","center","stretch","center-safe","end-safe","baseline"] +}],"place-self":[{ +"place-self":["auto","start","end","center","stretch","center-safe","end-safe"] +}],p:[{p:O()}],px:[{px:O()}],py:[{py:O()}],ps:[{ps:O()}],pe:[{pe:O()}],pt:[{ +pt:O()}],pr:[{pr:O()}],pb:[{pb:O()}],pl:[{pl:O()}],m:[{m:A()}],mx:[{mx:A()}], +my:[{my:A()}],ms:[{ms:A()}],me:[{me:A()}],mt:[{mt:A()}],mr:[{mr:A()}],mb:[{ +mb:A()}],ml:[{ml:A()}],"space-x":[{"space-x":O()}], +"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":O()}], +"space-y-reverse":["space-y-reverse"],size:[{size:T()}],w:[{ +w:[s,"screen",...T()]}],"min-w":[{"min-w":[s,"screen","none",...T()]}], +"max-w":[{"max-w":[s,"screen","none","prose",{screen:[i]},...T()]}],h:[{ +h:["screen","lh",...T()]}],"min-h":[{"min-h":["screen","lh","none",...T()]}], +"max-h":[{"max-h":["screen","lh",...T()]}],"font-size":[{text:["base",n,HS,BS] +}],"font-smoothing":["antialiased","subpixel-antialiased"], +"font-style":["italic","not-italic"],"font-weight":[{font:[r,FS,jS]}], +"font-stretch":[{ +"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",ES,LS] +}],"font-family":[{font:[QS,LS,t]}],"fvn-normal":["normal-nums"], +"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"], +"fvn-figure":["lining-nums","oldstyle-nums"], +"fvn-spacing":["proportional-nums","tabular-nums"], +"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{ +tracking:[a,FS,LS]}],"line-clamp":[{"line-clamp":[AS,"none",FS,jS]}],leading:[{ +leading:[o,...O()]}],"list-image":[{"list-image":["none",FS,LS]}], +"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{ +list:["disc","decimal","none",FS,LS]}],"text-alignment":[{ +text:["left","center","right","justify","start","end"]}],"placeholder-color":[{ +placeholder:E()}],"text-color":[{text:E()}], +"text-decoration":["underline","overline","line-through","no-underline"], +"text-decoration-style":[{decoration:["solid","dashed","dotted","double","wavy"] +}],"text-decoration-thickness":[{decoration:[AS,"from-font","auto",FS,BS]}], +"text-decoration-color":[{decoration:E()}],"underline-offset":[{ +"underline-offset":[AS,"auto",FS,LS]}], +"text-transform":["uppercase","lowercase","capitalize","normal-case"], +"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{ +text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:O()}], +"vertical-align":[{ +align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",FS,LS] +}],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",FS,LS]}], +"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{ +"bg-clip":["border","padding","content","text"]}],"bg-origin":[{ +"bg-origin":["border","padding","content"]}],"bg-position":[{bg:C()}], +"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","space","round"]}]}], +"bg-size":[{bg:$()}],"bg-image":[{bg:["none",{linear:[{ +to:["t","tr","r","br","b","bl","l","tl"]},TS,FS,LS],radial:["",FS,LS], +conic:[TS,FS,LS]},WS,zS]}],"bg-color":[{bg:E()}],"gradient-from-pos":[{from:P() +}],"gradient-via-pos":[{via:P()}],"gradient-to-pos":[{to:P()}], +"gradient-from":[{from:E()}],"gradient-via":[{via:E()}],"gradient-to":[{to:E() +}],rounded:[{rounded:I()}],"rounded-s":[{"rounded-s":I()}],"rounded-e":[{ +"rounded-e":I()}],"rounded-t":[{"rounded-t":I()}],"rounded-r":[{"rounded-r":I() +}],"rounded-b":[{"rounded-b":I()}],"rounded-l":[{"rounded-l":I()}], +"rounded-ss":[{"rounded-ss":I()}],"rounded-se":[{"rounded-se":I()}], +"rounded-ee":[{"rounded-ee":I()}],"rounded-es":[{"rounded-es":I()}], +"rounded-tl":[{"rounded-tl":I()}],"rounded-tr":[{"rounded-tr":I()}], +"rounded-br":[{"rounded-br":I()}],"rounded-bl":[{"rounded-bl":I()}], +"border-w":[{border:D()}],"border-w-x":[{"border-x":D()}],"border-w-y":[{ +"border-y":D()}],"border-w-s":[{"border-s":D()}],"border-w-e":[{"border-e":D() +}],"border-w-t":[{"border-t":D()}],"border-w-r":[{"border-r":D()}], +"border-w-b":[{"border-b":D()}],"border-w-l":[{"border-l":D()}],"divide-x":[{ +"divide-x":D()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{ +"divide-y":D()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{ +border:["solid","dashed","dotted","double","hidden","none"]}],"divide-style":[{ +divide:["solid","dashed","dotted","double","hidden","none"]}],"border-color":[{ +border:E()}],"border-color-x":[{"border-x":E()}],"border-color-y":[{ +"border-y":E()}],"border-color-s":[{"border-s":E()}],"border-color-e":[{ +"border-e":E()}],"border-color-t":[{"border-t":E()}],"border-color-r":[{ +"border-r":E()}],"border-color-b":[{"border-b":E()}],"border-color-l":[{ +"border-l":E()}],"divide-color":[{divide:E()}],"outline-style":[{ +outline:["solid","dashed","dotted","double","none","hidden"]}], +"outline-offset":[{"outline-offset":[AS,FS,LS]}],"outline-w":[{ +outline:["",AS,HS,BS]}],"outline-color":[{outline:E()}],shadow:[{ +shadow:["","none",u,XS,ZS]}],"shadow-color":[{shadow:E()}],"inset-shadow":[{ +"inset-shadow":["none",d,XS,ZS]}],"inset-shadow-color":[{"inset-shadow":E()}], +"ring-w":[{ring:D()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:E()}], +"ring-offset-w":[{"ring-offset":[AS,BS]}],"ring-offset-color":[{ +"ring-offset":E()}],"inset-ring-w":[{"inset-ring":D()}],"inset-ring-color":[{ +"inset-ring":E()}],"text-shadow":[{"text-shadow":["none",p,XS,ZS]}], +"text-shadow-color":[{"text-shadow":E()}],opacity:[{opacity:[AS,FS,LS]}], +"mix-blend":[{ +"mix-blend":["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity","plus-darker","plus-lighter"] +}],"bg-blend":[{ +"bg-blend":["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"] +}],"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":[AS]}],"mask-image-linear-from-pos":[{"mask-linear-from":M()}], +"mask-image-linear-to-pos":[{"mask-linear-to":M()}], +"mask-image-linear-from-color":[{"mask-linear-from":E()}], +"mask-image-linear-to-color":[{"mask-linear-to":E()}],"mask-image-t-from-pos":[{ +"mask-t-from":M()}],"mask-image-t-to-pos":[{"mask-t-to":M()}], +"mask-image-t-from-color":[{"mask-t-from":E()}],"mask-image-t-to-color":[{ +"mask-t-to":E()}],"mask-image-r-from-pos":[{"mask-r-from":M()}], +"mask-image-r-to-pos":[{"mask-r-to":M()}],"mask-image-r-from-color":[{ +"mask-r-from":E()}],"mask-image-r-to-color":[{"mask-r-to":E()}], +"mask-image-b-from-pos":[{"mask-b-from":M()}],"mask-image-b-to-pos":[{ +"mask-b-to":M()}],"mask-image-b-from-color":[{"mask-b-from":E()}], +"mask-image-b-to-color":[{"mask-b-to":E()}],"mask-image-l-from-pos":[{ +"mask-l-from":M()}],"mask-image-l-to-pos":[{"mask-l-to":M()}], +"mask-image-l-from-color":[{"mask-l-from":E()}],"mask-image-l-to-color":[{ +"mask-l-to":E()}],"mask-image-x-from-pos":[{"mask-x-from":M()}], +"mask-image-x-to-pos":[{"mask-x-to":M()}],"mask-image-x-from-color":[{ +"mask-x-from":E()}],"mask-image-x-to-color":[{"mask-x-to":E()}], +"mask-image-y-from-pos":[{"mask-y-from":M()}],"mask-image-y-to-pos":[{ +"mask-y-to":M()}],"mask-image-y-from-color":[{"mask-y-from":E()}], +"mask-image-y-to-color":[{"mask-y-to":E()}],"mask-image-radial":[{ +"mask-radial":[FS,LS]}],"mask-image-radial-from-pos":[{"mask-radial-from":M()}], +"mask-image-radial-to-pos":[{"mask-radial-to":M()}], +"mask-image-radial-from-color":[{"mask-radial-from":E()}], +"mask-image-radial-to-color":[{"mask-radial-to":E()}], +"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":["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"] +}],"mask-image-conic-pos":[{"mask-conic":[AS]}],"mask-image-conic-from-pos":[{ +"mask-conic-from":M()}],"mask-image-conic-to-pos":[{"mask-conic-to":M()}], +"mask-image-conic-from-color":[{"mask-conic-from":E()}], +"mask-image-conic-to-color":[{"mask-conic-to":E()}],"mask-mode":[{ +mask:["alpha","luminance","match"]}],"mask-origin":[{ +"mask-origin":["border","padding","content","fill","stroke","view"]}], +"mask-position":[{mask:C()}],"mask-repeat":[{mask:["no-repeat",{ +repeat:["","x","y","space","round"]}]}],"mask-size":[{mask:$()}],"mask-type":[{ +"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",FS,LS]}], +filter:[{filter:["","none",FS,LS]}],blur:[{blur:N()}],brightness:[{ +brightness:[AS,FS,LS]}],contrast:[{contrast:[AS,FS,LS]}],"drop-shadow":[{ +"drop-shadow":["","none",h,XS,ZS]}],"drop-shadow-color":[{"drop-shadow":E()}], +grayscale:[{grayscale:["",AS,FS,LS]}],"hue-rotate":[{"hue-rotate":[AS,FS,LS]}], +invert:[{invert:["",AS,FS,LS]}],saturate:[{saturate:[AS,FS,LS]}],sepia:[{ +sepia:["",AS,FS,LS]}],"backdrop-filter":[{"backdrop-filter":["","none",FS,LS]}], +"backdrop-blur":[{"backdrop-blur":N()}],"backdrop-brightness":[{ +"backdrop-brightness":[AS,FS,LS]}],"backdrop-contrast":[{ +"backdrop-contrast":[AS,FS,LS]}],"backdrop-grayscale":[{ +"backdrop-grayscale":["",AS,FS,LS]}],"backdrop-hue-rotate":[{ +"backdrop-hue-rotate":[AS,FS,LS]}],"backdrop-invert":[{ +"backdrop-invert":["",AS,FS,LS]}],"backdrop-opacity":[{ +"backdrop-opacity":[AS,FS,LS]}],"backdrop-saturate":[{ +"backdrop-saturate":[AS,FS,LS]}],"backdrop-sepia":[{ +"backdrop-sepia":["",AS,FS,LS]}],"border-collapse":[{ +border:["collapse","separate"]}],"border-spacing":[{"border-spacing":O()}], +"border-spacing-x":[{"border-spacing-x":O()}],"border-spacing-y":[{ +"border-spacing-y":O()}],"table-layout":[{table:["auto","fixed"]}],caption:[{ +caption:["top","bottom"]}],transition:[{ +transition:["","all","colors","opacity","shadow","transform","none",FS,LS]}], +"transition-behavior":[{transition:["normal","discrete"]}],duration:[{ +duration:[AS,"initial",FS,LS]}],ease:[{ease:["linear","initial",v,FS,LS]}], +delay:[{delay:[AS,FS,LS]}],animate:[{animate:["none",b,FS,LS]}],backface:[{ +backface:["hidden","visible"]}],perspective:[{perspective:[m,FS,LS]}], +"perspective-origin":[{"perspective-origin":y()}],rotate:[{rotate:R()}], +"rotate-x":[{"rotate-x":R()}],"rotate-y":[{"rotate-y":R()}],"rotate-z":[{ +"rotate-z":R()}],scale:[{scale:L()}],"scale-x":[{"scale-x":L()}],"scale-y":[{ +"scale-y":L()}],"scale-z":[{"scale-z":L()}],"scale-3d":["scale-3d"],skew:[{ +skew:B()}],"skew-x":[{"skew-x":B()}],"skew-y":[{"skew-y":B()}],transform:[{ +transform:[FS,LS,"","none","gpu","cpu"]}],"transform-origin":[{origin:y()}], +"transform-style":[{transform:["3d","flat"]}],translate:[{translate:j()}], +"translate-x":[{"translate-x":j()}],"translate-y":[{"translate-y":j()}], +"translate-z":[{"translate-z":j()}],"translate-none":["translate-none"], +accent:[{accent:E()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{ +caret:E()}],"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",FS,LS] +}],"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":O()}], +"scroll-mx":[{"scroll-mx":O()}],"scroll-my":[{"scroll-my":O()}],"scroll-ms":[{ +"scroll-ms":O()}],"scroll-me":[{"scroll-me":O()}],"scroll-mt":[{"scroll-mt":O() +}],"scroll-mr":[{"scroll-mr":O()}],"scroll-mb":[{"scroll-mb":O()}], +"scroll-ml":[{"scroll-ml":O()}],"scroll-p":[{"scroll-p":O()}],"scroll-px":[{ +"scroll-px":O()}],"scroll-py":[{"scroll-py":O()}],"scroll-ps":[{"scroll-ps":O() +}],"scroll-pe":[{"scroll-pe":O()}],"scroll-pt":[{"scroll-pt":O()}], +"scroll-pr":[{"scroll-pr":O()}],"scroll-pb":[{"scroll-pb":O()}],"scroll-pl":[{ +"scroll-pl":O()}],"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",FS,LS]}],fill:[{ +fill:["none",...E()]}],"stroke-w":[{stroke:[AS,HS,BS,jS]}],stroke:[{ +stroke:["none",...E()]}],"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"] +}},i_=(e,t,n)=>{void 0!==n&&(e[t]=n)},s_=(e,t)=>{ +if(t)for(const n in t)i_(e,n,t[n])},l_=(e,t)=>{if(t)for(const n in t)c_(e,t,n) +},c_=(e,t,n)=>{const r=t[n];void 0!==r&&(e[n]=e[n]?e[n].concat(r):r) +},u_=((e,...t)=>"function"==typeof e?fS(o_,e,...t):fS((()=>((e,{cacheSize:t,prefix:n,experimentalParseClassName:r,extend:a={},override:o={}})=>(i_(e,"cacheSize",t), +i_(e,"prefix",n), +i_(e,"experimentalParseClassName",r),s_(e.theme,o.theme),s_(e.classGroups,o.classGroups), +s_(e.conflictingClassGroups,o.conflictingClassGroups), +s_(e.conflictingClassGroupModifiers,o.conflictingClassGroupModifiers), +i_(e,"orderSensitiveModifiers",o.orderSensitiveModifiers), +l_(e.theme,a.theme),l_(e.classGroups,a.classGroups), +l_(e.conflictingClassGroups,a.conflictingClassGroups), +l_(e.conflictingClassGroupModifiers,a.conflictingClassGroupModifiers), +c_(e,a,"orderSensitiveModifiers"),e))(o_(),e)),...t))({extend:{classGroups:{ +"font-size":["text-3xs","text-xxs"], +"font-weight":["font-sidebar","font-sidebar-active"]}}}),{cva:d_,cx:p_}=(e=>{ +const t=function(){ +for(var t=arguments.length,n=new Array(t),r=0;r{const r=Object.fromEntries(Object.entries(e||{}).filter((e=>{ +let[t]=e;return!["class","className"].includes(t)}))) +;return t(n.map((e=>e(r))),null==e?void 0:e.class,null==e?void 0:e.className)}}, +cva:e=>n=>{var r +;if(null==(null==e?void 0:e.variants))return t(null==e?void 0:e.base,null==n?void 0:n.class,null==n?void 0:n.className) +;const{variants:a,defaultVariants:o}=e,i=Object.keys(a).map((e=>{ +const t=null==n?void 0:n[e],r=null==o?void 0:o[e],i=Qk(t)||Qk(r);return a[e][i] +})),s={...o,...n&&Object.entries(n).reduce(((e,t)=>{let[n,r]=t +;return void 0===r?e:{...e,[n]:r}}),{}) +},l=null==e||null===(r=e.compoundVariants)||void 0===r?void 0:r.reduce(((e,t)=>{ +let{class:n,className:r,...a}=t;return Object.entries(a).every((e=>{let[t,n]=e +;const r=s[t];return Array.isArray(n)?n.includes(r):r===n}))?[...e,n,r]:e}),[]) +;return t(null==e?void 0:e.base,i,l,null==n?void 0:n.class,null==n?void 0:n.className) +},cx:t}})({hooks:{onComplete:e=>u_(e)}});function h_(){const e=Mv(),t=Ty((()=>{ +const{class:t,style:n,...r}=e;return{class:t||"",style:n,rest:r}}));return{ +cx:function(...e){return{class:p_(...e,t.value.class),style:t.value.style, +...t.value.rest}},stylingAttrsCx:function(...e){return{ +class:p_(...e,t.value.class),style:t.value.style}}, +otherAttrs:Ty((()=>t.value.rest))}}const f_={ +solid:["scalar-button-solid","bg-b-btn text-c-btn focus-visible:border-c-btn active:bg-b-btn hover:bg-h-btn outline-offset-1"], +outlined:["scalar-button-outlined","active:bg-btn-1 border border-solid border-border bg-b-1 text-c-1 hover:bg-b-2"], +ghost:["scalar-button-ghost","bg-transparent text-c-3 active:text-c-1 hover:text-c-1"], +gradient:["scalar-button-gradient","border bg-b-1.5 bg-linear-to-b from-b-1 to-b-2 hover:bg-linear-to-t","dark:bg-linear-to-t dark:hover:bg-linear-to-b"], +danger:["scalar-button-danger","bg-c-danger text-white active:brightness-90 hover:brightness-90"] +},m_={class:"circular-loader"},g_=Hg({inheritAttrs:!1,__name:"ScalarLoading", +props:{loader:{},size:{}},setup(e){const{cx:t}=h_(),n=d_({variants:{size:{ +xs:"size-3",sm:"size-3.5",md:"size-4",lg:"size-5",xl:"size-6","2xl":"size-8", +"3xl":"size-10",full:"size-full"}},defaultVariants:{size:"full"}}) +;return(r,a)=>e.loader?(Fb(),qb("div",Mh(cy({key:0 +},xm(t)("loader-wrapper",xm(n)({size:e.size})))),[(Fb(),qb("svg",{ +class:Dh(["svg-loader",{"icon-is-valid":e.loader.isValid, +"icon-is-invalid":e.loader.isInvalid}]),viewBox:"0 0 100 100", +xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink" +},[a[0]||(a[0]=ay('',5)),Jb("g",m_,[Jb("circle",{ +class:Dh(["loader-path",{"loader-path-off":!e.loader.isLoading}]),cx:"50", +cy:"50",fill:"none",r:"20","stroke-width":"3"},null,2)])],2))],16)):oy("",!0)} +}),v_=(e,t)=>{const n=e.__vccOpts||e;for(const[r,a]of t)n[r]=a;return n +},b_=v_(g_,[["__scopeId","data-v-27df5cd8"]]),y_={key:3,class:"centered" +},O_=Hg({inheritAttrs:!1,__name:"ScalarButton",props:{is:{default:"button"}, +variant:{default:"solid"},size:{default:"md"},disabled:{type:Boolean},icon:{ +type:[Object,Function]},loader:{}},setup(e){const t=d_({ +base:"scalar-button flex cursor-pointer items-center justify-center rounded font-medium -outline-offset-1", +variants:{disabled:{true:"bg-b-2 text-color-3 shadow-none"},size:{ +xs:"px-2 py-1 text-xs leading-5",sm:"px-3.5 py-2 text-sm leading-5", +md:"px-5 py-3 text-sm leading-5"},variant:f_},compoundVariants:[{disabled:!0, +variant:["solid","outlined","ghost","gradient","danger"], +class:"bg-b-2 text-c-3 shadow-none hover:bg-b-[_] cursor-not-allowed active:bg-b-[_] hover:text-c-[_] active:text-c-[_]" +},{disabled:!0,variant:["gradient"], +class:"to-b-1.5 bg-linear-to-b hover:bg-linear-to-b dark:hover:bg-linear-to-t"}] +}),n=d_({base:"shrink-0",variants:{size:{xs:"size-2.75 -ml-0.25 mr-1", +sm:"size-3.25 -ml-0.5 mr-1.5",md:"size-3.5 -ml-0.5 mr-1.5"}}}),r=d_({variants:{ +size:{xs:"size-4",sm:"size-5",md:"size-6"}}}),{cx:a}=h_() +;return(o,i)=>(Fb(),Wb(wv(e.is),cy({"aria-disabled":e.disabled||void 0, +type:"button"===e.is?"button":void 0},xm(a)(xm(t)({disabled:e.disabled, +size:e.size,variant:e.variant}),{relative:e.loader?.isActive})),{ +default:ig((()=>[o.$slots.icon||e.icon?(Fb(),qb("div",{key:0,class:Dh([xm(n)({ +size:e.size}),{invisible:e.loader?.isActive}]) +},[Av(o.$slots,"icon",{},(()=>[(Fb(),Wb(wv(e.icon),{class:"size-full" +}))]))],2)):oy("",!0),e.loader?(Fb(),qb("span",{key:1,class:Dh({ +invisible:e.loader?.isActive}) +},[Av(o.$slots,"default")],2)):Av(o.$slots,"default",{key:2 +}),e.loader?.isActive?(Fb(),qb("div",y_,[ey(xm(b_),{class:Dh(xm(r)({size:e.size +})),loader:e.loader},null,8,["class","loader"])])):oy("",!0)])),_:3 +},16,["aria-disabled","type"]))}}),w_=Symbol(),x_=Hg({inheritAttrs:!1, +__name:"ScalarCard",props:{label:{}},setup(e){const{id:t}=(()=>{const e=bm() +;return cg(w_,e),{id:e}})(),n=Ty((()=>e.label?{"aria-label":e.label}:t.value?{ +"aria-labelledby":t.value}:{})),{cx:r}=h_();return(e,t)=>(Fb(),qb("div",cy({ +role:"group"},{...n.value, +...xm(r)("scalar-card bg-b-2 flex flex-col divide-y rounded-xl border *:first:rounded-t-[inherit] *:last:rounded-b-[inherit]") +}),[Av(e.$slots,"default")],16))}}),k_=Hg({inheritAttrs:!1, +__name:"ScalarCardSection",setup(e){const{cx:t}=h_() +;return(e,n)=>(Fb(),qb("div",Mh(ty(xm(t)("scalar-card-content flex overflow-auto"))),[Av(e.$slots,"default")],16)) +}}),S_=Hg({inheritAttrs:!1,__name:"ScalarCardFooter",setup(e){const{cx:t}=h_() +;return(e,n)=>(Fb(),Wb(k_,Mh(ty(xm(t)("scalar-card-footer"))),{ +default:ig((()=>[Av(e.$slots,"default")])),_:3},16))}}),__=["id"],A_={key:0, +class:"flex"},T_=Hg({inheritAttrs:!1,__name:"ScalarCardHeader",setup(e){ +const{cx:t}=h_(),n=Qg();return(e=>{const t=ug(w_,void 0);t&&(t.value=e) +})(n),(e,r)=>(Fb(), +Wb(k_,Mh(ty(xm(t)("scalar-card-header leading-[22px] font-medium py-[6.75px] px-3 shrink-0"))),{ +default:ig((()=>[Jb("div",{id:xm(n), +class:"scalar-card-header-title min-w-0 flex-1 truncate" +},[Av(e.$slots,"default")],8,__),e.$slots.actions?(Fb(), +qb("div",A_,[Av(e.$slots,"actions")])):oy("",!0)])),_:3},16))}}) +;function E_(e={}){const t=Ty((()=>e.label?{"aria-label":e.label}:{ +"aria-hidden":!0,role:"presentation"}));return{bind:Ty((()=>({width:"1em", +height:"1em",...t.value}))),weight:Ty((()=>e.weight??"regular"))}}const C_={ +key:0},$_={key:1},P_={key:2},I_={key:3},D_={key:4},M_={key:5},N_=Hg({ +name:"ScalarIconArrowRight",props:{label:{},weight:{}},setup(e){ +const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",C_,[...t[0]||(t[0]=[Jb("path",{ +d:"M224.49,136.49l-72,72a12,12,0,0,1-17-17L187,140H40a12,12,0,0,1,0-24H187L135.51,64.48a12,12,0,0,1,17-17l72,72A12,12,0,0,1,224.49,136.49Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",$_,[...t[1]||(t[1]=[Jb("path",{ +d:"M216,128l-72,72V56Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M221.66,122.34l-72-72A8,8,0,0,0,136,56v64H40a8,8,0,0,0,0,16h96v64a8,8,0,0,0,13.66,5.66l72-72A8,8,0,0,0,221.66,122.34ZM152,180.69V75.31L204.69,128Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",P_,[...t[2]||(t[2]=[Jb("path",{ +d:"M221.66,133.66l-72,72A8,8,0,0,1,136,200V136H40a8,8,0,0,1,0-16h96V56a8,8,0,0,1,13.66-5.66l72,72A8,8,0,0,1,221.66,133.66Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",I_,[...t[3]||(t[3]=[Jb("path",{ +d:"M220.24,132.24l-72,72a6,6,0,0,1-8.48-8.48L201.51,134H40a6,6,0,0,1,0-12H201.51L139.76,60.24a6,6,0,0,1,8.48-8.48l72,72A6,6,0,0,1,220.24,132.24Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",D_,[...t[4]||(t[4]=[Jb("path",{ +d:"M221.66,133.66l-72,72a8,8,0,0,1-11.32-11.32L196.69,136H40a8,8,0,0,1,0-16H196.69L138.34,61.66a8,8,0,0,1,11.32-11.32l72,72A8,8,0,0,1,221.66,133.66Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",M_,[...t[5]||(t[5]=[Jb("path",{ +d:"M218.83,130.83l-72,72a4,4,0,0,1-5.66-5.66L206.34,132H40a4,4,0,0,1,0-8H206.34L141.17,58.83a4,4,0,0,1,5.66-5.66l72,72A4,4,0,0,1,218.83,130.83Z" +},null,-1)])])):oy("",!0)],16))}}),R_={key:0},L_={key:1},B_={key:2},j_={key:3 +},U_={key:4},z_={key:5},Z_=Hg({name:"ScalarIconArrowUp",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",R_,[...t[0]||(t[0]=[Jb("path",{ +d:"M208.49,120.49a12,12,0,0,1-17,0L140,69V216a12,12,0,0,1-24,0V69L64.49,120.49a12,12,0,0,1-17-17l72-72a12,12,0,0,1,17,0l72,72A12,12,0,0,1,208.49,120.49Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",L_,[...t[1]||(t[1]=[Jb("path",{ +d:"M200,112H56l72-72Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M205.66,106.34l-72-72a8,8,0,0,0-11.32,0l-72,72A8,8,0,0,0,56,120h64v96a8,8,0,0,0,16,0V120h64a8,8,0,0,0,5.66-13.66ZM75.31,104,128,51.31,180.69,104Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",B_,[...t[2]||(t[2]=[Jb("path",{ +d:"M207.39,115.06A8,8,0,0,1,200,120H136v96a8,8,0,0,1-16,0V120H56a8,8,0,0,1-5.66-13.66l72-72a8,8,0,0,1,11.32,0l72,72A8,8,0,0,1,207.39,115.06Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",j_,[...t[3]||(t[3]=[Jb("path",{ +d:"M204.24,116.24a6,6,0,0,1-8.48,0L134,54.49V216a6,6,0,0,1-12,0V54.49L60.24,116.24a6,6,0,0,1-8.48-8.48l72-72a6,6,0,0,1,8.48,0l72,72A6,6,0,0,1,204.24,116.24Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",U_,[...t[4]||(t[4]=[Jb("path",{ +d:"M205.66,117.66a8,8,0,0,1-11.32,0L136,59.31V216a8,8,0,0,1-16,0V59.31L61.66,117.66a8,8,0,0,1-11.32-11.32l72-72a8,8,0,0,1,11.32,0l72,72A8,8,0,0,1,205.66,117.66Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",z_,[...t[5]||(t[5]=[Jb("path",{ +d:"M202.83,114.83a4,4,0,0,1-5.66,0L132,49.66V216a4,4,0,0,1-8,0V49.66L58.83,114.83a4,4,0,0,1-5.66-5.66l72-72a4,4,0,0,1,5.66,0l72,72A4,4,0,0,1,202.83,114.83Z" +},null,-1)])])):oy("",!0)],16))}}),F_={key:0},H_={key:1},Q_={key:2},V_={key:3 +},q_={key:4},W_={key:5},X_=Hg({name:"ScalarIconArrowUpRight",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",F_,[...t[0]||(t[0]=[Jb("path",{ +d:"M204,64V168a12,12,0,0,1-24,0V93L72.49,200.49a12,12,0,0,1-17-17L163,76H88a12,12,0,0,1,0-24H192A12,12,0,0,1,204,64Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",H_,[...t[1]||(t[1]=[Jb("path",{ +d:"M192,64V168L88,64Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M192,56H88a8,8,0,0,0-5.66,13.66L128.69,116,58.34,186.34a8,8,0,0,0,11.32,11.32L140,127.31l46.34,46.35A8,8,0,0,0,200,168V64A8,8,0,0,0,192,56Zm-8,92.69-38.34-38.34h0L107.31,72H184Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",Q_,[...t[2]||(t[2]=[Jb("path",{ +d:"M200,64V168a8,8,0,0,1-13.66,5.66L140,127.31,69.66,197.66a8,8,0,0,1-11.32-11.32L128.69,116,82.34,69.66A8,8,0,0,1,88,56H192A8,8,0,0,1,200,64Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",V_,[...t[3]||(t[3]=[Jb("path",{ +d:"M198,64V168a6,6,0,0,1-12,0V78.48L68.24,196.24a6,6,0,0,1-8.48-8.48L177.52,70H88a6,6,0,0,1,0-12H192A6,6,0,0,1,198,64Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",q_,[...t[4]||(t[4]=[Jb("path",{ +d:"M200,64V168a8,8,0,0,1-16,0V83.31L69.66,197.66a8,8,0,0,1-11.32-11.32L172.69,72H88a8,8,0,0,1,0-16H192A8,8,0,0,1,200,64Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",W_,[...t[5]||(t[5]=[Jb("path",{ +d:"M196,64V168a4,4,0,0,1-8,0V73.66L66.83,194.83a4,4,0,0,1-5.66-5.66L182.34,68H88a4,4,0,0,1,0-8H192A4,4,0,0,1,196,64Z" +},null,-1)])])):oy("",!0)],16))}}),G_={key:0},Y_={key:1},K_={key:2},J_={key:3 +},eA={key:4},tA={key:5},nA=Hg({name:"ScalarIconBook",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",G_,[...t[0]||(t[0]=[Jb("path",{ +d:"M208,20H72A36,36,0,0,0,36,56V224a12,12,0,0,0,12,12H192a12,12,0,0,0,0-24H60v-4a12,12,0,0,1,12-12H208a12,12,0,0,0,12-12V32A12,12,0,0,0,208,20ZM196,172H72a35.59,35.59,0,0,0-12,2.06V56A12,12,0,0,1,72,44H196Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",Y_,[...t[1]||(t[1]=[Jb("path",{ +d:"M208,32V192H72a24,24,0,0,0-24,24V56A24,24,0,0,1,72,32Z",opacity:"0.2" +},null,-1),Jb("path",{ +d:"M208,24H72A32,32,0,0,0,40,56V224a8,8,0,0,0,8,8H192a8,8,0,0,0,0-16H56a16,16,0,0,1,16-16H208a8,8,0,0,0,8-8V32A8,8,0,0,0,208,24Zm-8,160H72a31.82,31.82,0,0,0-16,4.29V56A16,16,0,0,1,72,40H200Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",K_,[...t[2]||(t[2]=[Jb("path",{ +d:"M216,32V192a8,8,0,0,1-8,8H72a16,16,0,0,0-16,16H192a8,8,0,0,1,0,16H48a8,8,0,0,1-8-8V56A32,32,0,0,1,72,24H208A8,8,0,0,1,216,32Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",J_,[...t[3]||(t[3]=[Jb("path",{ +d:"M208,26H72A30,30,0,0,0,42,56V224a6,6,0,0,0,6,6H192a6,6,0,0,0,0-12H54v-2a18,18,0,0,1,18-18H208a6,6,0,0,0,6-6V32A6,6,0,0,0,208,26Zm-6,160H72a29.87,29.87,0,0,0-18,6V56A18,18,0,0,1,72,38H202Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",eA,[...t[4]||(t[4]=[Jb("path",{ +d:"M208,24H72A32,32,0,0,0,40,56V224a8,8,0,0,0,8,8H192a8,8,0,0,0,0-16H56a16,16,0,0,1,16-16H208a8,8,0,0,0,8-8V32A8,8,0,0,0,208,24Zm-8,160H72a31.82,31.82,0,0,0-16,4.29V56A16,16,0,0,1,72,40H200Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",tA,[...t[5]||(t[5]=[Jb("path",{ +d:"M208,28H72A28,28,0,0,0,44,56V224a4,4,0,0,0,4,4H192a4,4,0,0,0,0-8H52v-4a20,20,0,0,1,20-20H208a4,4,0,0,0,4-4V32A4,4,0,0,0,208,28Zm-4,160H72a27.94,27.94,0,0,0-20,8.42V56A20,20,0,0,1,72,36H204Z" +},null,-1)])])):oy("",!0)],16))}}),rA={key:0},aA={key:1},oA={key:2},iA={key:3 +},sA={key:4},lA={key:5},cA=Hg({name:"ScalarIconBookOpenText",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",rA,[...t[0]||(t[0]=[Jb("path",{ +d:"M232,44H160a43.86,43.86,0,0,0-32,13.85A43.86,43.86,0,0,0,96,44H24A12,12,0,0,0,12,56V200a12,12,0,0,0,12,12H96a20,20,0,0,1,20,20,12,12,0,0,0,24,0,20,20,0,0,1,20-20h72a12,12,0,0,0,12-12V56A12,12,0,0,0,232,44ZM96,188H36V68H96a20,20,0,0,1,20,20V192.81A43.79,43.79,0,0,0,96,188Zm124,0H160a43.71,43.71,0,0,0-20,4.83V88a20,20,0,0,1,20-20h60ZM164,96h32a12,12,0,0,1,0,24H164a12,12,0,0,1,0-24Zm44,52a12,12,0,0,1-12,12H164a12,12,0,0,1,0-24h32A12,12,0,0,1,208,148Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",aA,[...t[1]||(t[1]=[Jb("path",{ +d:"M232,56V200H160a32,32,0,0,0-32,32V88a32,32,0,0,1,32-32Z",opacity:"0.2" +},null,-1),Jb("path",{ +d:"M232,48H160a40,40,0,0,0-32,16A40,40,0,0,0,96,48H24a8,8,0,0,0-8,8V200a8,8,0,0,0,8,8H96a24,24,0,0,1,24,24,8,8,0,0,0,16,0,24,24,0,0,1,24-24h72a8,8,0,0,0,8-8V56A8,8,0,0,0,232,48ZM96,192H32V64H96a24,24,0,0,1,24,24V200A39.81,39.81,0,0,0,96,192Zm128,0H160a39.81,39.81,0,0,0-24,8V88a24,24,0,0,1,24-24h64ZM160,88h40a8,8,0,0,1,0,16H160a8,8,0,0,1,0-16Zm48,40a8,8,0,0,1-8,8H160a8,8,0,0,1,0-16h40A8,8,0,0,1,208,128Zm0,32a8,8,0,0,1-8,8H160a8,8,0,0,1,0-16h40A8,8,0,0,1,208,160Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",oA,[...t[2]||(t[2]=[Jb("path",{ +d:"M232,48H168a32,32,0,0,0-32,32v87.73a8.17,8.17,0,0,1-7.47,8.25,8,8,0,0,1-8.53-8V80A32,32,0,0,0,88,48H24a8,8,0,0,0-8,8V200a8,8,0,0,0,8,8H96a24,24,0,0,1,24,23.94,7.9,7.9,0,0,0,5.12,7.55A8,8,0,0,0,136,232a24,24,0,0,1,24-24h72a8,8,0,0,0,8-8V56A8,8,0,0,0,232,48ZM208,168H168.27a8.17,8.17,0,0,1-8.25-7.47,8,8,0,0,1,8-8.53h39.73a8.17,8.17,0,0,1,8.25,7.47A8,8,0,0,1,208,168Zm0-32H168.27a8.17,8.17,0,0,1-8.25-7.47,8,8,0,0,1,8-8.53h39.73a8.17,8.17,0,0,1,8.25,7.47A8,8,0,0,1,208,136Zm0-32H168.27A8.17,8.17,0,0,1,160,96.53,8,8,0,0,1,168,88h39.73A8.17,8.17,0,0,1,216,95.47,8,8,0,0,1,208,104Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",iA,[...t[3]||(t[3]=[Jb("path",{ +d:"M232,50H160a38,38,0,0,0-32,17.55A38,38,0,0,0,96,50H24a6,6,0,0,0-6,6V200a6,6,0,0,0,6,6H96a26,26,0,0,1,26,26,6,6,0,0,0,12,0,26,26,0,0,1,26-26h72a6,6,0,0,0,6-6V56A6,6,0,0,0,232,50ZM96,194H30V62H96a26,26,0,0,1,26,26V204.31A37.86,37.86,0,0,0,96,194Zm130,0H160a37.87,37.87,0,0,0-26,10.32V88a26,26,0,0,1,26-26h66ZM160,90h40a6,6,0,0,1,0,12H160a6,6,0,0,1,0-12Zm46,38a6,6,0,0,1-6,6H160a6,6,0,0,1,0-12h40A6,6,0,0,1,206,128Zm0,32a6,6,0,0,1-6,6H160a6,6,0,0,1,0-12h40A6,6,0,0,1,206,160Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",sA,[...t[4]||(t[4]=[Jb("path",{ +d:"M232,48H160a40,40,0,0,0-32,16A40,40,0,0,0,96,48H24a8,8,0,0,0-8,8V200a8,8,0,0,0,8,8H96a24,24,0,0,1,24,24,8,8,0,0,0,16,0,24,24,0,0,1,24-24h72a8,8,0,0,0,8-8V56A8,8,0,0,0,232,48ZM96,192H32V64H96a24,24,0,0,1,24,24V200A39.81,39.81,0,0,0,96,192Zm128,0H160a39.81,39.81,0,0,0-24,8V88a24,24,0,0,1,24-24h64ZM160,88h40a8,8,0,0,1,0,16H160a8,8,0,0,1,0-16Zm48,40a8,8,0,0,1-8,8H160a8,8,0,0,1,0-16h40A8,8,0,0,1,208,128Zm0,32a8,8,0,0,1-8,8H160a8,8,0,0,1,0-16h40A8,8,0,0,1,208,160Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",lA,[...t[5]||(t[5]=[Jb("path",{ +d:"M232,52H160a36,36,0,0,0-32,19.54A36,36,0,0,0,96,52H24a4,4,0,0,0-4,4V200a4,4,0,0,0,4,4H96a28,28,0,0,1,28,28,4,4,0,0,0,8,0,28,28,0,0,1,28-28h72a4,4,0,0,0,4-4V56A4,4,0,0,0,232,52ZM96,196H28V60H96a28,28,0,0,1,28,28V209.4A35.94,35.94,0,0,0,96,196Zm132,0H160a35.94,35.94,0,0,0-28,13.41V88a28,28,0,0,1,28-28h68ZM160,92h40a4,4,0,0,1,0,8H160a4,4,0,0,1,0-8Zm44,36a4,4,0,0,1-4,4H160a4,4,0,0,1,0-8h40A4,4,0,0,1,204,128Zm0,32a4,4,0,0,1-4,4H160a4,4,0,0,1,0-8h40A4,4,0,0,1,204,160Z" +},null,-1)])])):oy("",!0)],16))}}),uA={key:0},dA={key:1},pA={key:2},hA={key:3 +},fA={key:4},mA={key:5},gA=Hg({name:"ScalarIconBracketsCurly",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",uA,[...t[0]||(t[0]=[Jb("path",{ +d:"M54.8,119.49A35.06,35.06,0,0,1,49.05,128a35.06,35.06,0,0,1,5.75,8.51C60,147.24,60,159.83,60,172c0,25.94,1.84,32,20,32a12,12,0,0,1,0,24c-19.14,0-32.2-6.9-38.8-20.51C36,196.76,36,184.17,36,172c0-25.94-1.84-32-20-32a12,12,0,0,1,0-24c18.16,0,20-6.06,20-32,0-12.17,0-24.76,5.2-35.49C47.8,34.9,60.86,28,80,28a12,12,0,0,1,0,24c-18.16,0-20,6.06-20,32C60,96.17,60,108.76,54.8,119.49ZM240,116c-18.16,0-20-6.06-20-32,0-12.17,0-24.76-5.2-35.49C208.2,34.9,195.14,28,176,28a12,12,0,0,0,0,24c18.16,0,20,6.06,20,32,0,12.17,0,24.76,5.2,35.49A35.06,35.06,0,0,0,207,128a35.06,35.06,0,0,0-5.75,8.51C196,147.24,196,159.83,196,172c0,25.94-1.84,32-20,32a12,12,0,0,0,0,24c19.14,0,32.2-6.9,38.8-20.51C220,196.76,220,184.17,220,172c0-25.94,1.84-32,20-32a12,12,0,0,0,0-24Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",dA,[...t[1]||(t[1]=[Jb("path",{ +d:"M240,128c-64,0,0,88-64,88H80c-64,0,0-88-64-88,64,0,0-88,64-88h96C240,40,176,128,240,128Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M43.18,128a29.78,29.78,0,0,1,8,10.26c4.8,9.9,4.8,22,4.8,33.74,0,24.31,1,36,24,36a8,8,0,0,1,0,16c-17.48,0-29.32-6.14-35.2-18.26-4.8-9.9-4.8-22-4.8-33.74,0-24.31-1-36-24-36a8,8,0,0,1,0-16c23,0,24-11.69,24-36,0-11.72,0-23.84,4.8-33.74C50.68,38.14,62.52,32,80,32a8,8,0,0,1,0,16C57,48,56,59.69,56,84c0,11.72,0,23.84-4.8,33.74A29.78,29.78,0,0,1,43.18,128ZM240,120c-23,0-24-11.69-24-36,0-11.72,0-23.84-4.8-33.74C205.32,38.14,193.48,32,176,32a8,8,0,0,0,0,16c23,0,24,11.69,24,36,0,11.72,0,23.84,4.8,33.74a29.78,29.78,0,0,0,8,10.26,29.78,29.78,0,0,0-8,10.26c-4.8,9.9-4.8,22-4.8,33.74,0,24.31-1,36-24,36a8,8,0,0,0,0,16c17.48,0,29.32-6.14,35.2-18.26,4.8-9.9,4.8-22,4.8-33.74,0-24.31,1-36,24-36a8,8,0,0,0,0-16Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",pA,[...t[2]||(t[2]=[Jb("path",{ +d:"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM88,155.84c.29,14.26.41,20.16,16,20.16a8,8,0,0,1,0,16c-31.27,0-31.72-22.43-32-35.84C71.71,141.9,71.59,136,56,136a8,8,0,0,1,0-16c15.59,0,15.71-5.9,16-20.16C72.28,86.43,72.73,64,104,64a8,8,0,0,1,0,16c-15.59,0-15.71,5.9-16,20.16-.17,8.31-.41,20.09-8,27.84C87.59,135.75,87.83,147.53,88,155.84ZM200,136c-15.59,0-15.71,5.9-16,20.16-.28,13.41-.73,35.84-32,35.84a8,8,0,0,1,0-16c15.59,0,15.71-5.9,16-20.16.17-8.31.41-20.09,8-27.84-7.6-7.75-7.84-19.53-8-27.84C167.71,85.9,167.59,80,152,80a8,8,0,0,1,0-16c31.27,0,31.72,22.43,32,35.84.29,14.26.41,20.16,16,20.16a8,8,0,0,1,0,16Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",hA,[...t[3]||(t[3]=[Jb("path",{ +d:"M39.91,128a27.68,27.68,0,0,1,9.49,11.13C54,148.62,54,160.51,54,172c0,24.27,1.21,38,26,38a6,6,0,0,1,0,12c-16.88,0-27.81-5.6-33.4-17.13C42,195.38,42,183.49,42,172c0-24.27-1.21-38-26-38a6,6,0,0,1,0-12c24.79,0,26-13.73,26-38,0-11.49,0-23.38,4.6-32.87C52.19,39.6,63.12,34,80,34a6,6,0,0,1,0,12C55.21,46,54,59.73,54,84c0,11.49,0,23.38-4.6,32.87A27.68,27.68,0,0,1,39.91,128ZM240,122c-24.79,0-26-13.73-26-38,0-11.49,0-23.38-4.6-32.87C203.81,39.6,192.88,34,176,34a6,6,0,0,0,0,12c24.79,0,26,13.73,26,38,0,11.49,0,23.38,4.6,32.87A27.68,27.68,0,0,0,216.09,128a27.68,27.68,0,0,0-9.49,11.13C202,148.62,202,160.51,202,172c0,24.27-1.21,38-26,38a6,6,0,0,0,0,12c16.88,0,27.81-5.6,33.4-17.13,4.6-9.49,4.6-21.38,4.6-32.87,0-24.27,1.21-38,26-38a6,6,0,0,0,0-12Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",fA,[...t[4]||(t[4]=[Jb("path",{ +d:"M43.18,128a29.78,29.78,0,0,1,8,10.26c4.8,9.9,4.8,22,4.8,33.74,0,24.31,1,36,24,36a8,8,0,0,1,0,16c-17.48,0-29.32-6.14-35.2-18.26-4.8-9.9-4.8-22-4.8-33.74,0-24.31-1-36-24-36a8,8,0,0,1,0-16c23,0,24-11.69,24-36,0-11.72,0-23.84,4.8-33.74C50.68,38.14,62.52,32,80,32a8,8,0,0,1,0,16C57,48,56,59.69,56,84c0,11.72,0,23.84-4.8,33.74A29.78,29.78,0,0,1,43.18,128ZM240,120c-23,0-24-11.69-24-36,0-11.72,0-23.84-4.8-33.74C205.32,38.14,193.48,32,176,32a8,8,0,0,0,0,16c23,0,24,11.69,24,36,0,11.72,0,23.84,4.8,33.74a29.78,29.78,0,0,0,8,10.26,29.78,29.78,0,0,0-8,10.26c-4.8,9.9-4.8,22-4.8,33.74,0,24.31-1,36-24,36a8,8,0,0,0,0,16c17.48,0,29.32-6.14,35.2-18.26,4.8-9.9,4.8-22,4.8-33.74,0-24.31,1-36,24-36a8,8,0,0,0,0-16Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",mA,[...t[5]||(t[5]=[Jb("path",{ +d:"M35.89,128C52,136.23,52,155.64,52,172c0,24.8,1.35,40,28,40a4,4,0,0,1,0,8c-36,0-36-26.61-36-48,0-24.8-1.35-40-28-40a4,4,0,0,1,0-8c26.65,0,28-15.2,28-40,0-21.39,0-48,36-48a4,4,0,0,1,0,8C53.35,44,52,59.2,52,84,52,100.36,52,119.77,35.89,128ZM240,124c-26.65,0-28-15.2-28-40,0-21.39,0-48-36-48a4,4,0,0,0,0,8c26.65,0,28,15.2,28,40,0,16.36,0,35.77,16.11,44C204,136.23,204,155.64,204,172c0,24.8-1.35,40-28,40a4,4,0,0,0,0,8c36,0,36-26.61,36-48,0-24.8,1.35-40,28-40a4,4,0,0,0,0-8Z" +},null,-1)])])):oy("",!0)],16))}}),vA={key:0},bA={key:1},yA={key:2},OA={key:3 +},wA={key:4},xA={key:5},kA=Hg({name:"ScalarIconCaretDown",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",vA,[...t[0]||(t[0]=[Jb("path",{ +d:"M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",bA,[...t[1]||(t[1]=[Jb("path",{ +d:"M208,96l-80,80L48,96Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M215.39,92.94A8,8,0,0,0,208,88H48a8,8,0,0,0-5.66,13.66l80,80a8,8,0,0,0,11.32,0l80-80A8,8,0,0,0,215.39,92.94ZM128,164.69,67.31,104H188.69Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",yA,[...t[2]||(t[2]=[Jb("path",{ +d:"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,48,88H208a8,8,0,0,1,5.66,13.66Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",OA,[...t[3]||(t[3]=[Jb("path",{ +d:"M212.24,100.24l-80,80a6,6,0,0,1-8.48,0l-80-80a6,6,0,0,1,8.48-8.48L128,167.51l75.76-75.75a6,6,0,0,1,8.48,8.48Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",wA,[...t[4]||(t[4]=[Jb("path",{ +d:"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",xA,[...t[5]||(t[5]=[Jb("path",{ +d:"M210.83,98.83l-80,80a4,4,0,0,1-5.66,0l-80-80a4,4,0,0,1,5.66-5.66L128,170.34l77.17-77.17a4,4,0,1,1,5.66,5.66Z" +},null,-1)])])):oy("",!0)],16))}}),SA={key:0},_A={key:1},AA={key:2},TA={key:3 +},EA={key:4},CA={key:5},$A=Hg({name:"ScalarIconCaretRight",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",SA,[...t[0]||(t[0]=[Jb("path",{ +d:"M184.49,136.49l-80,80a12,12,0,0,1-17-17L159,128,87.51,56.49a12,12,0,1,1,17-17l80,80A12,12,0,0,1,184.49,136.49Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",_A,[...t[1]||(t[1]=[Jb("path",{ +d:"M176,128,96,208V48Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M181.66,122.34l-80-80A8,8,0,0,0,88,48V208a8,8,0,0,0,13.66,5.66l80-80A8,8,0,0,0,181.66,122.34ZM104,188.69V67.31L164.69,128Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",AA,[...t[2]||(t[2]=[Jb("path",{ +d:"M181.66,133.66l-80,80A8,8,0,0,1,88,208V48a8,8,0,0,1,13.66-5.66l80,80A8,8,0,0,1,181.66,133.66Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",TA,[...t[3]||(t[3]=[Jb("path",{ +d:"M180.24,132.24l-80,80a6,6,0,0,1-8.48-8.48L167.51,128,91.76,52.24a6,6,0,0,1,8.48-8.48l80,80A6,6,0,0,1,180.24,132.24Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",EA,[...t[4]||(t[4]=[Jb("path",{ +d:"M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",CA,[...t[5]||(t[5]=[Jb("path",{ +d:"M178.83,130.83l-80,80a4,4,0,0,1-5.66-5.66L170.34,128,93.17,50.83a4,4,0,0,1,5.66-5.66l80,80A4,4,0,0,1,178.83,130.83Z" +},null,-1)])])):oy("",!0)],16))}}),PA={key:0},IA={key:1},DA={key:2},MA={key:3 +},NA={key:4},RA={key:5},LA=Hg({name:"ScalarIconCheck",props:{label:{},weight:{} +},setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",PA,[...t[0]||(t[0]=[Jb("path",{ +d:"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",IA,[...t[1]||(t[1]=[Jb("path",{ +d:"M232,56V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",DA,[...t[2]||(t[2]=[Jb("path",{ +d:"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",MA,[...t[3]||(t[3]=[Jb("path",{ +d:"M228.24,76.24l-128,128a6,6,0,0,1-8.48,0l-56-56a6,6,0,0,1,8.48-8.48L96,191.51,219.76,67.76a6,6,0,0,1,8.48,8.48Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",NA,[...t[4]||(t[4]=[Jb("path",{ +d:"M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",RA,[...t[5]||(t[5]=[Jb("path",{ +d:"M226.83,74.83l-128,128a4,4,0,0,1-5.66,0l-56-56a4,4,0,0,1,5.66-5.66L96,194.34,221.17,69.17a4,4,0,1,1,5.66,5.66Z" +},null,-1)])])):oy("",!0)],16))}}),BA={key:0},jA={key:1},UA={key:2},zA={key:3 +},ZA={key:4},FA={key:5},HA=Hg({name:"ScalarIconCopy",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",BA,[...t[0]||(t[0]=[Jb("path",{ +d:"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",jA,[...t[1]||(t[1]=[Jb("path",{ +d:"M216,40V168H168V88H88V40Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",UA,[...t[2]||(t[2]=[Jb("path",{ +d:"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32Zm-8,128H176V88a8,8,0,0,0-8-8H96V48H208Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",zA,[...t[3]||(t[3]=[Jb("path",{ +d:"M216,34H88a6,6,0,0,0-6,6V82H40a6,6,0,0,0-6,6V216a6,6,0,0,0,6,6H168a6,6,0,0,0,6-6V174h42a6,6,0,0,0,6-6V40A6,6,0,0,0,216,34ZM162,210H46V94H162Zm48-48H174V88a6,6,0,0,0-6-6H94V46H210Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",ZA,[...t[4]||(t[4]=[Jb("path",{ +d:"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",FA,[...t[5]||(t[5]=[Jb("path",{ +d:"M216,36H88a4,4,0,0,0-4,4V84H40a4,4,0,0,0-4,4V216a4,4,0,0,0,4,4H168a4,4,0,0,0,4-4V172h44a4,4,0,0,0,4-4V40A4,4,0,0,0,216,36ZM164,212H44V92H164Zm48-48H172V88a4,4,0,0,0-4-4H92V44H212Z" +},null,-1)])])):oy("",!0)],16))}}),QA={key:0},VA={key:1},qA={key:2},WA={key:3 +},XA={key:4},GA={key:5},YA=Hg({name:"ScalarIconDiscordLogo",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",QA,[...t[0]||(t[0]=[Jb("path",{ +d:"M108,136a16,16,0,1,1-16-16A16,16,0,0,1,108,136Zm56-16a16,16,0,1,0,16,16A16,16,0,0,0,164,120Zm76.07,76.56-67,29.71A20.15,20.15,0,0,1,146,214.9l-8.54-23.13c-3.13.14-6.27.24-9.45.24s-6.32-.1-9.45-.24L110,214.9a20.19,20.19,0,0,1-27.08,11.37l-67-29.71A19.93,19.93,0,0,1,4.62,173.41L34.15,57A20,20,0,0,1,50.37,42.19l36.06-5.93A20.26,20.26,0,0,1,109.22,51.1l4.41,17.41c4.74-.33,9.52-.51,14.37-.51s9.63.18,14.37.51l4.41-17.41a20.25,20.25,0,0,1,22.79-14.84l36.06,5.93A20,20,0,0,1,221.85,57l29.53,116.38A19.93,19.93,0,0,1,240.07,196.56ZM227.28,176,199.23,65.46l-30.07-4.94-2.84,11.17c2.9.58,5.78,1.2,8.61,1.92a12,12,0,1,1-5.86,23.27A168.43,168.43,0,0,0,128,92a168.43,168.43,0,0,0-41.07,4.88,12,12,0,0,1-5.86-23.27c2.83-.72,5.71-1.34,8.61-1.92L86.85,60.52,56.77,65.46,28.72,176l60.22,26.7,5-13.57c-4.37-.76-8.67-1.65-12.88-2.71a12,12,0,0,1,5.86-23.28A168.43,168.43,0,0,0,128,168a168.43,168.43,0,0,0,41.07-4.88,12,12,0,0,1,5.86,23.28c-4.21,1.06-8.51,1.95-12.88,2.71l5,13.57Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",VA,[...t[1]||(t[1]=[Jb("path",{ +d:"M235.21,185.59l-67,29.7a8.15,8.15,0,0,1-11-4.56L147,183.06a190.5,190.5,0,0,1-19,.94,190.5,190.5,0,0,1-19-.94L98.75,210.73a8.15,8.15,0,0,1-11,4.56l-67-29.7a8,8,0,0,1-4.55-9.24L45.77,60A8.08,8.08,0,0,1,52.31,54l36.06-5.92a8.1,8.1,0,0,1,9.21,6l5,19.63a192.32,192.32,0,0,1,50.88,0l5-19.63a8.1,8.1,0,0,1,9.21-6L203.69,54A8.08,8.08,0,0,1,210.23,60l29.53,116.37A8,8,0,0,1,235.21,185.59Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M104,140a12,12,0,1,1-12-12A12,12,0,0,1,104,140Zm60-12a12,12,0,1,0,12,12A12,12,0,0,0,164,128Zm74.45,64.9-67,29.71a16.17,16.17,0,0,1-21.71-9.1l-8.11-22q-6.72.45-13.63.46t-13.63-.46l-8.11,22a16.18,16.18,0,0,1-21.71,9.1l-67-29.71a15.94,15.94,0,0,1-9.06-18.51L38,58A16.08,16.08,0,0,1,51,46.13l36.06-5.92a16.21,16.21,0,0,1,18.26,11.88l3.26,12.83Q118.11,64,128,64t19.4.92l3.26-12.83a16.22,16.22,0,0,1,18.26-11.88L205,46.13A16.08,16.08,0,0,1,218,58l29.53,116.38A15.94,15.94,0,0,1,238.45,192.9ZM232,178.28,202.47,62s0,0-.08,0L166.33,56a.17.17,0,0,0-.17,0l-2.83,11.14c5,.94,10,2.06,14.83,3.42A8,8,0,0,1,176,86.31a8.09,8.09,0,0,1-2.16-.3A172.25,172.25,0,0,0,128,80a172.25,172.25,0,0,0-45.84,6,8,8,0,1,1-4.32-15.4c4.82-1.36,9.78-2.48,14.82-3.42L89.83,56a.21.21,0,0,0-.12,0h0L53.61,61.92a.24.24,0,0,0-.09,0L24,178.33,91,208a.21.21,0,0,0,.22,0L98,189.72a173.2,173.2,0,0,1-20.14-4.32A8,8,0,0,1,82.16,170,171.85,171.85,0,0,0,128,176a171.85,171.85,0,0,0,45.84-6,8,8,0,0,1,4.32,15.41A173.2,173.2,0,0,1,158,189.72L164.75,208a.22.22,0,0,0,.21,0Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",qA,[...t[2]||(t[2]=[Jb("path",{ +d:"M247.51,174.39,218,58a16.08,16.08,0,0,0-13-11.88l-36.06-5.92a16.22,16.22,0,0,0-18.26,11.88l-.21.85a4,4,0,0,0,3.27,4.93,155.62,155.62,0,0,1,24.41,5.62,8.2,8.2,0,0,1,5.62,9.7,8,8,0,0,1-10.19,5.64,155.4,155.4,0,0,0-90.8-.1,8.22,8.22,0,0,1-10.28-4.81,8,8,0,0,1,5.08-10.33,156.85,156.85,0,0,1,24.72-5.72,4,4,0,0,0,3.27-4.93l-.21-.85A16.21,16.21,0,0,0,87.08,40.21L51,46.13A16.08,16.08,0,0,0,38,58L8.49,174.39a15.94,15.94,0,0,0,9.06,18.51l67,29.71a16.17,16.17,0,0,0,21.71-9.1l3.49-9.45a4,4,0,0,0-3.27-5.35,158.13,158.13,0,0,1-28.63-6.2,8.2,8.2,0,0,1-5.61-9.67,8,8,0,0,1,10.2-5.66,155.59,155.59,0,0,0,91.12,0,8,8,0,0,1,10.19,5.65,8.19,8.19,0,0,1-5.61,9.68,157.84,157.84,0,0,1-28.62,6.2,4,4,0,0,0-3.27,5.35l3.49,9.45a16.18,16.18,0,0,0,21.71,9.1l67-29.71A15.94,15.94,0,0,0,247.51,174.39ZM92,152a12,12,0,1,1,12-12A12,12,0,0,1,92,152Zm72,0a12,12,0,1,1,12-12A12,12,0,0,1,164,152Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",WA,[...t[3]||(t[3]=[Jb("path",{ +d:"M102,140a10,10,0,1,1-10-10A10,10,0,0,1,102,140Zm62-10a10,10,0,1,0,10,10A10,10,0,0,0,164,130Zm73.64,61.08-67,29.71a14.43,14.43,0,0,1-5.77,1.21,14.13,14.13,0,0,1-13.25-9.18L143,189.43c-4.93.37-9.92.58-15,.58s-10.06-.21-15-.58l-8.63,23.39A14.13,14.13,0,0,1,91.13,222a14.43,14.43,0,0,1-5.77-1.21l-67-29.71a14,14,0,0,1-7.93-16.2L40,58.5A14.07,14.07,0,0,1,51.34,48.11L87.4,42.19a14.19,14.19,0,0,1,16,10.39l3.69,14.53a197.5,197.5,0,0,1,41.82,0l3.69-14.53a14.19,14.19,0,0,1,16-10.39l36.06,5.92A14.07,14.07,0,0,1,216,58.5l29.53,116.38A14,14,0,0,1,237.64,191.08Zm-3.7-13.25L204.41,61.45a2.08,2.08,0,0,0-1.7-1.5L166.65,54a2.13,2.13,0,0,0-2.42,1.5l-3.36,13.24a169.28,169.28,0,0,1,16.75,3.76A6,6,0,0,1,176,84.31a5.71,5.71,0,0,1-1.62-.23A174.26,174.26,0,0,0,128,78a174.26,174.26,0,0,0-46.38,6.08,6,6,0,1,1-3.24-11.55,169.28,169.28,0,0,1,16.75-3.76L91.77,55.53A2.12,2.12,0,0,0,89.35,54L53.29,60a2.08,2.08,0,0,0-1.7,1.5L22.06,177.83a2,2,0,0,0,1.16,2.28l67,29.7a2.19,2.19,0,0,0,1.76,0,2.07,2.07,0,0,0,1.14-1.17l7.58-20.55a171.46,171.46,0,0,1-22.33-4.64,6,6,0,1,1,3.24-11.55A174.26,174.26,0,0,0,128,178a174.26,174.26,0,0,0,46.38-6.08,6,6,0,1,1,3.24,11.55,171.46,171.46,0,0,1-22.33,4.64l7.58,20.55a2.07,2.07,0,0,0,1.14,1.17,2.19,2.19,0,0,0,1.76,0l67-29.7A2,2,0,0,0,233.94,177.83Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",XA,[...t[4]||(t[4]=[Jb("path",{ +d:"M104,140a12,12,0,1,1-12-12A12,12,0,0,1,104,140Zm60-12a12,12,0,1,0,12,12A12,12,0,0,0,164,128Zm74.45,64.9-67,29.71a16.17,16.17,0,0,1-21.71-9.1l-8.11-22q-6.72.45-13.63.46t-13.63-.46l-8.11,22a16.18,16.18,0,0,1-21.71,9.1l-67-29.71a15.93,15.93,0,0,1-9.06-18.51L38,58A16.07,16.07,0,0,1,51,46.14l36.06-5.93a16.22,16.22,0,0,1,18.26,11.88l3.26,12.84Q118.11,64,128,64t19.4.93l3.26-12.84a16.21,16.21,0,0,1,18.26-11.88L205,46.14A16.07,16.07,0,0,1,218,58l29.53,116.38A15.93,15.93,0,0,1,238.45,192.9ZM232,178.28,202.47,62s0,0-.08,0L166.33,56a.17.17,0,0,0-.17,0l-2.83,11.14c5,.94,10,2.06,14.83,3.42A8,8,0,0,1,176,86.31a8.09,8.09,0,0,1-2.16-.3A172.25,172.25,0,0,0,128,80a172.25,172.25,0,0,0-45.84,6,8,8,0,1,1-4.32-15.4c4.82-1.36,9.78-2.48,14.82-3.42L89.83,56s0,0-.12,0h0L53.61,61.93a.17.17,0,0,0-.09,0L24,178.33,91,208a.23.23,0,0,0,.22,0L98,189.72a173.2,173.2,0,0,1-20.14-4.32A8,8,0,0,1,82.16,170,171.85,171.85,0,0,0,128,176a171.85,171.85,0,0,0,45.84-6,8,8,0,0,1,4.32,15.41A173.2,173.2,0,0,1,158,189.72L164.75,208a.22.22,0,0,0,.21,0Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",GA,[...t[5]||(t[5]=[Jb("path",{ +d:"M100,140a8,8,0,1,1-8-8A8,8,0,0,1,100,140Zm64-8a8,8,0,1,0,8,8A8,8,0,0,0,164,132Zm72.83,57.25-67,29.71a12.36,12.36,0,0,1-5,1,12.13,12.13,0,0,1-11.38-7.88l-9.15-24.81c-5.36.45-10.81.69-16.34.69s-11-.24-16.34-.69l-9.15,24.81A12.13,12.13,0,0,1,91.13,220a12.36,12.36,0,0,1-5-1l-67-29.71a12,12,0,0,1-6.8-13.88L41.9,59a12.06,12.06,0,0,1,9.77-8.91l36.06-5.92a12.18,12.18,0,0,1,13.73,8.91l4.12,16.22a195.47,195.47,0,0,1,44.84,0l4.12-16.22a12.18,12.18,0,0,1,13.73-8.91l36.06,5.92A12.06,12.06,0,0,1,214.1,59l29.53,116.38A12,12,0,0,1,236.83,189.25Zm-1-11.91L206.35,61A4.07,4.07,0,0,0,203,58L167,52.05a4.15,4.15,0,0,0-4.69,3L158.4,70.38a166.74,166.74,0,0,1,18.68,4.08,4,4,0,1,1-2.16,7.7A176.21,176.21,0,0,0,128,76a176.21,176.21,0,0,0-46.92,6.16,4,4,0,1,1-2.16-7.7A166.74,166.74,0,0,1,97.6,70.38L93.71,55a4.15,4.15,0,0,0-4.69-3L53,58a4.07,4.07,0,0,0-3.31,3L20.12,177.34a4,4,0,0,0,2.29,4.59l67,29.71a4.16,4.16,0,0,0,3.35,0A4,4,0,0,0,95,209.35l8.45-22.88a171.49,171.49,0,0,1-24.53-4.92,4,4,0,0,1,2.16-7.71A176.21,176.21,0,0,0,128,180a176.21,176.21,0,0,0,46.92-6.16,4,4,0,0,1,2.16,7.71,171.49,171.49,0,0,1-24.53,4.92L161,209.35a4,4,0,0,0,2.23,2.32,4.16,4.16,0,0,0,3.35,0l67-29.71A4,4,0,0,0,235.88,177.34Z" +},null,-1)])])):oy("",!0)],16))}}),KA={key:0},JA={key:1},eT={key:2},tT={key:3 +},nT={key:4},rT={key:5},aT=Hg({name:"ScalarIconEnvelopeSimple",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",KA,[...t[0]||(t[0]=[Jb("path",{ +d:"M224,44H32A12,12,0,0,0,20,56V192a20,20,0,0,0,20,20H216a20,20,0,0,0,20-20V56A12,12,0,0,0,224,44ZM193.15,68,128,127.72,62.85,68ZM44,188V83.28l75.89,69.57a12,12,0,0,0,16.22,0L212,83.28V188Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",JA,[...t[1]||(t[1]=[Jb("path",{ +d:"M224,56l-96,88L32,56Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M224,48H32a8,8,0,0,0-8,8V192a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A8,8,0,0,0,224,48ZM203.43,64,128,133.15,52.57,64ZM216,192H40V74.19l82.59,75.71a8,8,0,0,0,10.82,0L216,74.19V192Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",eT,[...t[2]||(t[2]=[Jb("path",{ +d:"M224,48H32a8,8,0,0,0-8,8V192a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A8,8,0,0,0,224,48Zm-8,144H40V74.19l82.59,75.71a8,8,0,0,0,10.82,0L216,74.19V192Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",tT,[...t[3]||(t[3]=[Jb("path",{ +d:"M224,50H32a6,6,0,0,0-6,6V192a14,14,0,0,0,14,14H216a14,14,0,0,0,14-14V56A6,6,0,0,0,224,50ZM208.58,62,128,135.86,47.42,62ZM216,194H40a2,2,0,0,1-2-2V69.64l86,78.78a6,6,0,0,0,8.1,0L218,69.64V192A2,2,0,0,1,216,194Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",nT,[...t[4]||(t[4]=[Jb("path",{ +d:"M224,48H32a8,8,0,0,0-8,8V192a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A8,8,0,0,0,224,48ZM203.43,64,128,133.15,52.57,64ZM216,192H40V74.19l82.59,75.71a8,8,0,0,0,10.82,0L216,74.19V192Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",rT,[...t[5]||(t[5]=[Jb("path",{ +d:"M224,52H32a4,4,0,0,0-4,4V192a12,12,0,0,0,12,12H216a12,12,0,0,0,12-12V56A4,4,0,0,0,224,52Zm-10.28,8L128,138.57,42.28,60ZM216,196H40a4,4,0,0,1-4-4V65.09L125.3,147a4,4,0,0,0,5.4,0L220,65.09V192A4,4,0,0,1,216,196Z" +},null,-1)])])):oy("",!0)],16))}}),oT={key:0},iT={key:1},sT={key:2},lT={key:3 +},cT={key:4},uT={key:5},dT=Hg({name:"ScalarIconEye",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",oT,[...t[0]||(t[0]=[Jb("path",{ +d:"M251,123.13c-.37-.81-9.13-20.26-28.48-39.61C196.63,57.67,164,44,128,44S59.37,57.67,33.51,83.52C14.16,102.87,5.4,122.32,5,123.13a12.08,12.08,0,0,0,0,9.75c.37.82,9.13,20.26,28.49,39.61C59.37,198.34,92,212,128,212s68.63-13.66,94.48-39.51c19.36-19.35,28.12-38.79,28.49-39.61A12.08,12.08,0,0,0,251,123.13Zm-46.06,33C183.47,177.27,157.59,188,128,188s-55.47-10.73-76.91-31.88A130.36,130.36,0,0,1,29.52,128,130.45,130.45,0,0,1,51.09,99.89C72.54,78.73,98.41,68,128,68s55.46,10.73,76.91,31.89A130.36,130.36,0,0,1,226.48,128,130.45,130.45,0,0,1,204.91,156.12ZM128,84a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,84Zm0,64a20,20,0,1,1,20-20A20,20,0,0,1,128,148Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",iT,[...t[1]||(t[1]=[Jb("path",{ +d:"M128,56C48,56,16,128,16,128s32,72,112,72,112-72,112-72S208,56,128,56Zm0,112a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M247.31,124.76c-.35-.79-8.82-19.58-27.65-38.41C194.57,61.26,162.88,48,128,48S61.43,61.26,36.34,86.35C17.51,105.18,9,124,8.69,124.76a8,8,0,0,0,0,6.5c.35.79,8.82,19.57,27.65,38.4C61.43,194.74,93.12,208,128,208s66.57-13.26,91.66-38.34c18.83-18.83,27.3-37.61,27.65-38.4A8,8,0,0,0,247.31,124.76ZM128,192c-30.78,0-57.67-11.19-79.93-33.25A133.47,133.47,0,0,1,25,128,133.33,133.33,0,0,1,48.07,97.25C70.33,75.19,97.22,64,128,64s57.67,11.19,79.93,33.25A133.46,133.46,0,0,1,231.05,128C223.84,141.46,192.43,192,128,192Zm0-112a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",sT,[...t[2]||(t[2]=[Jb("path",{ +d:"M247.31,124.76c-.35-.79-8.82-19.58-27.65-38.41C194.57,61.26,162.88,48,128,48S61.43,61.26,36.34,86.35C17.51,105.18,9,124,8.69,124.76a8,8,0,0,0,0,6.5c.35.79,8.82,19.57,27.65,38.4C61.43,194.74,93.12,208,128,208s66.57-13.26,91.66-38.34c18.83-18.83,27.3-37.61,27.65-38.4A8,8,0,0,0,247.31,124.76ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",lT,[...t[3]||(t[3]=[Jb("path",{ +d:"M245.48,125.57c-.34-.78-8.66-19.23-27.24-37.81C201,70.54,171.38,50,128,50S55,70.54,37.76,87.76c-18.58,18.58-26.9,37-27.24,37.81a6,6,0,0,0,0,4.88c.34.77,8.66,19.22,27.24,37.8C55,185.47,84.62,206,128,206s73-20.53,90.24-37.75c18.58-18.58,26.9-37,27.24-37.8A6,6,0,0,0,245.48,125.57ZM128,194c-31.38,0-58.78-11.42-81.45-33.93A134.77,134.77,0,0,1,22.69,128,134.56,134.56,0,0,1,46.55,95.94C69.22,73.42,96.62,62,128,62s58.78,11.42,81.45,33.94A134.56,134.56,0,0,1,233.31,128C226.94,140.21,195,194,128,194Zm0-112a46,46,0,1,0,46,46A46.06,46.06,0,0,0,128,82Zm0,80a34,34,0,1,1,34-34A34,34,0,0,1,128,162Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",cT,[...t[4]||(t[4]=[Jb("path",{ +d:"M247.31,124.76c-.35-.79-8.82-19.58-27.65-38.41C194.57,61.26,162.88,48,128,48S61.43,61.26,36.34,86.35C17.51,105.18,9,124,8.69,124.76a8,8,0,0,0,0,6.5c.35.79,8.82,19.57,27.65,38.4C61.43,194.74,93.12,208,128,208s66.57-13.26,91.66-38.34c18.83-18.83,27.3-37.61,27.65-38.4A8,8,0,0,0,247.31,124.76ZM128,192c-30.78,0-57.67-11.19-79.93-33.25A133.47,133.47,0,0,1,25,128,133.33,133.33,0,0,1,48.07,97.25C70.33,75.19,97.22,64,128,64s57.67,11.19,79.93,33.25A133.46,133.46,0,0,1,231.05,128C223.84,141.46,192.43,192,128,192Zm0-112a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",uT,[...t[5]||(t[5]=[Jb("path",{ +d:"M243.66,126.38c-.34-.76-8.52-18.89-26.83-37.2C199.87,72.22,170.7,52,128,52S56.13,72.22,39.17,89.18c-18.31,18.31-26.49,36.44-26.83,37.2a4.08,4.08,0,0,0,0,3.25c.34.77,8.52,18.89,26.83,37.2,17,17,46.14,37.17,88.83,37.17s71.87-20.21,88.83-37.17c18.31-18.31,26.49-36.43,26.83-37.2A4.08,4.08,0,0,0,243.66,126.38Zm-32.7,35c-23.07,23-51,34.62-83,34.62s-59.89-11.65-83-34.62A135.71,135.71,0,0,1,20.44,128,135.69,135.69,0,0,1,45,94.62C68.11,71.65,96,60,128,60s59.89,11.65,83,34.62A135.79,135.79,0,0,1,235.56,128,135.71,135.71,0,0,1,211,161.38ZM128,84a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,84Zm0,80a36,36,0,1,1,36-36A36,36,0,0,1,128,164Z" +},null,-1)])])):oy("",!0)],16))}}),pT={key:0},hT={key:1},fT={key:2},mT={key:3 +},gT={key:4},vT={key:5},bT=Hg({name:"ScalarIconEyeSlash",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",pT,[...t[0]||(t[0]=[Jb("path",{ +d:"M56.88,31.93A12,12,0,1,0,39.12,48.07l16,17.65C20.67,88.66,5.72,121.58,5,123.13a12.08,12.08,0,0,0,0,9.75c.37.82,9.13,20.26,28.49,39.61C59.37,198.34,92,212,128,212a131.34,131.34,0,0,0,51-10l20.09,22.1a12,12,0,0,0,17.76-16.14ZM128,188c-29.59,0-55.47-10.73-76.91-31.88A130.69,130.69,0,0,1,29.52,128c5.27-9.31,18.79-29.9,42-44.29l90.09,99.11A109.33,109.33,0,0,1,128,188Zm123-55.12c-.36.81-9,20-28,39.16a12,12,0,1,1-17-16.9A130.48,130.48,0,0,0,226.48,128a130.36,130.36,0,0,0-21.57-28.12C183.46,78.73,157.59,68,128,68c-3.35,0-6.7.14-10,.42a12,12,0,1,1-2-23.91c3.93-.34,8-.51,12-.51,36,0,68.63,13.67,94.49,39.52,19.35,19.35,28.11,38.8,28.48,39.61A12.08,12.08,0,0,1,251,132.88Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",hT,[...t[1]||(t[1]=[Jb("path",{ +d:"M128,56C48,56,16,128,16,128s32,72,112,72,112-72,112-72S208,56,128,56Zm0,112a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L61.32,66.55C25,88.84,9.38,123.2,8.69,124.76a8,8,0,0,0,0,6.5c.35.79,8.82,19.57,27.65,38.4C61.43,194.74,93.12,208,128,208a127.11,127.11,0,0,0,52.07-10.83l22,24.21a8,8,0,1,0,11.84-10.76Zm47.33,75.84,41.67,45.85a32,32,0,0,1-41.67-45.85ZM128,192c-30.78,0-57.67-11.19-79.93-33.25A133.16,133.16,0,0,1,25,128c4.69-8.79,19.66-33.39,47.35-49.38l18,19.75a48,48,0,0,0,63.66,70l14.73,16.2A112,112,0,0,1,128,192Zm6-95.43a8,8,0,0,1,3-15.72,48.16,48.16,0,0,1,38.77,42.64,8,8,0,0,1-7.22,8.71,6.39,6.39,0,0,1-.75,0,8,8,0,0,1-8-7.26A32.09,32.09,0,0,0,134,96.57Zm113.28,34.69c-.42.94-10.55,23.37-33.36,43.8a8,8,0,1,1-10.67-11.92A132.77,132.77,0,0,0,231.05,128a133.15,133.15,0,0,0-23.12-30.77C185.67,75.19,158.78,64,128,64a118.37,118.37,0,0,0-19.36,1.57A8,8,0,1,1,106,49.79,134,134,0,0,1,128,48c34.88,0,66.57,13.26,91.66,38.35,18.83,18.83,27.3,37.62,27.65,38.41A8,8,0,0,1,247.31,131.26Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",fT,[...t[2]||(t[2]=[Jb("path",{ +d:"M96.68,57.87a4,4,0,0,1,2.08-6.6A130.13,130.13,0,0,1,128,48c34.88,0,66.57,13.26,91.66,38.35,18.83,18.83,27.3,37.62,27.65,38.41a8,8,0,0,1,0,6.5c-.35.79-8.82,19.57-27.65,38.4q-4.28,4.26-8.79,8.07a4,4,0,0,1-5.55-.36ZM213.92,210.62a8,8,0,1,1-11.84,10.76L180,197.13A127.21,127.21,0,0,1,128,208c-34.88,0-66.57-13.26-91.66-38.34C17.51,150.83,9,132.05,8.69,131.26a8,8,0,0,1,0-6.5C9,124,17.51,105.18,36.34,86.35a135,135,0,0,1,25-19.78L42.08,45.38A8,8,0,1,1,53.92,34.62Zm-65.49-48.25-52.69-58a40,40,0,0,0,52.69,58Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",mT,[...t[3]||(t[3]=[Jb("path",{ +d:"M52.44,36A6,6,0,0,0,43.56,44L64.44,67c-37.28,21.9-53.23,57-53.92,58.57a6,6,0,0,0,0,4.88c.34.77,8.66,19.22,27.24,37.8C55,185.47,84.62,206,128,206a124.91,124.91,0,0,0,52.57-11.25l23,25.29a6,6,0,0,0,8.88-8.08Zm48.62,71.32,45,49.52a34,34,0,0,1-45-49.52ZM128,194c-31.38,0-58.78-11.42-81.45-33.93A134.57,134.57,0,0,1,22.69,128c4.29-8.2,20.1-35.18,50-51.91L92.89,98.3a46,46,0,0,0,61.35,67.48l17.81,19.6A113.47,113.47,0,0,1,128,194Zm6.4-99.4a6,6,0,0,1,2.25-11.79,46.17,46.17,0,0,1,37.15,40.87,6,6,0,0,1-5.42,6.53l-.56,0a6,6,0,0,1-6-5.45A34.1,34.1,0,0,0,134.4,94.6Zm111.08,35.85c-.41.92-10.37,23-32.86,43.12a6,6,0,1,1-8-8.94A134.07,134.07,0,0,0,233.31,128a134.67,134.67,0,0,0-23.86-32.07C186.78,73.42,159.38,62,128,62a120.19,120.19,0,0,0-19.69,1.6,6,6,0,1,1-2-11.83A131.12,131.12,0,0,1,128,50c43.38,0,73,20.54,90.24,37.76,18.58,18.58,26.9,37,27.24,37.81A6,6,0,0,1,245.48,130.45Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",gT,[...t[4]||(t[4]=[Jb("path",{ +d:"M53.92,34.62A8,8,0,1,0,42.08,45.38L61.32,66.55C25,88.84,9.38,123.2,8.69,124.76a8,8,0,0,0,0,6.5c.35.79,8.82,19.57,27.65,38.4C61.43,194.74,93.12,208,128,208a127.11,127.11,0,0,0,52.07-10.83l22,24.21a8,8,0,1,0,11.84-10.76Zm47.33,75.84,41.67,45.85a32,32,0,0,1-41.67-45.85ZM128,192c-30.78,0-57.67-11.19-79.93-33.25A133.16,133.16,0,0,1,25,128c4.69-8.79,19.66-33.39,47.35-49.38l18,19.75a48,48,0,0,0,63.66,70l14.73,16.2A112,112,0,0,1,128,192Zm6-95.43a8,8,0,0,1,3-15.72,48.16,48.16,0,0,1,38.77,42.64,8,8,0,0,1-7.22,8.71,6.39,6.39,0,0,1-.75,0,8,8,0,0,1-8-7.26A32.09,32.09,0,0,0,134,96.57Zm113.28,34.69c-.42.94-10.55,23.37-33.36,43.8a8,8,0,1,1-10.67-11.92A132.77,132.77,0,0,0,231.05,128a133.15,133.15,0,0,0-23.12-30.77C185.67,75.19,158.78,64,128,64a118.37,118.37,0,0,0-19.36,1.57A8,8,0,1,1,106,49.79,134,134,0,0,1,128,48c34.88,0,66.57,13.26,91.66,38.35,18.83,18.83,27.3,37.62,27.65,38.41A8,8,0,0,1,247.31,131.26Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",vT,[...t[5]||(t[5]=[Jb("path",{ +d:"M51,37.31A4,4,0,0,0,45,42.69L67.59,67.5C29.34,89,13,124.81,12.34,126.38a4.08,4.08,0,0,0,0,3.25c.34.77,8.52,18.89,26.83,37.2,17,17,46.14,37.17,88.83,37.17a122.59,122.59,0,0,0,53.06-11.69l24,26.38a4,4,0,1,0,5.92-5.38ZM149.1,157.16A36,36,0,0,1,101,104.22ZM128,196c-32,0-59.89-11.65-83-34.62A135.81,135.81,0,0,1,20.44,128c3.65-7.23,20.09-36.81,52.68-54.43l22.45,24.7a44,44,0,0,0,59,64.83l20.89,23A114.94,114.94,0,0,1,128,196Zm6.78-103.36a4,4,0,0,1,1.49-7.86,44.15,44.15,0,0,1,35.54,39.09,4,4,0,0,1-3.61,4.35l-.38,0a4,4,0,0,1-4-3.63A36.1,36.1,0,0,0,134.78,92.64Zm108.88,37c-.41.91-10.2,22.58-32.38,42.45a4,4,0,0,1-2.67,1,4,4,0,0,1-2.67-7A136.71,136.71,0,0,0,235.56,128,136.07,136.07,0,0,0,211,94.62C187.89,71.65,160,60,128,60a122,122,0,0,0-20,1.63,4,4,0,0,1-1.32-7.89A129.3,129.3,0,0,1,128,52c42.7,0,71.87,20.22,88.83,37.18,18.31,18.31,26.49,36.44,26.83,37.2A4.08,4.08,0,0,1,243.66,129.63Z" +},null,-1)])])):oy("",!0)],16))}}),yT={key:0},OT={key:1},wT={key:2},xT={key:3 +},kT={key:4},ST={key:5},_T=Hg({name:"ScalarIconFileDashed",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",yT,[...t[0]||(t[0]=[Jb("path",{ +d:"M84,224a12,12,0,0,1-12,12H56a20,20,0,0,1-20-20V184a12,12,0,0,1,24,0v28H72A12,12,0,0,1,84,224ZM220,88v48a12,12,0,0,1-24,0V104H148a12,12,0,0,1-12-12V44H120a12,12,0,0,1,0-24h32a12,12,0,0,1,8.49,3.51l56,56A12,12,0,0,1,220,88Zm-60-8h23L160,57ZM80,20H56A20,20,0,0,0,36,40V64a12,12,0,0,0,24,0V44H80a12,12,0,0,0,0-24ZM208,164a12,12,0,0,0-12,12v36h-4a12,12,0,0,0,0,24h8a20,20,0,0,0,20-20V176A12,12,0,0,0,208,164ZM48,156a12,12,0,0,0,12-12V104a12,12,0,0,0-24,0v40A12,12,0,0,0,48,156Zm104,56H112a12,12,0,0,0,0,24h40a12,12,0,0,0,0-24Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",OT,[...t[1]||(t[1]=[Jb("path",{ +d:"M208,88H152V32Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M80,224a8,8,0,0,1-8,8H56a16,16,0,0,1-16-16V184a8,8,0,0,1,16,0v32H72A8,8,0,0,1,80,224ZM216,88v48a8,8,0,0,1-16,0V96H152a8,8,0,0,1-8-8V40H120a8,8,0,0,1,0-16h32a8,8,0,0,1,5.66,2.34l56,56A8,8,0,0,1,216,88Zm-56-8h28.69L160,51.31ZM80,24H56A16,16,0,0,0,40,40V64a8,8,0,0,0,16,0V40H80a8,8,0,0,0,0-16ZM208,168a8,8,0,0,0-8,8v40h-8a8,8,0,0,0,0,16h8a16,16,0,0,0,16-16V176A8,8,0,0,0,208,168ZM48,152a8,8,0,0,0,8-8V104a8,8,0,0,0-16,0v40A8,8,0,0,0,48,152Zm104,64H112a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",wT,[...t[2]||(t[2]=[Jb("path",{ +d:"M80,224a8,8,0,0,1-8,8H56a16,16,0,0,1-16-16V184a8,8,0,0,1,16,0v32H72A8,8,0,0,1,80,224ZM213.66,82.34l-56-56A8,8,0,0,0,152,24H120a8,8,0,0,0,0,16h24V88a8,8,0,0,0,8,8h48v40a8,8,0,0,0,16,0V88A8,8,0,0,0,213.66,82.34ZM80,24H56A16,16,0,0,0,40,40V64a8,8,0,0,0,16,0V40H80a8,8,0,0,0,0-16ZM208,168a8,8,0,0,0-8,8v40h-8a8,8,0,0,0,0,16h8a16,16,0,0,0,16-16V176A8,8,0,0,0,208,168ZM48,152a8,8,0,0,0,8-8V104a8,8,0,0,0-16,0v40A8,8,0,0,0,48,152Zm104,64H112a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",xT,[...t[3]||(t[3]=[Jb("path",{ +d:"M78,224a6,6,0,0,1-6,6H56a14,14,0,0,1-14-14V184a6,6,0,0,1,12,0v32a2,2,0,0,0,2,2H72A6,6,0,0,1,78,224ZM214,88v48a6,6,0,0,1-12,0V94H152a6,6,0,0,1-6-6V38H120a6,6,0,0,1,0-12h32a6,6,0,0,1,4.24,1.76l56,56A6,6,0,0,1,214,88Zm-56-6h35.51L158,46.49ZM80,26H56A14,14,0,0,0,42,40V64a6,6,0,0,0,12,0V40a2,2,0,0,1,2-2H80a6,6,0,0,0,0-12ZM208,170a6,6,0,0,0-6,6v40a2,2,0,0,1-2,2h-8a6,6,0,0,0,0,12h8a14,14,0,0,0,14-14V176A6,6,0,0,0,208,170ZM48,150a6,6,0,0,0,6-6V104a6,6,0,0,0-12,0v40A6,6,0,0,0,48,150Zm104,68H112a6,6,0,0,0,0,12h40a6,6,0,0,0,0-12Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",kT,[...t[4]||(t[4]=[Jb("path",{ +d:"M80,224a8,8,0,0,1-8,8H56a16,16,0,0,1-16-16V184a8,8,0,0,1,16,0v32H72A8,8,0,0,1,80,224ZM216,88v48a8,8,0,0,1-16,0V96H152a8,8,0,0,1-8-8V40H120a8,8,0,0,1,0-16h32a8,8,0,0,1,5.66,2.34l56,56A8,8,0,0,1,216,88Zm-56-8h28.69L160,51.31ZM80,24H56A16,16,0,0,0,40,40V64a8,8,0,0,0,16,0V40H80a8,8,0,0,0,0-16ZM208,168a8,8,0,0,0-8,8v40h-8a8,8,0,0,0,0,16h8a16,16,0,0,0,16-16V176A8,8,0,0,0,208,168ZM48,152a8,8,0,0,0,8-8V104a8,8,0,0,0-16,0v40A8,8,0,0,0,48,152Zm104,64H112a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",ST,[...t[5]||(t[5]=[Jb("path",{ +d:"M76,224a4,4,0,0,1-4,4H56a12,12,0,0,1-12-12V184a4,4,0,0,1,8,0v32a4,4,0,0,0,4,4H72A4,4,0,0,1,76,224ZM212,88v48a4,4,0,0,1-8,0V92H152a4,4,0,0,1-4-4V36H120a4,4,0,0,1,0-8h32a4,4,0,0,1,2.83,1.17l56,56A4,4,0,0,1,212,88Zm-56-4h42.34L156,41.66ZM80,28H56A12,12,0,0,0,44,40V64a4,4,0,0,0,8,0V40a4,4,0,0,1,4-4H80a4,4,0,0,0,0-8ZM208,172a4,4,0,0,0-4,4v40a4,4,0,0,1-4,4h-8a4,4,0,0,0,0,8h8a12,12,0,0,0,12-12V176A4,4,0,0,0,208,172ZM48,148a4,4,0,0,0,4-4V104a4,4,0,0,0-8,0v40A4,4,0,0,0,48,148Zm104,72H112a4,4,0,0,0,0,8h40a4,4,0,0,0,0-8Z" +},null,-1)])])):oy("",!0)],16))}}),AT={key:0},TT={key:1},ET={key:2},CT={key:3 +},$T={key:4},PT={key:5},IT=Hg({name:"ScalarIconFileMd",props:{label:{},weight:{} +},setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",AT,[...t[0]||(t[0]=[Jb("path",{ +d:"M100,152v56a12,12,0,0,1-24,0V190.07l-6.17,8.81a12,12,0,0,1-19.66,0L44,190.07V208a12,12,0,0,1-24,0V152a12,12,0,0,1,21.83-6.88L60,171.07l18.17-25.95A12,12,0,0,1,100,152Zm84,28a40,40,0,0,1-40,40H128a12,12,0,0,1-12-12V152a12,12,0,0,1,12-12h16A40,40,0,0,1,184,180Zm-24,0a16,16,0,0,0-16-16h-4v32h4A16,16,0,0,0,160,180Zm60-92V224a12,12,0,0,1-24,0V104H148a12,12,0,0,1-12-12V44H60v64a12,12,0,0,1-24,0V40A20,20,0,0,1,56,20h96a12,12,0,0,1,8.49,3.52l56,56A12,12,0,0,1,220,88Zm-60-8h23L160,57Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",TT,[...t[1]||(t[1]=[Jb("path",{ +d:"M208,88H152V32Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40v72a8,8,0,0,0,16,0V40h88V88a8,8,0,0,0,8,8h48V224a8,8,0,0,0,16,0V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM144,144H128a8,8,0,0,0-8,8v56a8,8,0,0,0,8,8h16a36,36,0,0,0,0-72Zm0,56h-8V160h8a20,20,0,0,1,0,40Zm-40-48v56a8,8,0,0,1-16,0V177.38L74.55,196.59a8,8,0,0,1-13.1,0L48,177.38V208a8,8,0,0,1-16,0V152a8,8,0,0,1,14.55-4.59L68,178.05l21.45-30.64A8,8,0,0,1,104,152Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",ET,[...t[2]||(t[2]=[Jb("path",{ +d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40v76a4,4,0,0,0,4,4H196a4,4,0,0,1,4,4V224a8,8,0,0,0,9.19,7.91,8.15,8.15,0,0,0,6.81-8.16V88A8,8,0,0,0,213.66,82.34ZM152,88V44l44,44Zm-8,56H128a8,8,0,0,0-8,8v56a8,8,0,0,0,8,8h15.32c19.66,0,36.21-15.48,36.67-35.13A36,36,0,0,0,144,144Zm-.49,56H136V160h8a20,20,0,0,1,20,20.77C163.58,191.59,154.34,200,143.51,200ZM104,152v55.73A8.17,8.17,0,0,1,96.53,216,8,8,0,0,1,88,208V177.38l-13.32,19a8.3,8.3,0,0,1-4.2,3.2,8,8,0,0,1-9-3L48,177.38v30.35A8.17,8.17,0,0,1,40.53,216,8,8,0,0,1,32,208V152.31a8.27,8.27,0,0,1,4.56-7.53,8,8,0,0,1,10,2.63L68,178.05l21.27-30.39a8.28,8.28,0,0,1,8.06-3.55A8,8,0,0,1,104,152Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",CT,[...t[3]||(t[3]=[Jb("path",{ +d:"M212.24,83.76l-56-56A6,6,0,0,0,152,26H56A14,14,0,0,0,42,40v72a6,6,0,0,0,12,0V40a2,2,0,0,1,2-2h90V88a6,6,0,0,0,6,6h50V224a6,6,0,0,0,12,0V88A6,6,0,0,0,212.24,83.76ZM158,46.48,193.52,82H158ZM144,146H128a6,6,0,0,0-6,6v56a6,6,0,0,0,6,6h16a34,34,0,0,0,0-68Zm0,56H134V158h10a22,22,0,0,1,0,44Zm-42-50v56a6,6,0,0,1-12,0V171L72.92,195.44a6,6,0,0,1-9.84,0L46,171v37a6,6,0,0,1-12,0V152a6,6,0,0,1,10.92-3.44l23.08,33,23.08-33A6,6,0,0,1,102,152Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",$T,[...t[4]||(t[4]=[Jb("path",{ +d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40v72a8,8,0,0,0,16,0V40h88V88a8,8,0,0,0,8,8h48V224a8,8,0,0,0,16,0V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM144,144H128a8,8,0,0,0-8,8v56a8,8,0,0,0,8,8h16a36,36,0,0,0,0-72Zm0,56h-8V160h8a20,20,0,0,1,0,40Zm-40-48v56a8,8,0,0,1-16,0V177.38L74.55,196.59a8,8,0,0,1-13.1,0L48,177.38V208a8,8,0,0,1-16,0V152a8,8,0,0,1,14.55-4.59L68,178.05l21.45-30.64A8,8,0,0,1,104,152Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",PT,[...t[5]||(t[5]=[Jb("path",{ +d:"M210.83,85.17l-56-56A4,4,0,0,0,152,28H56A12,12,0,0,0,44,40v72a4,4,0,0,0,8,0V40a4,4,0,0,1,4-4h92V88a4,4,0,0,0,4,4h52V224a4,4,0,0,0,8,0V88A4,4,0,0,0,210.83,85.17ZM156,41.65,198.34,84H156ZM144,148H128a4,4,0,0,0-4,4v56a4,4,0,0,0,4,4h16a32,32,0,0,0,0-64Zm0,56H132V156h12a24,24,0,0,1,0,48Zm-44-52v56a4,4,0,0,1-8,0V164.69l-20.72,29.6a4,4,0,0,1-6.56,0L44,164.69V208a4,4,0,0,1-8,0V152a4,4,0,0,1,7.28-2.29L68,185l24.72-35.31A4,4,0,0,1,100,152Z" +},null,-1)])])):oy("",!0)],16))}}),DT={key:0},MT={key:1},NT={key:2},RT={key:3 +},LT={key:4},BT={key:5},jT=Hg({name:"ScalarIconFileText",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",DT,[...t[0]||(t[0]=[Jb("path",{ +d:"M216.49,79.52l-56-56A12,12,0,0,0,152,20H56A20,20,0,0,0,36,40V216a20,20,0,0,0,20,20H200a20,20,0,0,0,20-20V88A12,12,0,0,0,216.49,79.52ZM160,57l23,23H160ZM60,212V44h76V92a12,12,0,0,0,12,12h48V212Zm112-80a12,12,0,0,1-12,12H96a12,12,0,0,1,0-24h64A12,12,0,0,1,172,132Zm0,40a12,12,0,0,1-12,12H96a12,12,0,0,1,0-24h64A12,12,0,0,1,172,172Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",MT,[...t[1]||(t[1]=[Jb("path",{ +d:"M208,88H152V32Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Zm-32-80a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,136Zm0,32a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,168Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",NT,[...t[2]||(t[2]=[Jb("path",{ +d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,176H96a8,8,0,0,1,0-16h64a8,8,0,0,1,0,16Zm0-32H96a8,8,0,0,1,0-16h64a8,8,0,0,1,0,16Zm-8-56V44l44,44Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",RT,[...t[3]||(t[3]=[Jb("path",{ +d:"M212.24,83.76l-56-56A6,6,0,0,0,152,26H56A14,14,0,0,0,42,40V216a14,14,0,0,0,14,14H200a14,14,0,0,0,14-14V88A6,6,0,0,0,212.24,83.76ZM158,46.48,193.52,82H158ZM200,218H56a2,2,0,0,1-2-2V40a2,2,0,0,1,2-2h90V88a6,6,0,0,0,6,6h50V216A2,2,0,0,1,200,218Zm-34-82a6,6,0,0,1-6,6H96a6,6,0,0,1,0-12h64A6,6,0,0,1,166,136Zm0,32a6,6,0,0,1-6,6H96a6,6,0,0,1,0-12h64A6,6,0,0,1,166,168Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",LT,[...t[4]||(t[4]=[Jb("path",{ +d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Zm-32-80a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,136Zm0,32a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,168Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",BT,[...t[5]||(t[5]=[Jb("path",{ +d:"M210.83,85.17l-56-56A4,4,0,0,0,152,28H56A12,12,0,0,0,44,40V216a12,12,0,0,0,12,12H200a12,12,0,0,0,12-12V88A4,4,0,0,0,210.83,85.17ZM156,41.65,198.34,84H156ZM200,220H56a4,4,0,0,1-4-4V40a4,4,0,0,1,4-4h92V88a4,4,0,0,0,4,4h52V216A4,4,0,0,1,200,220Zm-36-84a4,4,0,0,1-4,4H96a4,4,0,0,1,0-8h64A4,4,0,0,1,164,136Zm0,32a4,4,0,0,1-4,4H96a4,4,0,0,1,0-8h64A4,4,0,0,1,164,168Z" +},null,-1)])])):oy("",!0)],16))}}),UT={key:0},zT={key:1},ZT={key:2},FT={key:3 +},HT={key:4},QT={key:5},VT=Hg({name:"ScalarIconGavel",props:{label:{},weight:{} +},setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",UT,[...t[0]||(t[0]=[Jb("path",{ +d:"M246.14,113.86l-16-16a20,20,0,0,0-23.06-3.75l-45.2-45.2a20,20,0,0,0-3.74-23.06l-16-16a20,20,0,0,0-28.28,0l-64,64a20,20,0,0,0,0,28.28l16,16a20,20,0,0,0,23,3.79L29.36,181.38a32,32,0,0,0,45.26,45.26L134,167.21a20,20,0,0,0,3.81,22.94l16,16a20,20,0,0,0,28.29,0l64-64a20,20,0,0,0,0-28.29ZM80,98.34,69.64,88,128,29.65,138.34,40ZM57.64,209.67a8,8,0,0,1-11.31-11.32l59.52-59.52,11.31,11.32Zm92.7-60.29-43.72-43.72,39-39,43.72,43.72Zm17.65,37L157.65,176,216,117.66,226.34,128Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",zT,[...t[1]||(t[1]=[Jb("path",{ +d:"M149.66,45.66l-64,64a8,8,0,0,1-11.32,0l-16-16a8,8,0,0,1,0-11.32l64-64a8,8,0,0,1,11.32,0l16,16A8,8,0,0,1,149.66,45.66Zm88,76.68-16-16a8,8,0,0,0-11.32,0l-64,64a8,8,0,0,0,0,11.32l16,16a8,8,0,0,0,11.32,0l64-64A8,8,0,0,0,237.66,122.34Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M243.32,116.69l-16-16a16,16,0,0,0-20.84-1.53L156.84,49.52a16,16,0,0,0-1.52-20.84l-16-16a16,16,0,0,0-22.63,0l-64,64a16,16,0,0,0,0,22.63l16,16a16,16,0,0,0,20.83,1.52L96.69,124,31.31,189.38A25,25,0,0,0,66.63,224.7L132,159.32l7.17,7.16a16,16,0,0,0,1.52,20.84l16,16a16,16,0,0,0,22.63,0l64-64A16,16,0,0,0,243.32,116.69ZM80,104,64,88l64-64,16,16ZM55.32,213.38a9,9,0,0,1-12.69,0,9,9,0,0,1,0-12.68L108,135.32,120.69,148ZM101,105.66,145.66,61,195,110.34,150.35,155ZM168,192l-16-16,4-4h0l56-56h0l4-4,16,16Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",ZT,[...t[2]||(t[2]=[Jb("path",{ +d:"M52.69,99.31a16,16,0,0,1,0-22.63l64-64a16,16,0,0,1,22.63,22.63l-64,64a16,16,0,0,1-22.63,0Zm190.63,17.37a16,16,0,0,0-22.63,0l-64,64a16,16,0,0,0,0,22.63h0a16,16,0,0,0,22.63,0l64-64A16,16,0,0,0,243.32,116.68Zm-35.11-15.8L155.12,47.79a4,4,0,0,0-5.66,0L87.8,109.45a4,4,0,0,0,0,5.66L103,130.34,28.69,204.69a16,16,0,0,0,22.62,22.62L125.66,153l15.23,15.23a4,4,0,0,0,5.66,0l61.66-61.66A4,4,0,0,0,208.21,100.88Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",FT,[...t[3]||(t[3]=[Jb("path",{ +d:"M241.91,118.1l-16-16a14,14,0,0,0-19.55-.23L154.13,49.64a14,14,0,0,0-.23-19.55l-16-16a14,14,0,0,0-19.8,0l-64,64a14,14,0,0,0,0,19.8l16,16a14,14,0,0,0,19.55.23L99.52,124,32.73,190.79a23,23,0,0,0,32.48,32.49L132,156.49l9.87,9.87a14,14,0,0,0,.23,19.55l16,16a14,14,0,0,0,19.8,0l64-64A14,14,0,0,0,241.91,118.1Zm-91.56,39.76-52.21-52.2,47.52-47.52,52.2,52.2ZM78.59,105.41l-16-16a2,2,0,0,1,0-2.83l64-64a2,2,0,0,1,2.83,0l16,16a2,2,0,0,1,0,2.83l-64,64A2,2,0,0,1,78.59,105.41ZM56.73,214.8a11,11,0,0,1-15.52-15.52L108,132.49,123.52,148Zm176.69-85.38-64,64a2,2,0,0,1-2.83,0l-16-16a2,2,0,0,1,0-2.83l64-64a2,2,0,0,1,2.83,0l16,16A2,2,0,0,1,233.42,129.42Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",HT,[...t[4]||(t[4]=[Jb("path",{ +d:"M243.32,116.69l-16-16a16,16,0,0,0-20.84-1.53L156.84,49.52a16,16,0,0,0-1.52-20.84l-16-16a16,16,0,0,0-22.63,0l-64,64a16,16,0,0,0,0,22.63l16,16a16,16,0,0,0,20.83,1.52L96.69,124,31.31,189.38A25,25,0,0,0,66.63,224.7L132,159.32l7.17,7.16a16,16,0,0,0,1.52,20.84l16,16a16,16,0,0,0,22.63,0l64-64A16,16,0,0,0,243.32,116.69ZM80,104,64,88l64-64,16,16ZM55.32,213.38a9,9,0,0,1-12.69,0,9,9,0,0,1,0-12.68L108,135.32,120.69,148ZM101,105.66,145.66,61,195,110.34,150.35,155ZM168,192l-16-16,4-4h0l56-56h0l4-4,16,16Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",QT,[...t[5]||(t[5]=[Jb("path",{ +d:"M240.49,119.52l-16-16a12,12,0,0,0-17,0l-1.17,1.17-55-55,1.18-1.17a12,12,0,0,0,0-17l-16-16a12,12,0,0,0-17,0l-64,64a12,12,0,0,0,0,17l16,16a12,12,0,0,0,17,0l1.17-1.18L102.34,124l-68.2,68.21A21,21,0,0,0,63.8,221.87L132,153.66l12.69,12.69-1.18,1.17a12,12,0,0,0,0,17l16,16a12,12,0,0,0,17,0l64-64a12,12,0,0,0,0-17ZM77.17,106.83l-16-16a4,4,0,0,1,0-5.66l64-64a4,4,0,0,1,5.66,0l16,16a4,4,0,0,1,0,5.65l-64,64A4,4,0,0,1,77.17,106.83Zm-19,109.38A13,13,0,1,1,39.8,197.87L108,129.66,126.34,148ZM95.31,105.66l50.35-50.35,55,55-50.35,50.35Zm139.52,25.17-64,64a4,4,0,0,1-5.66,0l-16-16a4,4,0,0,1,0-5.65l64-64a4,4,0,0,1,5.66,0l16,16a4,4,0,0,1,0,5.66Z" +},null,-1)])])):oy("",!0)],16))}}),qT={key:0},WT={key:1},XT={key:2},GT={key:3 +},YT={key:4},KT={key:5},JT=Hg({name:"ScalarIconGear",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",qT,[...t[0]||(t[0]=[Jb("path",{ +d:"M128,76a52,52,0,1,0,52,52A52.06,52.06,0,0,0,128,76Zm0,80a28,28,0,1,1,28-28A28,28,0,0,1,128,156Zm92-27.21v-1.58l14-17.51a12,12,0,0,0,2.23-10.59A111.75,111.75,0,0,0,225,71.89,12,12,0,0,0,215.89,66L193.61,63.5l-1.11-1.11L190,40.1A12,12,0,0,0,184.11,31a111.67,111.67,0,0,0-27.23-11.27A12,12,0,0,0,146.3,22L128.79,36h-1.58L109.7,22a12,12,0,0,0-10.59-2.23A111.75,111.75,0,0,0,71.89,31.05,12,12,0,0,0,66,40.11L63.5,62.39,62.39,63.5,40.1,66A12,12,0,0,0,31,71.89,111.67,111.67,0,0,0,19.77,99.12,12,12,0,0,0,22,109.7l14,17.51v1.58L22,146.3a12,12,0,0,0-2.23,10.59,111.75,111.75,0,0,0,11.29,27.22A12,12,0,0,0,40.11,190l22.28,2.48,1.11,1.11L66,215.9A12,12,0,0,0,71.89,225a111.67,111.67,0,0,0,27.23,11.27A12,12,0,0,0,109.7,234l17.51-14h1.58l17.51,14a12,12,0,0,0,10.59,2.23A111.75,111.75,0,0,0,184.11,225a12,12,0,0,0,5.91-9.06l2.48-22.28,1.11-1.11L215.9,190a12,12,0,0,0,9.06-5.91,111.67,111.67,0,0,0,11.27-27.23A12,12,0,0,0,234,146.3Zm-24.12-4.89a70.1,70.1,0,0,1,0,8.2,12,12,0,0,0,2.61,8.22l12.84,16.05A86.47,86.47,0,0,1,207,166.86l-20.43,2.27a12,12,0,0,0-7.65,4,69,69,0,0,1-5.8,5.8,12,12,0,0,0-4,7.65L166.86,207a86.47,86.47,0,0,1-10.49,4.35l-16.05-12.85a12,12,0,0,0-7.5-2.62c-.24,0-.48,0-.72,0a70.1,70.1,0,0,1-8.2,0,12.06,12.06,0,0,0-8.22,2.6L99.63,211.33A86.47,86.47,0,0,1,89.14,207l-2.27-20.43a12,12,0,0,0-4-7.65,69,69,0,0,1-5.8-5.8,12,12,0,0,0-7.65-4L49,166.86a86.47,86.47,0,0,1-4.35-10.49l12.84-16.05a12,12,0,0,0,2.61-8.22,70.1,70.1,0,0,1,0-8.2,12,12,0,0,0-2.61-8.22L44.67,99.63A86.47,86.47,0,0,1,49,89.14l20.43-2.27a12,12,0,0,0,7.65-4,69,69,0,0,1,5.8-5.8,12,12,0,0,0,4-7.65L89.14,49a86.47,86.47,0,0,1,10.49-4.35l16.05,12.85a12.06,12.06,0,0,0,8.22,2.6,70.1,70.1,0,0,1,8.2,0,12,12,0,0,0,8.22-2.6l16.05-12.85A86.47,86.47,0,0,1,166.86,49l2.27,20.43a12,12,0,0,0,4,7.65,69,69,0,0,1,5.8,5.8,12,12,0,0,0,7.65,4L207,89.14a86.47,86.47,0,0,1,4.35,10.49l-12.84,16.05A12,12,0,0,0,195.88,123.9Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",WT,[...t[1]||(t[1]=[Jb("path",{ +d:"M207.86,123.18l16.78-21a99.14,99.14,0,0,0-10.07-24.29l-26.7-3a81,81,0,0,0-6.81-6.81l-3-26.71a99.43,99.43,0,0,0-24.3-10l-21,16.77a81.59,81.59,0,0,0-9.64,0l-21-16.78A99.14,99.14,0,0,0,77.91,41.43l-3,26.7a81,81,0,0,0-6.81,6.81l-26.71,3a99.43,99.43,0,0,0-10,24.3l16.77,21a81.59,81.59,0,0,0,0,9.64l-16.78,21a99.14,99.14,0,0,0,10.07,24.29l26.7,3a81,81,0,0,0,6.81,6.81l3,26.71a99.43,99.43,0,0,0,24.3,10l21-16.77a81.59,81.59,0,0,0,9.64,0l21,16.78a99.14,99.14,0,0,0,24.29-10.07l3-26.7a81,81,0,0,0,6.81-6.81l26.71-3a99.43,99.43,0,0,0,10-24.3l-16.77-21A81.59,81.59,0,0,0,207.86,123.18ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8.06,8.06,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8.06,8.06,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",XT,[...t[2]||(t[2]=[Jb("path",{ +d:"M216,130.16q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",GT,[...t[3]||(t[3]=[Jb("path",{ +d:"M128,82a46,46,0,1,0,46,46A46.06,46.06,0,0,0,128,82Zm0,80a34,34,0,1,1,34-34A34,34,0,0,1,128,162ZM214,130.84c.06-1.89.06-3.79,0-5.68L229.33,106a6,6,0,0,0,1.11-5.29A105.34,105.34,0,0,0,219.76,74.9a6,6,0,0,0-4.53-3l-24.45-2.71q-1.93-2.07-4-4l-2.72-24.46a6,6,0,0,0-3-4.53,105.65,105.65,0,0,0-25.77-10.66A6,6,0,0,0,150,26.68l-19.2,15.37c-1.89-.06-3.79-.06-5.68,0L106,26.67a6,6,0,0,0-5.29-1.11A105.34,105.34,0,0,0,74.9,36.24a6,6,0,0,0-3,4.53L69.23,65.22q-2.07,1.94-4,4L40.76,72a6,6,0,0,0-4.53,3,105.65,105.65,0,0,0-10.66,25.77A6,6,0,0,0,26.68,106l15.37,19.2c-.06,1.89-.06,3.79,0,5.68L26.67,150.05a6,6,0,0,0-1.11,5.29A105.34,105.34,0,0,0,36.24,181.1a6,6,0,0,0,4.53,3l24.45,2.71q1.94,2.07,4,4L72,215.24a6,6,0,0,0,3,4.53,105.65,105.65,0,0,0,25.77,10.66,6,6,0,0,0,5.29-1.11L125.16,214c1.89.06,3.79.06,5.68,0l19.21,15.38a6,6,0,0,0,3.75,1.31,6.2,6.2,0,0,0,1.54-.2,105.34,105.34,0,0,0,25.76-10.68,6,6,0,0,0,3-4.53l2.71-24.45q2.07-1.93,4-4l24.46-2.72a6,6,0,0,0,4.53-3,105.49,105.49,0,0,0,10.66-25.77,6,6,0,0,0-1.11-5.29Zm-3.1,41.63-23.64,2.63a6,6,0,0,0-3.82,2,75.14,75.14,0,0,1-6.31,6.31,6,6,0,0,0-2,3.82l-2.63,23.63A94.28,94.28,0,0,1,155.14,218l-18.57-14.86a6,6,0,0,0-3.75-1.31h-.36a78.07,78.07,0,0,1-8.92,0,6,6,0,0,0-4.11,1.3L100.87,218a94.13,94.13,0,0,1-17.34-7.17L80.9,187.21a6,6,0,0,0-2-3.82,75.14,75.14,0,0,1-6.31-6.31,6,6,0,0,0-3.82-2l-23.63-2.63A94.28,94.28,0,0,1,38,155.14l14.86-18.57a6,6,0,0,0,1.3-4.11,78.07,78.07,0,0,1,0-8.92,6,6,0,0,0-1.3-4.11L38,100.87a94.13,94.13,0,0,1,7.17-17.34L68.79,80.9a6,6,0,0,0,3.82-2,75.14,75.14,0,0,1,6.31-6.31,6,6,0,0,0,2-3.82l2.63-23.63A94.28,94.28,0,0,1,100.86,38l18.57,14.86a6,6,0,0,0,4.11,1.3,78.07,78.07,0,0,1,8.92,0,6,6,0,0,0,4.11-1.3L155.13,38a94.13,94.13,0,0,1,17.34,7.17l2.63,23.64a6,6,0,0,0,2,3.82,75.14,75.14,0,0,1,6.31,6.31,6,6,0,0,0,3.82,2l23.63,2.63A94.28,94.28,0,0,1,218,100.86l-14.86,18.57a6,6,0,0,0-1.3,4.11,78.07,78.07,0,0,1,0,8.92,6,6,0,0,0,1.3,4.11L218,155.13A94.13,94.13,0,0,1,210.85,172.47Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",YT,[...t[4]||(t[4]=[Jb("path",{ +d:"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.21,107.21,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.71,107.71,0,0,0-26.25-10.87,8,8,0,0,0-7.06,1.49L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.21,107.21,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8,8,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8,8,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",KT,[...t[5]||(t[5]=[Jb("path",{ +d:"M128,84a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,84Zm0,80a36,36,0,1,1,36-36A36,36,0,0,1,128,164Zm83.93-32.49q.13-3.51,0-7l15.83-19.79a4,4,0,0,0,.75-3.53A103.64,103.64,0,0,0,218,75.9a4,4,0,0,0-3-2l-25.19-2.8c-1.58-1.71-3.24-3.37-4.95-4.95L182.07,41a4,4,0,0,0-2-3A104,104,0,0,0,154.82,27.5a4,4,0,0,0-3.53.74L131.51,44.07q-3.51-.14-7,0L104.7,28.24a4,4,0,0,0-3.53-.75A103.64,103.64,0,0,0,75.9,38a4,4,0,0,0-2,3l-2.8,25.19c-1.71,1.58-3.37,3.24-4.95,4.95L41,73.93a4,4,0,0,0-3,2A104,104,0,0,0,27.5,101.18a4,4,0,0,0,.74,3.53l15.83,19.78q-.14,3.51,0,7L28.24,151.3a4,4,0,0,0-.75,3.53A103.64,103.64,0,0,0,38,180.1a4,4,0,0,0,3,2l25.19,2.8c1.58,1.71,3.24,3.37,4.95,4.95l2.8,25.2a4,4,0,0,0,2,3,104,104,0,0,0,25.28,10.46,4,4,0,0,0,3.53-.74l19.78-15.83q3.51.13,7,0l19.79,15.83a4,4,0,0,0,2.5.88,4,4,0,0,0,1-.13A103.64,103.64,0,0,0,180.1,218a4,4,0,0,0,2-3l2.8-25.19c1.71-1.58,3.37-3.24,4.95-4.95l25.2-2.8a4,4,0,0,0,3-2,104,104,0,0,0,10.46-25.28,4,4,0,0,0-.74-3.53Zm.17,42.83-24.67,2.74a4,4,0,0,0-2.55,1.32,76.2,76.2,0,0,1-6.48,6.48,4,4,0,0,0-1.32,2.55l-2.74,24.66a95.45,95.45,0,0,1-19.64,8.15l-19.38-15.51a4,4,0,0,0-2.5-.87h-.24a73.67,73.67,0,0,1-9.16,0,4,4,0,0,0-2.74.87l-19.37,15.5a95.33,95.33,0,0,1-19.65-8.13l-2.74-24.67a4,4,0,0,0-1.32-2.55,76.2,76.2,0,0,1-6.48-6.48,4,4,0,0,0-2.55-1.32l-24.66-2.74a95.45,95.45,0,0,1-8.15-19.64l15.51-19.38a4,4,0,0,0,.87-2.74,77.76,77.76,0,0,1,0-9.16,4,4,0,0,0-.87-2.74l-15.5-19.37A95.33,95.33,0,0,1,43.9,81.66l24.67-2.74a4,4,0,0,0,2.55-1.32,76.2,76.2,0,0,1,6.48-6.48,4,4,0,0,0,1.32-2.55l2.74-24.66a95.45,95.45,0,0,1,19.64-8.15l19.38,15.51a4,4,0,0,0,2.74.87,73.67,73.67,0,0,1,9.16,0,4,4,0,0,0,2.74-.87l19.37-15.5a95.33,95.33,0,0,1,19.65,8.13l2.74,24.67a4,4,0,0,0,1.32,2.55,76.2,76.2,0,0,1,6.48,6.48,4,4,0,0,0,2.55,1.32l24.66,2.74a95.45,95.45,0,0,1,8.15,19.64l-15.51,19.38a4,4,0,0,0-.87,2.74,77.76,77.76,0,0,1,0,9.16,4,4,0,0,0,.87,2.74l15.5,19.37A95.33,95.33,0,0,1,212.1,174.34Z" +},null,-1)])])):oy("",!0)],16))}}),eE={key:0},tE={key:1},nE={key:2},rE={key:3 +},aE={key:4},oE={key:5},iE=Hg({name:"ScalarIconGitBranch",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",eE,[...t[0]||(t[0]=[Jb("path",{ +d:"M236,64a36,36,0,1,0-48,33.94V112a4,4,0,0,1-4,4H96a27.8,27.8,0,0,0-4,.29V97.94a36,36,0,1,0-24,0v60.12a36,36,0,1,0,24,0V144a4,4,0,0,1,4-4h88a28,28,0,0,0,28-28V97.94A36.07,36.07,0,0,0,236,64ZM80,52A12,12,0,1,1,68,64,12,12,0,0,1,80,52Zm0,152a12,12,0,1,1,12-12A12,12,0,0,1,80,204ZM200,76a12,12,0,1,1,12-12A12,12,0,0,1,200,76Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",tE,[...t[1]||(t[1]=[Jb("path",{ +d:"M224,64a24,24,0,1,1-24-24A24,24,0,0,1,224,64Z",opacity:"0.2" +},null,-1),Jb("path",{ +d:"M232,64a32,32,0,1,0-40,31v17a8,8,0,0,1-8,8H96a23.84,23.84,0,0,0-8,1.38V95a32,32,0,1,0-16,0v66a32,32,0,1,0,16,0V144a8,8,0,0,1,8-8h88a24,24,0,0,0,24-24V95A32.06,32.06,0,0,0,232,64ZM64,64A16,16,0,1,1,80,80,16,16,0,0,1,64,64ZM96,192a16,16,0,1,1-16-16A16,16,0,0,1,96,192ZM200,80a16,16,0,1,1,16-16A16,16,0,0,1,200,80Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",nE,[...t[2]||(t[2]=[Jb("path",{ +d:"M232,64a32,32,0,1,0-40,31v17a8,8,0,0,1-8,8H96a23.84,23.84,0,0,0-8,1.38V95a32,32,0,1,0-16,0v66a32,32,0,1,0,16,0V144a8,8,0,0,1,8-8h88a24,24,0,0,0,24-24V95A32.06,32.06,0,0,0,232,64ZM64,64A16,16,0,1,1,80,80,16,16,0,0,1,64,64ZM96,192a16,16,0,1,1-16-16A16,16,0,0,1,96,192Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",rE,[...t[3]||(t[3]=[Jb("path",{ +d:"M230,64a30,30,0,1,0-36,29.4V112a10,10,0,0,1-10,10H96a21.84,21.84,0,0,0-10,2.42v-31a30,30,0,1,0-12,0v69.2a30,30,0,1,0,12,0V144a10,10,0,0,1,10-10h88a22,22,0,0,0,22-22V93.4A30.05,30.05,0,0,0,230,64ZM62,64A18,18,0,1,1,80,82,18,18,0,0,1,62,64ZM98,192a18,18,0,1,1-18-18A18,18,0,0,1,98,192ZM200,82a18,18,0,1,1,18-18A18,18,0,0,1,200,82Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",aE,[...t[4]||(t[4]=[Jb("path",{ +d:"M232,64a32,32,0,1,0-40,31v17a8,8,0,0,1-8,8H96a23.84,23.84,0,0,0-8,1.38V95a32,32,0,1,0-16,0v66a32,32,0,1,0,16,0V144a8,8,0,0,1,8-8h88a24,24,0,0,0,24-24V95A32.06,32.06,0,0,0,232,64ZM64,64A16,16,0,1,1,80,80,16,16,0,0,1,64,64ZM96,192a16,16,0,1,1-16-16A16,16,0,0,1,96,192ZM200,80a16,16,0,1,1,16-16A16,16,0,0,1,200,80Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",oE,[...t[5]||(t[5]=[Jb("path",{ +d:"M228,64a28,28,0,1,0-32,27.71V112a12,12,0,0,1-12,12H96a19.91,19.91,0,0,0-12,4V91.71a28,28,0,1,0-8,0v72.58a28,28,0,1,0,8,0V144a12,12,0,0,1,12-12h88a20,20,0,0,0,20-20V91.71A28,28,0,0,0,228,64ZM60,64A20,20,0,1,1,80,84,20,20,0,0,1,60,64Zm40,128a20,20,0,1,1-20-20A20,20,0,0,1,100,192ZM200,84a20,20,0,1,1,20-20A20,20,0,0,1,200,84Z" +},null,-1)])])):oy("",!0)],16))}}),sE={key:0},lE={key:1},cE={key:2},uE={key:3 +},dE={key:4},pE={key:5},hE=Hg({name:"ScalarIconGithubLogo",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",sE,[...t[0]||(t[0]=[Jb("path",{ +d:"M212.62,75.17A63.7,63.7,0,0,0,206.39,26,12,12,0,0,0,196,20a63.71,63.71,0,0,0-50,24H126A63.71,63.71,0,0,0,76,20a12,12,0,0,0-10.39,6,63.7,63.7,0,0,0-6.23,49.17A61.5,61.5,0,0,0,52,104v8a60.1,60.1,0,0,0,45.76,58.28A43.66,43.66,0,0,0,92,192v4H76a20,20,0,0,1-20-20,44.05,44.05,0,0,0-44-44,12,12,0,0,0,0,24,20,20,0,0,1,20,20,44.05,44.05,0,0,0,44,44H92v12a12,12,0,0,0,24,0V192a20,20,0,0,1,40,0v40a12,12,0,0,0,24,0V192a43.66,43.66,0,0,0-5.76-21.72A60.1,60.1,0,0,0,220,112v-8A61.5,61.5,0,0,0,212.62,75.17ZM196,112a36,36,0,0,1-36,36H112a36,36,0,0,1-36-36v-8a37.87,37.87,0,0,1,6.13-20.12,11.65,11.65,0,0,0,1.58-11.49,39.9,39.9,0,0,1-.4-27.72,39.87,39.87,0,0,1,26.41,17.8A12,12,0,0,0,119.82,68h32.35a12,12,0,0,0,10.11-5.53,39.84,39.84,0,0,1,26.41-17.8,39.9,39.9,0,0,1-.4,27.72,12,12,0,0,0,1.61,11.53A37.85,37.85,0,0,1,196,104Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",lE,[...t[1]||(t[1]=[Jb("path",{ +d:"M208,104v8a48,48,0,0,1-48,48H136a32,32,0,0,1,32,32v40H104V192a32,32,0,0,1,32-32H112a48,48,0,0,1-48-48v-8a49.28,49.28,0,0,1,8.51-27.3A51.92,51.92,0,0,1,76,32a52,52,0,0,1,43.83,24h32.34A52,52,0,0,1,196,32a51.92,51.92,0,0,1,3.49,44.7A49.28,49.28,0,0,1,208,104Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M208.3,75.68A59.74,59.74,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58,58,0,0,0,208.3,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.76,41.76,0,0,1,200,104Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",cE,[...t[2]||(t[2]=[Jb("path",{ +d:"M216,104v8a56.06,56.06,0,0,1-48.44,55.47A39.8,39.8,0,0,1,176,192v40a8,8,0,0,1-8,8H104a8,8,0,0,1-8-8V216H72a40,40,0,0,1-40-40A24,24,0,0,0,8,152a8,8,0,0,1,0-16,40,40,0,0,1,40,40,24,24,0,0,0,24,24H96v-8a39.8,39.8,0,0,1,8.44-24.53A56.06,56.06,0,0,1,56,112v-8a58.14,58.14,0,0,1,7.69-28.32A59.78,59.78,0,0,1,69.07,28,8,8,0,0,1,76,24a59.75,59.75,0,0,1,48,24h24a59.75,59.75,0,0,1,48-24,8,8,0,0,1,6.93,4,59.74,59.74,0,0,1,5.37,47.68A58,58,0,0,1,216,104Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",uE,[...t[3]||(t[3]=[Jb("path",{ +d:"M206.13,75.92A57.79,57.79,0,0,0,201.2,29a6,6,0,0,0-5.2-3,57.77,57.77,0,0,0-47,24H123A57.77,57.77,0,0,0,76,26a6,6,0,0,0-5.2,3,57.79,57.79,0,0,0-4.93,46.92A55.88,55.88,0,0,0,58,104v8a54.06,54.06,0,0,0,50.45,53.87A37.85,37.85,0,0,0,98,192v10H72a26,26,0,0,1-26-26A38,38,0,0,0,8,138a6,6,0,0,0,0,12,26,26,0,0,1,26,26,38,38,0,0,0,38,38H98v18a6,6,0,0,0,12,0V192a26,26,0,0,1,52,0v40a6,6,0,0,0,12,0V192a37.85,37.85,0,0,0-10.45-26.13A54.06,54.06,0,0,0,214,112v-8A55.88,55.88,0,0,0,206.13,75.92ZM202,112a42,42,0,0,1-42,42H112a42,42,0,0,1-42-42v-8a43.86,43.86,0,0,1,7.3-23.69,6,6,0,0,0,.81-5.76,45.85,45.85,0,0,1,1.43-36.42,45.85,45.85,0,0,1,35.23,21.1A6,6,0,0,0,119.83,62h32.34a6,6,0,0,0,5.06-2.76,45.83,45.83,0,0,1,35.23-21.11,45.85,45.85,0,0,1,1.43,36.42,6,6,0,0,0,.79,5.74A43.78,43.78,0,0,1,202,104Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",dE,[...t[4]||(t[4]=[Jb("path",{ +d:"M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",pE,[...t[5]||(t[5]=[Jb("path",{ +d:"M203.94,76.16A55.73,55.73,0,0,0,199.46,30,4,4,0,0,0,196,28a55.78,55.78,0,0,0-46,24H122A55.78,55.78,0,0,0,76,28a4,4,0,0,0-3.46,2,55.73,55.73,0,0,0-4.48,46.16A53.78,53.78,0,0,0,60,104v8a52.06,52.06,0,0,0,52,52h1.41A36,36,0,0,0,100,192v12H72a28,28,0,0,1-28-28A36,36,0,0,0,8,140a4,4,0,0,0,0,8,28,28,0,0,1,28,28,36,36,0,0,0,36,36h28v20a4,4,0,0,0,8,0V192a28,28,0,0,1,56,0v40a4,4,0,0,0,8,0V192a36,36,0,0,0-13.41-28H160a52.06,52.06,0,0,0,52-52v-8A53.78,53.78,0,0,0,203.94,76.16ZM204,112a44.05,44.05,0,0,1-44,44H112a44.05,44.05,0,0,1-44-44v-8a45.76,45.76,0,0,1,7.71-24.89,4,4,0,0,0,.53-3.84,47.82,47.82,0,0,1,2.1-39.21,47.8,47.8,0,0,1,38.12,22.1A4,4,0,0,0,119.83,60h32.34a4,4,0,0,0,3.37-1.84,47.8,47.8,0,0,1,38.12-22.1,47.82,47.82,0,0,1,2.1,39.21,4,4,0,0,0,.53,3.83A45.85,45.85,0,0,1,204,104Z" +},null,-1)])])):oy("",!0)],16))}}),fE={key:0},mE={key:1},gE={key:2},vE={key:3 +},bE={key:4},yE={key:5},OE=Hg({name:"ScalarIconGlobe",props:{label:{},weight:{} +},setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",fE,[...t[0]||(t[0]=[Jb("path",{ +d:"M128,20A108,108,0,1,0,236,128,108.12,108.12,0,0,0,128,20Zm0,187a113.4,113.4,0,0,1-20.39-35h40.82a116.94,116.94,0,0,1-10,20.77A108.61,108.61,0,0,1,128,207Zm-26.49-59a135.42,135.42,0,0,1,0-40h53a135.42,135.42,0,0,1,0,40ZM44,128a83.49,83.49,0,0,1,2.43-20H77.25a160.63,160.63,0,0,0,0,40H46.43A83.49,83.49,0,0,1,44,128Zm84-79a113.4,113.4,0,0,1,20.39,35H107.59a116.94,116.94,0,0,1,10-20.77A108.61,108.61,0,0,1,128,49Zm50.73,59h30.82a83.52,83.52,0,0,1,0,40H178.75a160.63,160.63,0,0,0,0-40Zm20.77-24H173.71a140.82,140.82,0,0,0-15.5-34.36A84.51,84.51,0,0,1,199.52,84ZM97.79,49.64A140.82,140.82,0,0,0,82.29,84H56.48A84.51,84.51,0,0,1,97.79,49.64ZM56.48,172H82.29a140.82,140.82,0,0,0,15.5,34.36A84.51,84.51,0,0,1,56.48,172Zm101.73,34.36A140.82,140.82,0,0,0,173.71,172h25.81A84.51,84.51,0,0,1,158.21,206.36Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",mE,[...t[1]||(t[1]=[Jb("path",{ +d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2" +},null,-1),Jb("path",{ +d:"M128,24h0A104,104,0,1,0,232,128,104.12,104.12,0,0,0,128,24Zm88,104a87.61,87.61,0,0,1-3.33,24H174.16a157.44,157.44,0,0,0,0-48h38.51A87.61,87.61,0,0,1,216,128ZM102,168H154a115.11,115.11,0,0,1-26,45A115.27,115.27,0,0,1,102,168Zm-3.9-16a140.84,140.84,0,0,1,0-48h59.88a140.84,140.84,0,0,1,0,48ZM40,128a87.61,87.61,0,0,1,3.33-24H81.84a157.44,157.44,0,0,0,0,48H43.33A87.61,87.61,0,0,1,40,128ZM154,88H102a115.11,115.11,0,0,1,26-45A115.27,115.27,0,0,1,154,88Zm52.33,0H170.71a135.28,135.28,0,0,0-22.3-45.6A88.29,88.29,0,0,1,206.37,88ZM107.59,42.4A135.28,135.28,0,0,0,85.29,88H49.63A88.29,88.29,0,0,1,107.59,42.4ZM49.63,168H85.29a135.28,135.28,0,0,0,22.3,45.6A88.29,88.29,0,0,1,49.63,168Zm98.78,45.6a135.28,135.28,0,0,0,22.3-45.6h35.66A88.29,88.29,0,0,1,148.41,213.6Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",gE,[...t[2]||(t[2]=[Jb("path",{ +d:"M128,24h0A104,104,0,1,0,232,128,104.12,104.12,0,0,0,128,24Zm78.36,64H170.71a135.28,135.28,0,0,0-22.3-45.6A88.29,88.29,0,0,1,206.37,88ZM216,128a87.61,87.61,0,0,1-3.33,24H174.16a157.44,157.44,0,0,0,0-48h38.51A87.61,87.61,0,0,1,216,128ZM128,43a115.27,115.27,0,0,1,26,45H102A115.11,115.11,0,0,1,128,43ZM102,168H154a115.11,115.11,0,0,1-26,45A115.27,115.27,0,0,1,102,168Zm-3.9-16a140.84,140.84,0,0,1,0-48h59.88a140.84,140.84,0,0,1,0,48Zm50.35,61.6a135.28,135.28,0,0,0,22.3-45.6h35.66A88.29,88.29,0,0,1,148.41,213.6Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",vE,[...t[3]||(t[3]=[Jb("path",{ +d:"M128,26A102,102,0,1,0,230,128,102.12,102.12,0,0,0,128,26Zm81.57,64H169.19a132.58,132.58,0,0,0-25.73-50.67A90.29,90.29,0,0,1,209.57,90ZM218,128a89.7,89.7,0,0,1-3.83,26H171.81a155.43,155.43,0,0,0,0-52h42.36A89.7,89.7,0,0,1,218,128Zm-90,87.83a110,110,0,0,1-15.19-19.45A124.24,124.24,0,0,1,99.35,166h57.3a124.24,124.24,0,0,1-13.46,30.38A110,110,0,0,1,128,215.83ZM96.45,154a139.18,139.18,0,0,1,0-52h63.1a139.18,139.18,0,0,1,0,52ZM38,128a89.7,89.7,0,0,1,3.83-26H84.19a155.43,155.43,0,0,0,0,52H41.83A89.7,89.7,0,0,1,38,128Zm90-87.83a110,110,0,0,1,15.19,19.45A124.24,124.24,0,0,1,156.65,90H99.35a124.24,124.24,0,0,1,13.46-30.38A110,110,0,0,1,128,40.17Zm-15.46-.84A132.58,132.58,0,0,0,86.81,90H46.43A90.29,90.29,0,0,1,112.54,39.33ZM46.43,166H86.81a132.58,132.58,0,0,0,25.73,50.67A90.29,90.29,0,0,1,46.43,166Zm97,50.67A132.58,132.58,0,0,0,169.19,166h40.38A90.29,90.29,0,0,1,143.46,216.67Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",bE,[...t[4]||(t[4]=[Jb("path",{ +d:"M128,24h0A104,104,0,1,0,232,128,104.12,104.12,0,0,0,128,24Zm88,104a87.61,87.61,0,0,1-3.33,24H174.16a157.44,157.44,0,0,0,0-48h38.51A87.61,87.61,0,0,1,216,128ZM102,168H154a115.11,115.11,0,0,1-26,45A115.27,115.27,0,0,1,102,168Zm-3.9-16a140.84,140.84,0,0,1,0-48h59.88a140.84,140.84,0,0,1,0,48ZM40,128a87.61,87.61,0,0,1,3.33-24H81.84a157.44,157.44,0,0,0,0,48H43.33A87.61,87.61,0,0,1,40,128ZM154,88H102a115.11,115.11,0,0,1,26-45A115.27,115.27,0,0,1,154,88Zm52.33,0H170.71a135.28,135.28,0,0,0-22.3-45.6A88.29,88.29,0,0,1,206.37,88ZM107.59,42.4A135.28,135.28,0,0,0,85.29,88H49.63A88.29,88.29,0,0,1,107.59,42.4ZM49.63,168H85.29a135.28,135.28,0,0,0,22.3,45.6A88.29,88.29,0,0,1,49.63,168Zm98.78,45.6a135.28,135.28,0,0,0,22.3-45.6h35.66A88.29,88.29,0,0,1,148.41,213.6Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",yE,[...t[5]||(t[5]=[Jb("path",{ +d:"M128,28h0A100,100,0,1,0,228,128,100.11,100.11,0,0,0,128,28Zm0,190.61c-6.33-6.09-23-24.41-31.27-54.61h62.54C151,194.2,134.33,212.52,128,218.61ZM94.82,156a140.42,140.42,0,0,1,0-56h66.36a140.42,140.42,0,0,1,0,56ZM128,37.39c6.33,6.09,23,24.41,31.27,54.61H96.73C105,61.8,121.67,43.48,128,37.39ZM169.41,100h46.23a92.09,92.09,0,0,1,0,56H169.41a152.65,152.65,0,0,0,0-56Zm43.25-8h-45a129.39,129.39,0,0,0-29.19-55.4A92.25,92.25,0,0,1,212.66,92ZM117.54,36.6A129.39,129.39,0,0,0,88.35,92h-45A92.25,92.25,0,0,1,117.54,36.6ZM40.36,100H86.59a152.65,152.65,0,0,0,0,56H40.36a92.09,92.09,0,0,1,0-56Zm3,64h45a129.39,129.39,0,0,0,29.19,55.4A92.25,92.25,0,0,1,43.34,164Zm95.12,55.4A129.39,129.39,0,0,0,167.65,164h45A92.25,92.25,0,0,1,138.46,219.4Z" +},null,-1)])])):oy("",!0)],16))}}),wE={key:0},xE={key:1},kE={key:2},SE={key:3 +},_E={key:4},AE={key:5},TE=Hg({name:"ScalarIconGlobeSimple",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",wE,[...t[0]||(t[0]=[Jb("path",{ +d:"M128,20A108,108,0,1,0,236,128,108.12,108.12,0,0,0,128,20Zm83.13,96H179.56a144.3,144.3,0,0,0-21.35-66.36A84.22,84.22,0,0,1,211.13,116ZM128,207c-9.36-10.81-24.46-33.13-27.45-67h54.94a119.74,119.74,0,0,1-17.11,52.77A108.61,108.61,0,0,1,128,207Zm-27.45-91a119.74,119.74,0,0,1,17.11-52.77A108.61,108.61,0,0,1,128,49c9.36,10.81,24.46,33.13,27.45,67ZM97.79,49.64A144.3,144.3,0,0,0,76.44,116H44.87A84.22,84.22,0,0,1,97.79,49.64ZM44.87,140H76.44a144.3,144.3,0,0,0,21.35,66.36A84.22,84.22,0,0,1,44.87,140Zm113.34,66.36A144.3,144.3,0,0,0,179.56,140h31.57A84.22,84.22,0,0,1,158.21,206.36Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",xE,[...t[1]||(t[1]=[Jb("path",{ +d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2" +},null,-1),Jb("path",{ +d:"M128,24h0A104,104,0,1,0,232,128,104.12,104.12,0,0,0,128,24Zm87.62,96H175.79C174,83.49,159.94,57.67,148.41,42.4A88.19,88.19,0,0,1,215.63,120ZM96.23,136h63.54c-2.31,41.61-22.23,67.11-31.77,77C118.45,203.1,98.54,177.6,96.23,136Zm0-16C98.54,78.39,118.46,52.89,128,43c9.55,9.93,29.46,35.43,31.77,77Zm11.36-77.6C96.06,57.67,82,83.49,80.21,120H40.37A88.19,88.19,0,0,1,107.59,42.4ZM40.37,136H80.21c1.82,36.51,15.85,62.33,27.38,77.6A88.19,88.19,0,0,1,40.37,136Zm108,77.6c11.53-15.27,25.56-41.09,27.38-77.6h39.84A88.19,88.19,0,0,1,148.41,213.6Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",kE,[...t[2]||(t[2]=[Jb("path",{ +d:"M128,24h0A104,104,0,1,0,232,128,104.12,104.12,0,0,0,128,24Zm87.62,96H175.79C174,83.49,159.94,57.67,148.41,42.4A88.19,88.19,0,0,1,215.63,120ZM96.23,136h63.54c-2.31,41.61-22.23,67.11-31.77,77C118.45,203.1,98.54,177.6,96.23,136Zm0-16C98.54,78.39,118.46,52.89,128,43c9.55,9.93,29.46,35.43,31.77,77Zm52.18,93.6c11.53-15.27,25.56-41.09,27.38-77.6h39.84A88.19,88.19,0,0,1,148.41,213.6Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",SE,[...t[3]||(t[3]=[Jb("path",{ +d:"M128,26A102,102,0,1,0,230,128,102.12,102.12,0,0,0,128,26Zm89.8,96H173.89c-1.54-40.77-18.48-68.23-30.43-82.67A90.19,90.19,0,0,1,217.8,122ZM128,215.83a110,110,0,0,1-15.19-19.45A128.37,128.37,0,0,1,94.13,134h67.74a128.37,128.37,0,0,1-18.68,62.38A110,110,0,0,1,128,215.83ZM94.13,122a128.37,128.37,0,0,1,18.68-62.38A110,110,0,0,1,128,40.17a110,110,0,0,1,15.19,19.45A128.37,128.37,0,0,1,161.87,122Zm18.41-82.67c-12,14.44-28.89,41.9-30.43,82.67H38.2A90.19,90.19,0,0,1,112.54,39.33ZM38.2,134H82.11c1.54,40.77,18.48,68.23,30.43,82.67A90.19,90.19,0,0,1,38.2,134Zm105.26,82.67c11.95-14.44,28.89-41.9,30.43-82.67H217.8A90.19,90.19,0,0,1,143.46,216.67Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",_E,[...t[4]||(t[4]=[Jb("path",{ +d:"M128,24h0A104,104,0,1,0,232,128,104.12,104.12,0,0,0,128,24Zm87.62,96H175.79C174,83.49,159.94,57.67,148.41,42.4A88.19,88.19,0,0,1,215.63,120ZM96.23,136h63.54c-2.31,41.61-22.23,67.11-31.77,77C118.45,203.1,98.54,177.6,96.23,136Zm0-16C98.54,78.39,118.46,52.89,128,43c9.55,9.93,29.46,35.43,31.77,77Zm11.36-77.6C96.06,57.67,82,83.49,80.21,120H40.37A88.19,88.19,0,0,1,107.59,42.4ZM40.37,136H80.21c1.82,36.51,15.85,62.33,27.38,77.6A88.19,88.19,0,0,1,40.37,136Zm108,77.6c11.53-15.27,25.56-41.09,27.38-77.6h39.84A88.19,88.19,0,0,1,148.41,213.6Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",AE,[...t[5]||(t[5]=[Jb("path",{ +d:"M128,28h0A100,100,0,1,0,228,128,100.11,100.11,0,0,0,128,28Zm91.9,96h-48c-1.15-45.55-21.74-74.52-33.48-87.4A92.14,92.14,0,0,1,219.91,124ZM128,218.61c-8.32-8-34.57-37.13-35.93-86.61h71.86C162.57,181.48,136.32,210.61,128,218.61ZM92.07,124C93.43,74.52,119.68,45.39,128,37.39c8.32,8,34.57,37.13,35.93,86.61Zm25.47-87.4C105.8,49.48,85.21,78.45,84.06,124h-48A92.14,92.14,0,0,1,117.54,36.6ZM36.09,132h48c1.15,45.55,21.74,74.52,33.48,87.4A92.14,92.14,0,0,1,36.09,132Zm102.37,87.4c11.74-12.88,32.33-41.85,33.48-87.4h48A92.14,92.14,0,0,1,138.46,219.4Z" +},null,-1)])])):oy("",!0)],16))}}),EE={key:0},CE={key:1},$E={key:2},PE={key:3 +},IE={key:4},DE={key:5},ME=Hg({name:"ScalarIconHash",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",EE,[...t[0]||(t[0]=[Jb("path",{ +d:"M224,84H180.2l7.61-41.85a12,12,0,0,0-23.62-4.3L155.8,84H116.2l7.61-41.85a12,12,0,1,0-23.62-4.3L91.8,84H48a12,12,0,0,0,0,24H87.44l-7.27,40H32a12,12,0,0,0,0,24H75.8l-7.61,41.85a12,12,0,0,0,9.66,14A11.43,11.43,0,0,0,80,228a12,12,0,0,0,11.8-9.86L100.2,172h39.6l-7.61,41.85a12,12,0,0,0,9.66,14,11.43,11.43,0,0,0,2.16.2,12,12,0,0,0,11.8-9.86L164.2,172H208a12,12,0,0,0,0-24H168.56l7.27-40H224a12,12,0,0,0,0-24Zm-79.83,64H104.56l7.27-40h39.61Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",CE,[...t[1]||(t[1]=[Jb("path",{ +d:"M165.82,96l-11.64,64h-64l11.64-64Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M224,88H175.4l8.47-46.57a8,8,0,0,0-15.74-2.86l-9,49.43H111.4l8.47-46.57a8,8,0,0,0-15.74-2.86L95.14,88H48a8,8,0,0,0,0,16H92.23L83.5,152H32a8,8,0,0,0,0,16H80.6l-8.47,46.57a8,8,0,0,0,6.44,9.3A7.79,7.79,0,0,0,80,224a8,8,0,0,0,7.86-6.57l9-49.43H144.6l-8.47,46.57a8,8,0,0,0,6.44,9.3A7.79,7.79,0,0,0,144,224a8,8,0,0,0,7.86-6.57l9-49.43H208a8,8,0,0,0,0-16H163.77l8.73-48H224a8,8,0,0,0,0-16Zm-76.5,64H99.77l8.73-48h47.73Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",$E,[...t[2]||(t[2]=[Jb("path",{ +d:"M116.25,112h31.5l-8,32h-31.5ZM224,48V208a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32H208A16,16,0,0,1,224,48Zm-16,56a8,8,0,0,0-8-8H168.25l7.51-30.06a8,8,0,0,0-15.52-3.88L151.75,96h-31.5l7.51-30.06a8,8,0,0,0-15.52-3.88L103.75,96H64a8,8,0,0,0,0,16H99.75l-8,32H56a8,8,0,0,0,0,16H87.75l-7.51,30.06a8,8,0,0,0,5.82,9.7,8.13,8.13,0,0,0,2,.24,8,8,0,0,0,7.75-6.06L104.25,160h31.5l-7.51,30.06a8,8,0,0,0,5.82,9.7A8.13,8.13,0,0,0,136,200a8,8,0,0,0,7.75-6.06L152.25,160H192a8,8,0,0,0,0-16H156.25l8-32H200A8,8,0,0,0,208,104Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",PE,[...t[3]||(t[3]=[Jb("path",{ +d:"M224,90H173l8.89-48.93a6,6,0,1,0-11.8-2.14L160.81,90H109l8.89-48.93a6,6,0,0,0-11.8-2.14L96.81,90H48a6,6,0,0,0,0,12H94.63l-9.46,52H32a6,6,0,0,0,0,12H83L74.1,214.93a6,6,0,0,0,4.83,7A5.64,5.64,0,0,0,80,222a6,6,0,0,0,5.89-4.93L95.19,166H147l-8.89,48.93a6,6,0,0,0,4.83,7,5.64,5.64,0,0,0,1.08.1,6,6,0,0,0,5.89-4.93L159.19,166H208a6,6,0,0,0,0-12H161.37l9.46-52H224a6,6,0,0,0,0-12Zm-74.83,64H97.37l9.46-52h51.8Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",IE,[...t[4]||(t[4]=[Jb("path",{ +d:"M224,88H175.4l8.47-46.57a8,8,0,0,0-15.74-2.86l-9,49.43H111.4l8.47-46.57a8,8,0,0,0-15.74-2.86L95.14,88H48a8,8,0,0,0,0,16H92.23L83.5,152H32a8,8,0,0,0,0,16H80.6l-8.47,46.57a8,8,0,0,0,6.44,9.3A7.79,7.79,0,0,0,80,224a8,8,0,0,0,7.86-6.57l9-49.43H144.6l-8.47,46.57a8,8,0,0,0,6.44,9.3A7.79,7.79,0,0,0,144,224a8,8,0,0,0,7.86-6.57l9-49.43H208a8,8,0,0,0,0-16H163.77l8.73-48H224a8,8,0,0,0,0-16Zm-76.5,64H99.77l8.73-48h47.73Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",DE,[...t[5]||(t[5]=[Jb("path",{ +d:"M224,92H170.61l9.33-51.28a4,4,0,1,0-7.88-1.44L162.48,92H106.61l9.33-51.28a4,4,0,1,0-7.88-1.44L98.48,92H48a4,4,0,0,0,0,8H97L86.84,156H32a4,4,0,0,0,0,8H85.39l-9.33,51.28a4,4,0,0,0,3.22,4.65A3.65,3.65,0,0,0,80,220a4,4,0,0,0,3.94-3.29L93.52,164h55.87l-9.33,51.28a4,4,0,0,0,3.22,4.65,3.65,3.65,0,0,0,.72.07,4,4,0,0,0,3.94-3.29L157.52,164H208a4,4,0,0,0,0-8H159l10.19-56H224a4,4,0,0,0,0-8Zm-73.16,64H95l10.19-56H161Z" +},null,-1)])])):oy("",!0)],16))}}),NE={key:0},RE={key:1},LE={key:2},BE={key:3 +},jE={key:4},UE={key:5},zE=Hg({name:"ScalarIconHouse",props:{label:{},weight:{} +},setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",NE,[...t[0]||(t[0]=[Jb("path",{ +d:"M222.14,105.85l-80-80a20,20,0,0,0-28.28,0l-80,80A19.86,19.86,0,0,0,28,120v96a12,12,0,0,0,12,12h64a12,12,0,0,0,12-12V164h24v52a12,12,0,0,0,12,12h64a12,12,0,0,0,12-12V120A19.86,19.86,0,0,0,222.14,105.85ZM204,204H164V152a12,12,0,0,0-12-12H104a12,12,0,0,0-12,12v52H52V121.65l76-76,76,76Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",RE,[...t[1]||(t[1]=[Jb("path",{ +d:"M216,120v96H152V152H104v64H40V120a8,8,0,0,1,2.34-5.66l80-80a8,8,0,0,1,11.32,0l80,80A8,8,0,0,1,216,120Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M219.31,108.68l-80-80a16,16,0,0,0-22.62,0l-80,80A15.87,15.87,0,0,0,32,120v96a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V160h32v56a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V120A15.87,15.87,0,0,0,219.31,108.68ZM208,208H160V152a8,8,0,0,0-8-8H104a8,8,0,0,0-8,8v56H48V120l80-80,80,80Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",LE,[...t[2]||(t[2]=[Jb("path",{ +d:"M224,120v96a8,8,0,0,1-8,8H160a8,8,0,0,1-8-8V164a4,4,0,0,0-4-4H108a4,4,0,0,0-4,4v52a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V120a16,16,0,0,1,4.69-11.31l80-80a16,16,0,0,1,22.62,0l80,80A16,16,0,0,1,224,120Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",BE,[...t[3]||(t[3]=[Jb("path",{ +d:"M217.9,110.1l-80-80a14,14,0,0,0-19.8,0l-80,80A13.92,13.92,0,0,0,34,120v96a6,6,0,0,0,6,6h64a6,6,0,0,0,6-6V158h36v58a6,6,0,0,0,6,6h64a6,6,0,0,0,6-6V120A13.92,13.92,0,0,0,217.9,110.1ZM210,210H158V152a6,6,0,0,0-6-6H104a6,6,0,0,0-6,6v58H46V120a2,2,0,0,1,.58-1.42l80-80a2,2,0,0,1,2.84,0l80,80A2,2,0,0,1,210,120Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",jE,[...t[4]||(t[4]=[Jb("path",{ +d:"M219.31,108.68l-80-80a16,16,0,0,0-22.62,0l-80,80A15.87,15.87,0,0,0,32,120v96a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V160h32v56a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V120A15.87,15.87,0,0,0,219.31,108.68ZM208,208H160V152a8,8,0,0,0-8-8H104a8,8,0,0,0-8,8v56H48V120l80-80,80,80Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",UE,[...t[5]||(t[5]=[Jb("path",{ +d:"M216.49,111.51l-80-80a12,12,0,0,0-17,0l-80,80A12,12,0,0,0,36,120v96a4,4,0,0,0,4,4h64a4,4,0,0,0,4-4V156h40v60a4,4,0,0,0,4,4h64a4,4,0,0,0,4-4V120A12,12,0,0,0,216.49,111.51ZM212,212H156V152a4,4,0,0,0-4-4H104a4,4,0,0,0-4,4v60H44V120a4,4,0,0,1,1.17-2.83l80-80a4,4,0,0,1,5.66,0l80,80A4,4,0,0,1,212,120Z" +},null,-1)])])):oy("",!0)],16))}}),ZE={key:0},FE={key:1},HE={key:2},QE={key:3 +},VE={key:4},qE={key:5},WE=Hg({name:"ScalarIconInfo",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",ZE,[...t[0]||(t[0]=[Jb("path",{ +d:"M108,84a16,16,0,1,1,16,16A16,16,0,0,1,108,84Zm128,44A108,108,0,1,1,128,20,108.12,108.12,0,0,1,236,128Zm-24,0a84,84,0,1,0-84,84A84.09,84.09,0,0,0,212,128Zm-72,36.68V132a20,20,0,0,0-20-20,12,12,0,0,0-4,23.32V168a20,20,0,0,0,20,20,12,12,0,0,0,4-23.32Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",FE,[...t[1]||(t[1]=[Jb("path",{ +d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2" +},null,-1),Jb("path",{ +d:"M144,176a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176Zm88-48A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128ZM124,96a12,12,0,1,0-12-12A12,12,0,0,0,124,96Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",HE,[...t[2]||(t[2]=[Jb("path",{ +d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-4,48a12,12,0,1,1-12,12A12,12,0,0,1,124,72Zm12,112a16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40a8,8,0,0,1,0,16Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",QE,[...t[3]||(t[3]=[Jb("path",{ +d:"M142,176a6,6,0,0,1-6,6,14,14,0,0,1-14-14V128a2,2,0,0,0-2-2,6,6,0,0,1,0-12,14,14,0,0,1,14,14v40a2,2,0,0,0,2,2A6,6,0,0,1,142,176ZM124,94a10,10,0,1,0-10-10A10,10,0,0,0,124,94Zm106,34A102,102,0,1,1,128,26,102.12,102.12,0,0,1,230,128Zm-12,0a90,90,0,1,0-90,90A90.1,90.1,0,0,0,218,128Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",VE,[...t[4]||(t[4]=[Jb("path",{ +d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm16-40a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176ZM112,84a12,12,0,1,1,12,12A12,12,0,0,1,112,84Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",qE,[...t[5]||(t[5]=[Jb("path",{ +d:"M140,176a4,4,0,0,1-4,4,12,12,0,0,1-12-12V128a4,4,0,0,0-4-4,4,4,0,0,1,0-8,12,12,0,0,1,12,12v40a4,4,0,0,0,4,4A4,4,0,0,1,140,176ZM124,92a8,8,0,1,0-8-8A8,8,0,0,0,124,92Zm104,36A100,100,0,1,1,128,28,100.11,100.11,0,0,1,228,128Zm-8,0a92,92,0,1,0-92,92A92.1,92.1,0,0,0,220,128Z" +},null,-1)])])):oy("",!0)],16))}}),XE={key:0},GE={key:1},YE={key:2},KE={key:3 +},JE={key:4},eC={key:5},tC=Hg({name:"ScalarIconLink",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",XE,[...t[0]||(t[0]=[Jb("path",{ +d:"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",GE,[...t[1]||(t[1]=[Jb("path",{ +d:"M218.34,119.6,183.6,154.34a46.58,46.58,0,0,1-44.31,12.26c-.31.34-.62.67-.95,1L103.6,202.34A46.63,46.63,0,1,1,37.66,136.4L72.4,101.66A46.6,46.6,0,0,1,116.71,89.4c.31-.34.62-.67,1-1L152.4,53.66a46.63,46.63,0,0,1,65.94,65.94Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M240,88.23a54.43,54.43,0,0,1-16,37L189.25,160a54.27,54.27,0,0,1-38.63,16h-.05A54.63,54.63,0,0,1,96,119.84a8,8,0,0,1,16,.45A38.62,38.62,0,0,0,150.58,160h0a38.39,38.39,0,0,0,27.31-11.31l34.75-34.75a38.63,38.63,0,0,0-54.63-54.63l-11,11A8,8,0,0,1,135.7,59l11-11A54.65,54.65,0,0,1,224,48,54.86,54.86,0,0,1,240,88.23ZM109,185.66l-11,11A38.41,38.41,0,0,1,70.6,208h0a38.63,38.63,0,0,1-27.29-65.94L78,107.31A38.63,38.63,0,0,1,144,135.71a8,8,0,0,0,7.78,8.22H152a8,8,0,0,0,8-7.78A54.86,54.86,0,0,0,144,96a54.65,54.65,0,0,0-77.27,0L32,130.75A54.62,54.62,0,0,0,70.56,224h0a54.28,54.28,0,0,0,38.64-16l11-11A8,8,0,0,0,109,185.66Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",YE,[...t[2]||(t[2]=[Jb("path",{ +d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM115.7,192.49a43.31,43.31,0,0,1-55-66.43l25.37-25.37a43.35,43.35,0,0,1,61.25,0,42.9,42.9,0,0,1,9.95,15.43,8,8,0,1,1-15,5.6A27.33,27.33,0,0,0,97.37,112L72,137.37a27.32,27.32,0,0,0,34.68,41.91,8,8,0,1,1,9,13.21Zm79.61-62.55-25.37,25.37A43,43,0,0,1,139.32,168h0a43.35,43.35,0,0,1-40.53-28.12,8,8,0,1,1,15-5.6A27.35,27.35,0,0,0,139.28,152h0a27.14,27.14,0,0,0,19.32-8L184,118.63a27.32,27.32,0,0,0-34.68-41.91,8,8,0,1,1-9-13.21,43.32,43.32,0,0,1,55,66.43Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",KE,[...t[3]||(t[3]=[Jb("path",{ +d:"M238,88.18a52.42,52.42,0,0,1-15.4,35.66l-34.75,34.75A52.28,52.28,0,0,1,150.62,174h-.05A52.63,52.63,0,0,1,98,119.9a6,6,0,0,1,6-5.84h.17a6,6,0,0,1,5.83,6.16A40.62,40.62,0,0,0,150.58,162h0a40.4,40.4,0,0,0,28.73-11.9l34.75-34.74A40.63,40.63,0,0,0,156.63,57.9l-11,11a6,6,0,0,1-8.49-8.49l11-11a52.62,52.62,0,0,1,74.43,0A52.83,52.83,0,0,1,238,88.18Zm-127.62,98.9-11,11A40.36,40.36,0,0,1,70.6,210h0a40.63,40.63,0,0,1-28.7-69.36L76.62,105.9A40.63,40.63,0,0,1,146,135.77a6,6,0,0,0,5.83,6.16H152a6,6,0,0,0,6-5.84A52.63,52.63,0,0,0,68.14,97.42L33.38,132.16A52.63,52.63,0,0,0,70.56,222h0a52.26,52.26,0,0,0,37.22-15.42l11-11a6,6,0,1,0-8.49-8.48Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",JE,[...t[4]||(t[4]=[Jb("path",{ +d:"M240,88.23a54.43,54.43,0,0,1-16,37L189.25,160a54.27,54.27,0,0,1-38.63,16h-.05A54.63,54.63,0,0,1,96,119.84a8,8,0,0,1,16,.45A38.62,38.62,0,0,0,150.58,160h0a38.39,38.39,0,0,0,27.31-11.31l34.75-34.75a38.63,38.63,0,0,0-54.63-54.63l-11,11A8,8,0,0,1,135.7,59l11-11A54.65,54.65,0,0,1,224,48,54.86,54.86,0,0,1,240,88.23ZM109,185.66l-11,11A38.41,38.41,0,0,1,70.6,208h0a38.63,38.63,0,0,1-27.29-65.94L78,107.31A38.63,38.63,0,0,1,144,135.71a8,8,0,0,0,16,.45A54.86,54.86,0,0,0,144,96a54.65,54.65,0,0,0-77.27,0L32,130.75A54.62,54.62,0,0,0,70.56,224h0a54.28,54.28,0,0,0,38.64-16l11-11A8,8,0,0,0,109,185.66Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",eC,[...t[5]||(t[5]=[Jb("path",{ +d:"M236,88.12a50.44,50.44,0,0,1-14.81,34.31l-34.75,34.74A50.33,50.33,0,0,1,150.62,172h-.05A50.63,50.63,0,0,1,100,120a4,4,0,0,1,4-3.89h.11a4,4,0,0,1,3.89,4.11A42.64,42.64,0,0,0,150.58,164h0a42.32,42.32,0,0,0,30.14-12.49l34.75-34.74a42.63,42.63,0,1,0-60.29-60.28l-11,11a4,4,0,0,1-5.66-5.65l11-11A50.64,50.64,0,0,1,236,88.12ZM111.78,188.49l-11,11A42.33,42.33,0,0,1,70.6,212h0a42.63,42.63,0,0,1-30.11-72.77l34.75-34.74A42.63,42.63,0,0,1,148,135.82a4,4,0,0,0,8,.23A50.64,50.64,0,0,0,69.55,98.83L34.8,133.57A50.63,50.63,0,0,0,70.56,220h0a50.33,50.33,0,0,0,35.81-14.83l11-11a4,4,0,1,0-5.65-5.66Z" +},null,-1)])])):oy("",!0)],16))}}),nC={key:0},rC={key:1},aC={key:2},oC={key:3 +},iC={key:4},sC={key:5},lC=Hg({name:"ScalarIconList",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",nC,[...t[0]||(t[0]=[Jb("path",{ +d:"M228,128a12,12,0,0,1-12,12H40a12,12,0,0,1,0-24H216A12,12,0,0,1,228,128ZM40,76H216a12,12,0,0,0,0-24H40a12,12,0,0,0,0,24ZM216,180H40a12,12,0,0,0,0,24H216a12,12,0,0,0,0-24Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",rC,[...t[1]||(t[1]=[Jb("path",{ +d:"M216,64V192H40V64Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",aC,[...t[2]||(t[2]=[Jb("path",{ +d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM192,184H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Zm0-48H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Zm0-48H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",oC,[...t[3]||(t[3]=[Jb("path",{ +d:"M222,128a6,6,0,0,1-6,6H40a6,6,0,0,1,0-12H216A6,6,0,0,1,222,128ZM40,70H216a6,6,0,0,0,0-12H40a6,6,0,0,0,0,12ZM216,186H40a6,6,0,0,0,0,12H216a6,6,0,0,0,0-12Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",iC,[...t[4]||(t[4]=[Jb("path",{ +d:"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",sC,[...t[5]||(t[5]=[Jb("path",{ +d:"M220,128a4,4,0,0,1-4,4H40a4,4,0,0,1,0-8H216A4,4,0,0,1,220,128ZM40,68H216a4,4,0,0,0,0-8H40a4,4,0,0,0,0,8ZM216,188H40a4,4,0,0,0,0,8H216a4,4,0,0,0,0-8Z" +},null,-1)])])):oy("",!0)],16))}}),cC={key:0},uC={key:1},dC={key:2},pC={key:3 +},hC={key:4},fC={key:5},mC=Hg({name:"ScalarIconLockSimple",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",cC,[...t[0]||(t[0]=[Jb("path",{ +d:"M208,76H180V56A52,52,0,0,0,76,56V76H48A20,20,0,0,0,28,96V208a20,20,0,0,0,20,20H208a20,20,0,0,0,20-20V96A20,20,0,0,0,208,76ZM100,56a28,28,0,0,1,56,0V76H100ZM204,204H52V100H204Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",uC,[...t[1]||(t[1]=[Jb("path",{ +d:"M216,96V208a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V96a8,8,0,0,1,8-8H208A8,8,0,0,1,216,96Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M208,80H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80ZM96,56a32,32,0,0,1,64,0V80H96ZM208,208H48V96H208V208Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",dC,[...t[2]||(t[2]=[Jb("path",{ +d:"M208,80H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80ZM96,56a32,32,0,0,1,64,0V80H96Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",pC,[...t[3]||(t[3]=[Jb("path",{ +d:"M208,82H174V56a46,46,0,0,0-92,0V82H48A14,14,0,0,0,34,96V208a14,14,0,0,0,14,14H208a14,14,0,0,0,14-14V96A14,14,0,0,0,208,82ZM94,56a34,34,0,0,1,68,0V82H94ZM210,208a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V96a2,2,0,0,1,2-2H208a2,2,0,0,1,2,2Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",hC,[...t[4]||(t[4]=[Jb("path",{ +d:"M208,80H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80ZM96,56a32,32,0,0,1,64,0V80H96ZM208,208H48V96H208V208Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",fC,[...t[5]||(t[5]=[Jb("path",{ +d:"M208,84H172V56a44,44,0,0,0-88,0V84H48A12,12,0,0,0,36,96V208a12,12,0,0,0,12,12H208a12,12,0,0,0,12-12V96A12,12,0,0,0,208,84ZM92,56a36,36,0,0,1,72,0V84H92ZM212,208a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V96a4,4,0,0,1,4-4H208a4,4,0,0,1,4,4Z" +},null,-1)])])):oy("",!0)],16))}}),gC={key:0},vC={key:1},bC={key:2},yC={key:3 +},OC={key:4},wC={key:5},xC=Hg({name:"ScalarIconMagnifyingGlass",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",gC,[...t[0]||(t[0]=[Jb("path",{ +d:"M232.49,215.51,185,168a92.12,92.12,0,1,0-17,17l47.53,47.54a12,12,0,0,0,17-17ZM44,112a68,68,0,1,1,68,68A68.07,68.07,0,0,1,44,112Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",vC,[...t[1]||(t[1]=[Jb("path",{ +d:"M192,112a80,80,0,1,1-80-80A80,80,0,0,1,192,112Z",opacity:"0.2" +},null,-1),Jb("path",{ +d:"M229.66,218.34,179.6,168.28a88.21,88.21,0,1,0-11.32,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",bC,[...t[2]||(t[2]=[Jb("path",{ +d:"M168,112a56,56,0,1,1-56-56A56,56,0,0,1,168,112Zm61.66,117.66a8,8,0,0,1-11.32,0l-50.06-50.07a88,88,0,1,1,11.32-11.31l50.06,50.06A8,8,0,0,1,229.66,229.66ZM112,184a72,72,0,1,0-72-72A72.08,72.08,0,0,0,112,184Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",yC,[...t[3]||(t[3]=[Jb("path",{ +d:"M228.24,219.76l-51.38-51.38a86.15,86.15,0,1,0-8.48,8.48l51.38,51.38a6,6,0,0,0,8.48-8.48ZM38,112a74,74,0,1,1,74,74A74.09,74.09,0,0,1,38,112Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",OC,[...t[4]||(t[4]=[Jb("path",{ +d:"M229.66,218.34l-50.07-50.06a88.11,88.11,0,1,0-11.31,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",wC,[...t[5]||(t[5]=[Jb("path",{ +d:"M226.83,221.17l-52.7-52.7a84.1,84.1,0,1,0-5.66,5.66l52.7,52.7a4,4,0,0,0,5.66-5.66ZM36,112a76,76,0,1,1,76,76A76.08,76.08,0,0,1,36,112Z" +},null,-1)])])):oy("",!0)],16))}}),kC={key:0},SC={key:1},_C={key:2},AC={key:3 +},TC={key:4},EC={key:5},CC=Hg({name:"ScalarIconNotepad",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",kC,[...t[0]||(t[0]=[Jb("path",{ +d:"M172,124a12,12,0,0,1-12,12H96a12,12,0,0,1,0-24h64A12,12,0,0,1,172,124Zm-12,28H96a12,12,0,0,0,0,24h64a12,12,0,0,0,0-24ZM220,40V200a36,36,0,0,1-36,36H72a36,36,0,0,1-36-36V40A12,12,0,0,1,48,28H72V24a12,12,0,0,1,24,0v4h20V24a12,12,0,0,1,24,0v4h20V24a12,12,0,0,1,24,0v4h24A12,12,0,0,1,220,40ZM196,52H184v4a12,12,0,0,1-24,0V52H140v4a12,12,0,0,1-24,0V52H96v4a12,12,0,0,1-24,0V52H60V200a12,12,0,0,0,12,12H184a12,12,0,0,0,12-12Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",SC,[...t[1]||(t[1]=[Jb("path",{ +d:"M208,40V200a24,24,0,0,1-24,24H72a24,24,0,0,1-24-24V40Z",opacity:"0.2" +},null,-1),Jb("path",{ +d:"M168,128a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,128Zm-8,24H96a8,8,0,0,0,0,16h64a8,8,0,0,0,0-16ZM216,40V200a32,32,0,0,1-32,32H72a32,32,0,0,1-32-32V40a8,8,0,0,1,8-8H72V24a8,8,0,0,1,16,0v8h32V24a8,8,0,0,1,16,0v8h32V24a8,8,0,0,1,16,0v8h24A8,8,0,0,1,216,40Zm-16,8H184v8a8,8,0,0,1-16,0V48H136v8a8,8,0,0,1-16,0V48H88v8a8,8,0,0,1-16,0V48H56V200a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",_C,[...t[2]||(t[2]=[Jb("path",{ +d:"M208,32H184V24a8,8,0,0,0-16,0v8H136V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48a8,8,0,0,0-8,8V200a32,32,0,0,0,32,32H184a32,32,0,0,0,32-32V40A8,8,0,0,0,208,32ZM120,56a8,8,0,0,1,16,0v8a8,8,0,0,1-16,0ZM80,72a8,8,0,0,1-8-8V56a8,8,0,0,1,16,0v8A8,8,0,0,1,80,72Zm80,96H96a8,8,0,0,1,0-16h64a8,8,0,0,1,0,16Zm0-32H96a8,8,0,0,1,0-16h64a8,8,0,0,1,0,16Zm24-72a8,8,0,0,1-16,0V56a8,8,0,0,1,16,0Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",AC,[...t[3]||(t[3]=[Jb("path",{ +d:"M166,128a6,6,0,0,1-6,6H96a6,6,0,0,1,0-12h64A6,6,0,0,1,166,128Zm-6,26H96a6,6,0,0,0,0,12h64a6,6,0,0,0,0-12ZM214,40V200a30,30,0,0,1-30,30H72a30,30,0,0,1-30-30V40a6,6,0,0,1,6-6H74V24a6,6,0,0,1,12,0V34h36V24a6,6,0,0,1,12,0V34h36V24a6,6,0,0,1,12,0V34h26A6,6,0,0,1,214,40Zm-12,6H182V56a6,6,0,0,1-12,0V46H134V56a6,6,0,0,1-12,0V46H86V56a6,6,0,0,1-12,0V46H54V200a18,18,0,0,0,18,18H184a18,18,0,0,0,18-18Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",TC,[...t[4]||(t[4]=[Jb("path",{ +d:"M168,128a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,128Zm-8,24H96a8,8,0,0,0,0,16h64a8,8,0,0,0,0-16ZM216,40V200a32,32,0,0,1-32,32H72a32,32,0,0,1-32-32V40a8,8,0,0,1,8-8H72V24a8,8,0,0,1,16,0v8h32V24a8,8,0,0,1,16,0v8h32V24a8,8,0,0,1,16,0v8h24A8,8,0,0,1,216,40Zm-16,8H184v8a8,8,0,0,1-16,0V48H136v8a8,8,0,0,1-16,0V48H88v8a8,8,0,0,1-16,0V48H56V200a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",EC,[...t[5]||(t[5]=[Jb("path",{ +d:"M164,128a4,4,0,0,1-4,4H96a4,4,0,0,1,0-8h64A4,4,0,0,1,164,128Zm-4,28H96a4,4,0,0,0,0,8h64a4,4,0,0,0,0-8ZM212,40V200a28,28,0,0,1-28,28H72a28,28,0,0,1-28-28V40a4,4,0,0,1,4-4H76V24a4,4,0,0,1,8,0V36h40V24a4,4,0,0,1,8,0V36h40V24a4,4,0,0,1,8,0V36h28A4,4,0,0,1,212,40Zm-8,4H180V56a4,4,0,0,1-8,0V44H132V56a4,4,0,0,1-8,0V44H84V56a4,4,0,0,1-8,0V44H52V200a20,20,0,0,0,20,20H184a20,20,0,0,0,20-20Z" +},null,-1)])])):oy("",!0)],16))}}),$C={key:0},PC={key:1},IC={key:2},DC={key:3 +},MC={key:4},NC={key:5},RC=Hg({name:"ScalarIconPencilSimple",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",$C,[...t[0]||(t[0]=[Jb("path",{ +d:"M230.14,70.54,185.46,25.85a20,20,0,0,0-28.29,0L33.86,149.17A19.85,19.85,0,0,0,28,163.31V208a20,20,0,0,0,20,20H92.69a19.86,19.86,0,0,0,14.14-5.86L230.14,98.82a20,20,0,0,0,0-28.28ZM91,204H52V165l84-84,39,39ZM192,103,153,64l18.34-18.34,39,39Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",PC,[...t[1]||(t[1]=[Jb("path",{ +d:"M221.66,90.34,192,120,136,64l29.66-29.66a8,8,0,0,1,11.31,0L221.66,79A8,8,0,0,1,221.66,90.34Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",IC,[...t[2]||(t[2]=[Jb("path",{ +d:"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM192,108.68,147.31,64l24-24L216,84.68Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",DC,[...t[3]||(t[3]=[Jb("path",{ +d:"M225.9,74.78,181.21,30.09a14,14,0,0,0-19.8,0L38.1,153.41a13.94,13.94,0,0,0-4.1,9.9V208a14,14,0,0,0,14,14H92.69a13.94,13.94,0,0,0,9.9-4.1L225.9,94.58a14,14,0,0,0,0-19.8ZM94.1,209.41a2,2,0,0,1-1.41.59H48a2,2,0,0,1-2-2V163.31a2,2,0,0,1,.59-1.41L136,72.48,183.51,120ZM217.41,86.1,192,111.51,144.49,64,169.9,38.58a2,2,0,0,1,2.83,0l44.68,44.69a2,2,0,0,1,0,2.83Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",MC,[...t[4]||(t[4]=[Jb("path",{ +d:"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",NC,[...t[5]||(t[5]=[Jb("path",{ +d:"M224.49,76.2,179.8,31.51a12,12,0,0,0-17,0L133.17,61.17h0L39.52,154.83A11.9,11.9,0,0,0,36,163.31V208a12,12,0,0,0,12,12H92.69a12,12,0,0,0,8.48-3.51L224.48,93.17a12,12,0,0,0,0-17Zm-129,134.63A4,4,0,0,1,92.69,212H48a4,4,0,0,1-4-4V163.31a4,4,0,0,1,1.17-2.83L136,69.65,186.34,120ZM218.83,87.51,192,114.34,141.66,64l26.82-26.83a4,4,0,0,1,5.66,0l44.69,44.68a4,4,0,0,1,0,5.66Z" +},null,-1)])])):oy("",!0)],16))}}),LC={key:0},BC={key:1},jC={key:2},UC={key:3 +},zC={key:4},ZC={key:5},FC=Hg({name:"ScalarIconPlay",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",LC,[...t[0]||(t[0]=[Jb("path",{ +d:"M234.49,111.07,90.41,22.94A20,20,0,0,0,60,39.87V216.13a20,20,0,0,0,30.41,16.93l144.08-88.13a19.82,19.82,0,0,0,0-33.86ZM84,208.85V47.15L216.16,128Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",BC,[...t[1]||(t[1]=[Jb("path",{ +d:"M228.23,134.69,84.15,222.81A8,8,0,0,1,72,216.12V39.88a8,8,0,0,1,12.15-6.69l144.08,88.12A7.82,7.82,0,0,1,228.23,134.69Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M232.4,114.49,88.32,26.35a16,16,0,0,0-16.2-.3A15.86,15.86,0,0,0,64,39.87V216.13A15.94,15.94,0,0,0,80,232a16.07,16.07,0,0,0,8.36-2.35L232.4,141.51a15.81,15.81,0,0,0,0-27ZM80,215.94V40l143.83,88Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",jC,[...t[2]||(t[2]=[Jb("path",{ +d:"M240,128a15.74,15.74,0,0,1-7.6,13.51L88.32,229.65a16,16,0,0,1-16.2.3A15.86,15.86,0,0,1,64,216.13V39.87a15.86,15.86,0,0,1,8.12-13.82,16,16,0,0,1,16.2.3L232.4,114.49A15.74,15.74,0,0,1,240,128Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",UC,[...t[3]||(t[3]=[Jb("path",{ +d:"M231.36,116.19,87.28,28.06a14,14,0,0,0-14.18-.27A13.69,13.69,0,0,0,66,39.87V216.13a13.69,13.69,0,0,0,7.1,12.08,14,14,0,0,0,14.18-.27l144.08-88.13a13.82,13.82,0,0,0,0-23.62Zm-6.26,13.38L81,217.7a2,2,0,0,1-2.06,0,1.78,1.78,0,0,1-1-1.61V39.87a1.78,1.78,0,0,1,1-1.61A2.06,2.06,0,0,1,80,38a2,2,0,0,1,1,.31L225.1,126.43a1.82,1.82,0,0,1,0,3.14Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",zC,[...t[4]||(t[4]=[Jb("path",{ +d:"M232.4,114.49,88.32,26.35a16,16,0,0,0-16.2-.3A15.86,15.86,0,0,0,64,39.87V216.13A15.94,15.94,0,0,0,80,232a16.07,16.07,0,0,0,8.36-2.35L232.4,141.51a15.81,15.81,0,0,0,0-27ZM80,215.94V40l143.83,88Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",ZC,[...t[5]||(t[5]=[Jb("path",{ +d:"M230.32,117.9,86.24,29.79a11.91,11.91,0,0,0-12.17-.23A11.71,11.71,0,0,0,68,39.89V216.11a11.71,11.71,0,0,0,6.07,10.33,11.91,11.91,0,0,0,12.17-.23L230.32,138.1a11.82,11.82,0,0,0,0-20.2Zm-4.18,13.37L82.06,219.39a4,4,0,0,1-4.07.07,3.77,3.77,0,0,1-2-3.35V39.89a3.77,3.77,0,0,1,2-3.35,4,4,0,0,1,4.07.07l144.08,88.12a3.8,3.8,0,0,1,0,6.54Z" +},null,-1)])])):oy("",!0)],16))}}),HC={key:0},QC={key:1},VC={key:2},qC={key:3 +},WC={key:4},XC={key:5},GC=Hg({name:"ScalarIconPlus",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",HC,[...t[0]||(t[0]=[Jb("path",{ +d:"M228,128a12,12,0,0,1-12,12H140v76a12,12,0,0,1-24,0V140H40a12,12,0,0,1,0-24h76V40a12,12,0,0,1,24,0v76h76A12,12,0,0,1,228,128Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",QC,[...t[1]||(t[1]=[Jb("path",{ +d:"M216,56V200a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V56A16,16,0,0,1,56,40H200A16,16,0,0,1,216,56Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M224,128a8,8,0,0,1-8,8H136v80a8,8,0,0,1-16,0V136H40a8,8,0,0,1,0-16h80V40a8,8,0,0,1,16,0v80h80A8,8,0,0,1,224,128Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",VC,[...t[2]||(t[2]=[Jb("path",{ +d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM184,136H136v48a8,8,0,0,1-16,0V136H72a8,8,0,0,1,0-16h48V72a8,8,0,0,1,16,0v48h48a8,8,0,0,1,0,16Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",qC,[...t[3]||(t[3]=[Jb("path",{ +d:"M222,128a6,6,0,0,1-6,6H134v82a6,6,0,0,1-12,0V134H40a6,6,0,0,1,0-12h82V40a6,6,0,0,1,12,0v82h82A6,6,0,0,1,222,128Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",WC,[...t[4]||(t[4]=[Jb("path",{ +d:"M224,128a8,8,0,0,1-8,8H136v80a8,8,0,0,1-16,0V136H40a8,8,0,0,1,0-16h80V40a8,8,0,0,1,16,0v80h80A8,8,0,0,1,224,128Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",XC,[...t[5]||(t[5]=[Jb("path",{ +d:"M220,128a4,4,0,0,1-4,4H132v84a4,4,0,0,1-8,0V132H40a4,4,0,0,1,0-8h84V40a4,4,0,0,1,8,0v84h84A4,4,0,0,1,220,128Z" +},null,-1)])])):oy("",!0)],16))}}),YC={key:0},KC={key:1},JC={key:2},e$={key:3 +},t$={key:4},n$={key:5},r$=Hg({name:"ScalarIconScroll",props:{label:{},weight:{} +},setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",YC,[...t[0]||(t[0]=[Jb("path",{ +d:"M92,92a12,12,0,0,1,12-12h60a12,12,0,0,1,0,24H104A12,12,0,0,1,92,92Zm12,52h60a12,12,0,0,0,0-24H104a12,12,0,0,0,0,24Zm132,48a36,36,0,0,1-36,36H88a36,36,0,0,1-36-36V64a12,12,0,0,0-24,0c0,3.73,3.35,6.51,3.38,6.54l-.18-.14h0A12,12,0,1,1,16.81,89.59h0C15.49,88.62,4,79.55,4,64A36,36,0,0,1,40,28H176a36,36,0,0,1,36,36V164h4a12,12,0,0,1,7.2,2.4C224.51,167.38,236,176.45,236,192ZM92.62,172.2A12,12,0,0,1,104,164h84V64a12,12,0,0,0-12-12H73.94A35.88,35.88,0,0,1,76,64V192a12,12,0,0,0,24,0c0-3.58-3.17-6.38-3.2-6.4A12,12,0,0,1,92.62,172.2ZM212,192a7.69,7.69,0,0,0-1.24-4h-87a30.32,30.32,0,0,1,.26,4,35.84,35.84,0,0,1-2.06,12H200A12,12,0,0,0,212,192Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",KC,[...t[1]||(t[1]=[Jb("path",{ +d:"M200,176H104s8,6,8,16a24,24,0,0,1-48,0V64A24,24,0,0,0,40,40H176a24,24,0,0,1,24,24Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M96,104a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H104A8,8,0,0,1,96,104Zm8,40h64a8,8,0,0,0,0-16H104a8,8,0,0,0,0,16Zm128,48a32,32,0,0,1-32,32H88a32,32,0,0,1-32-32V64a16,16,0,0,0-32,0c0,5.74,4.83,9.62,4.88,9.66h0A8,8,0,0,1,24,88a7.89,7.89,0,0,1-4.79-1.61h0C18.05,85.54,8,77.61,8,64A32,32,0,0,1,40,32H176a32,32,0,0,1,32,32V168h8a8,8,0,0,1,4.8,1.6C222,170.46,232,178.39,232,192ZM96.26,173.48A8.07,8.07,0,0,1,104,168h88V64a16,16,0,0,0-16-16H67.69A31.71,31.71,0,0,1,72,64V192a16,16,0,0,0,32,0c0-5.74-4.83-9.62-4.88-9.66A7.82,7.82,0,0,1,96.26,173.48ZM216,192a12.58,12.58,0,0,0-3.23-8h-94a26.92,26.92,0,0,1,1.21,8,31.82,31.82,0,0,1-4.29,16H200A16,16,0,0,0,216,192Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",JC,[...t[2]||(t[2]=[Jb("path",{ +d:"M220.8,169.6A8,8,0,0,0,216,168h-8V64a32,32,0,0,0-32-32H40A32,32,0,0,0,8,64C8,77.61,18.05,85.54,19.2,86.4h0A7.89,7.89,0,0,0,24,88a8,8,0,0,0,4.87-14.33h0C28.83,73.62,24,69.74,24,64a16,16,0,0,1,32,0V192a32,32,0,0,0,32,32H200a32,32,0,0,0,32-32C232,178.39,222,170.46,220.8,169.6ZM104,96h64a8,8,0,0,1,0,16H104a8,8,0,0,1,0-16Zm-8,40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H104A8,8,0,0,1,96,136Zm104,72H107.71A31.82,31.82,0,0,0,112,192a26.92,26.92,0,0,0-1.21-8h102a12.58,12.58,0,0,1,3.23,8A16,16,0,0,1,200,208Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",e$,[...t[3]||(t[3]=[Jb("path",{ +d:"M98,136a6,6,0,0,1,6-6h64a6,6,0,0,1,0,12H104A6,6,0,0,1,98,136Zm6-26h64a6,6,0,0,0,0-12H104a6,6,0,0,0,0,12Zm126,82a30,30,0,0,1-30,30H88a30,30,0,0,1-30-30V64a18,18,0,0,0-36,0c0,6.76,5.58,11.19,5.64,11.23A6,6,0,1,1,20.4,84.8C20,84.48,10,76.85,10,64A30,30,0,0,1,40,34H176a30,30,0,0,1,30,30V170h10a6,6,0,0,1,3.6,1.2C220,171.52,230,179.15,230,192Zm-124,0c0-6.76-5.59-11.19-5.64-11.23A6,6,0,0,1,104,170h90V64a18,18,0,0,0-18-18H64a29.82,29.82,0,0,1,6,18V192a18,18,0,0,0,36,0Zm112,0a14.94,14.94,0,0,0-4.34-10H115.88A24.83,24.83,0,0,1,118,192a29.87,29.87,0,0,1-6,18h88A18,18,0,0,0,218,192Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",t$,[...t[4]||(t[4]=[Jb("path",{ +d:"M96,104a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H104A8,8,0,0,1,96,104Zm8,40h64a8,8,0,0,0,0-16H104a8,8,0,0,0,0,16Zm128,48a32,32,0,0,1-32,32H88a32,32,0,0,1-32-32V64a16,16,0,0,0-32,0c0,5.74,4.83,9.62,4.88,9.66h0A8,8,0,0,1,24,88a7.89,7.89,0,0,1-4.79-1.61h0C18.05,85.54,8,77.61,8,64A32,32,0,0,1,40,32H176a32,32,0,0,1,32,32V168h8a8,8,0,0,1,4.8,1.6C222,170.46,232,178.39,232,192ZM96.26,173.48A8.07,8.07,0,0,1,104,168h88V64a16,16,0,0,0-16-16H67.69A31.71,31.71,0,0,1,72,64V192a16,16,0,0,0,32,0c0-5.74-4.83-9.62-4.88-9.66A7.82,7.82,0,0,1,96.26,173.48ZM216,192a12.58,12.58,0,0,0-3.23-8h-94a26.92,26.92,0,0,1,1.21,8,31.82,31.82,0,0,1-4.29,16H200A16,16,0,0,0,216,192Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",n$,[...t[5]||(t[5]=[Jb("path",{ +d:"M100,104a4,4,0,0,1,4-4h64a4,4,0,0,1,0,8H104A4,4,0,0,1,100,104Zm4,36h64a4,4,0,0,0,0-8H104a4,4,0,0,0,0,8Zm124,52a28,28,0,0,1-28,28H88a28,28,0,0,1-28-28V64a20,20,0,0,0-40,0c0,7.78,6.34,12.75,6.4,12.8a4,4,0,1,1-4.8,6.4C21.21,82.91,12,75.86,12,64A28,28,0,0,1,40,36H176a28,28,0,0,1,28,28V172h12a4,4,0,0,1,2.4.8C218.79,173.09,228,180.14,228,192Zm-120,0c0-7.78-6.34-12.75-6.4-12.8A4,4,0,0,1,104,172h92V64a20,20,0,0,0-20-20H59.57A27.9,27.9,0,0,1,68,64V192a20,20,0,0,0,40,0Zm112,0c0-6-3.74-10.3-5.5-12H112.61A23.31,23.31,0,0,1,116,192a27.94,27.94,0,0,1-8.42,20H200A20,20,0,0,0,220,192Z" +},null,-1)])])):oy("",!0)],16))}}),a$={key:0},o$={key:1},i$={key:2},s$={key:3 +},l$={key:4},c$={key:5},u$=Hg({name:"ScalarIconSparkle",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",a$,[...t[0]||(t[0]=[Jb("path",{ +d:"M199,125.31l-49.88-18.39L130.69,57a19.92,19.92,0,0,0-37.38,0L74.92,106.92,25,125.31a19.92,19.92,0,0,0,0,37.38l49.88,18.39L93.31,231a19.92,19.92,0,0,0,37.38,0l18.39-49.88L199,162.69a19.92,19.92,0,0,0,0-37.38Zm-63.38,35.16a12,12,0,0,0-7.11,7.11L112,212.28l-16.47-44.7a12,12,0,0,0-7.11-7.11L43.72,144l44.7-16.47a12,12,0,0,0,7.11-7.11L112,75.72l16.47,44.7a12,12,0,0,0,7.11,7.11L180.28,144ZM140,40a12,12,0,0,1,12-12h12V16a12,12,0,0,1,24,0V28h12a12,12,0,0,1,0,24H188V64a12,12,0,0,1-24,0V52H152A12,12,0,0,1,140,40ZM252,88a12,12,0,0,1-12,12h-4v4a12,12,0,0,1-24,0v-4h-4a12,12,0,0,1,0-24h4V72a12,12,0,0,1,24,0v4h4A12,12,0,0,1,252,88Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",o$,[...t[1]||(t[1]=[Jb("path",{ +d:"M194.82,151.43l-55.09,20.3-20.3,55.09a7.92,7.92,0,0,1-14.86,0l-20.3-55.09-55.09-20.3a7.92,7.92,0,0,1,0-14.86l55.09-20.3,20.3-55.09a7.92,7.92,0,0,1,14.86,0l20.3,55.09,55.09,20.3A7.92,7.92,0,0,1,194.82,151.43Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M197.58,129.06,146,110l-19-51.62a15.92,15.92,0,0,0-29.88,0L78,110l-51.62,19a15.92,15.92,0,0,0,0,29.88L78,178l19,51.62a15.92,15.92,0,0,0,29.88,0L146,178l51.62-19a15.92,15.92,0,0,0,0-29.88ZM137,164.22a8,8,0,0,0-4.74,4.74L112,223.85,91.78,169A8,8,0,0,0,87,164.22L32.15,144,87,123.78A8,8,0,0,0,91.78,119L112,64.15,132.22,119a8,8,0,0,0,4.74,4.74L191.85,144ZM144,40a8,8,0,0,1,8-8h16V16a8,8,0,0,1,16,0V32h16a8,8,0,0,1,0,16H184V64a8,8,0,0,1-16,0V48H152A8,8,0,0,1,144,40ZM248,88a8,8,0,0,1-8,8h-8v8a8,8,0,0,1-16,0V96h-8a8,8,0,0,1,0-16h8V72a8,8,0,0,1,16,0v8h8A8,8,0,0,1,248,88Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",i$,[...t[2]||(t[2]=[Jb("path",{ +d:"M208,144a15.78,15.78,0,0,1-10.42,14.94L146,178l-19,51.62a15.92,15.92,0,0,1-29.88,0L78,178l-51.62-19a15.92,15.92,0,0,1,0-29.88L78,110l19-51.62a15.92,15.92,0,0,1,29.88,0L146,110l51.62,19A15.78,15.78,0,0,1,208,144ZM152,48h16V64a8,8,0,0,0,16,0V48h16a8,8,0,0,0,0-16H184V16a8,8,0,0,0-16,0V32H152a8,8,0,0,0,0,16Zm88,32h-8V72a8,8,0,0,0-16,0v8h-8a8,8,0,0,0,0,16h8v8a8,8,0,0,0,16,0V96h8a8,8,0,0,0,0-16Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",s$,[...t[3]||(t[3]=[Jb("path",{ +d:"M196.89,130.94,144.4,111.6,125.06,59.11a13.92,13.92,0,0,0-26.12,0L79.6,111.6,27.11,130.94a13.92,13.92,0,0,0,0,26.12L79.6,176.4l19.34,52.49a13.92,13.92,0,0,0,26.12,0L144.4,176.4l52.49-19.34a13.92,13.92,0,0,0,0-26.12Zm-4.15,14.86-55.08,20.3a6,6,0,0,0-3.56,3.56l-20.3,55.08a1.92,1.92,0,0,1-3.6,0L89.9,169.66a6,6,0,0,0-3.56-3.56L31.26,145.8a1.92,1.92,0,0,1,0-3.6l55.08-20.3a6,6,0,0,0,3.56-3.56l20.3-55.08a1.92,1.92,0,0,1,3.6,0l20.3,55.08a6,6,0,0,0,3.56,3.56l55.08,20.3a1.92,1.92,0,0,1,0,3.6ZM146,40a6,6,0,0,1,6-6h18V16a6,6,0,0,1,12,0V34h18a6,6,0,0,1,0,12H182V64a6,6,0,0,1-12,0V46H152A6,6,0,0,1,146,40ZM246,88a6,6,0,0,1-6,6H230v10a6,6,0,0,1-12,0V94H208a6,6,0,0,1,0-12h10V72a6,6,0,0,1,12,0V82h10A6,6,0,0,1,246,88Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",l$,[...t[4]||(t[4]=[Jb("path",{ +d:"M197.58,129.06,146,110l-19-51.62a15.92,15.92,0,0,0-29.88,0L78,110l-51.62,19a15.92,15.92,0,0,0,0,29.88L78,178l19,51.62a15.92,15.92,0,0,0,29.88,0L146,178l51.62-19a15.92,15.92,0,0,0,0-29.88ZM137,164.22a8,8,0,0,0-4.74,4.74L112,223.85,91.78,169A8,8,0,0,0,87,164.22L32.15,144,87,123.78A8,8,0,0,0,91.78,119L112,64.15,132.22,119a8,8,0,0,0,4.74,4.74L191.85,144ZM144,40a8,8,0,0,1,8-8h16V16a8,8,0,0,1,16,0V32h16a8,8,0,0,1,0,16H184V64a8,8,0,0,1-16,0V48H152A8,8,0,0,1,144,40ZM248,88a8,8,0,0,1-8,8h-8v8a8,8,0,0,1-16,0V96h-8a8,8,0,0,1,0-16h8V72a8,8,0,0,1,16,0v8h8A8,8,0,0,1,248,88Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",c$,[...t[5]||(t[5]=[Jb("path",{ +d:"M196.2,132.81l-53.36-19.65L123.19,59.8a11.93,11.93,0,0,0-22.38,0L81.16,113.16,27.8,132.81a11.93,11.93,0,0,0,0,22.38l53.36,19.65,19.65,53.36a11.93,11.93,0,0,0,22.38,0l19.65-53.36,53.36-19.65a11.93,11.93,0,0,0,0-22.38Zm-2.77,14.87L138.35,168a4,4,0,0,0-2.37,2.37l-20.3,55.08a3.92,3.92,0,0,1-7.36,0L88,170.35A4,4,0,0,0,85.65,168l-55.08-20.3a3.92,3.92,0,0,1,0-7.36L85.65,120A4,4,0,0,0,88,117.65l20.3-55.08a3.92,3.92,0,0,1,7.36,0L136,117.65a4,4,0,0,0,2.37,2.37l55.08,20.3a3.92,3.92,0,0,1,0,7.36ZM148,40a4,4,0,0,1,4-4h20V16a4,4,0,0,1,8,0V36h20a4,4,0,0,1,0,8H180V64a4,4,0,0,1-8,0V44H152A4,4,0,0,1,148,40Zm96,48a4,4,0,0,1-4,4H228v12a4,4,0,0,1-8,0V92H208a4,4,0,0,1,0-8h12V72a4,4,0,0,1,8,0V84h12A4,4,0,0,1,244,88Z" +},null,-1)])])):oy("",!0)],16))}}),d$={key:0},p$={key:1},h$={key:2},f$={key:3 +},m$={key:4},g$={key:5},v$=Hg({name:"ScalarIconSwap",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",d$,[...t[0]||(t[0]=[Jb("path",{ +d:"M228,48V152a20,20,0,0,1-20,20H112.92a12,12,0,0,1-17.41,16.49l-20-20a12,12,0,0,1,0-17l20-20A12,12,0,0,1,112.92,148H204V52H100a12,12,0,0,1-24,0V48A20,20,0,0,1,96,28H208A20,20,0,0,1,228,48ZM168,192a12,12,0,0,0-12,12H52V108h91.08a12,12,0,0,0,17.41,16.49l20-20a12,12,0,0,0,0-17l-20-20A12,12,0,0,0,143.08,84H48a20,20,0,0,0-20,20V208a20,20,0,0,0,20,20H160a20,20,0,0,0,20-20v-4A12,12,0,0,0,168,192Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",p$,[...t[1]||(t[1]=[Jb("path",{ +d:"M216,48V152a8,8,0,0,1-8,8H168v48a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V104a8,8,0,0,1,8-8H88V48a8,8,0,0,1,8-8H208A8,8,0,0,1,216,48Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M224,48V152a16,16,0,0,1-16,16H99.31l10.35,10.34a8,8,0,0,1-11.32,11.32l-24-24a8,8,0,0,1,0-11.32l24-24a8,8,0,0,1,11.32,11.32L99.31,152H208V48H96v8a8,8,0,0,1-16,0V48A16,16,0,0,1,96,32H208A16,16,0,0,1,224,48ZM168,192a8,8,0,0,0-8,8v8H48V104H156.69l-10.35,10.34a8,8,0,0,0,11.32,11.32l24-24a8,8,0,0,0,0-11.32l-24-24a8,8,0,0,0-11.32,11.32L156.69,88H48a16,16,0,0,0-16,16V208a16,16,0,0,0,16,16H160a16,16,0,0,0,16-16v-8A8,8,0,0,0,168,192Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",h$,[...t[2]||(t[2]=[Jb("path",{ +d:"M224,48V152a16,16,0,0,1-16,16H112v16a8,8,0,0,1-13.66,5.66l-24-24a8,8,0,0,1,0-11.32l24-24A8,8,0,0,1,112,136v16h96V48H96v8a8,8,0,0,1-16,0V48A16,16,0,0,1,96,32H208A16,16,0,0,1,224,48ZM168,192a8,8,0,0,0-8,8v8H48V104h96v16a8,8,0,0,0,13.66,5.66l24-24a8,8,0,0,0,0-11.32l-24-24A8,8,0,0,0,144,72V88H48a16,16,0,0,0-16,16V208a16,16,0,0,0,16,16H160a16,16,0,0,0,16-16v-8A8,8,0,0,0,168,192Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",f$,[...t[3]||(t[3]=[Jb("path",{ +d:"M222,48V152a14,14,0,0,1-14,14H94.49l13.75,13.76a6,6,0,1,1-8.48,8.48l-24-24a6,6,0,0,1,0-8.48l24-24a6,6,0,0,1,8.48,8.48L94.49,154H208a2,2,0,0,0,2-2V48a2,2,0,0,0-2-2H96a2,2,0,0,0-2,2v8a6,6,0,0,1-12,0V48A14,14,0,0,1,96,34H208A14,14,0,0,1,222,48ZM168,194a6,6,0,0,0-6,6v8a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V104a2,2,0,0,1,2-2H161.51l-13.75,13.76a6,6,0,1,0,8.48,8.48l24-24a6,6,0,0,0,0-8.48l-24-24a6,6,0,0,0-8.48,8.48L161.51,90H48a14,14,0,0,0-14,14V208a14,14,0,0,0,14,14H160a14,14,0,0,0,14-14v-8A6,6,0,0,0,168,194Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",m$,[...t[4]||(t[4]=[Jb("path",{ +d:"M224,48V152a16,16,0,0,1-16,16H99.31l10.35,10.34a8,8,0,0,1-11.32,11.32l-24-24a8,8,0,0,1,0-11.32l24-24a8,8,0,0,1,11.32,11.32L99.31,152H208V48H96v8a8,8,0,0,1-16,0V48A16,16,0,0,1,96,32H208A16,16,0,0,1,224,48ZM168,192a8,8,0,0,0-8,8v8H48V104H156.69l-10.35,10.34a8,8,0,0,0,11.32,11.32l24-24a8,8,0,0,0,0-11.32l-24-24a8,8,0,0,0-11.32,11.32L156.69,88H48a16,16,0,0,0-16,16V208a16,16,0,0,0,16,16H160a16,16,0,0,0,16-16v-8A8,8,0,0,0,168,192Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",g$,[...t[5]||(t[5]=[Jb("path",{ +d:"M220,48V152a12,12,0,0,1-12,12H89.66l17.17,17.17a4,4,0,0,1-5.66,5.66l-24-24a4,4,0,0,1,0-5.66l24-24a4,4,0,0,1,5.66,5.66L89.66,156H208a4,4,0,0,0,4-4V48a4,4,0,0,0-4-4H96a4,4,0,0,0-4,4v8a4,4,0,0,1-8,0V48A12,12,0,0,1,96,36H208A12,12,0,0,1,220,48ZM168,196a4,4,0,0,0-4,4v8a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V104a4,4,0,0,1,4-4H166.34l-17.17,17.17a4,4,0,0,0,5.66,5.66l24-24a4,4,0,0,0,0-5.66l-24-24a4,4,0,0,0-5.66,5.66L166.34,92H48a12,12,0,0,0-12,12V208a12,12,0,0,0,12,12H160a12,12,0,0,0,12-12v-8A4,4,0,0,0,168,196Z" +},null,-1)])])):oy("",!0)],16))}}),b$={key:0},y$={key:1},O$={key:2},w$={key:3 +},x$={key:4},k$={key:5},S$=Hg({name:"ScalarIconTag",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",b$,[...t[0]||(t[0]=[Jb("path",{ +d:"M246.15,133.18,146.83,33.86A19.85,19.85,0,0,0,132.69,28H40A12,12,0,0,0,28,40v92.69a19.85,19.85,0,0,0,5.86,14.14l99.32,99.32a20,20,0,0,0,28.28,0l84.69-84.69A20,20,0,0,0,246.15,133.18Zm-98.83,93.17L52,131V52h79l95.32,95.32ZM104,88A16,16,0,1,1,88,72,16,16,0,0,1,104,88Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",y$,[...t[1]||(t[1]=[Jb("path",{ +d:"M237.66,153,153,237.66a8,8,0,0,1-11.31,0L42.34,138.34A8,8,0,0,1,40,132.69V40h92.69a8,8,0,0,1,5.65,2.34l99.32,99.32A8,8,0,0,1,237.66,153Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",O$,[...t[2]||(t[2]=[Jb("path",{ +d:"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63ZM84,96A12,12,0,1,1,96,84,12,12,0,0,1,84,96Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",w$,[...t[3]||(t[3]=[Jb("path",{ +d:"M241.91,137.42,142.59,38.1a13.94,13.94,0,0,0-9.9-4.1H40a6,6,0,0,0-6,6v92.69a13.94,13.94,0,0,0,4.1,9.9l99.32,99.32a14,14,0,0,0,19.8,0l84.69-84.69A14,14,0,0,0,241.91,137.42Zm-8.49,11.31-84.69,84.69a2,2,0,0,1-2.83,0L46.59,134.1a2,2,0,0,1-.59-1.41V46h86.69a2,2,0,0,1,1.41.59l99.32,99.31A2,2,0,0,1,233.42,148.73ZM94,84A10,10,0,1,1,84,74,10,10,0,0,1,94,84Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",x$,[...t[4]||(t[4]=[Jb("path",{ +d:"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",k$,[...t[5]||(t[5]=[Jb("path",{ +d:"M240.49,138.83,141.17,39.51A11.93,11.93,0,0,0,132.69,36H40a4,4,0,0,0-4,4v92.69a11.93,11.93,0,0,0,3.51,8.48l99.32,99.32a12,12,0,0,0,17,0l84.69-84.69a12,12,0,0,0,0-17Zm-5.66,11.31-84.69,84.69a4,4,0,0,1-5.65,0L45.17,135.51A4,4,0,0,1,44,132.69V44h88.69a4,4,0,0,1,2.82,1.17l99.32,99.32A4,4,0,0,1,234.83,150.14ZM92,84a8,8,0,1,1-8-8A8,8,0,0,1,92,84Z" +},null,-1)])])):oy("",!0)],16))}}),_$={key:0},A$={key:1},T$={key:2},E$={key:3 +},C$={key:4},$$={key:5},P$=Hg({name:"ScalarIconTerminalWindow",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",_$,[...t[0]||(t[0]=[Jb("path",{ +d:"M72.5,150.63,100.79,128,72.5,105.37a12,12,0,1,1,15-18.74l40,32a12,12,0,0,1,0,18.74l-40,32a12,12,0,0,1-15-18.74ZM144,172h32a12,12,0,0,0,0-24H144a12,12,0,0,0,0,24ZM236,56V200a20,20,0,0,1-20,20H40a20,20,0,0,1-20-20V56A20,20,0,0,1,40,36H216A20,20,0,0,1,236,56Zm-24,4H44V196H212Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",A$,[...t[1]||(t[1]=[Jb("path",{ +d:"M224,56V200a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V56a8,8,0,0,1,8-8H216A8,8,0,0,1,224,56Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M128,128a8,8,0,0,1-3,6.25l-40,32a8,8,0,1,1-10-12.5L107.19,128,75,102.25a8,8,0,1,1,10-12.5l40,32A8,8,0,0,1,128,128Zm48,24H136a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm56-96V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56ZM216,200V56H40V200H216Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",T$,[...t[2]||(t[2]=[Jb("path",{ +d:"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm-91,94.25-40,32a8,8,0,1,1-10-12.5L107.19,128,75,102.25a8,8,0,1,1,10-12.5l40,32a8,8,0,0,1,0,12.5ZM176,168H136a8,8,0,0,1,0-16h40a8,8,0,0,1,0,16Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",E$,[...t[3]||(t[3]=[Jb("path",{ +d:"M126,128a6,6,0,0,1-2.25,4.69l-40,32a6,6,0,0,1-7.5-9.38L110.4,128,76.25,100.69a6,6,0,1,1,7.5-9.38l40,32A6,6,0,0,1,126,128Zm50,26H136a6,6,0,0,0,0,12h40a6,6,0,0,0,0-12Zm54-98V200a14,14,0,0,1-14,14H40a14,14,0,0,1-14-14V56A14,14,0,0,1,40,42H216A14,14,0,0,1,230,56Zm-12,0a2,2,0,0,0-2-2H40a2,2,0,0,0-2,2V200a2,2,0,0,0,2,2H216a2,2,0,0,0,2-2Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",C$,[...t[4]||(t[4]=[Jb("path",{ +d:"M128,128a8,8,0,0,1-3,6.25l-40,32a8,8,0,1,1-10-12.5L107.19,128,75,102.25a8,8,0,1,1,10-12.5l40,32A8,8,0,0,1,128,128Zm48,24H136a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm56-96V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56ZM216,200V56H40V200H216Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",$$,[...t[5]||(t[5]=[Jb("path",{ +d:"M122.5,124.88a4,4,0,0,1,0,6.24l-40,32a4,4,0,0,1-5-6.24L113.6,128,77.5,99.12a4,4,0,0,1,5-6.24ZM176,156H136a4,4,0,0,0,0,8h40a4,4,0,0,0,0-8ZM228,56V200a12,12,0,0,1-12,12H40a12,12,0,0,1-12-12V56A12,12,0,0,1,40,44H216A12,12,0,0,1,228,56Zm-8,0a4,4,0,0,0-4-4H40a4,4,0,0,0-4,4V200a4,4,0,0,0,4,4H216a4,4,0,0,0,4-4Z" +},null,-1)])])):oy("",!0)],16))}}),I$={key:0},D$={key:1},M$={key:2},N$={key:3 +},R$={key:4},L$={key:5},B$=Hg({name:"ScalarIconTextAlignLeft",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",I$,[...t[0]||(t[0]=[Jb("path",{ +d:"M28,64A12,12,0,0,1,40,52H216a12,12,0,0,1,0,24H40A12,12,0,0,1,28,64Zm12,52H168a12,12,0,0,0,0-24H40a12,12,0,0,0,0,24Zm176,16H40a12,12,0,0,0,0,24H216a12,12,0,0,0,0-24Zm-48,40H40a12,12,0,0,0,0,24H168a12,12,0,0,0,0-24Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",D$,[...t[1]||(t[1]=[Jb("path",{ +d:"M216,64V168a16,16,0,0,1-16,16H40V64Z",opacity:"0.2"},null,-1),Jb("path",{ +d:"M32,64a8,8,0,0,1,8-8H216a8,8,0,0,1,0,16H40A8,8,0,0,1,32,64Zm8,48H168a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16Zm176,24H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Zm-48,40H40a8,8,0,0,0,0,16H168a8,8,0,0,0,0-16Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",M$,[...t[2]||(t[2]=[Jb("path",{ +d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM160,184H64a8,8,0,0,1,0-16h96a8,8,0,0,1,0,16Zm32-32H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16ZM56,112a8,8,0,0,1,8-8h96a8,8,0,0,1,0,16H64A8,8,0,0,1,56,112ZM192,88H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",N$,[...t[3]||(t[3]=[Jb("path",{ +d:"M34,64a6,6,0,0,1,6-6H216a6,6,0,0,1,0,12H40A6,6,0,0,1,34,64Zm6,46H168a6,6,0,0,0,0-12H40a6,6,0,0,0,0,12Zm176,28H40a6,6,0,0,0,0,12H216a6,6,0,0,0,0-12Zm-48,40H40a6,6,0,0,0,0,12H168a6,6,0,0,0,0-12Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",R$,[...t[4]||(t[4]=[Jb("path",{ +d:"M32,64a8,8,0,0,1,8-8H216a8,8,0,0,1,0,16H40A8,8,0,0,1,32,64Zm8,48H168a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16Zm176,24H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Zm-48,40H40a8,8,0,0,0,0,16H168a8,8,0,0,0,0-16Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",L$,[...t[5]||(t[5]=[Jb("path",{ +d:"M36,64a4,4,0,0,1,4-4H216a4,4,0,0,1,0,8H40A4,4,0,0,1,36,64Zm4,44H168a4,4,0,0,0,0-8H40a4,4,0,0,0,0,8Zm176,32H40a4,4,0,0,0,0,8H216a4,4,0,0,0,0-8Zm-48,40H40a4,4,0,0,0,0,8H168a4,4,0,0,0,0-8Z" +},null,-1)])])):oy("",!0)],16))}}),j$={key:0},U$={key:1},z$={key:2},Z$={key:3 +},F$={key:4},H$={key:5},Q$=Hg({name:"ScalarIconTrash",props:{label:{},weight:{} +},setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",j$,[...t[0]||(t[0]=[Jb("path",{ +d:"M216,48H180V36A28,28,0,0,0,152,8H104A28,28,0,0,0,76,36V48H40a12,12,0,0,0,0,24h4V208a20,20,0,0,0,20,20H192a20,20,0,0,0,20-20V72h4a12,12,0,0,0,0-24ZM100,36a4,4,0,0,1,4-4h48a4,4,0,0,1,4,4V48H100Zm88,168H68V72H188ZM116,104v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Zm48,0v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",U$,[...t[1]||(t[1]=[Jb("path",{ +d:"M200,56V208a8,8,0,0,1-8,8H64a8,8,0,0,1-8-8V56Z",opacity:"0.2" +},null,-1),Jb("path",{ +d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",z$,[...t[2]||(t[2]=[Jb("path",{ +d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM112,168a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm0-120H96V40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",Z$,[...t[3]||(t[3]=[Jb("path",{ +d:"M216,50H174V40a22,22,0,0,0-22-22H104A22,22,0,0,0,82,40V50H40a6,6,0,0,0,0,12H50V208a14,14,0,0,0,14,14H192a14,14,0,0,0,14-14V62h10a6,6,0,0,0,0-12ZM94,40a10,10,0,0,1,10-10h48a10,10,0,0,1,10,10V50H94ZM194,208a2,2,0,0,1-2,2H64a2,2,0,0,1-2-2V62H194ZM110,104v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Zm48,0v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",F$,[...t[4]||(t[4]=[Jb("path",{ +d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",H$,[...t[5]||(t[5]=[Jb("path",{ +d:"M216,52H172V40a20,20,0,0,0-20-20H104A20,20,0,0,0,84,40V52H40a4,4,0,0,0,0,8H52V208a12,12,0,0,0,12,12H192a12,12,0,0,0,12-12V60h12a4,4,0,0,0,0-8ZM92,40a12,12,0,0,1,12-12h48a12,12,0,0,1,12,12V52H92ZM196,208a4,4,0,0,1-4,4H64a4,4,0,0,1-4-4V60H196ZM108,104v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Zm48,0v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Z" +},null,-1)])])):oy("",!0)],16))}}),V$={key:0},q$={key:1},W$={key:2},X$={key:3 +},G$={key:4},Y$={key:5},K$=Hg({name:"ScalarIconUpload",props:{label:{},weight:{} +},setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",V$,[...t[0]||(t[0]=[Jb("path",{ +d:"M188,184a16,16,0,1,1,16-16A16,16,0,0,1,188,184Zm36-68H180a12,12,0,0,0,0,24h40v56H36V140H76a12,12,0,0,0,0-24H32a20,20,0,0,0-20,20v64a20,20,0,0,0,20,20H224a20,20,0,0,0,20-20V136A20,20,0,0,0,224,116ZM88.49,80.49,116,53v75a12,12,0,0,0,24,0V53l27.51,27.52a12,12,0,1,0,17-17l-48-48a12,12,0,0,0-17,0l-48,48a12,12,0,1,0,17,17Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",q$,[...t[1]||(t[1]=[Jb("path",{ +d:"M232,136v64a8,8,0,0,1-8,8H32a8,8,0,0,1-8-8V136a8,8,0,0,1,8-8H224A8,8,0,0,1,232,136Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M240,136v64a16,16,0,0,1-16,16H32a16,16,0,0,1-16-16V136a16,16,0,0,1,16-16H80a8,8,0,0,1,0,16H32v64H224V136H176a8,8,0,0,1,0-16h48A16,16,0,0,1,240,136ZM85.66,77.66,120,43.31V128a8,8,0,0,0,16,0V43.31l34.34,34.35a8,8,0,0,0,11.32-11.32l-48-48a8,8,0,0,0-11.32,0l-48,48A8,8,0,0,0,85.66,77.66ZM200,168a12,12,0,1,0-12,12A12,12,0,0,0,200,168Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",W$,[...t[2]||(t[2]=[Jb("path",{ +d:"M74.34,77.66a8,8,0,0,1,0-11.32l48-48a8,8,0,0,1,11.32,0l48,48a8,8,0,0,1-11.32,11.32L136,43.31V128a8,8,0,0,1-16,0V43.31L85.66,77.66A8,8,0,0,1,74.34,77.66ZM240,136v64a16,16,0,0,1-16,16H32a16,16,0,0,1-16-16V136a16,16,0,0,1,16-16h68a4,4,0,0,1,4,4v3.46c0,13.45,11,24.79,24.46,24.54A24,24,0,0,0,152,128v-4a4,4,0,0,1,4-4h68A16,16,0,0,1,240,136Zm-40,32a12,12,0,1,0-12,12A12,12,0,0,0,200,168Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",X$,[...t[3]||(t[3]=[Jb("path",{ +d:"M238,136v64a14,14,0,0,1-14,14H32a14,14,0,0,1-14-14V136a14,14,0,0,1,14-14H80a6,6,0,0,1,0,12H32a2,2,0,0,0-2,2v64a2,2,0,0,0,2,2H224a2,2,0,0,0,2-2V136a2,2,0,0,0-2-2H176a6,6,0,0,1,0-12h48A14,14,0,0,1,238,136ZM84.24,76.24,122,38.49V128a6,6,0,0,0,12,0V38.49l37.76,37.75a6,6,0,0,0,8.48-8.48l-48-48a6,6,0,0,0-8.48,0l-48,48a6,6,0,0,0,8.48,8.48ZM198,168a10,10,0,1,0-10,10A10,10,0,0,0,198,168Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",G$,[...t[4]||(t[4]=[Jb("path",{ +d:"M240,136v64a16,16,0,0,1-16,16H32a16,16,0,0,1-16-16V136a16,16,0,0,1,16-16H80a8,8,0,0,1,0,16H32v64H224V136H176a8,8,0,0,1,0-16h48A16,16,0,0,1,240,136ZM85.66,77.66,120,43.31V128a8,8,0,0,0,16,0V43.31l34.34,34.35a8,8,0,0,0,11.32-11.32l-48-48a8,8,0,0,0-11.32,0l-48,48A8,8,0,0,0,85.66,77.66ZM200,168a12,12,0,1,0-12,12A12,12,0,0,0,200,168Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",Y$,[...t[5]||(t[5]=[Jb("path",{ +d:"M236,136v64a12,12,0,0,1-12,12H32a12,12,0,0,1-12-12V136a12,12,0,0,1,12-12H80a4,4,0,0,1,0,8H32a4,4,0,0,0-4,4v64a4,4,0,0,0,4,4H224a4,4,0,0,0,4-4V136a4,4,0,0,0-4-4H176a4,4,0,0,1,0-8h48A12,12,0,0,1,236,136ZM82.83,74.83,124,33.66V128a4,4,0,0,0,8,0V33.66l41.17,41.17a4,4,0,1,0,5.66-5.66l-48-48a4,4,0,0,0-5.66,0l-48,48a4,4,0,0,0,5.66,5.66ZM196,168a8,8,0,1,0-8,8A8,8,0,0,0,196,168Z" +},null,-1)])])):oy("",!0)],16))}}),J$={key:0},eP={key:1},tP={key:2},nP={key:3 +},rP={key:4},aP={key:5},oP=Hg({name:"ScalarIconWarning",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",J$,[...t[0]||(t[0]=[Jb("path",{ +d:"M240.26,186.1,152.81,34.23h0a28.74,28.74,0,0,0-49.62,0L15.74,186.1a27.45,27.45,0,0,0,0,27.71A28.31,28.31,0,0,0,40.55,228h174.9a28.31,28.31,0,0,0,24.79-14.19A27.45,27.45,0,0,0,240.26,186.1Zm-20.8,15.7a4.46,4.46,0,0,1-4,2.2H40.55a4.46,4.46,0,0,1-4-2.2,3.56,3.56,0,0,1,0-3.73L124,46.2a4.77,4.77,0,0,1,8,0l87.44,151.87A3.56,3.56,0,0,1,219.46,201.8ZM116,136V104a12,12,0,0,1,24,0v32a12,12,0,0,1-24,0Zm28,40a16,16,0,1,1-16-16A16,16,0,0,1,144,176Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",eP,[...t[1]||(t[1]=[Jb("path",{ +d:"M215.46,216H40.54C27.92,216,20,202.79,26.13,192.09L113.59,40.22c6.3-11,22.52-11,28.82,0l87.46,151.87C236,202.79,228.08,216,215.46,216Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM222.93,203.8a8.5,8.5,0,0,1-7.48,4.2H40.55a8.5,8.5,0,0,1-7.48-4.2,7.59,7.59,0,0,1,0-7.72L120.52,44.21a8.75,8.75,0,0,1,15,0l87.45,151.87A7.59,7.59,0,0,1,222.93,203.8ZM120,144V104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,180Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",tP,[...t[2]||(t[2]=[Jb("path",{ +d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM120,104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm8,88a12,12,0,1,1,12-12A12,12,0,0,1,128,192Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",nP,[...t[3]||(t[3]=[Jb("path",{ +d:"M235.07,189.09,147.61,37.22h0a22.75,22.75,0,0,0-39.22,0L20.93,189.09a21.53,21.53,0,0,0,0,21.72A22.35,22.35,0,0,0,40.55,222h174.9a22.35,22.35,0,0,0,19.6-11.19A21.53,21.53,0,0,0,235.07,189.09ZM224.66,204.8a10.46,10.46,0,0,1-9.21,5.2H40.55a10.46,10.46,0,0,1-9.21-5.2,9.51,9.51,0,0,1,0-9.72L118.79,43.21a10.75,10.75,0,0,1,18.42,0l87.46,151.87A9.51,9.51,0,0,1,224.66,204.8ZM122,144V104a6,6,0,0,1,12,0v40a6,6,0,0,1-12,0Zm16,36a10,10,0,1,1-10-10A10,10,0,0,1,138,180Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",rP,[...t[4]||(t[4]=[Jb("path",{ +d:"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM222.93,203.8a8.5,8.5,0,0,1-7.48,4.2H40.55a8.5,8.5,0,0,1-7.48-4.2,7.59,7.59,0,0,1,0-7.72L120.52,44.21a8.75,8.75,0,0,1,15,0l87.45,151.87A7.59,7.59,0,0,1,222.93,203.8ZM120,144V104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,180Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",aP,[...t[5]||(t[5]=[Jb("path",{ +d:"M233.34,190.09,145.88,38.22h0a20.75,20.75,0,0,0-35.76,0L22.66,190.09a19.52,19.52,0,0,0,0,19.71A20.36,20.36,0,0,0,40.54,220H215.46a20.36,20.36,0,0,0,17.86-10.2A19.52,19.52,0,0,0,233.34,190.09ZM226.4,205.8a12.47,12.47,0,0,1-10.94,6.2H40.54a12.47,12.47,0,0,1-10.94-6.2,11.45,11.45,0,0,1,0-11.72L117.05,42.21a12.76,12.76,0,0,1,21.9,0L226.4,194.08A11.45,11.45,0,0,1,226.4,205.8ZM124,144V104a4,4,0,0,1,8,0v40a4,4,0,0,1-8,0Zm12,36a8,8,0,1,1-8-8A8,8,0,0,1,136,180Z" +},null,-1)])])):oy("",!0)],16))}}),iP={key:0},sP={key:1},lP={key:2},cP={key:3 +},uP={key:4},dP={key:5},pP=Hg({name:"ScalarIconWarningCircle",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",iP,[...t[0]||(t[0]=[Jb("path",{ +d:"M128,20A108,108,0,1,0,236,128,108.12,108.12,0,0,0,128,20Zm0,192a84,84,0,1,1,84-84A84.09,84.09,0,0,1,128,212Zm-12-80V80a12,12,0,0,1,24,0v52a12,12,0,0,1-24,0Zm28,40a16,16,0,1,1-16-16A16,16,0,0,1,144,172Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",sP,[...t[1]||(t[1]=[Jb("path",{ +d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2" +},null,-1),Jb("path",{ +d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",lP,[...t[2]||(t[2]=[Jb("path",{ +d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-8,56a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm8,104a12,12,0,1,1,12-12A12,12,0,0,1,128,184Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",cP,[...t[3]||(t[3]=[Jb("path",{ +d:"M128,26A102,102,0,1,0,230,128,102.12,102.12,0,0,0,128,26Zm0,192a90,90,0,1,1,90-90A90.1,90.1,0,0,1,128,218Zm-6-82V80a6,6,0,0,1,12,0v56a6,6,0,0,1-12,0Zm16,36a10,10,0,1,1-10-10A10,10,0,0,1,138,172Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",uP,[...t[4]||(t[4]=[Jb("path",{ +d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",dP,[...t[5]||(t[5]=[Jb("path",{ +d:"M128,28A100,100,0,1,0,228,128,100.11,100.11,0,0,0,128,28Zm0,192a92,92,0,1,1,92-92A92.1,92.1,0,0,1,128,220Zm-4-84V80a4,4,0,0,1,8,0v56a4,4,0,0,1-8,0Zm12,36a8,8,0,1,1-8-8A8,8,0,0,1,136,172Z" +},null,-1)])])):oy("",!0)],16))}}),hP={key:0},fP={key:1},mP={key:2},gP={key:3 +},vP={key:4},bP={key:5},yP=Hg({name:"ScalarIconWarningOctagon",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",hP,[...t[0]||(t[0]=[Jb("path",{ +d:"M116,132V80a12,12,0,0,1,24,0v52a12,12,0,0,1-24,0ZM236,91.55v72.9a19.86,19.86,0,0,1-5.86,14.14l-51.55,51.55A19.85,19.85,0,0,1,164.45,236H91.55a19.85,19.85,0,0,1-14.14-5.86L25.86,178.59A19.86,19.86,0,0,1,20,164.45V91.55a19.86,19.86,0,0,1,5.86-14.14L77.41,25.86A19.85,19.85,0,0,1,91.55,20h72.9a19.85,19.85,0,0,1,14.14,5.86l51.55,51.55A19.86,19.86,0,0,1,236,91.55Zm-24,1.66L162.79,44H93.21L44,93.21v69.58L93.21,212h69.58L212,162.79ZM128,156a16,16,0,1,0,16,16A16,16,0,0,0,128,156Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",fP,[...t[1]||(t[1]=[Jb("path",{ +d:"M224,91.55v72.9a8,8,0,0,1-2.34,5.66l-51.55,51.55a8,8,0,0,1-5.66,2.34H91.55a8,8,0,0,1-5.66-2.34L34.34,170.11A8,8,0,0,1,32,164.45V91.55a8,8,0,0,1,2.34-5.66L85.89,34.34A8,8,0,0,1,91.55,32h72.9a8,8,0,0,1,5.66,2.34l51.55,51.55A8,8,0,0,1,224,91.55Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M120,136V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0ZM232,91.55v72.9a15.86,15.86,0,0,1-4.69,11.31l-51.55,51.55A15.86,15.86,0,0,1,164.45,232H91.55a15.86,15.86,0,0,1-11.31-4.69L28.69,175.76A15.86,15.86,0,0,1,24,164.45V91.55a15.86,15.86,0,0,1,4.69-11.31L80.24,28.69A15.86,15.86,0,0,1,91.55,24h72.9a15.86,15.86,0,0,1,11.31,4.69l51.55,51.55A15.86,15.86,0,0,1,232,91.55Zm-16,0L164.45,40H91.55L40,91.55v72.9L91.55,216h72.9L216,164.45ZM128,160a12,12,0,1,0,12,12A12,12,0,0,0,128,160Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",mP,[...t[2]||(t[2]=[Jb("path",{ +d:"M227.31,80.23,175.77,28.69A16.13,16.13,0,0,0,164.45,24H91.55a16.13,16.13,0,0,0-11.32,4.69L28.69,80.23A16.13,16.13,0,0,0,24,91.55v72.9a16.13,16.13,0,0,0,4.69,11.32l51.54,51.54A16.13,16.13,0,0,0,91.55,232h72.9a16.13,16.13,0,0,0,11.32-4.69l51.54-51.54A16.13,16.13,0,0,0,232,164.45V91.55A16.13,16.13,0,0,0,227.31,80.23ZM120,80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm8,104a12,12,0,1,1,12-12A12,12,0,0,1,128,184Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",gP,[...t[3]||(t[3]=[Jb("path",{ +d:"M122,136V80a6,6,0,0,1,12,0v56a6,6,0,0,1-12,0ZM230,91.55v72.9a13.92,13.92,0,0,1-4.1,9.9L174.35,225.9a13.92,13.92,0,0,1-9.9,4.1H91.55a13.92,13.92,0,0,1-9.9-4.1L30.1,174.35a13.92,13.92,0,0,1-4.1-9.9V91.55a13.92,13.92,0,0,1,4.1-9.9L81.65,30.1a13.92,13.92,0,0,1,9.9-4.1h72.9a13.92,13.92,0,0,1,9.9,4.1L225.9,81.65A13.92,13.92,0,0,1,230,91.55Zm-12,0a2,2,0,0,0-.59-1.42L165.87,38.59a2,2,0,0,0-1.42-.59H91.55a2,2,0,0,0-1.41.59L38.58,90.13A2,2,0,0,0,38,91.55v72.9a2,2,0,0,0,.59,1.42l51.54,51.54a2,2,0,0,0,1.42.59h72.9a2,2,0,0,0,1.41-.59l51.56-51.54a2,2,0,0,0,.58-1.42ZM128,162a10,10,0,1,0,10,10A10,10,0,0,0,128,162Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",vP,[...t[4]||(t[4]=[Jb("path",{ +d:"M120,136V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0ZM232,91.55v72.9a15.86,15.86,0,0,1-4.69,11.31l-51.55,51.55A15.86,15.86,0,0,1,164.45,232H91.55a15.86,15.86,0,0,1-11.31-4.69L28.69,175.76A15.86,15.86,0,0,1,24,164.45V91.55a15.86,15.86,0,0,1,4.69-11.31L80.24,28.69A15.86,15.86,0,0,1,91.55,24h72.9a15.86,15.86,0,0,1,11.31,4.69l51.55,51.55A15.86,15.86,0,0,1,232,91.55Zm-16,0L164.45,40H91.55L40,91.55v72.9L91.55,216h72.9L216,164.45ZM128,160a12,12,0,1,0,12,12A12,12,0,0,0,128,160Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",bP,[...t[5]||(t[5]=[Jb("path",{ +d:"M124,136V80a4,4,0,0,1,8,0v56a4,4,0,0,1-8,0ZM228,91.55v72.9a12,12,0,0,1-3.51,8.49l-51.55,51.55a12,12,0,0,1-8.49,3.51H91.55a12,12,0,0,1-8.49-3.51L31.51,172.94A12,12,0,0,1,28,164.45V91.55a12,12,0,0,1,3.51-8.49L83.06,31.51A12,12,0,0,1,91.55,28h72.9a12,12,0,0,1,8.49,3.51l51.55,51.55A12,12,0,0,1,228,91.55Zm-8,0a4,4,0,0,0-1.17-2.83L167.28,37.17A4.06,4.06,0,0,0,164.45,36H91.55a4.06,4.06,0,0,0-2.83,1.17L37.17,88.72A4,4,0,0,0,36,91.55v72.9a4,4,0,0,0,1.17,2.83l51.55,51.55A4.06,4.06,0,0,0,91.55,220h72.9a4.06,4.06,0,0,0,2.83-1.17l51.55-51.55a4,4,0,0,0,1.17-2.83ZM128,164a8,8,0,1,0,8,8A8,8,0,0,0,128,164Z" +},null,-1)])])):oy("",!0)],16))}}),OP={key:0},wP={key:1},xP={key:2},kP={key:3 +},SP={key:4},_P={key:5},AP=Hg({name:"ScalarIconWebhooksLogo",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",OP,[...t[0]||(t[0]=[Jb("path",{ +d:"M192,180H118.71a56,56,0,1,1-104.6-37.46,12,12,0,1,1,21.37,10.92A31.64,31.64,0,0,0,32,168a32,32,0,0,0,64,0,12,12,0,0,1,12-12h84a12,12,0,0,1,0,24Zm0-68a55.9,55.9,0,0,0-18.45,3.12L138.22,57.71a12,12,0,0,0-20.44,12.58l40.94,66.52a12,12,0,0,0,16.52,3.93,32,32,0,1,1,19.68,59.13A12,12,0,0,0,196,223.82a10.05,10.05,0,0,0,1.09,0A56,56,0,0,0,192,112ZM57.71,178.22a12,12,0,0,0,16.51-3.93l40.94-66.52a12,12,0,0,0-3.92-16.51,32,32,0,1,1,45.28-41.8,12,12,0,1,0,21.37-10.92A56,56,0,1,0,89.1,104.32L53.78,161.71A12,12,0,0,0,57.71,178.22Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",wP,[...t[1]||(t[1]=[Jb("path",{ +d:"M128,104a40,40,0,1,1,40-40A40,40,0,0,1,128,104Zm64,24a40,40,0,1,0,40,40A40,40,0,0,0,192,128ZM64,128a40,40,0,1,0,40,40A40,40,0,0,0,64,128Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M178.16,176H111.32A48,48,0,1,1,25.6,139.19a8,8,0,0,1,12.8,9.61A31.69,31.69,0,0,0,32,168a32,32,0,0,0,64,0,8,8,0,0,1,8-8h74.16a16,16,0,1,1,0,16ZM64,184a16,16,0,0,0,14.08-23.61l35.77-58.14a8,8,0,0,0-2.62-11,32,32,0,1,1,46.1-40.06A8,8,0,1,0,172,44.79a48,48,0,1,0-75.62,55.33L64.44,152c-.15,0-.29,0-.44,0a16,16,0,0,0,0,32Zm128-64a48.18,48.18,0,0,0-18,3.49L142.08,71.6A16,16,0,1,0,128,80l.44,0,35.78,58.15a8,8,0,0,0,11,2.61A32,32,0,1,1,192,200a8,8,0,0,0,0,16,48,48,0,0,0,0-96Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",xP,[...t[2]||(t[2]=[Jb("path",{ +d:"M50.15,160,89.07,92.57l-2.24-3.88a48,48,0,1,1,85.05-44.17,8.17,8.17,0,0,1-3.19,10.4,8,8,0,0,1-11.35-3.72,32,32,0,1,0-56.77,29.3.57.57,0,0,1,.08.13l13.83,23.94a8,8,0,0,1,0,8L77.86,176a16,16,0,0,1-27.71-16Zm141-40H178.81L141.86,56a16,16,0,0,0-27.71,16l34.64,60a8,8,0,0,0,6.92,4h35.63c17.89,0,32.95,14.64,32.66,32.53A32,32,0,0,1,192.31,200a8.23,8.23,0,0,0-8.28,7.33,8,8,0,0,0,8,8.67,48.05,48.05,0,0,0,48-48.93C239.49,140.79,217.48,120,191.19,120ZM208,167.23c-.4-8.61-7.82-15.23-16.43-15.23H114.81a8,8,0,0,0-6.93,4L91.72,184h0a32,32,0,1,1-53.47-35,8.2,8.2,0,0,0-.92-11,8,8,0,0,0-11.72,1.17A47.63,47.63,0,0,0,16,167.54,48,48,0,0,0,105.55,192v0l4.62-8H192A16,16,0,0,0,208,167.23Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",kP,[...t[3]||(t[3]=[Jb("path",{ +d:"M179.37,174H109.6a46,46,0,1,1-82.4-33.61,6,6,0,0,1,9.6,7.21A33.68,33.68,0,0,0,30,168a34,34,0,0,0,68,0,6,6,0,0,1,6-6h75.37a14,14,0,1,1,0,12ZM64,182a14,14,0,0,0,11.73-21.62l36.42-59.18a6,6,0,0,0-2-8.25,34,34,0,1,1,49-42.57,6,6,0,1,0,11-4.79A46,46,0,1,0,99,99.7L65.52,154.08c-.5-.05-1-.08-1.52-.08a14,14,0,0,0,0,28Zm128-60a46,46,0,0,0-18.8,4L139.73,71.61A14,14,0,1,0,128,78a12.79,12.79,0,0,0,1.52-.09l36.4,59.17a6.05,6.05,0,0,0,3.73,2.69,6,6,0,0,0,4.53-.73A34,34,0,1,1,192,202a6,6,0,0,0,0,12,46,46,0,0,0,0-92Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",SP,[...t[4]||(t[4]=[Jb("path",{ +d:"M178.16,176H111.32A48,48,0,1,1,25.6,139.19a8,8,0,0,1,12.8,9.61A31.69,31.69,0,0,0,32,168a32,32,0,0,0,64,0,8,8,0,0,1,8-8h74.16a16,16,0,1,1,0,16ZM64,184a16,16,0,0,0,14.08-23.61l35.77-58.14a8,8,0,0,0-2.62-11,32,32,0,1,1,46.1-40.06A8,8,0,1,0,172,44.79a48,48,0,1,0-75.62,55.33L64.44,152c-.15,0-.29,0-.44,0a16,16,0,0,0,0,32Zm128-64a48.18,48.18,0,0,0-18,3.49L142.08,71.6A16,16,0,1,0,128,80l.44,0,35.78,58.15a8,8,0,0,0,11,2.61A32,32,0,1,1,192,200a8,8,0,0,0,0,16,48,48,0,0,0,0-96Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",_P,[...t[5]||(t[5]=[Jb("path",{ +d:"M180.7,172H107.81a44,44,0,1,1-79-30.41,4,4,0,0,1,6.4,4.81A35.67,35.67,0,0,0,28,168a36,36,0,0,0,72,0,4,4,0,0,1,4-4h76.7a12,12,0,1,1,0,8ZM64,180a12,12,0,0,0,9.33-19.54l37.11-60.3a4,4,0,0,0-1.31-5.51A36,36,0,1,1,161,49.58a4,4,0,1,0,7.33-3.19,44,44,0,1,0-66.71,52.83l-35.1,57.05A11.58,11.58,0,0,0,64,156a12,12,0,0,0,0,24Zm128-56a44,44,0,0,0-19.56,4.58l-35.11-57A12,12,0,1,0,128,76a12.24,12.24,0,0,0,2.52-.27L167.63,136a4,4,0,0,0,5.5,1.31A36,36,0,1,1,192,204a4,4,0,0,0,0,8,44,44,0,0,0,0-88Z" +},null,-1)])])):oy("",!0)],16))}}),TP={key:0},EP={key:1},CP={key:2},$P={key:3 +},PP={key:4},IP={key:5},DP=Hg({name:"ScalarIconX",props:{label:{},weight:{}}, +setup(e){const t=e,{bind:n,weight:r}=E_(t);return(e,t)=>(Fb(),qb("svg",cy({ +xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",TP,[...t[0]||(t[0]=[Jb("path",{ +d:"M208.49,191.51a12,12,0,0,1-17,17L128,145,64.49,208.49a12,12,0,0,1-17-17L111,128,47.51,64.49a12,12,0,0,1,17-17L128,111l63.51-63.52a12,12,0,0,1,17,17L145,128Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",EP,[...t[1]||(t[1]=[Jb("path",{ +d:"M216,56V200a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V56A16,16,0,0,1,56,40H200A16,16,0,0,1,216,56Z", +opacity:"0.2"},null,-1),Jb("path",{ +d:"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",CP,[...t[2]||(t[2]=[Jb("path",{ +d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM181.66,170.34a8,8,0,0,1-11.32,11.32L128,139.31,85.66,181.66a8,8,0,0,1-11.32-11.32L116.69,128,74.34,85.66A8,8,0,0,1,85.66,74.34L128,116.69l42.34-42.35a8,8,0,0,1,11.32,11.32L139.31,128Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",$P,[...t[3]||(t[3]=[Jb("path",{ +d:"M204.24,195.76a6,6,0,1,1-8.48,8.48L128,136.49,60.24,204.24a6,6,0,0,1-8.48-8.48L119.51,128,51.76,60.24a6,6,0,0,1,8.48-8.48L128,119.51l67.76-67.75a6,6,0,0,1,8.48,8.48L136.49,128Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",PP,[...t[4]||(t[4]=[Jb("path",{ +d:"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",IP,[...t[5]||(t[5]=[Jb("path",{ +d:"M202.83,197.17a4,4,0,0,1-5.66,5.66L128,133.66,58.83,202.83a4,4,0,0,1-5.66-5.66L122.34,128,53.17,58.83a4,4,0,0,1,5.66-5.66L128,122.34l69.17-69.17a4,4,0,1,1,5.66,5.66L133.66,128Z" +},null,-1)])])):oy("",!0)],16))}}),MP={key:0},NP={key:1},RP={key:2},LP={key:3 +},BP={key:4},jP={key:5},UP=Hg({name:"ScalarIconXCircle",props:{label:{}, +weight:{}},setup(e){const t=e,{bind:n,weight:r}=E_(t) +;return(e,t)=>(Fb(),qb("svg",cy({xmlns:"http://www.w3.org/2000/svg", +viewBox:"0 0 256 256",fill:"currentColor" +},xm(n)),[Av(e.$slots,"default"),"bold"===xm(r)?(Fb(), +qb("g",MP,[...t[0]||(t[0]=[Jb("path",{ +d:"M168.49,104.49,145,128l23.52,23.51a12,12,0,0,1-17,17L128,145l-23.51,23.52a12,12,0,0,1-17-17L111,128,87.51,104.49a12,12,0,0,1,17-17L128,111l23.51-23.52a12,12,0,0,1,17,17ZM236,128A108,108,0,1,1,128,20,108.12,108.12,0,0,1,236,128Zm-24,0a84,84,0,1,0-84,84A84.09,84.09,0,0,0,212,128Z" +},null,-1)])])):"duotone"===xm(r)?(Fb(),qb("g",NP,[...t[1]||(t[1]=[Jb("path",{ +d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2" +},null,-1),Jb("path",{ +d:"M165.66,101.66,139.31,128l26.35,26.34a8,8,0,0,1-11.32,11.32L128,139.31l-26.34,26.35a8,8,0,0,1-11.32-11.32L116.69,128,90.34,101.66a8,8,0,0,1,11.32-11.32L128,116.69l26.34-26.35a8,8,0,0,1,11.32,11.32ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z" +},null,-1)])])):"fill"===xm(r)?(Fb(),qb("g",RP,[...t[2]||(t[2]=[Jb("path",{ +d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm37.66,130.34a8,8,0,0,1-11.32,11.32L128,139.31l-26.34,26.35a8,8,0,0,1-11.32-11.32L116.69,128,90.34,101.66a8,8,0,0,1,11.32-11.32L128,116.69l26.34-26.35a8,8,0,0,1,11.32,11.32L139.31,128Z" +},null,-1)])])):"light"===xm(r)?(Fb(),qb("g",LP,[...t[3]||(t[3]=[Jb("path",{ +d:"M164.24,100.24,136.48,128l27.76,27.76a6,6,0,1,1-8.48,8.48L128,136.48l-27.76,27.76a6,6,0,0,1-8.48-8.48L119.52,128,91.76,100.24a6,6,0,0,1,8.48-8.48L128,119.52l27.76-27.76a6,6,0,0,1,8.48,8.48ZM230,128A102,102,0,1,1,128,26,102.12,102.12,0,0,1,230,128Zm-12,0a90,90,0,1,0-90,90A90.1,90.1,0,0,0,218,128Z" +},null,-1)])])):"regular"===xm(r)?(Fb(),qb("g",BP,[...t[4]||(t[4]=[Jb("path",{ +d:"M165.66,101.66,139.31,128l26.35,26.34a8,8,0,0,1-11.32,11.32L128,139.31l-26.34,26.35a8,8,0,0,1-11.32-11.32L116.69,128,90.34,101.66a8,8,0,0,1,11.32-11.32L128,116.69l26.34-26.35a8,8,0,0,1,11.32,11.32ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z" +},null,-1)])])):"thin"===xm(r)?(Fb(),qb("g",jP,[...t[5]||(t[5]=[Jb("path",{ +d:"M162.83,98.83,133.66,128l29.17,29.17a4,4,0,0,1-5.66,5.66L128,133.66,98.83,162.83a4,4,0,0,1-5.66-5.66L122.34,128,93.17,98.83a4,4,0,0,1,5.66-5.66L128,122.34l29.17-29.17a4,4,0,1,1,5.66,5.66ZM228,128A100,100,0,1,1,128,28,100.11,100.11,0,0,1,228,128Zm-8,0a92,92,0,1,0-92,92A92.1,92.1,0,0,0,220,128Z" +},null,-1)])])):oy("",!0)],16))}}),zP=Hg({__name:"ScalarCheckbox",props:{ +selected:{type:Boolean},type:{default:"checkbox"}}, +setup:e=>(t,n)=>(Fb(),qb("div",{ +class:Dh(["flex size-4 items-center justify-center p-0.75",[e.selected?"bg-c-accent text-b-1":"text-transparent shadow-border","checkbox"===e.type?"rounded":"rounded-full"]]) +},[e.selected?(Fb(),Wb(xm(LA),{key:0,class:"size-3",weight:"bold" +})):oy("",!0)],2))}),ZP=Symbol(),FP=Hg({inheritAttrs:!1, +__name:"ScalarFormInput",props:{is:{default:"button"}},setup(e){ +const{cx:t}=h_(),n=ug(ZP,!1),r=d_({ +base:["bg-b-1.5 flex items-center text-c-2 gap-0.75 px-3 py-2.5 ","outline-offset-[-1px] has-[:focus-visible]:outline"], +variants:{grouped:{true:"first:rounded-t-[inherit] last:rounded-b-[inherit]", +false:"rounded border"},button:{true:"cursor-pointer hover:bg-b-2"}}}) +;return(a,o)=>(Fb(),Wb(wv(e.is),cy({type:"button"===e.is?"button":void 0 +},xm(t)(xm(r)({button:"button"===e.is,grouped:xm(n)}))),{ +default:ig((()=>[Av(a.$slots,"default")])),_:3},16,["type"]))}}),HP={ +class:"flex-1 text-left min-w-0 truncate"},QP=["type"],VP=Hg({inheritAttrs:!1, +__name:"ScalarCheckboxInput",props:Bv({type:{default:"checkbox"}},{modelValue:{ +type:Boolean},modelModifiers:{}}),emits:["update:modelValue"],setup(e){ +const t=tb(e,"modelValue"),{stylingAttrsCx:n,otherAttrs:r}=h_() +;return(a,o)=>(Fb(),Wb(xm(FP),cy({is:"label" +},xm(n)("cursor-pointer gap-2 hover:bg-b-2",{"text-c-1":t.value})),{ +default:ig((()=>[ey(zP,{class:"shrink-0",selected:t.value,type:e.type +},null,8,["selected","type"]),Jb("div",HP,[Av(a.$slots,"default")]),sg(Jb("input",cy({ +"onUpdate:modelValue":o[0]||(o[0]=e=>t.value=e),class:"sr-only",type:e.type +},xm(r)),null,16,QP),[[LO,t.value]])])),_:3},16))}}),qP=Hg({inheritAttrs:!1, +__name:"ScalarFormInputGroup",props:{is:{default:"div"}},setup(e){ +const{cx:t}=h_() +;return cg(ZP,!0),(n,r)=>(Fb(),Wb(wv(e.is),Mh(ty(xm(t)("flex flex-col border rounded divide-y"))),{ +default:ig((()=>[Av(n.$slots,"default")])),_:3},16))}}),WP=Hg({ +__name:"ScalarCheckboxRadioGroup",props:Bv({options:{default:()=>[]}},{ +modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(e){ +const t=tb(e,"modelValue"),n=Qg();return(r,a)=>(Fb(),Wb(xm(qP),null,{ +default:ig((()=>[(Fb(!0),qb(Lb,null,Sv(e.options,(e=>(Fb(),Wb(VP,{key:e.value, +modelValue:t.value?.value===e.value,name:xm(n),type:"radio",value:e.value, +"onUpdate:modelValue":n=>t.value=n?e:void 0},{ +default:ig((()=>[ry(Uh(e.label),1)])),_:2 +},1032,["modelValue","name","value","onUpdate:modelValue"])))),128))])),_:1}))} +}),XP=Hg({inheritAttrs:!1,__name:"ScalarCopyBackdrop",setup(e){const{cx:t}=h_() +;return(e,n)=>(Fb(), +qb("div",Mh(ty(xm(t)("absolute inset-y-0.5 -z-2 left-0 right-0 bg-b-1 rounded"))),null,16)) +}});let GP=class{constructor(e,t,n){ +this.property=e,this.normal=t,n&&(this.space=n)}};function YP(e,t){ +const n={},r={};let a=-1 +;for(;++a"xlink:"+t.slice(5).toLowerCase(),properties:{ +xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null, +xLinkShow:null,xLinkTitle:null,xLinkType:null}}),gI=fI({space:"xml", +transform:(e,t)=>"xml:"+t.slice(3).toLowerCase(),properties:{xmlLang:null, +xmlBase:null,xmlSpace:null}});function vI(e,t){return t in e?e[t]:t} +function bI(e,t){return vI(e,t.toLowerCase())}const yI=fI({space:"xmlns", +attributes:{xmlnsxlink:"xmlns:xlink"},transform:bI,properties:{xmlns:null, +xmlnsXLink:null}}),OI=fI({ +transform:(e,t)=>"role"===t?t:"aria-"+t.slice(4).toLowerCase(),properties:{ +ariaActiveDescendant:null,ariaAtomic:nI,ariaAutoComplete:null,ariaBusy:nI, +ariaChecked:nI,ariaColCount:aI,ariaColIndex:aI,ariaColSpan:aI,ariaControls:oI, +ariaCurrent:null,ariaDescribedBy:oI,ariaDetails:null,ariaDisabled:nI, +ariaDropEffect:oI,ariaErrorMessage:null,ariaExpanded:nI,ariaFlowTo:oI, +ariaGrabbed:nI,ariaHasPopup:null,ariaHidden:nI,ariaInvalid:null, +ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:oI,ariaLevel:aI, +ariaLive:null,ariaModal:nI,ariaMultiLine:nI,ariaMultiSelectable:nI, +ariaOrientation:null,ariaOwns:oI,ariaPlaceholder:null,ariaPosInSet:aI, +ariaPressed:nI,ariaReadOnly:nI,ariaRelevant:null,ariaRequired:nI, +ariaRoleDescription:oI,ariaRowCount:aI,ariaRowIndex:aI,ariaRowSpan:aI, +ariaSelected:nI,ariaSetSize:aI,ariaSort:null,ariaValueMax:aI,ariaValueMin:aI, +ariaValueNow:aI,ariaValueText:null,role:null}}),wI=fI({space:"html",attributes:{ +acceptcharset:"accept-charset",classname:"class",htmlfor:"for", +httpequiv:"http-equiv"},transform:bI, +mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null, +accept:iI,acceptCharset:oI,accessKey:oI,action:null,allow:null, +allowFullScreen:tI,allowPaymentRequest:tI,allowUserMedia:tI,alt:null,as:null, +async:tI,autoCapitalize:null,autoComplete:oI,autoFocus:tI,autoPlay:tI, +blocking:oI,capture:null,charSet:null,checked:tI,cite:null,className:oI,cols:aI, +colSpan:null,content:null,contentEditable:nI,controls:tI,controlsList:oI, +coords:aI|iI,crossOrigin:null,data:null,dateTime:null,decoding:null,default:tI, +defer:tI,dir:null,dirName:null,disabled:tI,download:rI,draggable:nI, +encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null, +formEncType:null,formMethod:null,formNoValidate:tI,formTarget:null,headers:oI, +height:aI,hidden:tI,high:aI,href:null,hrefLang:null,htmlFor:oI,httpEquiv:oI, +id:null,imageSizes:null,imageSrcSet:null,inert:tI,inputMode:null,integrity:null, +is:null,isMap:tI,itemId:null,itemProp:oI,itemRef:oI,itemScope:tI,itemType:oI, +kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:tI, +low:aI,manifest:null,max:null,maxLength:aI,media:null,method:null,min:null, +minLength:aI,multiple:tI,muted:tI,name:null,nonce:null,noModule:tI, +noValidate:tI,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null, +onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null, +onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null, +onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null, +onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null, +onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null, +onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null, +onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null, +onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null, +onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null, +onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null, +onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null, +onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null, +onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null, +onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null, +onRejectionHandled:null,onReset:null,onResize:null,onScroll:null, +onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null, +onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null, +onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null, +onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:tI, +optimum:aI,pattern:null,ping:oI,placeholder:null,playsInline:tI,popover:null, +popoverTarget:null,popoverTargetAction:null,poster:null,preload:null, +readOnly:tI,referrerPolicy:null,rel:oI,required:tI,reversed:tI,rows:aI, +rowSpan:aI,sandbox:oI,scope:null,scoped:tI,seamless:tI,selected:tI, +shadowRootClonable:tI,shadowRootDelegatesFocus:tI,shadowRootMode:null, +shape:null,size:aI,sizes:null,slot:null,span:aI,spellCheck:nI,src:null, +srcDoc:null,srcLang:null,srcSet:null,start:aI,step:null,style:null,tabIndex:aI, +target:null,title:null,translate:null,type:null,typeMustMatch:tI,useMap:null, +value:nI,width:aI,wrap:null,writingSuggestions:null,align:null,aLink:null, +archive:oI,axis:null,background:null,bgColor:null,border:aI,borderColor:null, +bottomMargin:aI,cellPadding:null,cellSpacing:null,char:null,charOff:null, +classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null, +compact:tI,declare:tI,event:null,face:null,frame:null,frameBorder:null, +hSpace:aI,leftMargin:aI,link:null,longDesc:null,lowSrc:null,marginHeight:aI, +marginWidth:aI,noResize:tI,noHref:tI,noShade:tI,noWrap:tI,object:null, +profile:null,prompt:null,rev:null,rightMargin:aI,rules:null,scheme:null, +scrolling:nI,standby:null,summary:null,text:null,topMargin:aI,valueType:null, +version:null,vAlign:null,vLink:null,vSpace:aI,allowTransparency:null, +autoCorrect:null,autoSave:null,disablePictureInPicture:tI, +disableRemotePlayback:tI,prefix:null,property:null,results:aI,security:null, +unselectable:null}}),xI=fI({space:"svg",attributes:{ +accentHeight:"accent-height",alignmentBaseline:"alignment-baseline", +arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height", +className:"class",clipPath:"clip-path",clipRule:"clip-rule", +colorInterpolation:"color-interpolation", +colorInterpolationFilters:"color-interpolation-filters", +colorProfile:"color-profile",colorRendering:"color-rendering", +crossOrigin:"crossorigin",dataType:"datatype", +dominantBaseline:"dominant-baseline",enableBackground:"enable-background", +fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color", +floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size", +fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch", +fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight", +glyphName:"glyph-name", +glyphOrientationHorizontal:"glyph-orientation-horizontal", +glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang", +horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x", +horizOriginY:"horiz-origin-y",imageRendering:"image-rendering", +letterSpacing:"letter-spacing",lightingColor:"lighting-color", +markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start", +navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right", +navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right", +navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right", +onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint", +onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel", +onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange", +onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange", +onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend", +onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave", +onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop", +onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend", +onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin", +onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput", +onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress", +onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata", +onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart", +onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter", +onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout", +onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel", +onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide", +onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay", +onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress", +onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset", +onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked", +onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled", +onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend", +onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload", +onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom", +overlinePosition:"overline-position",overlineThickness:"overline-thickness", +paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events", +referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent", +shapeRendering:"shape-rendering",stopColor:"stop-color", +stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position", +strikethroughThickness:"strikethrough-thickness", +strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset", +strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin", +strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity", +strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor", +textDecoration:"text-decoration",textRendering:"text-rendering", +transformOrigin:"transform-origin",typeOf:"typeof", +underlinePosition:"underline-position",underlineThickness:"underline-thickness", +unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range", +unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging", +vIdeographic:"v-ideographic",vMathematical:"v-mathematical", +vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x", +vertOriginY:"vert-origin-y",wordSpacing:"word-spacing", +writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder", +timelineBegin:"timelinebegin"},transform:vI,properties:{about:sI, +accentHeight:aI,accumulate:null,additive:null,alignmentBaseline:null, +alphabetic:aI,amplitude:aI,arabicForm:null,ascent:aI,attributeName:null, +attributeType:null,azimuth:aI,bandwidth:null,baselineShift:null, +baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:aI,by:null, +calcMode:null,capHeight:aI,className:oI,clip:null,clipPath:null, +clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null, +colorInterpolationFilters:null,colorProfile:null,colorRendering:null, +content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null, +cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:aI, +diffuseConstant:aI,direction:null,display:null,dur:null,divisor:aI, +dominantBaseline:null,download:tI,dx:null,dy:null,edgeMode:null,editable:null, +elevation:aI,enableBackground:null,end:null,event:null,exponent:aI, +externalResourcesRequired:null,fill:null,fillOpacity:aI,fillRule:null, +filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null, +focusable:null,focusHighlight:null,fontFamily:null,fontSize:null, +fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null, +fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:iI,g2:iI, +glyphName:iI,glyphOrientationHorizontal:null,glyphOrientationVertical:null, +glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:aI, +hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null, +horizAdvX:aI,horizOriginX:aI,horizOriginY:aI,id:null,ideographic:aI, +imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:aI,k:aI, +k1:aI,k2:aI,k3:aI,k4:aI,kernelMatrix:sI,kernelUnitLength:null,keyPoints:null, +keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null, +letterSpacing:null,lightingColor:null,limitingConeAngle:aI,local:null, +markerEnd:null,markerMid:null,markerStart:null,markerHeight:null, +markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null, +maskUnits:null,mathematical:null,max:null,media:null, +mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:aI, +mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null, +navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null, +navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null, +observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null, +onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null, +onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null, +onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null, +onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null, +onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null, +onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null, +onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null, +onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null, +onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null, +onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null, +onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null, +onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null, +onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null, +onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null, +onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null, +onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null, +onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null, +orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:aI, +overlineThickness:aI,paintOrder:null,panose1:null,path:null,pathLength:aI, +patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null, +ping:oI,pitch:null,playbackOrder:null,pointerEvents:null,points:null, +pointsAtX:aI,pointsAtY:aI,pointsAtZ:aI,preserveAlpha:null, +preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:sI,r:null, +radius:null,referrerPolicy:null,refX:null,refY:null,rel:sI,rev:sI, +renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:sI, +requiredFeatures:sI,requiredFonts:sI,requiredFormats:sI,resource:null, +restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null, +shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:aI, +specularExponent:aI,spreadMethod:null,spacing:null,startOffset:null, +stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null, +stopOpacity:null,strikethroughPosition:aI,strikethroughThickness:aI,string:null, +stroke:null,strokeDashArray:sI,strokeDashOffset:null,strokeLineCap:null, +strokeLineJoin:null,strokeMiterLimit:aI,strokeOpacity:aI,strokeWidth:null, +style:null,surfaceScale:aI,syncBehavior:null,syncBehaviorDefault:null, +syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:sI, +tabIndex:aI,tableValues:null,target:null,targetX:aI,targetY:aI,textAnchor:null, +textDecoration:null,textRendering:null,textLength:null,timelineBegin:null, +title:null,transformBehavior:null,type:null,typeOf:sI,to:null,transform:null, +transformOrigin:null,u1:null,u2:null,underlinePosition:aI,underlineThickness:aI, +unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:aI,values:null, +vAlphabetic:aI,vMathematical:aI,vectorEffect:null,vHanging:aI,vIdeographic:aI, +version:null,vertAdvY:aI,vertOriginX:aI,vertOriginY:aI,viewBox:null, +viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null, +writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:aI,y:null, +y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null} +}),kI=/^data[-\w.:]+$/i,SI=/-[a-z]/g,_I=/[A-Z]/g;function AI(e,t){const n=KP(t) +;let r=t,a=JP;if(n in e.normal)return e.property[e.normal[n]] +;if(n.length>4&&"data"===n.slice(0,4)&&kI.test(t)){if("-"===t.charAt(4)){ +const e=t.slice(5).replace(SI,EI);r="data"+e.charAt(0).toUpperCase()+e.slice(1) +}else{const e=t.slice(4);if(!SI.test(e)){let n=e.replace(_I,TI) +;"-"!==n.charAt(0)&&(n="-"+n),t="data"+n}}a=dI}return new a(r,t)}function TI(e){ +return"-"+e.toLowerCase()}function EI(e){return e.charAt(1).toUpperCase()} +const CI=YP([gI,mI,yI,OI,wI],"html"),$I=YP([gI,mI,yI,OI,xI],"svg") +;function PI(e){const t=[],n=String(e||"");let r=n.indexOf(","),a=0,o=!1 +;for(;!o;){-1===r&&(r=n.length,o=!0);const e=n.slice(a,r).trim() +;!e&&o||t.push(e),a=r+1,r=n.indexOf(",",a)}return t}function II(e,t){ +const n=t||{} +;return(""===e[e.length-1]?[...e,""]:e).join((n.padRight?" ":"")+","+(!1===n.padLeft?"":" ")).trim() +}const DI=/[#.]/g;function MI(e){const t=String(e||"").trim() +;return t?t.split(/[ \t\n\r\f]+/g):[]}function NI(e){return e.join(" ").trim()} +const RI=new Set(["button","menu","reset","submit"]),LI={}.hasOwnProperty +;function BI(e,t,n){const r=n&&function(e){const t={};let n=-1 +;for(;++n-1&&ee)return{ +line:t+1,column:e-(t>0?n[t-1]:0)+1,offset:e}},toOffset:function(e){ +const t=e&&e.line,r=e&&e.column +;if("number"==typeof t&&"number"==typeof r&&!Number.isNaN(t)&&!Number.isNaN(r)&&t-1 in n){ +const e=(n[t-2]||0)+r-1||0;if(e>-1&&e=55296&&e<=57343}function dD(e){ +return 32!==e&&10!==e&&13!==e&&9!==e&&12!==e&&e>=1&&e<=31||e>=127&&e<=159} +function pD(e){return e>=64976&&e<=65007||eD.has(e)}var hD,fD +;(fD=hD||(hD={})).controlCharacterInInputStream="control-character-in-input-stream", +fD.noncharacterInInputStream="noncharacter-in-input-stream", +fD.surrogateInInputStream="surrogate-in-input-stream", +fD.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus", +fD.endTagWithAttributes="end-tag-with-attributes", +fD.endTagWithTrailingSolidus="end-tag-with-trailing-solidus", +fD.unexpectedSolidusInTag="unexpected-solidus-in-tag", +fD.unexpectedNullCharacter="unexpected-null-character", +fD.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name", +fD.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name", +fD.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name", +fD.missingEndTagName="missing-end-tag-name", +fD.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name", +fD.unknownNamedCharacterReference="unknown-named-character-reference", +fD.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference", +fD.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier", +fD.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value", +fD.eofBeforeTagName="eof-before-tag-name", +fD.eofInTag="eof-in-tag",fD.missingAttributeValue="missing-attribute-value", +fD.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes", +fD.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword", +fD.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers", +fD.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword", +fD.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier", +fD.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier", +fD.missingDoctypePublicIdentifier="missing-doctype-public-identifier", +fD.missingDoctypeSystemIdentifier="missing-doctype-system-identifier", +fD.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier", +fD.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier", +fD.cdataInHtmlContent="cdata-in-html-content", +fD.incorrectlyOpenedComment="incorrectly-opened-comment", +fD.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text", +fD.eofInDoctype="eof-in-doctype", +fD.nestedComment="nested-comment",fD.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment", +fD.eofInComment="eof-in-comment", +fD.incorrectlyClosedComment="incorrectly-closed-comment", +fD.eofInCdata="eof-in-cdata", +fD.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference", +fD.nullCharacterReference="null-character-reference", +fD.surrogateCharacterReference="surrogate-character-reference", +fD.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range", +fD.controlCharacterReference="control-character-reference", +fD.noncharacterCharacterReference="noncharacter-character-reference", +fD.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name", +fD.missingDoctypeName="missing-doctype-name", +fD.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name", +fD.duplicateAttribute="duplicate-attribute", +fD.nonConformingDoctype="non-conforming-doctype", +fD.missingDoctype="missing-doctype", +fD.misplacedDoctype="misplaced-doctype",fD.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element", +fD.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements", +fD.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head", +fD.openElementsLeftAfterEof="open-elements-left-after-eof", +fD.abandonedHeadElementChild="abandoned-head-element-child", +fD.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element", +fD.nestedNoscriptInHead="nested-noscript-in-head", +fD.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text" +;class mD{constructor(e){ +this.handler=e,this.html="",this.pos=-1,this.lastGapPos=-2, +this.gapStack=[],this.skipNextNewLine=!1, +this.lastChunkWritten=!1,this.endOfChunkHit=!1, +this.bufferWaterline=65536,this.isEol=!1, +this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1} +get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)} +get offset(){return this.droppedBufferSize+this.pos}getError(e,t){ +const{line:n,col:r,offset:a}=this,o=r+t,i=a+t;return{code:e,startLine:n, +endLine:n,startCol:o,endCol:o,startOffset:i,endOffset:i}}_err(e){ +this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset, +this.handler.onParseError(this.getError(e,0)))}_addGap(){ +this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos} +_processSurrogate(e){if(this.pos!==this.html.length-1){ +const t=this.html.charCodeAt(this.pos+1);if(function(e){ +return e>=56320&&e<=57343 +}(t))return this.pos++,this._addGap(),1024*(e-55296)+9216+t +}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,nD.EOF +;return this._err(hD.surrogateInInputStream),e}willDropParsedChunk(){ +return this.pos>this.bufferWaterline}dropParsedChunk(){ +this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos), +this.lineStartPos-=this.pos, +this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2, +this.gapStack.length=0)}write(e,t){ +this.html.length>0?this.html+=e:this.html=e,this.endOfChunkHit=!1, +this.lastChunkWritten=t}insertHtmlAtCurrentPos(e){ +this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1), +this.endOfChunkHit=!1}startsWith(e,t){ +if(this.pos+e.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten, +!1;if(t)return this.html.startsWith(e,this.pos);for(let n=0;n=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,nD.EOF +;const n=this.html.charCodeAt(t);return n===nD.CARRIAGE_RETURN?nD.LINE_FEED:n} +advance(){ +if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos), +this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten, +nD.EOF;let e=this.html.charCodeAt(this.pos) +;if(e===nD.CARRIAGE_RETURN)return this.isEol=!0, +this.skipNextNewLine=!0,nD.LINE_FEED +;if(e===nD.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine))return this.line--, +this.skipNextNewLine=!1,this._addGap(),this.advance() +;this.skipNextNewLine=!1,uD(e)&&(e=this._processSurrogate(e)) +;return null===this.handler.onParseError||e>31&&e<127||e===nD.LINE_FEED||e===nD.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e), +e}_checkForProblematicCharacters(e){ +dD(e)?this._err(hD.controlCharacterInInputStream):pD(e)&&this._err(hD.noncharacterInInputStream) +}retreat(e){ +for(this.pos-=e;this.pos=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value +;return null} +(vD=gD||(gD={}))[vD.CHARACTER=0]="CHARACTER",vD[vD.NULL_CHARACTER=1]="NULL_CHARACTER", +vD[vD.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER", +vD[vD.START_TAG=3]="START_TAG", +vD[vD.END_TAG=4]="END_TAG",vD[vD.COMMENT=5]="COMMENT", +vD[vD.DOCTYPE=6]="DOCTYPE",vD[vD.EOF=7]="EOF",vD[vD.HIBERNATION=8]="HIBERNATION" +;const yD=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map((e=>e.charCodeAt(0)))),OD=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]) +;var wD,xD +;(xD=wD||(wD={}))[xD.NUM=35]="NUM",xD[xD.SEMI=59]="SEMI",xD[xD.EQUALS=61]="EQUALS", +xD[xD.ZERO=48]="ZERO", +xD[xD.NINE=57]="NINE",xD[xD.LOWER_A=97]="LOWER_A",xD[xD.LOWER_F=102]="LOWER_F", +xD[xD.LOWER_X=120]="LOWER_X", +xD[xD.LOWER_Z=122]="LOWER_Z",xD[xD.UPPER_A=65]="UPPER_A", +xD[xD.UPPER_F=70]="UPPER_F",xD[xD.UPPER_Z=90]="UPPER_Z" +;var kD,SD,_D,AD,TD,ED,CD,$D,PD,ID,DD,MD,ND,RD,LD,BD;function jD(e){ +return e>=wD.ZERO&&e<=wD.NINE}function UD(e){return e===wD.EQUALS||function(e){ +return e>=wD.UPPER_A&&e<=wD.UPPER_Z||e>=wD.LOWER_A&&e<=wD.LOWER_Z||jD(e)}(e)} +(SD=kD||(kD={}))[SD.VALUE_LENGTH=49152]="VALUE_LENGTH", +SD[SD.BRANCH_LENGTH=16256]="BRANCH_LENGTH", +SD[SD.JUMP_TABLE=127]="JUMP_TABLE",(AD=_D||(_D={}))[AD.EntityStart=0]="EntityStart", +AD[AD.NumericStart=1]="NumericStart", +AD[AD.NumericDecimal=2]="NumericDecimal",AD[AD.NumericHex=3]="NumericHex", +AD[AD.NamedEntity=4]="NamedEntity", +(ED=TD||(TD={}))[ED.Legacy=0]="Legacy",ED[ED.Strict=1]="Strict", +ED[ED.Attribute=2]="Attribute";class zD{constructor(e,t,n){ +this.decodeTree=e,this.emitCodePoint=t, +this.errors=n,this.state=_D.EntityStart,this.consumed=1, +this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=TD.Strict} +startEntity(e){ +this.decodeMode=e,this.state=_D.EntityStart,this.result=0,this.treeIndex=0, +this.excess=1,this.consumed=1}write(e,t){switch(this.state){case _D.EntityStart: +return e.charCodeAt(t)===wD.NUM?(this.state=_D.NumericStart, +this.consumed+=1,this.stateNumericStart(e,t+1)):(this.state=_D.NamedEntity, +this.stateNamedEntity(e,t));case _D.NumericStart: +return this.stateNumericStart(e,t);case _D.NumericDecimal: +return this.stateNumericDecimal(e,t);case _D.NumericHex: +return this.stateNumericHex(e,t);case _D.NamedEntity: +return this.stateNamedEntity(e,t)}}stateNumericStart(e,t){ +return t>=e.length?-1:(32|e.charCodeAt(t))===wD.LOWER_X?(this.state=_D.NumericHex, +this.consumed+=1, +this.stateNumericHex(e,t+1)):(this.state=_D.NumericDecimal,this.stateNumericDecimal(e,t)) +}addToNumericResult(e,t,n,r){if(t!==n){const a=n-t +;this.result=this.result*Math.pow(r,a)+Number.parseInt(e.substr(t,a),r), +this.consumed+=a}}stateNumericHex(e,t){const n=t;for(;t=wD.UPPER_A&&r<=wD.UPPER_F||r>=wD.LOWER_A&&r<=wD.LOWER_F)))return this.addToNumericResult(e,n,t,16), +this.emitNumericEntity(a,3);t+=1}var r;return this.addToNumericResult(e,n,t,16), +-1}stateNumericDecimal(e,t){const n=t;for(;t=55296&&e<=57343||e>1114111?65533:null!==(t=OD.get(e))&&void 0!==t?t:e +}(this.result),this.consumed), +this.errors&&(e!==wD.SEMI&&this.errors.missingSemicolonAfterCharacterReference(), +this.errors.validateNumericCharacterReference(this.result)),this.consumed} +stateNamedEntity(e,t){const{decodeTree:n}=this +;let r=n[this.treeIndex],a=(r&kD.VALUE_LENGTH)>>14 +;for(;t>14,0!==a){ +if(o===wD.SEMI)return this.emitNamedEntityData(this.treeIndex,a,this.consumed+this.excess) +;this.decodeMode!==TD.Strict&&(this.result=this.treeIndex, +this.consumed+=this.excess,this.excess=0)}}return-1} +emitNotTerminatedNamedEntity(){var e +;const{result:t,decodeTree:n}=this,r=(n[t]&kD.VALUE_LENGTH)>>14 +;return this.emitNamedEntityData(t,r,this.consumed), +null===(e=this.errors)||void 0===e||e.missingSemicolonAfterCharacterReference(), +this.consumed}emitNamedEntityData(e,t,n){const{decodeTree:r}=this +;return this.emitCodePoint(1===t?r[e]&~kD.VALUE_LENGTH:r[e+1],n), +3===t&&this.emitCodePoint(r[e+2],n),n}end(){var e;switch(this.state){ +case _D.NamedEntity: +return 0===this.result||this.decodeMode===TD.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity() +;case _D.NumericDecimal:return this.emitNumericEntity(0,2);case _D.NumericHex: +return this.emitNumericEntity(0,3);case _D.NumericStart: +return null===(e=this.errors)||void 0===e||e.absenceOfDigitsInNumericCharacterReference(this.consumed), +0;case _D.EntityStart:return 0}}}function ZD(e,t,n,r){ +const a=(t&kD.BRANCH_LENGTH)>>7,o=t&kD.JUMP_TABLE +;if(0===a)return 0!==o&&r===o?n:-1;if(o){const t=r-o +;return t<0||t>=a?-1:e[n+t]-1}let i=n,s=i+a-1;for(;i<=s;){const t=i+s>>>1,n=e[t] +;if(nr))return e[t+a];s=t-1}}return-1} +($D=CD||(CD={})).HTML="http://www.w3.org/1999/xhtml", +$D.MATHML="http://www.w3.org/1998/Math/MathML", +$D.SVG="http://www.w3.org/2000/svg", +$D.XLINK="http://www.w3.org/1999/xlink",$D.XML="http://www.w3.org/XML/1998/namespace", +$D.XMLNS="http://www.w3.org/2000/xmlns/", +(ID=PD||(PD={})).TYPE="type",ID.ACTION="action", +ID.ENCODING="encoding",ID.PROMPT="prompt", +ID.NAME="name",ID.COLOR="color",ID.FACE="face", +ID.SIZE="size",(MD=DD||(DD={})).NO_QUIRKS="no-quirks", +MD.QUIRKS="quirks",MD.LIMITED_QUIRKS="limited-quirks", +(RD=ND||(ND={})).A="a",RD.ADDRESS="address", +RD.ANNOTATION_XML="annotation-xml",RD.APPLET="applet", +RD.AREA="area",RD.ARTICLE="article", +RD.ASIDE="aside",RD.B="b",RD.BASE="base",RD.BASEFONT="basefont", +RD.BGSOUND="bgsound", +RD.BIG="big",RD.BLOCKQUOTE="blockquote",RD.BODY="body",RD.BR="br", +RD.BUTTON="button", +RD.CAPTION="caption",RD.CENTER="center",RD.CODE="code",RD.COL="col", +RD.COLGROUP="colgroup", +RD.DD="dd",RD.DESC="desc",RD.DETAILS="details",RD.DIALOG="dialog", +RD.DIR="dir",RD.DIV="div", +RD.DL="dl",RD.DT="dt",RD.EM="em",RD.EMBED="embed",RD.FIELDSET="fieldset", +RD.FIGCAPTION="figcaption",RD.FIGURE="figure",RD.FONT="font",RD.FOOTER="footer", +RD.FOREIGN_OBJECT="foreignObject", +RD.FORM="form",RD.FRAME="frame",RD.FRAMESET="frameset", +RD.H1="h1",RD.H2="h2",RD.H3="h3", +RD.H4="h4",RD.H5="h5",RD.H6="h6",RD.HEAD="head", +RD.HEADER="header",RD.HGROUP="hgroup", +RD.HR="hr",RD.HTML="html",RD.I="i",RD.IMG="img", +RD.IMAGE="image",RD.INPUT="input", +RD.IFRAME="iframe",RD.KEYGEN="keygen",RD.LABEL="label", +RD.LI="li",RD.LINK="link", +RD.LISTING="listing",RD.MAIN="main",RD.MALIGNMARK="malignmark", +RD.MARQUEE="marquee", +RD.MATH="math",RD.MENU="menu",RD.META="meta",RD.MGLYPH="mglyph", +RD.MI="mi",RD.MO="mo", +RD.MN="mn",RD.MS="ms",RD.MTEXT="mtext",RD.NAV="nav",RD.NOBR="nobr", +RD.NOFRAMES="noframes", +RD.NOEMBED="noembed",RD.NOSCRIPT="noscript",RD.OBJECT="object", +RD.OL="ol",RD.OPTGROUP="optgroup", +RD.OPTION="option",RD.P="p",RD.PARAM="param",RD.PLAINTEXT="plaintext", +RD.PRE="pre", +RD.RB="rb",RD.RP="rp",RD.RT="rt",RD.RTC="rtc",RD.RUBY="ruby",RD.S="s", +RD.SCRIPT="script", +RD.SEARCH="search",RD.SECTION="section",RD.SELECT="select",RD.SOURCE="source", +RD.SMALL="small", +RD.SPAN="span",RD.STRIKE="strike",RD.STRONG="strong",RD.STYLE="style", +RD.SUB="sub", +RD.SUMMARY="summary",RD.SUP="sup",RD.TABLE="table",RD.TBODY="tbody", +RD.TEMPLATE="template", +RD.TEXTAREA="textarea",RD.TFOOT="tfoot",RD.TD="td",RD.TH="th", +RD.THEAD="thead",RD.TITLE="title", +RD.TR="tr",RD.TRACK="track",RD.TT="tt",RD.U="u", +RD.UL="ul",RD.SVG="svg",RD.VAR="var", +RD.WBR="wbr",RD.XMP="xmp",(BD=LD||(LD={}))[BD.UNKNOWN=0]="UNKNOWN", +BD[BD.A=1]="A", +BD[BD.ADDRESS=2]="ADDRESS",BD[BD.ANNOTATION_XML=3]="ANNOTATION_XML", +BD[BD.APPLET=4]="APPLET", +BD[BD.AREA=5]="AREA",BD[BD.ARTICLE=6]="ARTICLE",BD[BD.ASIDE=7]="ASIDE", +BD[BD.B=8]="B", +BD[BD.BASE=9]="BASE",BD[BD.BASEFONT=10]="BASEFONT",BD[BD.BGSOUND=11]="BGSOUND", +BD[BD.BIG=12]="BIG", +BD[BD.BLOCKQUOTE=13]="BLOCKQUOTE",BD[BD.BODY=14]="BODY",BD[BD.BR=15]="BR", +BD[BD.BUTTON=16]="BUTTON",BD[BD.CAPTION=17]="CAPTION",BD[BD.CENTER=18]="CENTER", +BD[BD.CODE=19]="CODE", +BD[BD.COL=20]="COL",BD[BD.COLGROUP=21]="COLGROUP",BD[BD.DD=22]="DD", +BD[BD.DESC=23]="DESC", +BD[BD.DETAILS=24]="DETAILS",BD[BD.DIALOG=25]="DIALOG",BD[BD.DIR=26]="DIR", +BD[BD.DIV=27]="DIV", +BD[BD.DL=28]="DL",BD[BD.DT=29]="DT",BD[BD.EM=30]="EM",BD[BD.EMBED=31]="EMBED", +BD[BD.FIELDSET=32]="FIELDSET", +BD[BD.FIGCAPTION=33]="FIGCAPTION",BD[BD.FIGURE=34]="FIGURE", +BD[BD.FONT=35]="FONT", +BD[BD.FOOTER=36]="FOOTER",BD[BD.FOREIGN_OBJECT=37]="FOREIGN_OBJECT", +BD[BD.FORM=38]="FORM", +BD[BD.FRAME=39]="FRAME",BD[BD.FRAMESET=40]="FRAMESET",BD[BD.H1=41]="H1", +BD[BD.H2=42]="H2", +BD[BD.H3=43]="H3",BD[BD.H4=44]="H4",BD[BD.H5=45]="H5",BD[BD.H6=46]="H6", +BD[BD.HEAD=47]="HEAD", +BD[BD.HEADER=48]="HEADER",BD[BD.HGROUP=49]="HGROUP",BD[BD.HR=50]="HR", +BD[BD.HTML=51]="HTML", +BD[BD.I=52]="I",BD[BD.IMG=53]="IMG",BD[BD.IMAGE=54]="IMAGE", +BD[BD.INPUT=55]="INPUT", +BD[BD.IFRAME=56]="IFRAME",BD[BD.KEYGEN=57]="KEYGEN",BD[BD.LABEL=58]="LABEL", +BD[BD.LI=59]="LI", +BD[BD.LINK=60]="LINK",BD[BD.LISTING=61]="LISTING",BD[BD.MAIN=62]="MAIN", +BD[BD.MALIGNMARK=63]="MALIGNMARK", +BD[BD.MARQUEE=64]="MARQUEE",BD[BD.MATH=65]="MATH", +BD[BD.MENU=66]="MENU",BD[BD.META=67]="META", +BD[BD.MGLYPH=68]="MGLYPH",BD[BD.MI=69]="MI",BD[BD.MO=70]="MO",BD[BD.MN=71]="MN", +BD[BD.MS=72]="MS", +BD[BD.MTEXT=73]="MTEXT",BD[BD.NAV=74]="NAV",BD[BD.NOBR=75]="NOBR", +BD[BD.NOFRAMES=76]="NOFRAMES", +BD[BD.NOEMBED=77]="NOEMBED",BD[BD.NOSCRIPT=78]="NOSCRIPT", +BD[BD.OBJECT=79]="OBJECT", +BD[BD.OL=80]="OL",BD[BD.OPTGROUP=81]="OPTGROUP",BD[BD.OPTION=82]="OPTION", +BD[BD.P=83]="P", +BD[BD.PARAM=84]="PARAM",BD[BD.PLAINTEXT=85]="PLAINTEXT",BD[BD.PRE=86]="PRE", +BD[BD.RB=87]="RB", +BD[BD.RP=88]="RP",BD[BD.RT=89]="RT",BD[BD.RTC=90]="RTC",BD[BD.RUBY=91]="RUBY", +BD[BD.S=92]="S", +BD[BD.SCRIPT=93]="SCRIPT",BD[BD.SEARCH=94]="SEARCH",BD[BD.SECTION=95]="SECTION", +BD[BD.SELECT=96]="SELECT", +BD[BD.SOURCE=97]="SOURCE",BD[BD.SMALL=98]="SMALL",BD[BD.SPAN=99]="SPAN", +BD[BD.STRIKE=100]="STRIKE", +BD[BD.STRONG=101]="STRONG",BD[BD.STYLE=102]="STYLE",BD[BD.SUB=103]="SUB", +BD[BD.SUMMARY=104]="SUMMARY", +BD[BD.SUP=105]="SUP",BD[BD.TABLE=106]="TABLE",BD[BD.TBODY=107]="TBODY", +BD[BD.TEMPLATE=108]="TEMPLATE", +BD[BD.TEXTAREA=109]="TEXTAREA",BD[BD.TFOOT=110]="TFOOT", +BD[BD.TD=111]="TD",BD[BD.TH=112]="TH", +BD[BD.THEAD=113]="THEAD",BD[BD.TITLE=114]="TITLE", +BD[BD.TR=115]="TR",BD[BD.TRACK=116]="TRACK",BD[BD.TT=117]="TT",BD[BD.U=118]="U", +BD[BD.UL=119]="UL", +BD[BD.SVG=120]="SVG",BD[BD.VAR=121]="VAR",BD[BD.WBR=122]="WBR", +BD[BD.XMP=123]="XMP" +;const FD=new Map([[ND.A,LD.A],[ND.ADDRESS,LD.ADDRESS],[ND.ANNOTATION_XML,LD.ANNOTATION_XML],[ND.APPLET,LD.APPLET],[ND.AREA,LD.AREA],[ND.ARTICLE,LD.ARTICLE],[ND.ASIDE,LD.ASIDE],[ND.B,LD.B],[ND.BASE,LD.BASE],[ND.BASEFONT,LD.BASEFONT],[ND.BGSOUND,LD.BGSOUND],[ND.BIG,LD.BIG],[ND.BLOCKQUOTE,LD.BLOCKQUOTE],[ND.BODY,LD.BODY],[ND.BR,LD.BR],[ND.BUTTON,LD.BUTTON],[ND.CAPTION,LD.CAPTION],[ND.CENTER,LD.CENTER],[ND.CODE,LD.CODE],[ND.COL,LD.COL],[ND.COLGROUP,LD.COLGROUP],[ND.DD,LD.DD],[ND.DESC,LD.DESC],[ND.DETAILS,LD.DETAILS],[ND.DIALOG,LD.DIALOG],[ND.DIR,LD.DIR],[ND.DIV,LD.DIV],[ND.DL,LD.DL],[ND.DT,LD.DT],[ND.EM,LD.EM],[ND.EMBED,LD.EMBED],[ND.FIELDSET,LD.FIELDSET],[ND.FIGCAPTION,LD.FIGCAPTION],[ND.FIGURE,LD.FIGURE],[ND.FONT,LD.FONT],[ND.FOOTER,LD.FOOTER],[ND.FOREIGN_OBJECT,LD.FOREIGN_OBJECT],[ND.FORM,LD.FORM],[ND.FRAME,LD.FRAME],[ND.FRAMESET,LD.FRAMESET],[ND.H1,LD.H1],[ND.H2,LD.H2],[ND.H3,LD.H3],[ND.H4,LD.H4],[ND.H5,LD.H5],[ND.H6,LD.H6],[ND.HEAD,LD.HEAD],[ND.HEADER,LD.HEADER],[ND.HGROUP,LD.HGROUP],[ND.HR,LD.HR],[ND.HTML,LD.HTML],[ND.I,LD.I],[ND.IMG,LD.IMG],[ND.IMAGE,LD.IMAGE],[ND.INPUT,LD.INPUT],[ND.IFRAME,LD.IFRAME],[ND.KEYGEN,LD.KEYGEN],[ND.LABEL,LD.LABEL],[ND.LI,LD.LI],[ND.LINK,LD.LINK],[ND.LISTING,LD.LISTING],[ND.MAIN,LD.MAIN],[ND.MALIGNMARK,LD.MALIGNMARK],[ND.MARQUEE,LD.MARQUEE],[ND.MATH,LD.MATH],[ND.MENU,LD.MENU],[ND.META,LD.META],[ND.MGLYPH,LD.MGLYPH],[ND.MI,LD.MI],[ND.MO,LD.MO],[ND.MN,LD.MN],[ND.MS,LD.MS],[ND.MTEXT,LD.MTEXT],[ND.NAV,LD.NAV],[ND.NOBR,LD.NOBR],[ND.NOFRAMES,LD.NOFRAMES],[ND.NOEMBED,LD.NOEMBED],[ND.NOSCRIPT,LD.NOSCRIPT],[ND.OBJECT,LD.OBJECT],[ND.OL,LD.OL],[ND.OPTGROUP,LD.OPTGROUP],[ND.OPTION,LD.OPTION],[ND.P,LD.P],[ND.PARAM,LD.PARAM],[ND.PLAINTEXT,LD.PLAINTEXT],[ND.PRE,LD.PRE],[ND.RB,LD.RB],[ND.RP,LD.RP],[ND.RT,LD.RT],[ND.RTC,LD.RTC],[ND.RUBY,LD.RUBY],[ND.S,LD.S],[ND.SCRIPT,LD.SCRIPT],[ND.SEARCH,LD.SEARCH],[ND.SECTION,LD.SECTION],[ND.SELECT,LD.SELECT],[ND.SOURCE,LD.SOURCE],[ND.SMALL,LD.SMALL],[ND.SPAN,LD.SPAN],[ND.STRIKE,LD.STRIKE],[ND.STRONG,LD.STRONG],[ND.STYLE,LD.STYLE],[ND.SUB,LD.SUB],[ND.SUMMARY,LD.SUMMARY],[ND.SUP,LD.SUP],[ND.TABLE,LD.TABLE],[ND.TBODY,LD.TBODY],[ND.TEMPLATE,LD.TEMPLATE],[ND.TEXTAREA,LD.TEXTAREA],[ND.TFOOT,LD.TFOOT],[ND.TD,LD.TD],[ND.TH,LD.TH],[ND.THEAD,LD.THEAD],[ND.TITLE,LD.TITLE],[ND.TR,LD.TR],[ND.TRACK,LD.TRACK],[ND.TT,LD.TT],[ND.U,LD.U],[ND.UL,LD.UL],[ND.SVG,LD.SVG],[ND.VAR,LD.VAR],[ND.WBR,LD.WBR],[ND.XMP,LD.XMP]]) +;function HD(e){var t;return null!==(t=FD.get(e))&&void 0!==t?t:LD.UNKNOWN} +const QD=LD,VD={ +[CD.HTML]:new Set([QD.ADDRESS,QD.APPLET,QD.AREA,QD.ARTICLE,QD.ASIDE,QD.BASE,QD.BASEFONT,QD.BGSOUND,QD.BLOCKQUOTE,QD.BODY,QD.BR,QD.BUTTON,QD.CAPTION,QD.CENTER,QD.COL,QD.COLGROUP,QD.DD,QD.DETAILS,QD.DIR,QD.DIV,QD.DL,QD.DT,QD.EMBED,QD.FIELDSET,QD.FIGCAPTION,QD.FIGURE,QD.FOOTER,QD.FORM,QD.FRAME,QD.FRAMESET,QD.H1,QD.H2,QD.H3,QD.H4,QD.H5,QD.H6,QD.HEAD,QD.HEADER,QD.HGROUP,QD.HR,QD.HTML,QD.IFRAME,QD.IMG,QD.INPUT,QD.LI,QD.LINK,QD.LISTING,QD.MAIN,QD.MARQUEE,QD.MENU,QD.META,QD.NAV,QD.NOEMBED,QD.NOFRAMES,QD.NOSCRIPT,QD.OBJECT,QD.OL,QD.P,QD.PARAM,QD.PLAINTEXT,QD.PRE,QD.SCRIPT,QD.SECTION,QD.SELECT,QD.SOURCE,QD.STYLE,QD.SUMMARY,QD.TABLE,QD.TBODY,QD.TD,QD.TEMPLATE,QD.TEXTAREA,QD.TFOOT,QD.TH,QD.THEAD,QD.TITLE,QD.TR,QD.TRACK,QD.UL,QD.WBR,QD.XMP]), +[CD.MATHML]:new Set([QD.MI,QD.MO,QD.MN,QD.MS,QD.MTEXT,QD.ANNOTATION_XML]), +[CD.SVG]:new Set([QD.TITLE,QD.FOREIGN_OBJECT,QD.DESC]),[CD.XLINK]:new Set, +[CD.XML]:new Set,[CD.XMLNS]:new Set +},qD=new Set([QD.H1,QD.H2,QD.H3,QD.H4,QD.H5,QD.H6]);var WD,XD +;ND.STYLE,ND.SCRIPT, +ND.XMP,ND.IFRAME,ND.NOEMBED,ND.NOFRAMES,ND.PLAINTEXT,(XD=WD||(WD={}))[XD.DATA=0]="DATA", +XD[XD.RCDATA=1]="RCDATA", +XD[XD.RAWTEXT=2]="RAWTEXT",XD[XD.SCRIPT_DATA=3]="SCRIPT_DATA", +XD[XD.PLAINTEXT=4]="PLAINTEXT", +XD[XD.TAG_OPEN=5]="TAG_OPEN",XD[XD.END_TAG_OPEN=6]="END_TAG_OPEN", +XD[XD.TAG_NAME=7]="TAG_NAME", +XD[XD.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN", +XD[XD.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN", +XD[XD.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME", +XD[XD.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN", +XD[XD.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN", +XD[XD.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME", +XD[XD.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN", +XD[XD.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN", +XD[XD.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME", +XD[XD.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START", +XD[XD.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH", +XD[XD.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED", +XD[XD.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH", +XD[XD.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH", +XD[XD.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN", +XD[XD.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN", +XD[XD.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME", +XD[XD.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START", +XD[XD.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED", +XD[XD.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH", +XD[XD.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH", +XD[XD.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN", +XD[XD.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END", +XD[XD.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME", +XD[XD.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME", +XD[XD.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME", +XD[XD.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE", +XD[XD.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED", +XD[XD.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED", +XD[XD.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED", +XD[XD.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED", +XD[XD.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG", +XD[XD.BOGUS_COMMENT=40]="BOGUS_COMMENT", +XD[XD.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN", +XD[XD.COMMENT_START=42]="COMMENT_START", +XD[XD.COMMENT_START_DASH=43]="COMMENT_START_DASH", +XD[XD.COMMENT=44]="COMMENT",XD[XD.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN", +XD[XD.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG", +XD[XD.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH", +XD[XD.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH", +XD[XD.COMMENT_END_DASH=49]="COMMENT_END_DASH", +XD[XD.COMMENT_END=50]="COMMENT_END", +XD[XD.COMMENT_END_BANG=51]="COMMENT_END_BANG", +XD[XD.DOCTYPE=52]="DOCTYPE",XD[XD.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME", +XD[XD.DOCTYPE_NAME=54]="DOCTYPE_NAME", +XD[XD.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME", +XD[XD.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD", +XD[XD.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER", +XD[XD.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED", +XD[XD.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED", +XD[XD.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER", +XD[XD.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS", +XD[XD.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD", +XD[XD.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER", +XD[XD.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED", +XD[XD.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED", +XD[XD.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER", +XD[XD.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",XD[XD.CDATA_SECTION=68]="CDATA_SECTION", +XD[XD.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET", +XD[XD.CDATA_SECTION_END=70]="CDATA_SECTION_END", +XD[XD.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE", +XD[XD.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND";const GD={DATA:WD.DATA, +RCDATA:WD.RCDATA,RAWTEXT:WD.RAWTEXT,SCRIPT_DATA:WD.SCRIPT_DATA, +PLAINTEXT:WD.PLAINTEXT,CDATA_SECTION:WD.CDATA_SECTION};function YD(e){ +return e>=nD.LATIN_CAPITAL_A&&e<=nD.LATIN_CAPITAL_Z}function KD(e){ +return function(e){return e>=nD.LATIN_SMALL_A&&e<=nD.LATIN_SMALL_Z}(e)||YD(e)} +function JD(e){return KD(e)||function(e){return e>=nD.DIGIT_0&&e<=nD.DIGIT_9}(e) +}function eM(e){return e+32}function tM(e){ +return e===nD.SPACE||e===nD.LINE_FEED||e===nD.TABULATION||e===nD.FORM_FEED} +function nM(e){return tM(e)||e===nD.SOLIDUS||e===nD.GREATER_THAN_SIGN}class rM{ +constructor(e,t){ +this.options=e,this.handler=t,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1, +this.lastStartTagName="", +this.active=!1,this.state=WD.DATA,this.returnState=WD.DATA, +this.entityStartPos=0, +this.consumedAfterSnapshot=-1,this.currentCharacterToken=null, +this.currentToken=null,this.currentAttr={name:"",value:"" +},this.preprocessor=new mD(t), +this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new zD(yD,((e,t)=>{ +this.preprocessor.pos=this.entityStartPos+t-1, +this._flushCodePointConsumedAsCharacterReference(e)}),t.onParseError?{ +missingSemicolonAfterCharacterReference:()=>{ +this._err(hD.missingSemicolonAfterCharacterReference,1)}, +absenceOfDigitsInNumericCharacterReference:e=>{ +this._err(hD.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+e) +},validateNumericCharacterReference:e=>{const t=function(e){ +return e===nD.NULL?hD.nullCharacterReference:e>1114111?hD.characterReferenceOutsideUnicodeRange:uD(e)?hD.surrogateCharacterReference:pD(e)?hD.noncharacterCharacterReference:dD(e)||e===nD.CARRIAGE_RETURN?hD.controlCharacterReference:null +}(e);t&&this._err(t,1)}}:void 0)}_err(e,t=0){var n,r +;null===(r=(n=this.handler).onParseError)||void 0===r||r.call(n,this.preprocessor.getError(e,t)) +}getCurrentLocation(e){return this.options.sourceCodeLocationInfo?{ +startLine:this.preprocessor.line,startCol:this.preprocessor.col-e, +startOffset:this.preprocessor.offset-e,endLine:-1,endCol:-1,endOffset:-1}:null} +_runParsingLoop(){if(!this.inLoop){ +for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0 +;const e=this._consume();this._ensureHibernation()||this._callState(e)} +this.inLoop=!1}}pause(){this.paused=!0}resume(e){ +if(!this.paused)throw new Error("Parser was already resumed") +;this.paused=!1,this.inLoop||(this._runParsingLoop(),this.paused||null==e||e())} +write(e,t,n){this.active=!0,this.preprocessor.write(e,t),this._runParsingLoop(), +this.paused||null==n||n()}insertHtmlAtCurrentPos(e){ +this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e), +this._runParsingLoop()}_ensureHibernation(){ +return!!this.preprocessor.endOfChunkHit&&(this.preprocessor.retreat(this.consumedAfterSnapshot), +this.consumedAfterSnapshot=0,this.active=!1,!0)}_consume(){ +return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(e){ +this.consumedAfterSnapshot+=e;for(let t=0;t0&&this._err(hD.endTagWithAttributes), +e.selfClosing&&this._err(hD.endTagWithTrailingSolidus), +this.handler.onEndTag(e)),this.preprocessor.dropParsedChunk()} +emitCurrentComment(e){ +this.prepareToken(e),this.handler.onComment(e),this.preprocessor.dropParsedChunk() +}emitCurrentDoctype(e){ +this.prepareToken(e),this.handler.onDoctype(e),this.preprocessor.dropParsedChunk() +}_emitCurrentCharacterToken(e){if(this.currentCharacterToken){ +switch(e&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=e.startLine, +this.currentCharacterToken.location.endCol=e.startCol, +this.currentCharacterToken.location.endOffset=e.startOffset), +this.currentCharacterToken.type){case gD.CHARACTER: +this.handler.onCharacter(this.currentCharacterToken);break +;case gD.NULL_CHARACTER:this.handler.onNullCharacter(this.currentCharacterToken) +;break;case gD.WHITESPACE_CHARACTER: +this.handler.onWhitespaceCharacter(this.currentCharacterToken)} +this.currentCharacterToken=null}}_emitEOFToken(){ +const e=this.getCurrentLocation(0) +;e&&(e.endLine=e.startLine,e.endCol=e.startCol, +e.endOffset=e.startOffset),this._emitCurrentCharacterToken(e), +this.handler.onEof({type:gD.EOF,location:e}),this.active=!1} +_appendCharToCurrentCharacterToken(e,t){if(this.currentCharacterToken){ +if(this.currentCharacterToken.type===e)return void(this.currentCharacterToken.chars+=t) +;this.currentLocation=this.getCurrentLocation(0), +this._emitCurrentCharacterToken(this.currentLocation), +this.preprocessor.dropParsedChunk()}this._createCharacterToken(e,t)} +_emitCodePoint(e){ +const t=tM(e)?gD.WHITESPACE_CHARACTER:e===nD.NULL?gD.NULL_CHARACTER:gD.CHARACTER +;this._appendCharToCurrentCharacterToken(t,String.fromCodePoint(e))} +_emitChars(e){this._appendCharToCurrentCharacterToken(gD.CHARACTER,e)} +_startCharacterReference(){ +this.returnState=this.state,this.state=WD.CHARACTER_REFERENCE, +this.entityStartPos=this.preprocessor.pos, +this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?TD.Attribute:TD.Legacy) +}_isCharacterReferenceInAttribute(){ +return this.returnState===WD.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===WD.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===WD.ATTRIBUTE_VALUE_UNQUOTED +}_flushCodePointConsumedAsCharacterReference(e){ +this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(e):this._emitCodePoint(e) +}_callState(e){switch(this.state){case WD.DATA:this._stateData(e);break +;case WD.RCDATA:this._stateRcdata(e);break;case WD.RAWTEXT:this._stateRawtext(e) +;break;case WD.SCRIPT_DATA:this._stateScriptData(e);break;case WD.PLAINTEXT: +this._statePlaintext(e);break;case WD.TAG_OPEN:this._stateTagOpen(e);break +;case WD.END_TAG_OPEN:this._stateEndTagOpen(e);break;case WD.TAG_NAME: +this._stateTagName(e);break;case WD.RCDATA_LESS_THAN_SIGN: +this._stateRcdataLessThanSign(e);break;case WD.RCDATA_END_TAG_OPEN: +this._stateRcdataEndTagOpen(e);break;case WD.RCDATA_END_TAG_NAME: +this._stateRcdataEndTagName(e);break;case WD.RAWTEXT_LESS_THAN_SIGN: +this._stateRawtextLessThanSign(e);break;case WD.RAWTEXT_END_TAG_OPEN: +this._stateRawtextEndTagOpen(e);break;case WD.RAWTEXT_END_TAG_NAME: +this._stateRawtextEndTagName(e);break;case WD.SCRIPT_DATA_LESS_THAN_SIGN: +this._stateScriptDataLessThanSign(e);break;case WD.SCRIPT_DATA_END_TAG_OPEN: +this._stateScriptDataEndTagOpen(e);break;case WD.SCRIPT_DATA_END_TAG_NAME: +this._stateScriptDataEndTagName(e);break;case WD.SCRIPT_DATA_ESCAPE_START: +this._stateScriptDataEscapeStart(e);break;case WD.SCRIPT_DATA_ESCAPE_START_DASH: +this._stateScriptDataEscapeStartDash(e);break;case WD.SCRIPT_DATA_ESCAPED: +this._stateScriptDataEscaped(e);break;case WD.SCRIPT_DATA_ESCAPED_DASH: +this._stateScriptDataEscapedDash(e);break;case WD.SCRIPT_DATA_ESCAPED_DASH_DASH: +this._stateScriptDataEscapedDashDash(e);break +;case WD.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: +this._stateScriptDataEscapedLessThanSign(e);break +;case WD.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: +this._stateScriptDataEscapedEndTagOpen(e);break +;case WD.SCRIPT_DATA_ESCAPED_END_TAG_NAME: +this._stateScriptDataEscapedEndTagName(e);break +;case WD.SCRIPT_DATA_DOUBLE_ESCAPE_START: +this._stateScriptDataDoubleEscapeStart(e);break +;case WD.SCRIPT_DATA_DOUBLE_ESCAPED:this._stateScriptDataDoubleEscaped(e);break +;case WD.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: +this._stateScriptDataDoubleEscapedDash(e);break +;case WD.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: +this._stateScriptDataDoubleEscapedDashDash(e);break +;case WD.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: +this._stateScriptDataDoubleEscapedLessThanSign(e);break +;case WD.SCRIPT_DATA_DOUBLE_ESCAPE_END:this._stateScriptDataDoubleEscapeEnd(e) +;break;case WD.BEFORE_ATTRIBUTE_NAME:this._stateBeforeAttributeName(e);break +;case WD.ATTRIBUTE_NAME:this._stateAttributeName(e);break +;case WD.AFTER_ATTRIBUTE_NAME:this._stateAfterAttributeName(e);break +;case WD.BEFORE_ATTRIBUTE_VALUE:this._stateBeforeAttributeValue(e);break +;case WD.ATTRIBUTE_VALUE_DOUBLE_QUOTED:this._stateAttributeValueDoubleQuoted(e) +;break;case WD.ATTRIBUTE_VALUE_SINGLE_QUOTED: +this._stateAttributeValueSingleQuoted(e);break;case WD.ATTRIBUTE_VALUE_UNQUOTED: +this._stateAttributeValueUnquoted(e);break;case WD.AFTER_ATTRIBUTE_VALUE_QUOTED: +this._stateAfterAttributeValueQuoted(e);break;case WD.SELF_CLOSING_START_TAG: +this._stateSelfClosingStartTag(e);break;case WD.BOGUS_COMMENT: +this._stateBogusComment(e);break;case WD.MARKUP_DECLARATION_OPEN: +this._stateMarkupDeclarationOpen(e);break;case WD.COMMENT_START: +this._stateCommentStart(e);break;case WD.COMMENT_START_DASH: +this._stateCommentStartDash(e);break;case WD.COMMENT:this._stateComment(e);break +;case WD.COMMENT_LESS_THAN_SIGN:this._stateCommentLessThanSign(e);break +;case WD.COMMENT_LESS_THAN_SIGN_BANG:this._stateCommentLessThanSignBang(e);break +;case WD.COMMENT_LESS_THAN_SIGN_BANG_DASH: +this._stateCommentLessThanSignBangDash(e);break +;case WD.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: +this._stateCommentLessThanSignBangDashDash(e);break;case WD.COMMENT_END_DASH: +this._stateCommentEndDash(e);break;case WD.COMMENT_END:this._stateCommentEnd(e) +;break;case WD.COMMENT_END_BANG:this._stateCommentEndBang(e);break +;case WD.DOCTYPE:this._stateDoctype(e);break;case WD.BEFORE_DOCTYPE_NAME: +this._stateBeforeDoctypeName(e);break;case WD.DOCTYPE_NAME: +this._stateDoctypeName(e);break;case WD.AFTER_DOCTYPE_NAME: +this._stateAfterDoctypeName(e);break;case WD.AFTER_DOCTYPE_PUBLIC_KEYWORD: +this._stateAfterDoctypePublicKeyword(e);break +;case WD.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: +this._stateBeforeDoctypePublicIdentifier(e);break +;case WD.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: +this._stateDoctypePublicIdentifierDoubleQuoted(e);break +;case WD.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: +this._stateDoctypePublicIdentifierSingleQuoted(e);break +;case WD.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: +this._stateAfterDoctypePublicIdentifier(e);break +;case WD.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: +this._stateBetweenDoctypePublicAndSystemIdentifiers(e);break +;case WD.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._stateAfterDoctypeSystemKeyword(e) +;break;case WD.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: +this._stateBeforeDoctypeSystemIdentifier(e);break +;case WD.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: +this._stateDoctypeSystemIdentifierDoubleQuoted(e);break +;case WD.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: +this._stateDoctypeSystemIdentifierSingleQuoted(e);break +;case WD.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: +this._stateAfterDoctypeSystemIdentifier(e);break;case WD.BOGUS_DOCTYPE: +this._stateBogusDoctype(e);break;case WD.CDATA_SECTION: +this._stateCdataSection(e);break;case WD.CDATA_SECTION_BRACKET: +this._stateCdataSectionBracket(e);break;case WD.CDATA_SECTION_END: +this._stateCdataSectionEnd(e);break;case WD.CHARACTER_REFERENCE: +this._stateCharacterReference();break;case WD.AMBIGUOUS_AMPERSAND: +this._stateAmbiguousAmpersand(e);break;default:throw new Error("Unknown state")} +}_stateData(e){switch(e){case nD.LESS_THAN_SIGN:this.state=WD.TAG_OPEN;break +;case nD.AMPERSAND:this._startCharacterReference();break;case nD.NULL: +this._err(hD.unexpectedNullCharacter),this._emitCodePoint(e);break;case nD.EOF: +this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRcdata(e){ +switch(e){case nD.AMPERSAND:this._startCharacterReference();break +;case nD.LESS_THAN_SIGN:this.state=WD.RCDATA_LESS_THAN_SIGN;break;case nD.NULL: +this._err(hD.unexpectedNullCharacter),this._emitChars(tD);break;case nD.EOF: +this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRawtext(e){ +switch(e){case nD.LESS_THAN_SIGN:this.state=WD.RAWTEXT_LESS_THAN_SIGN;break +;case nD.NULL:this._err(hD.unexpectedNullCharacter),this._emitChars(tD);break +;case nD.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}} +_stateScriptData(e){switch(e){case nD.LESS_THAN_SIGN: +this.state=WD.SCRIPT_DATA_LESS_THAN_SIGN;break;case nD.NULL: +this._err(hD.unexpectedNullCharacter),this._emitChars(tD);break;case nD.EOF: +this._emitEOFToken();break;default:this._emitCodePoint(e)}}_statePlaintext(e){ +switch(e){case nD.NULL:this._err(hD.unexpectedNullCharacter),this._emitChars(tD) +;break;case nD.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}} +_stateTagOpen(e){ +if(KD(e))this._createStartTagToken(),this.state=WD.TAG_NAME,this._stateTagName(e);else switch(e){ +case nD.EXCLAMATION_MARK:this.state=WD.MARKUP_DECLARATION_OPEN;break +;case nD.SOLIDUS:this.state=WD.END_TAG_OPEN;break;case nD.QUESTION_MARK: +this._err(hD.unexpectedQuestionMarkInsteadOfTagName), +this._createCommentToken(1), +this.state=WD.BOGUS_COMMENT,this._stateBogusComment(e);break;case nD.EOF: +this._err(hD.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break +;default: +this._err(hD.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=WD.DATA, +this._stateData(e)}}_stateEndTagOpen(e){ +if(KD(e))this._createEndTagToken(),this.state=WD.TAG_NAME, +this._stateTagName(e);else switch(e){case nD.GREATER_THAN_SIGN: +this._err(hD.missingEndTagName),this.state=WD.DATA;break;case nD.EOF: +this._err(hD.eofBeforeTagName),this._emitChars("");break +;case nD.NULL: +this._err(hD.unexpectedNullCharacter),this.state=WD.SCRIPT_DATA_ESCAPED, +this._emitChars(tD);break;case nD.EOF: +this._err(hD.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default: +this.state=WD.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}} +_stateScriptDataEscapedLessThanSign(e){ +e===nD.SOLIDUS?this.state=WD.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:KD(e)?(this._emitChars("<"), +this.state=WD.SCRIPT_DATA_DOUBLE_ESCAPE_START, +this._stateScriptDataDoubleEscapeStart(e)):(this._emitChars("<"), +this.state=WD.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))} +_stateScriptDataEscapedEndTagOpen(e){ +KD(e)?(this.state=WD.SCRIPT_DATA_ESCAPED_END_TAG_NAME, +this._stateScriptDataEscapedEndTagName(e)):(this._emitChars("") +;break;case nD.NULL: +this._err(hD.unexpectedNullCharacter),this.state=WD.SCRIPT_DATA_DOUBLE_ESCAPED, +this._emitChars(tD);break;case nD.EOF: +this._err(hD.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default: +this.state=WD.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}} +_stateScriptDataDoubleEscapedLessThanSign(e){ +e===nD.SOLIDUS?(this.state=WD.SCRIPT_DATA_DOUBLE_ESCAPE_END, +this._emitChars("/")):(this.state=WD.SCRIPT_DATA_DOUBLE_ESCAPED, +this._stateScriptDataDoubleEscaped(e))}_stateScriptDataDoubleEscapeEnd(e){ +if(this.preprocessor.startsWith(sD,!1)&&nM(this.preprocessor.peek(sD.length))){ +this._emitCodePoint(e) +;for(let e=0;e0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--, +this._updateCurrentElement(),this.handler.onItemPop(e,!0)}replace(e,t){ +const n=this._indexOf(e);this.items[n]=t,n===this.stackTop&&(this.current=t)} +insertAfter(e,t,n){const r=this._indexOf(e)+1 +;this.items.splice(r,0,t),this.tagIDs.splice(r,0,n), +this.stackTop++,r===this.stackTop&&this._updateCurrentElement(), +this.current&&void 0!==this.currentTagId&&this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop) +}popUntilTagNamePopped(e){let t=this.stackTop+1;do{ +t=this.tagIDs.lastIndexOf(e,t-1) +}while(t>0&&this.treeAdapter.getNamespaceURI(this.items[t])!==CD.HTML) +;this.shortenToLength(Math.max(t,0))}shortenToLength(e){for(;this.stackTop>=e;){ +const t=this.current +;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1), +this.stackTop--,this._updateCurrentElement(), +this.handler.onItemPop(t,this.stackTop=0;n--)if(e.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===t)return n +;return-1}clearBackTo(e,t){const n=this._indexOfTagNames(e,t) +;this.shortenToLength(n+1)}clearBackToTableContext(){ +this.clearBackTo(hM,CD.HTML)}clearBackToTableBodyContext(){ +this.clearBackTo(pM,CD.HTML)}clearBackToTableRowContext(){ +this.clearBackTo(dM,CD.HTML)}remove(e){const t=this._indexOf(e) +;t>=0&&(t===this.stackTop?this.pop():(this.items.splice(t,1), +this.tagIDs.splice(t,1), +this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!1)))} +tryPeekProperlyNestedBodyElement(){ +return this.stackTop>=1&&this.tagIDs[1]===LD.BODY?this.items[1]:null} +contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){ +const t=this._indexOf(e)-1;return t>=0?this.items[t]:null} +isRootHtmlElementCurrent(){return 0===this.stackTop&&this.tagIDs[0]===LD.HTML} +hasInDynamicScope(e,t){for(let n=this.stackTop;n>=0;n--){const r=this.tagIDs[n] +;switch(this.treeAdapter.getNamespaceURI(this.items[n])){case CD.HTML: +if(r===e)return!0;if(t.has(r))return!1;break;case CD.SVG:if(uM.has(r))return!1 +;break;case CD.MATHML:if(cM.has(r))return!1}}return!0}hasInScope(e){ +return this.hasInDynamicScope(e,iM)}hasInListItemScope(e){ +return this.hasInDynamicScope(e,sM)}hasInButtonScope(e){ +return this.hasInDynamicScope(e,lM)}hasNumberedHeaderInScope(){ +for(let e=this.stackTop;e>=0;e--){const t=this.tagIDs[e] +;switch(this.treeAdapter.getNamespaceURI(this.items[e])){case CD.HTML: +if(qD.has(t))return!0;if(iM.has(t))return!1;break;case CD.SVG: +if(uM.has(t))return!1;break;case CD.MATHML:if(cM.has(t))return!1}}return!0} +hasInTableScope(e){ +for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===CD.HTML)switch(this.tagIDs[t]){ +case e:return!0;case LD.TABLE:case LD.HTML:return!1}return!0} +hasTableBodyContextInTableScope(){ +for(let e=this.stackTop;e>=0;e--)if(this.treeAdapter.getNamespaceURI(this.items[e])===CD.HTML)switch(this.tagIDs[e]){ +case LD.TBODY:case LD.THEAD:case LD.TFOOT:return!0;case LD.TABLE:case LD.HTML: +return!1}return!0}hasInSelectScope(e){ +for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===CD.HTML)switch(this.tagIDs[t]){ +case e:return!0;case LD.OPTION:case LD.OPTGROUP:break;default:return!1}return!0} +generateImpliedEndTags(){ +for(;void 0!==this.currentTagId&&aM.has(this.currentTagId);)this.pop()} +generateImpliedEndTagsThoroughly(){ +for(;void 0!==this.currentTagId&&oM.has(this.currentTagId);)this.pop()} +generateImpliedEndTagsWithExclusion(e){ +for(;void 0!==this.currentTagId&&this.currentTagId!==e&&oM.has(this.currentTagId);)this.pop() +}}var gM,vM;(vM=gM||(gM={}))[vM.Marker=0]="Marker",vM[vM.Element=1]="Element" +;const bM={type:gM.Marker};class yM{constructor(e){ +this.treeAdapter=e,this.entries=[],this.bookmark=null} +_getNoahArkConditionCandidates(e,t){ +const n=[],r=t.length,a=this.treeAdapter.getTagName(e),o=this.treeAdapter.getNamespaceURI(e) +;for(let i=0;i[e.name,e.value])));let a=0 +;for(let o=0;or.get(e.name)===e.value))&&(a+=1, +a>=3&&this.entries.splice(e.idx,1))}}insertMarker(){this.entries.unshift(bM)} +pushElement(e,t){this._ensureNoahArkCondition(e),this.entries.unshift({ +type:gM.Element,element:e,token:t})}insertElementAfterBookmark(e,t){ +const n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{ +type:gM.Element,element:e,token:t})}removeEntry(e){ +const t=this.entries.indexOf(e);-1!==t&&this.entries.splice(t,1)} +clearToLastMarker(){const e=this.entries.indexOf(bM) +;-1===e?this.entries.length=0:this.entries.splice(0,e+1)} +getElementEntryInScopeWithTagName(e){ +const t=this.entries.find((t=>t.type===gM.Marker||this.treeAdapter.getTagName(t.element)===e)) +;return t&&t.type===gM.Element?t:null}getElementEntry(e){ +return this.entries.find((t=>t.type===gM.Element&&t.element===e))}}const OM={ +createDocument:()=>({nodeName:"#document",mode:DD.NO_QUIRKS,childNodes:[]}), +createDocumentFragment:()=>({nodeName:"#document-fragment",childNodes:[]}), +createElement:(e,t,n)=>({nodeName:e,tagName:e,attrs:n,namespaceURI:t, +childNodes:[],parentNode:null}),createCommentNode:e=>({nodeName:"#comment", +data:e,parentNode:null}),createTextNode:e=>({nodeName:"#text",value:e, +parentNode:null}),appendChild(e,t){e.childNodes.push(t),t.parentNode=e}, +insertBefore(e,t,n){const r=e.childNodes.indexOf(n) +;e.childNodes.splice(r,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t +},getTemplateContent:e=>e.content,setDocumentType(e,t,n,r){ +const a=e.childNodes.find((e=>"#documentType"===e.nodeName)) +;if(a)a.name=t,a.publicId=n,a.systemId=r;else{const a={nodeName:"#documentType", +name:t,publicId:n,systemId:r,parentNode:null};OM.appendChild(e,a)}}, +setDocumentMode(e,t){e.mode=t},getDocumentMode:e=>e.mode,detachNode(e){ +if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e) +;e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){ +if(e.childNodes.length>0){const n=e.childNodes[e.childNodes.length-1] +;if(OM.isTextNode(n))return void(n.value+=t)} +OM.appendChild(e,OM.createTextNode(t))},insertTextBefore(e,t,n){ +const r=e.childNodes[e.childNodes.indexOf(n)-1] +;r&&OM.isTextNode(r)?r.value+=t:OM.insertBefore(e,OM.createTextNode(t),n)}, +adoptAttributes(e,t){const n=new Set(e.attrs.map((e=>e.name))) +;for(let r=0;re.childNodes[0],getChildNodes:e=>e.childNodes, +getParentNode:e=>e.parentNode,getAttrList:e=>e.attrs,getTagName:e=>e.tagName, +getNamespaceURI:e=>e.namespaceURI,getTextNodeContent:e=>e.value, +getCommentNodeContent:e=>e.data,getDocumentTypeNodeName:e=>e.name, +getDocumentTypeNodePublicId:e=>e.publicId, +getDocumentTypeNodeSystemId:e=>e.systemId,isTextNode:e=>"#text"===e.nodeName, +isCommentNode:e=>"#comment"===e.nodeName, +isDocumentTypeNode:e=>"#documentType"===e.nodeName, +isElementNode:e=>Object.prototype.hasOwnProperty.call(e,"tagName"), +setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t}, +getNodeSourceCodeLocation:e=>e.sourceCodeLocation, +updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation, +...t}} +},wM="html",xM="about:legacy-compat",kM="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",SM=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],_M=[...SM,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],AM=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),TM=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],EM=[...TM,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"] +;function CM(e,t){return t.some((t=>e.startsWith(t)))}const $M={ +TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml" +},PM="definitionurl",IM="definitionURL",DM=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((e=>[e.toLowerCase(),e]))),MM=new Map([["xlink:actuate",{ +prefix:"xlink",name:"actuate",namespace:CD.XLINK}],["xlink:arcrole",{ +prefix:"xlink",name:"arcrole",namespace:CD.XLINK}],["xlink:href",{ +prefix:"xlink",name:"href",namespace:CD.XLINK}],["xlink:role",{prefix:"xlink", +name:"role",namespace:CD.XLINK}],["xlink:show",{prefix:"xlink",name:"show", +namespace:CD.XLINK}],["xlink:title",{prefix:"xlink",name:"title", +namespace:CD.XLINK}],["xlink:type",{prefix:"xlink",name:"type", +namespace:CD.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:CD.XML +}],["xml:space",{prefix:"xml",name:"space",namespace:CD.XML}],["xmlns",{ +prefix:"",name:"xmlns",namespace:CD.XMLNS}],["xmlns:xlink",{prefix:"xmlns", +name:"xlink",namespace:CD.XMLNS +}]]),NM=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((e=>[e.toLowerCase(),e]))),RM=new Set([LD.B,LD.BIG,LD.BLOCKQUOTE,LD.BODY,LD.BR,LD.CENTER,LD.CODE,LD.DD,LD.DIV,LD.DL,LD.DT,LD.EM,LD.EMBED,LD.H1,LD.H2,LD.H3,LD.H4,LD.H5,LD.H6,LD.HEAD,LD.HR,LD.I,LD.IMG,LD.LI,LD.LISTING,LD.MENU,LD.META,LD.NOBR,LD.OL,LD.P,LD.PRE,LD.RUBY,LD.S,LD.SMALL,LD.SPAN,LD.STRONG,LD.STRIKE,LD.SUB,LD.SUP,LD.TABLE,LD.TT,LD.U,LD.UL,LD.VAR]) +;function LM(e){for(let t=0;t0&&this._setContextModes(e,t)}onItemPop(e,t){ +var n,r +;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(e,this.currentToken), +null===(r=(n=this.treeAdapter).onItemPop)||void 0===r||r.call(n,e,this.openElements.current), +t){let e,t +;0===this.openElements.stackTop&&this.fragmentContext?(e=this.fragmentContext, +t=this.fragmentContextID):({current:e,currentTagId:t}=this.openElements), +this._setContextModes(e,t)}}_setContextModes(e,t){ +const n=e===this.document||e&&this.treeAdapter.getNamespaceURI(e)===CD.HTML +;this.currentNotInHTML=!n, +this.tokenizer.inForeignNode=!n&&void 0!==e&&void 0!==t&&!this._isIntegrationPoint(t,e) +}_switchToTextParsing(e,t){ +this._insertElement(e,CD.HTML),this.tokenizer.state=t, +this.originalInsertionMode=this.insertionMode,this.insertionMode=HM.TEXT} +switchToPlaintextParsing(){ +this.insertionMode=HM.TEXT,this.originalInsertionMode=HM.IN_BODY, +this.tokenizer.state=GD.PLAINTEXT}_getAdjustedCurrentElement(){ +return 0===this.openElements.stackTop&&this.fragmentContext?this.fragmentContext:this.openElements.current +}_findFormInFragmentContext(){let e=this.fragmentContext;for(;e;){ +if(this.treeAdapter.getTagName(e)===ND.FORM){this.formElement=e;break} +e=this.treeAdapter.getParentNode(e)}}_initTokenizerForFragmentParsing(){ +if(this.fragmentContext&&this.treeAdapter.getNamespaceURI(this.fragmentContext)===CD.HTML)switch(this.fragmentContextID){ +case LD.TITLE:case LD.TEXTAREA:this.tokenizer.state=GD.RCDATA;break +;case LD.STYLE:case LD.XMP:case LD.IFRAME:case LD.NOEMBED:case LD.NOFRAMES: +case LD.NOSCRIPT:this.tokenizer.state=GD.RAWTEXT;break;case LD.SCRIPT: +this.tokenizer.state=GD.SCRIPT_DATA;break;case LD.PLAINTEXT: +this.tokenizer.state=GD.PLAINTEXT}}_setDocumentType(e){ +const t=e.name||"",n=e.publicId||"",r=e.systemId||"" +;if(this.treeAdapter.setDocumentType(this.document,t,n,r),e.location){ +const t=this.treeAdapter.getChildNodes(this.document).find((e=>this.treeAdapter.isDocumentTypeNode(e))) +;t&&this.treeAdapter.setNodeSourceCodeLocation(t,e.location)}} +_attachElementToTree(e,t){if(this.options.sourceCodeLocationInfo){const n=t&&{ +...t,startTag:t};this.treeAdapter.setNodeSourceCodeLocation(e,n)} +if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{ +const t=this.openElements.currentTmplContentOrNode +;this.treeAdapter.appendChild(null!=t?t:this.document,e)}}_appendElement(e,t){ +const n=this.treeAdapter.createElement(e.tagName,t,e.attrs) +;this._attachElementToTree(n,e.location)}_insertElement(e,t){ +const n=this.treeAdapter.createElement(e.tagName,t,e.attrs) +;this._attachElementToTree(n,e.location),this.openElements.push(n,e.tagID)} +_insertFakeElement(e,t){const n=this.treeAdapter.createElement(e,CD.HTML,[]) +;this._attachElementToTree(n,null),this.openElements.push(n,t)} +_insertTemplate(e){ +const t=this.treeAdapter.createElement(e.tagName,CD.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment() +;this.treeAdapter.setTemplateContent(t,n), +this._attachElementToTree(t,e.location), +this.openElements.push(t,e.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null) +}_insertFakeRootElement(){ +const e=this.treeAdapter.createElement(ND.HTML,CD.HTML,[]) +;this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(e,null), +this.treeAdapter.appendChild(this.openElements.current,e), +this.openElements.push(e,LD.HTML)}_appendCommentNode(e,t){ +const n=this.treeAdapter.createCommentNode(e.data) +;this.treeAdapter.appendChild(t,n), +this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,e.location) +}_insertCharacters(e){let t,n +;if(this._shouldFosterParentOnInsertion()?(({parent:t,beforeElement:n}=this._findFosterParentingLocation()), +n?this.treeAdapter.insertTextBefore(t,e.chars,n):this.treeAdapter.insertText(t,e.chars)):(t=this.openElements.currentTmplContentOrNode, +this.treeAdapter.insertText(t,e.chars)),!e.location)return +;const r=this.treeAdapter.getChildNodes(t),a=n?r.lastIndexOf(n):r.length,o=r[a-1] +;if(this.treeAdapter.getNodeSourceCodeLocation(o)){ +const{endLine:t,endCol:n,endOffset:r}=e.location +;this.treeAdapter.updateNodeSourceCodeLocation(o,{endLine:t,endCol:n,endOffset:r +}) +}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,e.location) +}_adoptNodes(e,t){ +for(let n=this.treeAdapter.getFirstChild(e);n;n=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(n), +this.treeAdapter.appendChild(t,n)}_setEndLocation(e,t){ +if(this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location){ +const n=t.location,r=this.treeAdapter.getTagName(e),a=t.type===gD.END_TAG&&r===t.tagName?{ +endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{ +endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset} +;this.treeAdapter.updateNodeSourceCodeLocation(e,a)}} +shouldProcessStartTagTokenInForeignContent(e){if(!this.currentNotInHTML)return!1 +;let t,n +;return 0===this.openElements.stackTop&&this.fragmentContext?(t=this.fragmentContext, +n=this.fragmentContextID):({current:t,currentTagId:n}=this.openElements), +(e.tagID!==LD.SVG||this.treeAdapter.getTagName(t)!==ND.ANNOTATION_XML||this.treeAdapter.getNamespaceURI(t)!==CD.MATHML)&&(this.tokenizer.inForeignNode||(e.tagID===LD.MGLYPH||e.tagID===LD.MALIGNMARK)&&void 0!==n&&!this._isIntegrationPoint(n,t,CD.HTML)) +}_processToken(e){switch(e.type){case gD.CHARACTER:this.onCharacter(e);break +;case gD.NULL_CHARACTER:this.onNullCharacter(e);break;case gD.COMMENT: +this.onComment(e);break;case gD.DOCTYPE:this.onDoctype(e);break +;case gD.START_TAG:this._processStartTag(e);break;case gD.END_TAG: +this.onEndTag(e);break;case gD.EOF:this.onEof(e);break +;case gD.WHITESPACE_CHARACTER:this.onWhitespaceCharacter(e)}} +_isIntegrationPoint(e,t,n){ +return UM(e,this.treeAdapter.getNamespaceURI(t),this.treeAdapter.getAttrList(t),n) +}_reconstructActiveFormattingElements(){ +const e=this.activeFormattingElements.entries.length;if(e){ +const t=this.activeFormattingElements.entries.findIndex((e=>e.type===gM.Marker||this.openElements.contains(e.element))) +;for(let n=-1===t?e-1:t-1;n>=0;n--){ +const e=this.activeFormattingElements.entries[n] +;this._insertElement(e.token,this.treeAdapter.getNamespaceURI(e.element)), +e.element=this.openElements.current}}}_closeTableCell(){ +this.openElements.generateImpliedEndTags(), +this.openElements.popUntilTableCellPopped(), +this.activeFormattingElements.clearToLastMarker(),this.insertionMode=HM.IN_ROW} +_closePElement(){ +this.openElements.generateImpliedEndTagsWithExclusion(LD.P),this.openElements.popUntilTagNamePopped(LD.P) +}_resetInsertionMode(){ +for(let e=this.openElements.stackTop;e>=0;e--)switch(0===e&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[e]){ +case LD.TR:return void(this.insertionMode=HM.IN_ROW);case LD.TBODY: +case LD.THEAD:case LD.TFOOT:return void(this.insertionMode=HM.IN_TABLE_BODY) +;case LD.CAPTION:return void(this.insertionMode=HM.IN_CAPTION);case LD.COLGROUP: +return void(this.insertionMode=HM.IN_COLUMN_GROUP);case LD.TABLE: +return void(this.insertionMode=HM.IN_TABLE);case LD.BODY: +return void(this.insertionMode=HM.IN_BODY);case LD.FRAMESET: +return void(this.insertionMode=HM.IN_FRAMESET);case LD.SELECT: +return void this._resetInsertionModeForSelect(e);case LD.TEMPLATE: +return void(this.insertionMode=this.tmplInsertionModeStack[0]);case LD.HTML: +return void(this.insertionMode=this.headElement?HM.AFTER_HEAD:HM.BEFORE_HEAD) +;case LD.TD:case LD.TH:if(e>0)return void(this.insertionMode=HM.IN_CELL);break +;case LD.HEAD:if(e>0)return void(this.insertionMode=HM.IN_HEAD)} +this.insertionMode=HM.IN_BODY}_resetInsertionModeForSelect(e){ +if(e>0)for(let t=e-1;t>0;t--){const e=this.openElements.tagIDs[t] +;if(e===LD.TEMPLATE)break +;if(e===LD.TABLE)return void(this.insertionMode=HM.IN_SELECT_IN_TABLE)} +this.insertionMode=HM.IN_SELECT}_isElementCausesFosterParenting(e){ +return qM.has(e)}_shouldFosterParentOnInsertion(){ +return this.fosterParentingEnabled&&void 0!==this.openElements.currentTagId&&this._isElementCausesFosterParenting(this.openElements.currentTagId) +}_findFosterParentingLocation(){for(let e=this.openElements.stackTop;e>=0;e--){ +const t=this.openElements.items[e];switch(this.openElements.tagIDs[e]){ +case LD.TEMPLATE:if(this.treeAdapter.getNamespaceURI(t)===CD.HTML)return{ +parent:this.treeAdapter.getTemplateContent(t),beforeElement:null};break +;case LD.TABLE:{const n=this.treeAdapter.getParentNode(t);return n?{parent:n, +beforeElement:t}:{parent:this.openElements.items[e-1],beforeElement:null}}}} +return{parent:this.openElements.items[0],beforeElement:null}} +_fosterParentElement(e){const t=this._findFosterParentingLocation() +;t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e) +}_isSpecialElement(e,t){const n=this.treeAdapter.getNamespaceURI(e) +;return VD[n].has(t)}onCharacter(e){ +if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)!function(e,t){ +e._insertCharacters(t),e.framesetOk=!1}(this,e);else switch(this.insertionMode){ +case HM.INITIAL:oN(this,e);break;case HM.BEFORE_HTML:iN(this,e);break +;case HM.BEFORE_HEAD:sN(this,e);break;case HM.IN_HEAD:uN(this,e);break +;case HM.IN_HEAD_NO_SCRIPT:dN(this,e);break;case HM.AFTER_HEAD:pN(this,e);break +;case HM.IN_BODY:case HM.IN_CAPTION:case HM.IN_CELL:case HM.IN_TEMPLATE: +mN(this,e);break;case HM.TEXT:case HM.IN_SELECT:case HM.IN_SELECT_IN_TABLE: +this._insertCharacters(e);break;case HM.IN_TABLE:case HM.IN_TABLE_BODY: +case HM.IN_ROW:SN(this,e);break;case HM.IN_TABLE_TEXT:CN(this,e);break +;case HM.IN_COLUMN_GROUP:DN(this,e);break;case HM.AFTER_BODY:ZN(this,e);break +;case HM.AFTER_AFTER_BODY:FN(this,e)}}onNullCharacter(e){ +if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)!function(e,t){ +t.chars=tD,e._insertCharacters(t)}(this,e);else switch(this.insertionMode){ +case HM.INITIAL:oN(this,e);break;case HM.BEFORE_HTML:iN(this,e);break +;case HM.BEFORE_HEAD:sN(this,e);break;case HM.IN_HEAD:uN(this,e);break +;case HM.IN_HEAD_NO_SCRIPT:dN(this,e);break;case HM.AFTER_HEAD:pN(this,e);break +;case HM.TEXT:this._insertCharacters(e);break;case HM.IN_TABLE: +case HM.IN_TABLE_BODY:case HM.IN_ROW:SN(this,e);break;case HM.IN_COLUMN_GROUP: +DN(this,e);break;case HM.AFTER_BODY:ZN(this,e);break;case HM.AFTER_AFTER_BODY: +FN(this,e)}}onComment(e){ +if(this.skipNextNewLine=!1,this.currentNotInHTML)rN(this,e);else switch(this.insertionMode){ +case HM.INITIAL:case HM.BEFORE_HTML:case HM.BEFORE_HEAD:case HM.IN_HEAD: +case HM.IN_HEAD_NO_SCRIPT:case HM.AFTER_HEAD:case HM.IN_BODY:case HM.IN_TABLE: +case HM.IN_CAPTION:case HM.IN_COLUMN_GROUP:case HM.IN_TABLE_BODY:case HM.IN_ROW: +case HM.IN_CELL:case HM.IN_SELECT:case HM.IN_SELECT_IN_TABLE: +case HM.IN_TEMPLATE:case HM.IN_FRAMESET:case HM.AFTER_FRAMESET:rN(this,e);break +;case HM.IN_TABLE_TEXT:$N(this,e);break;case HM.AFTER_BODY:!function(e,t){ +e._appendCommentNode(t,e.openElements.items[0])}(this,e);break +;case HM.AFTER_AFTER_BODY:case HM.AFTER_AFTER_FRAMESET:!function(e,t){ +e._appendCommentNode(t,e.document)}(this,e)}}onDoctype(e){ +switch(this.skipNextNewLine=!1,this.insertionMode){case HM.INITIAL: +!function(e,t){e._setDocumentType(t) +;const n=t.forceQuirks?DD.QUIRKS:function(e){if(e.name!==wM)return DD.QUIRKS +;const{systemId:t}=e;if(t&&t.toLowerCase()===kM)return DD.QUIRKS +;let{publicId:n}=e;if(null!==n){if(n=n.toLowerCase(),AM.has(n))return DD.QUIRKS +;let e=null===t?_M:SM;if(CM(n,e))return DD.QUIRKS +;if(e=null===t?TM:EM,CM(n,e))return DD.LIMITED_QUIRKS}return DD.NO_QUIRKS}(t) +;(function(e){ +return e.name===wM&&null===e.publicId&&(null===e.systemId||e.systemId===xM) +})(t)||e._err(t,hD.nonConformingDoctype) +;e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=HM.BEFORE_HTML +}(this,e);break;case HM.BEFORE_HEAD:case HM.IN_HEAD:case HM.IN_HEAD_NO_SCRIPT: +case HM.AFTER_HEAD:this._err(e,hD.misplacedDoctype);break;case HM.IN_TABLE_TEXT: +$N(this,e)}}onStartTag(e){ +this.skipNextNewLine=!1,this.currentToken=e,this._processStartTag(e), +e.selfClosing&&!e.ackSelfClosing&&this._err(e,hD.nonVoidHtmlElementStartTagWithTrailingSolidus) +}_processStartTag(e){ +this.shouldProcessStartTagTokenInForeignContent(e)?function(e,t){if(function(e){ +const t=e.tagID +;return t===LD.FONT&&e.attrs.some((({name:e})=>e===PD.COLOR||e===PD.SIZE||e===PD.FACE))||RM.has(t) +}(t))HN(e),e._startTagOutsideForeignContent(t);else{ +const n=e._getAdjustedCurrentElement(),r=e.treeAdapter.getNamespaceURI(n) +;r===CD.MATHML?LM(t):r===CD.SVG&&(!function(e){const t=NM.get(e.tagName) +;null!=t&&(e.tagName=t,e.tagID=HD(e.tagName)) +}(t),BM(t)),jM(t),t.selfClosing?e._appendElement(t,r):e._insertElement(t,r), +t.ackSelfClosing=!0}}(this,e):this._startTagOutsideForeignContent(e)} +_startTagOutsideForeignContent(e){switch(this.insertionMode){case HM.INITIAL: +oN(this,e);break;case HM.BEFORE_HTML:!function(e,t){ +t.tagID===LD.HTML?(e._insertElement(t,CD.HTML), +e.insertionMode=HM.BEFORE_HEAD):iN(e,t)}(this,e);break;case HM.BEFORE_HEAD: +!function(e,t){switch(t.tagID){case LD.HTML:ON(e,t);break;case LD.HEAD: +e._insertElement(t,CD.HTML), +e.headElement=e.openElements.current,e.insertionMode=HM.IN_HEAD;break;default: +sN(e,t)}}(this,e);break;case HM.IN_HEAD:lN(this,e);break +;case HM.IN_HEAD_NO_SCRIPT:!function(e,t){switch(t.tagID){case LD.HTML:ON(e,t) +;break;case LD.BASEFONT:case LD.BGSOUND:case LD.HEAD:case LD.LINK:case LD.META: +case LD.NOFRAMES:case LD.STYLE:lN(e,t);break;case LD.NOSCRIPT: +e._err(t,hD.nestedNoscriptInHead);break;default:dN(e,t)}}(this,e);break +;case HM.AFTER_HEAD:!function(e,t){switch(t.tagID){case LD.HTML:ON(e,t);break +;case LD.BODY: +e._insertElement(t,CD.HTML),e.framesetOk=!1,e.insertionMode=HM.IN_BODY;break +;case LD.FRAMESET:e._insertElement(t,CD.HTML),e.insertionMode=HM.IN_FRAMESET +;break;case LD.BASE:case LD.BASEFONT:case LD.BGSOUND:case LD.LINK:case LD.META: +case LD.NOFRAMES:case LD.SCRIPT:case LD.STYLE:case LD.TEMPLATE:case LD.TITLE: +e._err(t,hD.abandonedHeadElementChild), +e.openElements.push(e.headElement,LD.HEAD), +lN(e,t),e.openElements.remove(e.headElement);break;case LD.HEAD: +e._err(t,hD.misplacedStartTagForHeadElement);break;default:pN(e,t)}}(this,e) +;break;case HM.IN_BODY:ON(this,e);break;case HM.IN_TABLE:_N(this,e);break +;case HM.IN_TABLE_TEXT:$N(this,e);break;case HM.IN_CAPTION:!function(e,t){ +const n=t.tagID +;PN.has(n)?e.openElements.hasInTableScope(LD.CAPTION)&&(e.openElements.generateImpliedEndTags(), +e.openElements.popUntilTagNamePopped(LD.CAPTION), +e.activeFormattingElements.clearToLastMarker(), +e.insertionMode=HM.IN_TABLE,_N(e,t)):ON(e,t)}(this,e);break +;case HM.IN_COLUMN_GROUP:IN(this,e);break;case HM.IN_TABLE_BODY:MN(this,e);break +;case HM.IN_ROW:RN(this,e);break;case HM.IN_CELL:!function(e,t){const n=t.tagID +;PN.has(n)?(e.openElements.hasInTableScope(LD.TD)||e.openElements.hasInTableScope(LD.TH))&&(e._closeTableCell(), +RN(e,t)):ON(e,t)}(this,e);break;case HM.IN_SELECT:BN(this,e);break +;case HM.IN_SELECT_IN_TABLE:!function(e,t){const n=t.tagID +;n===LD.CAPTION||n===LD.TABLE||n===LD.TBODY||n===LD.TFOOT||n===LD.THEAD||n===LD.TR||n===LD.TD||n===LD.TH?(e.openElements.popUntilTagNamePopped(LD.SELECT), +e._resetInsertionMode(),e._processStartTag(t)):BN(e,t)}(this,e);break +;case HM.IN_TEMPLATE:!function(e,t){switch(t.tagID){case LD.BASE: +case LD.BASEFONT:case LD.BGSOUND:case LD.LINK:case LD.META:case LD.NOFRAMES: +case LD.SCRIPT:case LD.STYLE:case LD.TEMPLATE:case LD.TITLE:lN(e,t);break +;case LD.CAPTION:case LD.COLGROUP:case LD.TBODY:case LD.TFOOT:case LD.THEAD: +e.tmplInsertionModeStack[0]=HM.IN_TABLE,e.insertionMode=HM.IN_TABLE,_N(e,t) +;break;case LD.COL: +e.tmplInsertionModeStack[0]=HM.IN_COLUMN_GROUP,e.insertionMode=HM.IN_COLUMN_GROUP, +IN(e,t);break;case LD.TR: +e.tmplInsertionModeStack[0]=HM.IN_TABLE_BODY,e.insertionMode=HM.IN_TABLE_BODY, +MN(e,t);break;case LD.TD:case LD.TH: +e.tmplInsertionModeStack[0]=HM.IN_ROW,e.insertionMode=HM.IN_ROW,RN(e,t);break +;default: +e.tmplInsertionModeStack[0]=HM.IN_BODY,e.insertionMode=HM.IN_BODY,ON(e,t)} +}(this,e);break;case HM.AFTER_BODY:!function(e,t){ +t.tagID===LD.HTML?ON(e,t):ZN(e,t)}(this,e);break;case HM.IN_FRAMESET: +!function(e,t){switch(t.tagID){case LD.HTML:ON(e,t);break;case LD.FRAMESET: +e._insertElement(t,CD.HTML);break;case LD.FRAME: +e._appendElement(t,CD.HTML),t.ackSelfClosing=!0;break;case LD.NOFRAMES:lN(e,t)} +}(this,e);break;case HM.AFTER_FRAMESET:!function(e,t){switch(t.tagID){ +case LD.HTML:ON(e,t);break;case LD.NOFRAMES:lN(e,t)}}(this,e);break +;case HM.AFTER_AFTER_BODY:!function(e,t){t.tagID===LD.HTML?ON(e,t):FN(e,t) +}(this,e);break;case HM.AFTER_AFTER_FRAMESET:!function(e,t){switch(t.tagID){ +case LD.HTML:ON(e,t);break;case LD.NOFRAMES:lN(e,t)}}(this,e)}}onEndTag(e){ +this.skipNextNewLine=!1,this.currentToken=e,this.currentNotInHTML?function(e,t){ +if(t.tagID===LD.P||t.tagID===LD.BR)return HN(e), +void e._endTagOutsideForeignContent(t) +;for(let n=e.openElements.stackTop;n>0;n--){const r=e.openElements.items[n] +;if(e.treeAdapter.getNamespaceURI(r)===CD.HTML){ +e._endTagOutsideForeignContent(t);break}const a=e.treeAdapter.getTagName(r) +;if(a.toLowerCase()===t.tagName){t.tagName=a,e.openElements.shortenToLength(n) +;break}}}(this,e):this._endTagOutsideForeignContent(e)} +_endTagOutsideForeignContent(e){switch(this.insertionMode){case HM.INITIAL: +oN(this,e);break;case HM.BEFORE_HTML:!function(e,t){const n=t.tagID +;n!==LD.HTML&&n!==LD.HEAD&&n!==LD.BODY&&n!==LD.BR||iN(e,t)}(this,e);break +;case HM.BEFORE_HEAD:!function(e,t){const n=t.tagID +;n===LD.HEAD||n===LD.BODY||n===LD.HTML||n===LD.BR?sN(e,t):e._err(t,hD.endTagWithoutMatchingOpenElement) +}(this,e);break;case HM.IN_HEAD:!function(e,t){switch(t.tagID){case LD.HEAD: +e.openElements.pop(),e.insertionMode=HM.AFTER_HEAD;break;case LD.BODY: +case LD.BR:case LD.HTML:uN(e,t);break;case LD.TEMPLATE:cN(e,t);break;default: +e._err(t,hD.endTagWithoutMatchingOpenElement)}}(this,e);break +;case HM.IN_HEAD_NO_SCRIPT:!function(e,t){switch(t.tagID){case LD.NOSCRIPT: +e.openElements.pop(),e.insertionMode=HM.IN_HEAD;break;case LD.BR:dN(e,t);break +;default:e._err(t,hD.endTagWithoutMatchingOpenElement)}}(this,e);break +;case HM.AFTER_HEAD:!function(e,t){switch(t.tagID){case LD.BODY:case LD.HTML: +case LD.BR:pN(e,t);break;case LD.TEMPLATE:cN(e,t);break;default: +e._err(t,hD.endTagWithoutMatchingOpenElement)}}(this,e);break;case HM.IN_BODY: +xN(this,e);break;case HM.TEXT:!function(e,t){var n +;t.tagID===LD.SCRIPT&&(null===(n=e.scriptHandler)||void 0===n||n.call(e,e.openElements.current)) +;e.openElements.pop(),e.insertionMode=e.originalInsertionMode}(this,e);break +;case HM.IN_TABLE:AN(this,e);break;case HM.IN_TABLE_TEXT:$N(this,e);break +;case HM.IN_CAPTION:!function(e,t){const n=t.tagID;switch(n){case LD.CAPTION: +case LD.TABLE: +e.openElements.hasInTableScope(LD.CAPTION)&&(e.openElements.generateImpliedEndTags(), +e.openElements.popUntilTagNamePopped(LD.CAPTION), +e.activeFormattingElements.clearToLastMarker(), +e.insertionMode=HM.IN_TABLE,n===LD.TABLE&&AN(e,t));break;case LD.BODY: +case LD.COL:case LD.COLGROUP:case LD.HTML:case LD.TBODY:case LD.TD: +case LD.TFOOT:case LD.TH:case LD.THEAD:case LD.TR:break;default:xN(e,t)} +}(this,e);break;case HM.IN_COLUMN_GROUP:!function(e,t){switch(t.tagID){ +case LD.COLGROUP: +e.openElements.currentTagId===LD.COLGROUP&&(e.openElements.pop(), +e.insertionMode=HM.IN_TABLE);break;case LD.TEMPLATE:cN(e,t);break;case LD.COL: +break;default:DN(e,t)}}(this,e);break;case HM.IN_TABLE_BODY:NN(this,e);break +;case HM.IN_ROW:LN(this,e);break;case HM.IN_CELL:!function(e,t){const n=t.tagID +;switch(n){case LD.TD:case LD.TH: +e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(), +e.openElements.popUntilTagNamePopped(n), +e.activeFormattingElements.clearToLastMarker(),e.insertionMode=HM.IN_ROW);break +;case LD.TABLE:case LD.TBODY:case LD.TFOOT:case LD.THEAD:case LD.TR: +e.openElements.hasInTableScope(n)&&(e._closeTableCell(),LN(e,t));break +;case LD.BODY:case LD.CAPTION:case LD.COL:case LD.COLGROUP:case LD.HTML:break +;default:xN(e,t)}}(this,e);break;case HM.IN_SELECT:jN(this,e);break +;case HM.IN_SELECT_IN_TABLE:!function(e,t){const n=t.tagID +;n===LD.CAPTION||n===LD.TABLE||n===LD.TBODY||n===LD.TFOOT||n===LD.THEAD||n===LD.TR||n===LD.TD||n===LD.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(LD.SELECT), +e._resetInsertionMode(),e.onEndTag(t)):jN(e,t)}(this,e);break +;case HM.IN_TEMPLATE:!function(e,t){t.tagID===LD.TEMPLATE&&cN(e,t)}(this,e) +;break;case HM.AFTER_BODY:zN(this,e);break;case HM.IN_FRAMESET:!function(e,t){ +t.tagID!==LD.FRAMESET||e.openElements.isRootHtmlElementCurrent()||(e.openElements.pop(), +e.fragmentContext||e.openElements.currentTagId===LD.FRAMESET||(e.insertionMode=HM.AFTER_FRAMESET)) +}(this,e);break;case HM.AFTER_FRAMESET:!function(e,t){ +t.tagID===LD.HTML&&(e.insertionMode=HM.AFTER_AFTER_FRAMESET)}(this,e);break +;case HM.AFTER_AFTER_BODY:FN(this,e)}}onEof(e){switch(this.insertionMode){ +case HM.INITIAL:oN(this,e);break;case HM.BEFORE_HTML:iN(this,e);break +;case HM.BEFORE_HEAD:sN(this,e);break;case HM.IN_HEAD:uN(this,e);break +;case HM.IN_HEAD_NO_SCRIPT:dN(this,e);break;case HM.AFTER_HEAD:pN(this,e);break +;case HM.IN_BODY:case HM.IN_TABLE:case HM.IN_CAPTION:case HM.IN_COLUMN_GROUP: +case HM.IN_TABLE_BODY:case HM.IN_ROW:case HM.IN_CELL:case HM.IN_SELECT: +case HM.IN_SELECT_IN_TABLE:kN(this,e);break;case HM.TEXT:!function(e,t){ +e._err(t,hD.eofInElementThatCanContainOnlyText), +e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}(this,e) +;break;case HM.IN_TABLE_TEXT:$N(this,e);break;case HM.IN_TEMPLATE:UN(this,e) +;break;case HM.AFTER_BODY:case HM.IN_FRAMESET:case HM.AFTER_FRAMESET: +case HM.AFTER_AFTER_BODY:case HM.AFTER_AFTER_FRAMESET:aN(this,e)}} +onWhitespaceCharacter(e){ +if(this.skipNextNewLine&&(this.skipNextNewLine=!1,e.chars.charCodeAt(0)===nD.LINE_FEED)){ +if(1===e.chars.length)return;e.chars=e.chars.substr(1)} +if(this.tokenizer.inForeignNode)this._insertCharacters(e);else switch(this.insertionMode){ +case HM.IN_HEAD:case HM.IN_HEAD_NO_SCRIPT:case HM.AFTER_HEAD:case HM.TEXT: +case HM.IN_COLUMN_GROUP:case HM.IN_SELECT:case HM.IN_SELECT_IN_TABLE: +case HM.IN_FRAMESET:case HM.AFTER_FRAMESET:this._insertCharacters(e);break +;case HM.IN_BODY:case HM.IN_CAPTION:case HM.IN_CELL:case HM.IN_TEMPLATE: +case HM.AFTER_BODY:case HM.AFTER_AFTER_BODY:case HM.AFTER_AFTER_FRAMESET: +fN(this,e);break;case HM.IN_TABLE:case HM.IN_TABLE_BODY:case HM.IN_ROW: +SN(this,e);break;case HM.IN_TABLE_TEXT:EN(this,e)}}};function GM(e,t){ +let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName) +;return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagID)||(n=null):(e.activeFormattingElements.removeEntry(n), +n=null):wN(e,t),n}function YM(e,t){let n=null,r=e.openElements.stackTop +;for(;r>=0;r--){const a=e.openElements.items[r];if(a===t.element)break +;e._isSpecialElement(a,e.openElements.tagIDs[r])&&(n=a)} +return n||(e.openElements.shortenToLength(Math.max(r,0)), +e.activeFormattingElements.removeEntry(t)),n}function KM(e,t,n){ +let r=t,a=e.openElements.getCommonAncestor(t);for(let o=0,i=a;i!==n;o++,i=a){ +a=e.openElements.getCommonAncestor(i) +;const n=e.activeFormattingElements.getElementEntry(i),s=n&&o>=FM +;!n||s?(s&&e.activeFormattingElements.removeEntry(n), +e.openElements.remove(i)):(i=JM(e,n), +r===t&&(e.activeFormattingElements.bookmark=n), +e.treeAdapter.detachNode(r),e.treeAdapter.appendChild(i,r),r=i)}return r} +function JM(e,t){ +const n=e.treeAdapter.getNamespaceURI(t.element),r=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs) +;return e.openElements.replace(t.element,r),t.element=r,r}function eN(e,t,n){ +const r=HD(e.treeAdapter.getTagName(t)) +;if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else{ +const a=e.treeAdapter.getNamespaceURI(t) +;r===LD.TEMPLATE&&a===CD.HTML&&(t=e.treeAdapter.getTemplateContent(t)), +e.treeAdapter.appendChild(t,n)}}function tN(e,t,n){ +const r=e.treeAdapter.getNamespaceURI(n.element),{token:a}=n,o=e.treeAdapter.createElement(a.tagName,r,a.attrs) +;e._adoptNodes(t,o), +e.treeAdapter.appendChild(t,o),e.activeFormattingElements.insertElementAfterBookmark(o,a), +e.activeFormattingElements.removeEntry(n), +e.openElements.remove(n.element),e.openElements.insertAfter(t,o,a.tagID)} +function nN(e,t){for(let n=0;n=n;r--)e._setEndLocation(e.openElements.items[r],t) +;if(!e.fragmentContext&&e.openElements.stackTop>=0){ +const n=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(n) +;if(r&&!r.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){ +const n=e.openElements.items[1],r=e.treeAdapter.getNodeSourceCodeLocation(n) +;r&&!r.endTag&&e._setEndLocation(n,t)}}}}function oN(e,t){ +e._err(t,hD.missingDoctype,!0), +e.treeAdapter.setDocumentMode(e.document,DD.QUIRKS), +e.insertionMode=HM.BEFORE_HTML,e._processToken(t)}function iN(e,t){ +e._insertFakeRootElement(),e.insertionMode=HM.BEFORE_HEAD,e._processToken(t)} +function sN(e,t){ +e._insertFakeElement(ND.HEAD,LD.HEAD),e.headElement=e.openElements.current, +e.insertionMode=HM.IN_HEAD,e._processToken(t)}function lN(e,t){switch(t.tagID){ +case LD.HTML:ON(e,t);break;case LD.BASE:case LD.BASEFONT:case LD.BGSOUND: +case LD.LINK:case LD.META:e._appendElement(t,CD.HTML),t.ackSelfClosing=!0;break +;case LD.TITLE:e._switchToTextParsing(t,GD.RCDATA);break;case LD.NOSCRIPT: +e.options.scriptingEnabled?e._switchToTextParsing(t,GD.RAWTEXT):(e._insertElement(t,CD.HTML), +e.insertionMode=HM.IN_HEAD_NO_SCRIPT);break;case LD.NOFRAMES:case LD.STYLE: +e._switchToTextParsing(t,GD.RAWTEXT);break;case LD.SCRIPT: +e._switchToTextParsing(t,GD.SCRIPT_DATA);break;case LD.TEMPLATE: +e._insertTemplate(t), +e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=HM.IN_TEMPLATE, +e.tmplInsertionModeStack.unshift(HM.IN_TEMPLATE);break;case LD.HEAD: +e._err(t,hD.misplacedStartTagForHeadElement);break;default:uN(e,t)}} +function cN(e,t){ +e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(), +e.openElements.currentTagId!==LD.TEMPLATE&&e._err(t,hD.closingOfElementWithOpenChildElements), +e.openElements.popUntilTagNamePopped(LD.TEMPLATE), +e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(), +e._resetInsertionMode()):e._err(t,hD.endTagWithoutMatchingOpenElement)} +function uN(e,t){ +e.openElements.pop(),e.insertionMode=HM.AFTER_HEAD,e._processToken(t)} +function dN(e,t){ +const n=t.type===gD.EOF?hD.openElementsLeftAfterEof:hD.disallowedContentInNoscriptInHead +;e._err(t,n),e.openElements.pop(),e.insertionMode=HM.IN_HEAD,e._processToken(t)} +function pN(e,t){ +e._insertFakeElement(ND.BODY,LD.BODY),e.insertionMode=HM.IN_BODY,hN(e,t)} +function hN(e,t){switch(t.type){case gD.CHARACTER:mN(e,t);break +;case gD.WHITESPACE_CHARACTER:fN(e,t);break;case gD.COMMENT:rN(e,t);break +;case gD.START_TAG:ON(e,t);break;case gD.END_TAG:xN(e,t);break;case gD.EOF: +kN(e,t)}}function fN(e,t){ +e._reconstructActiveFormattingElements(),e._insertCharacters(t)} +function mN(e,t){ +e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1} +function gN(e,t){ +e._reconstructActiveFormattingElements(),e._appendElement(t,CD.HTML), +e.framesetOk=!1,t.ackSelfClosing=!0}function vN(e){const t=bD(e,PD.TYPE) +;return null!=t&&t.toLowerCase()===zM}function bN(e,t){ +e._switchToTextParsing(t,GD.RAWTEXT)}function yN(e,t){ +e._reconstructActiveFormattingElements(),e._insertElement(t,CD.HTML)} +function ON(e,t){switch(t.tagID){case LD.I:case LD.S:case LD.B:case LD.U: +case LD.EM:case LD.TT:case LD.BIG:case LD.CODE:case LD.FONT:case LD.SMALL: +case LD.STRIKE:case LD.STRONG:!function(e,t){ +e._reconstructActiveFormattingElements(), +e._insertElement(t,CD.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t) +}(e,t);break;case LD.A:!function(e,t){ +const n=e.activeFormattingElements.getElementEntryInScopeWithTagName(ND.A) +;n&&(nN(e,t), +e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)), +e._reconstructActiveFormattingElements(), +e._insertElement(t,CD.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t) +}(e,t);break;case LD.H1:case LD.H2:case LD.H3:case LD.H4:case LD.H5:case LD.H6: +!function(e,t){ +e.openElements.hasInButtonScope(LD.P)&&e._closePElement(),void 0!==e.openElements.currentTagId&&qD.has(e.openElements.currentTagId)&&e.openElements.pop(), +e._insertElement(t,CD.HTML)}(e,t);break;case LD.P:case LD.DL:case LD.OL: +case LD.UL:case LD.DIV:case LD.DIR:case LD.NAV:case LD.MAIN:case LD.MENU: +case LD.ASIDE:case LD.CENTER:case LD.FIGURE:case LD.FOOTER:case LD.HEADER: +case LD.HGROUP:case LD.DIALOG:case LD.DETAILS:case LD.ADDRESS:case LD.ARTICLE: +case LD.SEARCH:case LD.SECTION:case LD.SUMMARY:case LD.FIELDSET: +case LD.BLOCKQUOTE:case LD.FIGCAPTION:!function(e,t){ +e.openElements.hasInButtonScope(LD.P)&&e._closePElement(), +e._insertElement(t,CD.HTML)}(e,t);break;case LD.LI:case LD.DD:case LD.DT: +!function(e,t){e.framesetOk=!1;const n=t.tagID +;for(let r=e.openElements.stackTop;r>=0;r--){const t=e.openElements.tagIDs[r] +;if(n===LD.LI&&t===LD.LI||(n===LD.DD||n===LD.DT)&&(t===LD.DD||t===LD.DT)){ +e.openElements.generateImpliedEndTagsWithExclusion(t), +e.openElements.popUntilTagNamePopped(t);break} +if(t!==LD.ADDRESS&&t!==LD.DIV&&t!==LD.P&&e._isSpecialElement(e.openElements.items[r],t))break +} +e.openElements.hasInButtonScope(LD.P)&&e._closePElement(),e._insertElement(t,CD.HTML) +}(e,t);break;case LD.BR:case LD.IMG:case LD.WBR:case LD.AREA:case LD.EMBED: +case LD.KEYGEN:gN(e,t);break;case LD.HR:!function(e,t){ +e.openElements.hasInButtonScope(LD.P)&&e._closePElement(), +e._appendElement(t,CD.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}(e,t);break +;case LD.RB:case LD.RTC:!function(e,t){ +e.openElements.hasInScope(LD.RUBY)&&e.openElements.generateImpliedEndTags(), +e._insertElement(t,CD.HTML)}(e,t);break;case LD.RT:case LD.RP:!function(e,t){ +e.openElements.hasInScope(LD.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(LD.RTC), +e._insertElement(t,CD.HTML)}(e,t);break;case LD.PRE:case LD.LISTING: +!function(e,t){ +e.openElements.hasInButtonScope(LD.P)&&e._closePElement(),e._insertElement(t,CD.HTML), +e.skipNextNewLine=!0,e.framesetOk=!1}(e,t);break;case LD.XMP:!function(e,t){ +e.openElements.hasInButtonScope(LD.P)&&e._closePElement(), +e._reconstructActiveFormattingElements(), +e.framesetOk=!1,e._switchToTextParsing(t,GD.RAWTEXT)}(e,t);break;case LD.SVG: +!function(e,t){ +e._reconstructActiveFormattingElements(),BM(t),jM(t),t.selfClosing?e._appendElement(t,CD.SVG):e._insertElement(t,CD.SVG), +t.ackSelfClosing=!0}(e,t);break;case LD.HTML:!function(e,t){ +0===e.openElements.tmplCount&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs) +}(e,t);break;case LD.BASE:case LD.LINK:case LD.META:case LD.STYLE:case LD.TITLE: +case LD.SCRIPT:case LD.BGSOUND:case LD.BASEFONT:case LD.TEMPLATE:lN(e,t);break +;case LD.BODY:!function(e,t){ +const n=e.openElements.tryPeekProperlyNestedBodyElement() +;n&&0===e.openElements.tmplCount&&(e.framesetOk=!1, +e.treeAdapter.adoptAttributes(n,t.attrs))}(e,t);break;case LD.FORM: +!function(e,t){const n=e.openElements.tmplCount>0 +;e.formElement&&!n||(e.openElements.hasInButtonScope(LD.P)&&e._closePElement(), +e._insertElement(t,CD.HTML),n||(e.formElement=e.openElements.current))}(e,t) +;break;case LD.NOBR:!function(e,t){ +e._reconstructActiveFormattingElements(),e.openElements.hasInScope(LD.NOBR)&&(nN(e,t), +e._reconstructActiveFormattingElements()), +e._insertElement(t,CD.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t) +}(e,t);break;case LD.MATH:!function(e,t){ +e._reconstructActiveFormattingElements(), +LM(t),jM(t),t.selfClosing?e._appendElement(t,CD.MATHML):e._insertElement(t,CD.MATHML), +t.ackSelfClosing=!0}(e,t);break;case LD.TABLE:!function(e,t){ +e.treeAdapter.getDocumentMode(e.document)!==DD.QUIRKS&&e.openElements.hasInButtonScope(LD.P)&&e._closePElement(), +e._insertElement(t,CD.HTML),e.framesetOk=!1,e.insertionMode=HM.IN_TABLE}(e,t) +;break;case LD.INPUT:!function(e,t){ +e._reconstructActiveFormattingElements(),e._appendElement(t,CD.HTML), +vN(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}(e,t);break;case LD.PARAM: +case LD.TRACK:case LD.SOURCE:!function(e,t){ +e._appendElement(t,CD.HTML),t.ackSelfClosing=!0}(e,t);break;case LD.IMAGE: +!function(e,t){t.tagName=ND.IMG,t.tagID=LD.IMG,gN(e,t)}(e,t);break +;case LD.BUTTON:!function(e,t){ +e.openElements.hasInScope(LD.BUTTON)&&(e.openElements.generateImpliedEndTags(), +e.openElements.popUntilTagNamePopped(LD.BUTTON)), +e._reconstructActiveFormattingElements(), +e._insertElement(t,CD.HTML),e.framesetOk=!1}(e,t);break;case LD.APPLET: +case LD.OBJECT:case LD.MARQUEE:!function(e,t){ +e._reconstructActiveFormattingElements(), +e._insertElement(t,CD.HTML),e.activeFormattingElements.insertMarker(), +e.framesetOk=!1}(e,t);break;case LD.IFRAME:!function(e,t){ +e.framesetOk=!1,e._switchToTextParsing(t,GD.RAWTEXT)}(e,t);break;case LD.SELECT: +!function(e,t){ +e._reconstructActiveFormattingElements(),e._insertElement(t,CD.HTML), +e.framesetOk=!1, +e.insertionMode=e.insertionMode===HM.IN_TABLE||e.insertionMode===HM.IN_CAPTION||e.insertionMode===HM.IN_TABLE_BODY||e.insertionMode===HM.IN_ROW||e.insertionMode===HM.IN_CELL?HM.IN_SELECT_IN_TABLE:HM.IN_SELECT +}(e,t);break;case LD.OPTION:case LD.OPTGROUP:!function(e,t){ +e.openElements.currentTagId===LD.OPTION&&e.openElements.pop(), +e._reconstructActiveFormattingElements(),e._insertElement(t,CD.HTML)}(e,t);break +;case LD.NOEMBED:case LD.NOFRAMES:bN(e,t);break;case LD.FRAMESET:!function(e,t){ +const n=e.openElements.tryPeekProperlyNestedBodyElement() +;e.framesetOk&&n&&(e.treeAdapter.detachNode(n), +e.openElements.popAllUpToHtmlElement(), +e._insertElement(t,CD.HTML),e.insertionMode=HM.IN_FRAMESET)}(e,t);break +;case LD.TEXTAREA:!function(e,t){ +e._insertElement(t,CD.HTML),e.skipNextNewLine=!0, +e.tokenizer.state=GD.RCDATA,e.originalInsertionMode=e.insertionMode, +e.framesetOk=!1,e.insertionMode=HM.TEXT}(e,t);break;case LD.NOSCRIPT: +e.options.scriptingEnabled?bN(e,t):yN(e,t);break;case LD.PLAINTEXT: +!function(e,t){ +e.openElements.hasInButtonScope(LD.P)&&e._closePElement(),e._insertElement(t,CD.HTML), +e.tokenizer.state=GD.PLAINTEXT}(e,t);break;case LD.COL:case LD.TH:case LD.TD: +case LD.TR:case LD.HEAD:case LD.FRAME:case LD.TBODY:case LD.TFOOT:case LD.THEAD: +case LD.CAPTION:case LD.COLGROUP:break;default:yN(e,t)}}function wN(e,t){ +const n=t.tagName,r=t.tagID;for(let a=e.openElements.stackTop;a>0;a--){ +const t=e.openElements.items[a],o=e.openElements.tagIDs[a] +;if(r===o&&(r!==LD.UNKNOWN||e.treeAdapter.getTagName(t)===n)){ +e.openElements.generateImpliedEndTagsWithExclusion(r), +e.openElements.stackTop>=a&&e.openElements.shortenToLength(a);break} +if(e._isSpecialElement(t,o))break}}function xN(e,t){switch(t.tagID){case LD.A: +case LD.B:case LD.I:case LD.S:case LD.U:case LD.EM:case LD.TT:case LD.BIG: +case LD.CODE:case LD.FONT:case LD.NOBR:case LD.SMALL:case LD.STRIKE: +case LD.STRONG:nN(e,t);break;case LD.P:!function(e){ +e.openElements.hasInButtonScope(LD.P)||e._insertFakeElement(ND.P,LD.P), +e._closePElement()}(e);break;case LD.DL:case LD.UL:case LD.OL:case LD.DIR: +case LD.DIV:case LD.NAV:case LD.PRE:case LD.MAIN:case LD.MENU:case LD.ASIDE: +case LD.BUTTON:case LD.CENTER:case LD.FIGURE:case LD.FOOTER:case LD.HEADER: +case LD.HGROUP:case LD.DIALOG:case LD.ADDRESS:case LD.ARTICLE:case LD.DETAILS: +case LD.SEARCH:case LD.SECTION:case LD.SUMMARY:case LD.LISTING:case LD.FIELDSET: +case LD.BLOCKQUOTE:case LD.FIGCAPTION:!function(e,t){const n=t.tagID +;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(), +e.openElements.popUntilTagNamePopped(n))}(e,t);break;case LD.LI:!function(e){ +e.openElements.hasInListItemScope(LD.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(LD.LI), +e.openElements.popUntilTagNamePopped(LD.LI))}(e);break;case LD.DD:case LD.DT: +!function(e,t){const n=t.tagID +;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n), +e.openElements.popUntilTagNamePopped(n))}(e,t);break;case LD.H1:case LD.H2: +case LD.H3:case LD.H4:case LD.H5:case LD.H6:!function(e){ +e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(), +e.openElements.popUntilNumberedHeaderPopped())}(e);break;case LD.BR: +!function(e){ +e._reconstructActiveFormattingElements(),e._insertFakeElement(ND.BR,LD.BR), +e.openElements.pop(),e.framesetOk=!1}(e);break;case LD.BODY:!function(e,t){ +if(e.openElements.hasInScope(LD.BODY)&&(e.insertionMode=HM.AFTER_BODY, +e.options.sourceCodeLocationInfo)){ +const n=e.openElements.tryPeekProperlyNestedBodyElement() +;n&&e._setEndLocation(n,t)}}(e,t);break;case LD.HTML:!function(e,t){ +e.openElements.hasInScope(LD.BODY)&&(e.insertionMode=HM.AFTER_BODY,zN(e,t)) +}(e,t);break;case LD.FORM:!function(e){ +const t=e.openElements.tmplCount>0,{formElement:n}=e +;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(LD.FORM)&&(e.openElements.generateImpliedEndTags(), +t?e.openElements.popUntilTagNamePopped(LD.FORM):n&&e.openElements.remove(n))}(e) +;break;case LD.APPLET:case LD.OBJECT:case LD.MARQUEE:!function(e,t){ +const n=t.tagID +;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(), +e.openElements.popUntilTagNamePopped(n), +e.activeFormattingElements.clearToLastMarker())}(e,t);break;case LD.TEMPLATE: +cN(e,t);break;default:wN(e,t)}}function kN(e,t){ +e.tmplInsertionModeStack.length>0?UN(e,t):aN(e,t)}function SN(e,t){ +if(void 0!==e.openElements.currentTagId&&qM.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0, +e.hasNonWhitespacePendingCharacterToken=!1, +e.originalInsertionMode=e.insertionMode, +e.insertionMode=HM.IN_TABLE_TEXT,t.type){case gD.CHARACTER:CN(e,t);break +;case gD.WHITESPACE_CHARACTER:EN(e,t)}else TN(e,t)}function _N(e,t){ +switch(t.tagID){case LD.TD:case LD.TH:case LD.TR:!function(e,t){ +e.openElements.clearBackToTableContext(), +e._insertFakeElement(ND.TBODY,LD.TBODY),e.insertionMode=HM.IN_TABLE_BODY,MN(e,t) +}(e,t);break;case LD.STYLE:case LD.SCRIPT:case LD.TEMPLATE:lN(e,t);break +;case LD.COL:!function(e,t){ +e.openElements.clearBackToTableContext(),e._insertFakeElement(ND.COLGROUP,LD.COLGROUP), +e.insertionMode=HM.IN_COLUMN_GROUP,IN(e,t)}(e,t);break;case LD.FORM: +!function(e,t){ +e.formElement||0!==e.openElements.tmplCount||(e._insertElement(t,CD.HTML), +e.formElement=e.openElements.current,e.openElements.pop())}(e,t);break +;case LD.TABLE:!function(e,t){ +e.openElements.hasInTableScope(LD.TABLE)&&(e.openElements.popUntilTagNamePopped(LD.TABLE), +e._resetInsertionMode(),e._processStartTag(t))}(e,t);break;case LD.TBODY: +case LD.TFOOT:case LD.THEAD:!function(e,t){ +e.openElements.clearBackToTableContext(), +e._insertElement(t,CD.HTML),e.insertionMode=HM.IN_TABLE_BODY}(e,t);break +;case LD.INPUT:!function(e,t){ +vN(t)?e._appendElement(t,CD.HTML):TN(e,t),t.ackSelfClosing=!0}(e,t);break +;case LD.CAPTION:!function(e,t){ +e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(), +e._insertElement(t,CD.HTML),e.insertionMode=HM.IN_CAPTION}(e,t);break +;case LD.COLGROUP:!function(e,t){ +e.openElements.clearBackToTableContext(),e._insertElement(t,CD.HTML), +e.insertionMode=HM.IN_COLUMN_GROUP}(e,t);break;default:TN(e,t)}} +function AN(e,t){switch(t.tagID){case LD.TABLE: +e.openElements.hasInTableScope(LD.TABLE)&&(e.openElements.popUntilTagNamePopped(LD.TABLE), +e._resetInsertionMode());break;case LD.TEMPLATE:cN(e,t);break;case LD.BODY: +case LD.CAPTION:case LD.COL:case LD.COLGROUP:case LD.HTML:case LD.TBODY: +case LD.TD:case LD.TFOOT:case LD.TH:case LD.THEAD:case LD.TR:break;default: +TN(e,t)}}function TN(e,t){const n=e.fosterParentingEnabled +;e.fosterParentingEnabled=!0,hN(e,t),e.fosterParentingEnabled=n} +function EN(e,t){e.pendingCharacterTokens.push(t)}function CN(e,t){ +e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0} +function $N(e,t){let n=0 +;if(e.hasNonWhitespacePendingCharacterToken)for(;n0&&e.openElements.currentTagId===LD.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===LD.OPTGROUP&&e.openElements.pop(), +e.openElements.currentTagId===LD.OPTGROUP&&e.openElements.pop();break +;case LD.OPTION:e.openElements.currentTagId===LD.OPTION&&e.openElements.pop() +;break;case LD.SELECT: +e.openElements.hasInSelectScope(LD.SELECT)&&(e.openElements.popUntilTagNamePopped(LD.SELECT), +e._resetInsertionMode());break;case LD.TEMPLATE:cN(e,t)}}function UN(e,t){ +e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(LD.TEMPLATE), +e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(), +e._resetInsertionMode(),e.onEof(t)):aN(e,t)}function zN(e,t){var n +;if(t.tagID===LD.HTML){ +if(e.fragmentContext||(e.insertionMode=HM.AFTER_AFTER_BODY), +e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===LD.HTML){ +e._setEndLocation(e.openElements.items[0],t);const r=e.openElements.items[1] +;r&&!(null===(n=e.treeAdapter.getNodeSourceCodeLocation(r))||void 0===n?void 0:n.endTag)&&e._setEndLocation(r,t) +}}else ZN(e,t)}function ZN(e,t){e.insertionMode=HM.IN_BODY,hN(e,t)} +function FN(e,t){e.insertionMode=HM.IN_BODY,hN(e,t)}function HN(e){ +for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==CD.HTML&&void 0!==e.openElements.currentTagId&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop() +}function QN(e,t){return XM.parse(e,t)}function VN(e,t,n){ +"string"==typeof e&&(n=t,t=e,e=null);const r=XM.getFragmentParser(e,n) +;return r.tokenizer.write(t,!0),r.getFragment()}function qN(e){ +return e&&"object"==typeof e?"position"in e||"type"in e?XN(e.position):"start"in e||"end"in e?XN(e):"line"in e||"column"in e?WN(e):"":"" +}function WN(e){return GN(e&&e.line)+":"+GN(e&&e.column)}function XN(e){ +return WN(e&&e.start)+"-"+WN(e&&e.end)}function GN(e){ +return e&&"number"==typeof e?e:1} +ND.AREA,ND.BASE,ND.BASEFONT,ND.BGSOUND,ND.BR,ND.COL, +ND.EMBED,ND.FRAME,ND.HR,ND.IMG, +ND.INPUT,ND.KEYGEN,ND.LINK,ND.META,ND.PARAM,ND.SOURCE,ND.TRACK,ND.WBR +;class YN extends Error{constructor(e,t,n){ +super(),"string"==typeof t&&(n=t,t=void 0);let r="",a={},o=!1 +;if(t&&(a="line"in t&&"column"in t||"start"in t&&"end"in t?{place:t +}:"type"in t?{ancestors:[t],place:t.position}:{...t +}),"string"==typeof e?r=e:!a.cause&&e&&(o=!0, +r=e.message,a.cause=e),!a.ruleId&&!a.source&&"string"==typeof n){ +const e=n.indexOf(":") +;-1===e?a.ruleId=n:(a.source=n.slice(0,e),a.ruleId=n.slice(e+1))} +if(!a.place&&a.ancestors&&a.ancestors){const e=a.ancestors[a.ancestors.length-1] +;e&&(a.place=e.position)} +const i=a.place&&"start"in a.place?a.place.start:a.place +;this.ancestors=a.ancestors||void 0, +this.cause=a.cause||void 0,this.column=i?i.column:void 0, +this.fatal=void 0,this.file, +this.message=r,this.line=i?i.line:void 0,this.name=qN(a.place)||"1:1", +this.place=a.place||void 0, +this.reason=this.message,this.ruleId=a.ruleId||void 0, +this.source=a.source||void 0, +this.stack=o&&a.cause&&"string"==typeof a.cause.stack?a.cause.stack:"", +this.actual,this.expected,this.note,this.url}} +YN.prototype.file="",YN.prototype.name="", +YN.prototype.reason="",YN.prototype.message="", +YN.prototype.stack="",YN.prototype.column=void 0, +YN.prototype.line=void 0,YN.prototype.ancestors=void 0, +YN.prototype.cause=void 0, +YN.prototype.fatal=void 0,YN.prototype.place=void 0,YN.prototype.ruleId=void 0, +YN.prototype.source=void 0;const KN={basename:function(e,t){ +if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string') +;JN(e);let n,r=0,a=-1,o=e.length +;if(void 0===t||0===t.length||t.length>e.length){ +for(;o--;)if(47===e.codePointAt(o)){if(n){r=o+1;break}}else a<0&&(n=!0,a=o+1) +;return a<0?"":e.slice(r,a)}if(t===e)return"";let i=-1,s=t.length-1 +;for(;o--;)if(47===e.codePointAt(o)){if(n){r=o+1;break} +}else i<0&&(n=!0,i=o+1),s>-1&&(e.codePointAt(o)===t.codePointAt(s--)?s<0&&(a=o):(s=-1, +a=i));r===a?a=i:a<0&&(a=e.length);return e.slice(r,a)},dirname:function(e){ +if(JN(e),0===e.length)return".";let t,n=-1,r=e.length +;for(;--r;)if(47===e.codePointAt(r)){if(t){n=r;break}}else t||(t=!0) +;return n<0?47===e.codePointAt(0)?"/":".":1===n&&47===e.codePointAt(0)?"//":e.slice(0,n) +},extname:function(e){JN(e);let t,n=e.length,r=-1,a=0,o=-1,i=0;for(;n--;){ +const s=e.codePointAt(n) +;if(47!==s)r<0&&(t=!0,r=n+1),46===s?o<0?o=n:1!==i&&(i=1):o>-1&&(i=-1);else if(t){ +a=n+1;break}}if(o<0||r<0||0===i||1===i&&o===r-1&&o===a+1)return"" +;return e.slice(o,r)},join:function(...e){let t,n=-1 +;for(;++n2){ +if(r=a.lastIndexOf("/"),r!==a.length-1){ +r<0?(a="",o=0):(a=a.slice(0,r),o=a.length-1-a.lastIndexOf("/")),i=l,s=0;continue +}}else if(a.length>0){a="",o=0,i=l,s=0;continue} +t&&(a=a.length>0?a+"/..":"..",o=2) +}else a.length>0?a+="/"+e.slice(i+1,l):a=e.slice(i+1,l),o=l-i-1;i=l,s=0 +}else 46===n&&s>-1?s++:s=-1}return a}(e,!t);0!==n.length||t||(n=".") +;n.length>0&&47===e.codePointAt(e.length-1)&&(n+="/");return t?"/"+n:n}(t)}, +sep:"/"};function JN(e){ +if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e)) +}const eR={cwd:function(){return"/"}};function tR(e){ +return Boolean(null!==e&&"object"==typeof e&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&void 0===e.auth) +}function nR(e){if("string"==typeof e)e=new URL(e);else if(!tR(e)){ +const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`") +;throw t.code="ERR_INVALID_ARG_TYPE",t}if("file:"!==e.protocol){ +const e=new TypeError("The URL must be of scheme file") +;throw e.code="ERR_INVALID_URL_SCHEME",e}return function(e){if(""!==e.hostname){ +const e=new TypeError('File URL host must be "localhost" or empty on darwin') +;throw e.code="ERR_INVALID_FILE_URL_HOST",e}const t=e.pathname;let n=-1 +;for(;++n`", +url:!1},abruptClosingOfEmptyComment:{ +reason:"Unexpected abruptly closed empty comment", +description:"Unexpected `>` or `->`. Expected `--\x3e` to close comments"}, +abruptDoctypePublicIdentifier:{ +reason:"Unexpected abruptly closed public identifier", +description:"Unexpected `>`. Expected a closing `\"` or `'` after the public identifier" +},abruptDoctypeSystemIdentifier:{ +reason:"Unexpected abruptly closed system identifier", +description:"Unexpected `>`. Expected a closing `\"` or `'` after the identifier identifier" +},absenceOfDigitsInNumericCharacterReference:{ +reason:"Unexpected non-digit at start of numeric character reference", +description:"Unexpected `%c`. Expected `[0-9]` for decimal references or `[0-9a-fA-F]` for hexadecimal references" +},cdataInHtmlContent:{reason:"Unexpected CDATA section in HTML", +description:"Unexpected `` in ``", +description:"Unexpected text character `%c`. Only use text in `