From c8d3aedbcd48b65d97f5ccb18446001342863d5e Mon Sep 17 00:00:00 2001 From: "lin.si" Date: Tue, 28 Jul 2026 10:12:50 +0800 Subject: [PATCH 1/2] feat(docs): migrate developer docs to Zudoku --- .github/workflows/deploy-oss.yml | 15 + CONTRIBUTING.md | 13 +- DEPLOYMENT.md | 28 +- README.md | 31 +- content/guides/authentication.mdx | 19 +- content/guides/calls.mdx | 77 +- content/guides/changelog.mdx | 9 +- content/guides/errors.mdx | 13 +- content/guides/quickstart.mdx | 21 +- content/guides/sdks.mdx | 48 +- content/guides/webhooks.mdx | 13 +- index.html | 19 - package.json | 14 +- playwright.config.ts | 9 +- pnpm-lock.yaml | 6553 ++++++++++++++++++------ {src/assets => public}/call-e-logo.svg | 1 + public/robots.txt | 4 + scripts/augment-llms.mjs | 19 + scripts/deploy_docs_to_oss.py | 74 +- scripts/test_deploy_docs_to_oss.py | 62 +- scripts/verify-dist.mjs | 148 +- src/App.tsx | 171 - src/components/CodeBlock.tsx | 201 - src/components/DocsLayout.tsx | 61 - src/components/PageToc.tsx | 19 - src/components/SiteHeader.tsx | 51 - src/docs-nav.ts | 154 - src/guide-content.tsx | 19 - src/main.tsx | 16 - src/mdx-components.tsx | 5 - src/routes/ApiReferencePage.tsx | 456 -- src/routes/GuidePage.tsx | 23 - src/styles.css | 430 ++ src/styles/api-reference.css | 283 - src/styles/globals.css | 581 --- src/vite-env.d.ts | 8 - tests/docs-site.spec.ts | 1050 +--- tsconfig.json | 25 +- vite.config.ts | 16 - zudoku.config.tsx | 216 + 40 files changed, 6425 insertions(+), 4550 deletions(-) delete mode 100644 index.html rename {src/assets => public}/call-e-logo.svg (99%) create mode 100644 public/robots.txt create mode 100644 scripts/augment-llms.mjs delete mode 100644 src/App.tsx delete mode 100644 src/components/CodeBlock.tsx delete mode 100644 src/components/DocsLayout.tsx delete mode 100644 src/components/PageToc.tsx delete mode 100644 src/components/SiteHeader.tsx delete mode 100644 src/docs-nav.ts delete mode 100644 src/guide-content.tsx delete mode 100644 src/main.tsx delete mode 100644 src/mdx-components.tsx delete mode 100644 src/routes/ApiReferencePage.tsx delete mode 100644 src/routes/GuidePage.tsx create mode 100644 src/styles.css delete mode 100644 src/styles/api-reference.css delete mode 100644 src/styles/globals.css delete mode 100644 src/vite-env.d.ts delete mode 100644 vite.config.ts create mode 100644 zudoku.config.tsx diff --git a/.github/workflows/deploy-oss.yml b/.github/workflows/deploy-oss.yml index fd2fce0..8cac146 100644 --- a/.github/workflows/deploy-oss.yml +++ b/.github/workflows/deploy-oss.yml @@ -84,8 +84,23 @@ jobs: fi base_url="${DOCS_PUBLIC_URL%/}" curl --fail --silent --show-error "$base_url/index.html" --output /tmp/calle-docs-index.html + curl --fail --silent --show-error "$base_url/quickstart" --output /tmp/calle-docs-quickstart.html + curl --fail --silent --show-error "$base_url/quickstart.md" --output /tmp/calle-docs-quickstart.md + curl --fail --silent --show-error "$base_url/llms.txt" --output /tmp/calle-docs-llms.txt + curl --fail --silent --show-error "$base_url/llms-full.txt" --output /tmp/calle-docs-llms-full.txt + curl --fail --silent --show-error "$base_url/sitemap.xml" --output /tmp/calle-docs-sitemap.xml curl --fail --silent --show-error "$base_url/openapi/calle.openapi.yaml" --output /tmp/calle-docs-openapi.yaml test -s /tmp/calle-docs-index.html + test -s /tmp/calle-docs-quickstart.html + test -s /tmp/calle-docs-quickstart.md + test -s /tmp/calle-docs-llms.txt + test -s /tmp/calle-docs-llms-full.txt + test -s /tmp/calle-docs-sitemap.xml test -s /tmp/calle-docs-openapi.yaml cmp --silent dist/index.html /tmp/calle-docs-index.html + cmp --silent dist/quickstart.html /tmp/calle-docs-quickstart.html + cmp --silent dist/quickstart.md /tmp/calle-docs-quickstart.md + cmp --silent dist/llms.txt /tmp/calle-docs-llms.txt + cmp --silent dist/llms-full.txt /tmp/calle-docs-llms-full.txt + cmp --silent dist/sitemap.xml /tmp/calle-docs-sitemap.xml cmp --silent dist/openapi/calle.openapi.yaml /tmp/calle-docs-openapi.yaml diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 14b500d..5e7aa2a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,8 +4,8 @@ Thanks for helping improve the CALL-E Developer Docs. ## Development setup -This repository requires Node.js 22 or later, pnpm 8.10.2, and Python 3.10 or -later. +This repository requires Node.js 22.12 or later, pnpm 8.10.2, and Python 3.10 +or later. ```bash pnpm install @@ -22,11 +22,16 @@ pnpm run validate ## What to change - Edit narrative documentation in `content/guides/`. -- Edit navigation metadata in `src/docs-nav.ts`. -- Edit the documentation shell and styles in `src/`. +- Edit navigation, metadata, and API Reference behavior in + `zudoku.config.tsx`. +- Edit the CALL-E theme layer in `src/styles.css`. - Add or update Playwright coverage in `tests/` when navigation, rendering, or other observable site behavior changes. +Guide frontmatter supplies titles and descriptions to `/llms.txt`. Keep guide +content in portable Markdown where possible so `.md` and `llms-full.txt` +remain useful to automated agents. + The API Reference is built from `openapi/calle.openapi.yaml`. Contract changes must describe behavior already supported by the public CALL-E Developer API. If you are proposing a new API capability, open an issue before changing the diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 96f0b22..3dd1425 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -43,11 +43,12 @@ The deployment workflow runs after a push to `main` or a manual dispatch: 4. Start the `production` environment job. 5. Download the exact artifact built by the validation job. 6. Upload it to the explicit `OSS_DEPLOY_PREFIX` in OSS. -7. Verify signed reads of `index.html` and - `openapi/calle.openapi.yaml`. +7. Verify signed reads of the entry page, clean Quickstart route, Markdown and + LLM files, sitemap, and OpenAPI contract. 8. List the destination prefix and confirm every build object exists. -9. Fetch the entry page and OpenAPI document through `DOCS_PUBLIC_URL`, then - compare both files byte-for-byte with the build artifact. +9. Fetch the entry page, clean Quickstart route, Markdown and LLM files, + sitemap, and OpenAPI document through `DOCS_PUBLIC_URL`, then compare them + byte-for-byte with the build artifact. The build job does not reference deployment secrets. Pull requests from forks only run CI and cannot access the `production` environment. @@ -66,8 +67,14 @@ pnpm run validate script tests, and Playwright smoke tests. The build copies `openapi/calle.openapi.yaml` into the public static tree before -Vite emits `dist/`. The Vite config uses relative asset paths so the build works -behind either a domain root or a CDN path prefix. +Zudoku emits `dist/`. The public domain must map the configured OSS prefix to +the domain root because Zudoku assets use root-relative URLs. + +Zudoku writes clean routes as files such as `quickstart.html`. The deployment +tool also uploads the same bytes as an extensionless `quickstart` object, and +does the same for nested API Reference routes. This lets OSS serve +`/quickstart` directly without returning an empty app shell or requiring a +global SPA fallback. ## Private OSS and CDN @@ -79,11 +86,16 @@ serving them. Recommended cache behavior: - `index.html`: no cache or short cache. +- route HTML, extensionless route aliases, `.md`, `llms*.txt`, and + `sitemap.xml`: no cache or short cache. - `openapi/calle.openapi.yaml`: no cache or short cache. - `assets/*`: one year, immutable. -The site uses hash routing, so routes such as `#/quickstart` and -`#/api-reference` do not require server-side route rewrites. +Configure the CDN or gateway to check exact OSS objects first and use +`404.html` for unknown paths while preserving the HTTP 404 status. Do not use +an `index.html` SPA fallback: crawlers would receive the wrong page content. +The root entry page contains a small client bridge for old links such as +`/#/quickstart` and `/#/api-reference`. ## Manual dry run diff --git a/README.md b/README.md index b7652d6..37eee22 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ layout, and pull request checklist. Requirements: -- Node.js 22 or later +- Node.js 22.12 or later - pnpm 8.10.2 - Python 3.10 or later @@ -27,7 +27,7 @@ pnpm install pnpm run dev ``` -The local server runs at `http://127.0.0.1:5174`. +The local server runs at `http://localhost:5174`. Run the complete validation suite before opening a pull request: @@ -39,14 +39,31 @@ pnpm run validate ## Repository layout - `content/guides/` contains the hand-written MDX guides. -- `src/` contains the React documentation shell and styles. +- `zudoku.config.tsx` defines navigation, search, branding, API Reference, and + machine-readable documentation output. +- `src/styles.css` contains the small CALL-E theme layer on top of Zudoku. - `openapi/calle.openapi.yaml` is the public API contract used by the API Reference. +- `public/` contains static brand assets, crawler policy, and the synchronized + OpenAPI copy. - `tests/` contains Playwright smoke tests. -- `scripts/` contains the OpenAPI sync and static-build verification scripts. +- `scripts/` contains OpenAPI sync, static-build verification, and OSS + deployment tooling. The build copies `openapi/calle.openapi.yaml` to -`public/openapi/calle.openapi.yaml` and emits the static site to `dist/`. +`public/openapi/calle.openapi.yaml` and asks Zudoku to emit the static site to +`dist/`. + +Each guide is published in both human- and agent-readable forms: + +- `/quickstart` is a prerendered HTML page. +- `/quickstart.md` is the raw Markdown version. +- `/llms.txt` indexes every guide plus the API Reference and raw OpenAPI + contract. +- `/llms-full.txt` contains the complete guide corpus. +- `/openapi/calle.openapi.yaml` remains the authoritative machine-readable API + contract because OpenAPI Reference pages do not have Markdown exports. +- `/sitemap.xml` and `/robots.txt` provide crawler discovery. The backend contract is the source of truth for the Developer API. The OpenAPI file in this repository is the public snapshot used to build and publish the @@ -54,8 +71,8 @@ API Reference. ## Scope -The site is documentation-only. The API Reference is read-only and does not -send live CALL-E API requests from the browser. +The site is documentation-only. Zudoku's API playground is disabled, so the +API Reference cannot send live CALL-E API requests from the browser. ## License diff --git a/content/guides/authentication.mdx b/content/guides/authentication.mdx index 8947259..5b8fd1a 100644 --- a/content/guides/authentication.mdx +++ b/content/guides/authentication.mdx @@ -1,8 +1,11 @@ -# Authentication +--- +title: Authentication +description: Use API keys safely from trusted server environments. +--- CALL-E uses project API keys for server-to-server requests. -

API keys

+## API keys The CALL-E team provisions API keys for approved projects. @@ -16,7 +19,7 @@ export CALLE_API_KEY="calle_test_key" Do not commit API keys, print them in logs, send them to browser code, or store them in mobile apps. The CALL-E SDKs are server SDKs for trusted backend services and workers. -

Authorization header

+## Authorization header Send the API key as a bearer token: @@ -51,7 +54,7 @@ client = CalleClient( ) ``` -

Environments

+## Environments Use an explicit base URL in each environment so staging jobs do not accidentally send live calls. @@ -61,7 +64,7 @@ export CALLE_BASE_URL="https://api.heycall-e.com" The example SDK servers and call scripts read `CALLE_BASE_URL` when you provide it. Keep test and production API keys separate, and do not reuse idempotency keys across environments. -

Server-only usage

+## Server-only usage Only call the Developer API from trusted server code: @@ -72,7 +75,7 @@ Only call the Developer API from trusted server code: Do not call the Developer API directly from a browser, public frontend, or untrusted client. If a frontend user needs to start a call, send the request to your backend first, validate the user, and let your backend call CALL-E with its project API key. -

Webhook secrets

+## Webhook secrets Webhook secrets are different from API keys. @@ -82,9 +85,9 @@ Use API keys to authenticate your outbound requests to CALL-E. Use webhook secre export CALLE_WEBHOOK_SECRET="whsec_test_key" ``` -Verify `CALL-E-Timestamp` and `CALL-E-Signature` against the raw request body. See the [Webhooks](#/webhooks) guide for runnable server examples. +Verify `CALL-E-Timestamp` and `CALL-E-Signature` against the raw request body. See the [Webhooks](/webhooks) guide for runnable server examples. -

Auth errors

+## Auth errors `401 unauthorized` means the API key is missing, malformed, expired, or invalid. Check the `Authorization: Bearer` header and the environment variable loaded by the running process. diff --git a/content/guides/calls.mdx b/content/guides/calls.mdx index 3150b2f..544fd10 100644 --- a/content/guides/calls.mdx +++ b/content/guides/calls.mdx @@ -1,8 +1,16 @@ -# Calls +--- +title: Calls +description: Understand the call creation contract and event flow. +--- Use call tasks to turn a structured workflow step into one or more real phone interactions. -

Call inputs

+Use the [Calls API Reference](/api-reference/calls) for the exact HTTP request +and response schemas. See the [error handling guide](/errors) for retry +behavior and the [terminal webhooks guide](/webhooks) for asynchronous +completion. + +## Call inputs `task` is the natural-language instruction for the call task. Keep it specific and outcome-oriented. @@ -20,6 +28,53 @@ Examples use phone placeholders such as `` and `` with a phone number you own or are authorized to call. + +```bash +export CALLE_API_KEY="" + +curl --fail-with-body --silent --show-error \ + --request POST "https://api.heycall-e.com/v1/calls" \ + --header "Authorization: Bearer $CALLE_API_KEY" \ + --header "Content-Type: application/json" \ + --header "Idempotency-Key: wf_123_hearing_check" \ + --data '{ + "task": "Call and ask whether they can hear clearly.", + "result_schema": { + "type": "object", + "required": ["can_hear_clearly"], + "properties": { + "can_hear_clearly": { + "type": "string", + "enum": ["yes", "no", "unknown"] + } + }, + "additionalProperties": false + }, + "metadata": { + "workflow_run_id": "wf_123" + } + }' +``` + +The response contains the call task `id`. Use it to read the current state or +the ordered lifecycle events: + +```bash +export CALLE_CALL_ID="" + +curl --fail-with-body --silent --show-error \ + --header "Authorization: Bearer $CALLE_API_KEY" \ + "https://api.heycall-e.com/v1/calls/$CALLE_CALL_ID" + +curl --fail-with-body --silent --show-error \ + --header "Authorization: Bearer $CALLE_API_KEY" \ + "https://api.heycall-e.com/v1/calls/$CALLE_CALL_ID/events?limit=50" +``` + TypeScript: ```ts @@ -82,7 +137,7 @@ call = client.calls.create( ) ``` -

Structured results

+## Structured results Structured results let you turn the terminal call evidence into a stable JSON object for your workflow. The schema is an extraction contract: the SDK sends the schema to CALL-E, CALL-E extracts a result from the completed call evidence, and the service validates the result before returning it. @@ -132,7 +187,7 @@ resultSchema: { When a result drives automation, add an evidence field so your system can inspect why CALL-E made the classification. -

Sales handoff

+### Sales handoff Use this pattern when a prospect should be routed to a human if they ask for help or show strong interest. @@ -174,7 +229,7 @@ resultSchema: { } ``` -

Appointment confirmation

+### Appointment confirmation Use this pattern when calling a business to confirm, reschedule, or cancel an appointment. @@ -204,7 +259,7 @@ resultSchema: { } ``` -

Batch recipient result

+### Batch recipient result Use `recipientResultSchema` when each recipient should have their own answer. @@ -229,7 +284,7 @@ recipientResultSchema: { } ``` -

Support triage

+### Support triage Use this pattern when a call should determine whether an issue was resolved or needs follow-up. @@ -266,7 +321,7 @@ resultSchema: { } ``` -

Pricing or quote request

+### Pricing or quote request Use this pattern when a prospect may ask about pricing, quotes, discounts, or budget. @@ -297,7 +352,7 @@ resultSchema: { } ``` -

Best practices

+### Best practices - Keep schemas focused. A small schema with clear fields is more reliable than a large schema with many optional fields. - Put enum selection rules in the field `description`. @@ -307,13 +362,13 @@ resultSchema: { - Add an evidence or summary field when the result triggers workflow automation. - Do not rely on `description` for validation. Use schema constraints for enforceable behavior. -

Idempotency

+## Idempotency Pass an idempotency key when a workflow step might retry. The key maps to the `Idempotency-Key` HTTP header and prevents duplicate call creation for the same external operation. Use a stable workflow key, not a random UUID generated at each retry. -

Polling and events

+## Polling and events Use `waitForResult` or `wait_for_result` for simple server-side polling. Use events when you need a developer-facing trace of the call lifecycle. diff --git a/content/guides/changelog.mdx b/content/guides/changelog.mdx index e8954e7..6ce00d6 100644 --- a/content/guides/changelog.mdx +++ b/content/guides/changelog.mdx @@ -1,10 +1,13 @@ -# What's New +--- +title: What's New +description: Track CALL-E Developer API and SDK product updates. +--- Product updates for the CALL-E Developer API and server SDKs. -

June 8, 2026

+## June 8, 2026 -

What's New: Developer API and server SDKs

+### What's New: Developer API and server SDKs 1. Developer API: Create outbound call tasks, retrieve call task details, list call task events, and receive terminal webhook messages from a trusted server environment. diff --git a/content/guides/errors.mdx b/content/guides/errors.mdx index 6b02584..707d65a 100644 --- a/content/guides/errors.mdx +++ b/content/guides/errors.mdx @@ -1,8 +1,11 @@ -# Errors +--- +title: Errors +description: Handle stable API errors and recovery paths. +--- CALL-E returns stable error envelopes for call task API failures. -

Error envelope

+## Error envelope ```json { @@ -16,7 +19,7 @@ CALL-E returns stable error envelopes for call task API failures. SDK methods raise typed SDK errors while preserving the stable API error code and response details. -

Stable error codes

+## Stable error codes - `invalid_request` - `unauthorized` @@ -38,13 +41,13 @@ SDK methods raise typed SDK errors while preserving the stable API error code an - `internal_error` - `not_found` -

Recovery guidance

+## Recovery guidance `unauthorized` means the API key is missing or invalid. Check the `Authorization: Bearer` header. `forbidden` means the key is valid but not allowed to use this resource or capability. -See [Authentication](#/authentication) for API key setup, server-only usage, and environment separation. +See [Authentication](/authentication) for API key setup, server-only usage, and environment separation. `rate_limit_exceeded` means the caller should retry after backoff. diff --git a/content/guides/quickstart.mdx b/content/guides/quickstart.mdx index e7cd8e9..6eecb90 100644 --- a/content/guides/quickstart.mdx +++ b/content/guides/quickstart.mdx @@ -1,12 +1,13 @@ -# Quickstart +--- +title: Quickstart +description: Create one call and read the structured result. +--- Create a CALL-E call task, wait for the terminal result, and read the structured output. -API key -TypeScript -Python +**API key** · **TypeScript** · **Python** -

Install

+## Install Install the server SDK package for your runtime: @@ -23,9 +24,9 @@ export CALLE_API_KEY="calle_test_key" You can view your API keys in the [CALL-E dashboard](https://dashboard.heycall-e.com/account/api-keys). -See [Authentication](#/authentication) for API key handling, server-only usage, and webhook secret boundaries. +See [Authentication](/authentication) for API key handling, server-only usage, and webhook secret boundaries. -

Create a client

+## Create a client TypeScript: @@ -46,7 +47,7 @@ from calle import CalleClient client = CalleClient(api_key=os.environ["CALLE_API_KEY"]) ``` -

Minimum request

+## Minimum request The minimum create request is task-only. Include the phone number directly in the task when CALL-E should infer the recipient from the instruction. Replace `` with a phone number you own or are authorized to call. @@ -56,7 +57,7 @@ The minimum create request is task-only. Include the phone number directly in th } ``` -

Create and wait

+## Create and wait TypeScript: @@ -88,7 +89,7 @@ call = client.calls.create_and_wait( ) ``` -

Read the result

+## Read the result The terminal call task includes a stable status, a schema-valid structured result, and task-level outcome fields from the post-call summary. When CALL-E cannot produce a schema-valid result from the evidence, `structured_result` is `null`. diff --git a/content/guides/sdks.mdx b/content/guides/sdks.mdx index 045d946..a1445ec 100644 --- a/content/guides/sdks.mdx +++ b/content/guides/sdks.mdx @@ -1,8 +1,11 @@ -# SDKs +--- +title: SDKs +description: Install the stable TypeScript and Python server SDKs. +--- CALL-E provides server SDKs for trusted backend services, workers, and automation systems that create and monitor call tasks. -

Packages

+## Packages TypeScript package name: @@ -22,45 +25,28 @@ Python imports the package as `calle`: from calle import CalleClient ``` -

Package status

+## Package status The current stable server SDK packages are: - TypeScript: `@call-e/calle@0.2.0` - Python: `calle-ai==0.2.0` -

Source repositories

+## Source repositories The SDKs are maintained as separate repositories so they can have independent release cadence, CI, package metadata, and language-specific examples. - - - - - - - - - - - - - - - - - - - - -
RuntimePackageRepository
TypeScript@call-e/calleCALLE-AI/server-sdk-typescript
Pythoncalle-aiCALLE-AI/server-sdk-python
+| Runtime | Package | Repository | +| --- | --- | --- | +| TypeScript | `@call-e/calle` | [CALLE-AI/server-sdk-typescript](https://github.com/CALLE-AI/server-sdk-typescript) | +| Python | `calle-ai` | [CALLE-AI/server-sdk-python](https://github.com/CALLE-AI/server-sdk-python) | Each repository includes public source code, examples, and security guidance: -- TypeScript security policy -- Python security policy +- [TypeScript security policy](https://github.com/CALLE-AI/server-sdk-typescript/blob/main/SECURITY.md) +- [Python security policy](https://github.com/CALLE-AI/server-sdk-python/blob/main/SECURITY.md) -

Local examples

+## Local examples Each SDK repository includes runnable examples for the server-side call task flow. @@ -86,7 +72,7 @@ uv run python examples/webhook_server.py The webhook examples listen on `POST /calle/webhook` and verify `CALL-E-Timestamp` plus `CALL-E-Signature` before parsing JSON. -

Supported methods

+## Supported methods The SDKs expose `context` as a reserved input for future SDK-side workflow data. The current SDKs do not send `context` to the API. @@ -203,7 +189,7 @@ event = client.webhooks.unwrap( ) ``` -

Availability

+## Availability Install the stable server SDK package for your runtime: @@ -219,7 +205,7 @@ pnpm add @call-e/calle@0.2.0 pip install calle-ai==0.2.0 ``` -

Supported scope

+## Supported scope This release does not include: diff --git a/content/guides/webhooks.mdx b/content/guides/webhooks.mdx index a70b5ef..2072b6e 100644 --- a/content/guides/webhooks.mdx +++ b/content/guides/webhooks.mdx @@ -1,10 +1,13 @@ -# Webhooks +--- +title: Webhooks +description: Verify terminal webhooks and process events safely. +--- Use webhooks when your application needs to react to terminal call task results without polling. Phone values in examples are placeholders. Real webhook payloads echo the phone numbers from your call task. -

Terminal events

+## Terminal events CALL-E sends terminal webhook events: @@ -117,7 +120,7 @@ Example payload: } ``` -

Signature verification

+## Signature verification Verify the signature against the raw request body before parsing JSON. The SDK helpers return the parsed event only after the timestamp and signature are valid. @@ -148,7 +151,7 @@ if event["type"] == "call.completed": print(event["data"]["id"], event["data"]["recipients"]) ``` -

Example servers

+## Example servers The SDK repositories include minimal webhook servers built with runtime standard libraries: @@ -157,7 +160,7 @@ The SDK repositories include minimal webhook servers built with runtime standard Both examples listen on `POST /calle/webhook`, preserve the raw request body for signature verification, and return `200` only after `client.webhooks.unwrap` succeeds. -

Idempotent handling

+## Idempotent handling Webhook delivery is at least once. Store the webhook event `id` before processing side effects so duplicate deliveries are ignored safely. diff --git a/index.html b/index.html deleted file mode 100644 index 64cf25d..0000000 --- a/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - CALL-E Developer Docs - - -
- - - diff --git a/package.json b/package.json index 264a0c9..635f26b 100644 --- a/package.json +++ b/package.json @@ -11,32 +11,28 @@ "license": "MIT", "packageManager": "pnpm@8.10.2", "engines": { - "node": ">=22" + "node": ">=22.12.0" }, "scripts": { "sync:openapi": "node scripts/sync-openapi.mjs", - "dev": "pnpm run sync:openapi && vite", - "build": "pnpm run sync:openapi && tsc -p tsconfig.json && vite build", + "dev": "pnpm run sync:openapi && zudoku dev", + "build": "pnpm run sync:openapi && zudoku build && node scripts/augment-llms.mjs", "verify:dist": "node scripts/verify-dist.mjs", "validate": "pnpm run typecheck && pnpm run build && pnpm run verify:dist && pnpm run test:deploy && pnpm run test", - "preview": "vite preview", + "preview": "zudoku preview", "test": "playwright test", "test:deploy": "python3 -m unittest scripts/test_deploy_docs_to_oss.py", "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@mdx-js/react": "^3.1.1", - "@scalar/api-reference-react": "^0.9.41", "react": "^19.2.6", "react-dom": "^19.2.6" }, "devDependencies": { - "@mdx-js/rollup": "^3.1.1", "@playwright/test": "^1.60.0", "@types/react": "^19.2.15", "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^6.0.2", "typescript": "^5.9.0", - "vite": "^8.0.14" + "zudoku": "0.82.3" } } diff --git a/playwright.config.ts b/playwright.config.ts index 4ed2dfd..f25d3bb 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -8,7 +8,7 @@ export default defineConfig({ timeout: 10_000, }, use: { - baseURL: "http://127.0.0.1:4174", + baseURL: "http://localhost:4174", trace: "retain-on-failure", }, projects: [ @@ -18,8 +18,11 @@ export default defineConfig({ }, ], webServer: { - command: "pnpm run build && pnpm run preview -- --host 127.0.0.1 --port 4174", - url: "http://127.0.0.1:4174", + command: "pnpm run preview --port 4174", + url: "http://localhost:4174", + env: { + ZUDOKU_DISABLE_UPDATE_CHECK: "1", + }, reuseExistingServer: !process.env.CI, timeout: 120_000, }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4738f72..0eaa63e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,12 +5,6 @@ settings: excludeLinksFromLockfile: false dependencies: - '@mdx-js/react': - specifier: ^3.1.1 - version: 3.1.1(@types/react@19.2.15)(react@19.2.6) - '@scalar/api-reference-react': - specifier: ^0.9.41 - version: 0.9.41(react@19.2.6)(tailwindcss@4.3.0)(typescript@5.9.3)(zod@4.4.3) react: specifier: ^19.2.6 version: 19.2.6 @@ -19,9 +13,6 @@ dependencies: version: 19.2.6(react@19.2.6) devDependencies: - '@mdx-js/rollup': - specifier: ^3.1.1 - version: 3.1.1(rollup@4.60.4) '@playwright/test': specifier: ^1.60.0 version: 1.60.0 @@ -31,206 +22,140 @@ devDependencies: '@types/react-dom': specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.15) - '@vitejs/plugin-react': - specifier: ^6.0.2 - version: 6.0.2(vite@8.0.14) typescript: specifier: ^5.9.0 version: 5.9.3 - vite: - specifier: ^8.0.14 - version: 8.0.14 + zudoku: + specifier: 0.82.3 + version: 0.82.3(@opentelemetry/core@2.10.0)(@types/json-schema@7.0.15)(acorn@8.16.0)(react-dom@19.2.6)(react@19.2.6)(rollup@4.60.4)(typescript@5.9.3) packages: - /@ai-sdk/gateway@3.0.13(zod@4.4.3): - resolution: {integrity: sha512-g7nE4PFtngOZNZSy1lOPpkC+FAiHxqBJXqyRMEG7NUrEVZlz5goBdtHg1YgWRJIX776JTXAmbOI5JreAKVAsVA==} - engines: {node: '>=18'} + /@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15): + resolution: {integrity: sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg==} + engines: {node: '>= 20'} peerDependencies: - zod: ^3.25.76 || ^4.1.8 + '@types/json-schema': ^7.0.15 dependencies: - '@ai-sdk/provider': 3.0.2 - '@ai-sdk/provider-utils': 4.0.5(zod@4.4.3) - '@vercel/oidc': 3.1.0 - zod: 4.4.3 - dev: false + '@types/json-schema': 7.0.15 + js-yaml: 4.3.0 + dev: true - /@ai-sdk/provider-utils@4.0.5(zod@4.4.3): - resolution: {integrity: sha512-Ow/X/SEkeExTTc1x+nYLB9ZHK2WUId8+9TlkamAx7Tl9vxU+cKzWx2dwjgMHeCN6twrgwkLrrtqckQeO4mxgVA==} - engines: {node: '>=18'} + /@apidevtools/json-schema-ref-parser@15.3.5(@types/json-schema@7.0.15): + resolution: {integrity: sha512-orNOYXw3hYXxxisXMldjzjBzqqTLBPbwOtHg7ovBPvfBHDue1qM9YJENZ3W2BQuS+7z4ThogMbEzEsov57Itkg==} + engines: {node: '>=20'} peerDependencies: - zod: ^3.25.76 || ^4.1.8 + '@types/json-schema': ^7.0.15 dependencies: - '@ai-sdk/provider': 3.0.2 - '@standard-schema/spec': 1.1.0 - eventsource-parser: 3.1.0 - zod: 4.4.3 - dev: false + '@types/json-schema': 7.0.15 + js-yaml: 4.3.0 + dev: true - /@ai-sdk/provider@3.0.2: - resolution: {integrity: sha512-HrEmNt/BH/hkQ7zpi2o6N3k1ZR1QTb7z85WYhYygiTxOQuaml4CMtHCWRbric5WPU+RNsYI7r1EpyVQMKO1pYw==} - engines: {node: '>=18'} + /@apm-js-collab/code-transformer-bundler-plugins@0.5.0: + resolution: {integrity: sha512-YxLBY5nGlurL7QeJLq6e5g0ouBpAp0pwgyA/5rHXEXwhiPLn9ZHbT+Y2LlP90GT872cSocfjWRYu/fnpuBudNQ==} + engines: {node: '>=18.0.0'} dependencies: - json-schema: 0.4.0 - dev: false + '@apm-js-collab/code-transformer': 0.15.0 + es-module-lexer: 2.3.1 + magic-string: 0.30.21 + module-details-from-path: 1.0.4 + dev: true - /@ai-sdk/vue@3.0.33(vue@3.5.35)(zod@4.4.3): - resolution: {integrity: sha512-czM9Js3a7f+Eo35gjEYEeJYUoPvMg5Dfi4bOLyDBghLqn0gaVg8yTmTaSuHCg+3K/+1xPjyXd4+2XcQIohWWiQ==} - engines: {node: '>=18'} - peerDependencies: - vue: ^3.3.4 + /@apm-js-collab/code-transformer@0.15.0: + resolution: {integrity: sha512-XmXYVs8CzJ1Aj79noVbn2weUO/XWtRyURpGqx7aU7DOXlUQhR0WKOQNF0okh7PCeY37vxf7kU3v57OAkEPm3ww==} + hasBin: true dependencies: - '@ai-sdk/provider-utils': 4.0.5(zod@4.4.3) - ai: 6.0.33(zod@4.4.3) - swrv: 1.2.0(vue@3.5.35) - vue: 3.5.35(typescript@5.9.3) + '@types/estree': 1.0.9 + astring: 1.9.0 + esquery: 1.7.0 + meriyah: 6.1.4 + semifies: 1.0.0 + source-map: 0.6.1 + dev: true + + /@apm-js-collab/tracing-hooks@0.10.1: + resolution: {integrity: sha512-w2OWXR7FWrKqSziuE9+QclaZrStxO/8+OwbXM635s/zs0Eez1Qo3ivSPdB2WsaPY/iznKTytONPx/PitD7IXcA==} + dependencies: + '@apm-js-collab/code-transformer': 0.15.0 + debug: 4.4.3 + module-details-from-path: 1.0.4 transitivePeerDependencies: - - zod - dev: false + - supports-color + dev: true - /@babel/helper-string-parser@7.29.7: - resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + /@babel/runtime@7.29.7: + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} - dev: false + dev: true - /@babel/helper-validator-identifier@7.29.7: - resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} - engines: {node: '>=6.9.0'} - dev: false + /@base-ui/react@1.6.0(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-/jzjTWJYXhRFO45Bev9lc3cHbmjzCMpUqbMZ2AgKy/z25mY9B6shGSNcXcjQar9n5doM0KYW1W8fcFv2jZBuMw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@date-fns/tz': ^1.2.0 + '@types/react': ^17 || ^18 || ^19 + date-fns: ^4.0.0 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@date-fns/tz': + optional: true + '@types/react': + optional: true + date-fns: + optional: true + dependencies: + '@babel/runtime': 7.29.7 + '@base-ui/utils': 0.3.1(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.6)(react@19.2.6) + '@floating-ui/utils': 0.2.11 + '@types/react': 19.2.17 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + use-sync-external-store: 1.6.0(react@19.2.6) + dev: true - /@babel/parser@7.29.7: - resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} - engines: {node: '>=6.0.0'} - hasBin: true + /@base-ui/utils@0.3.1(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-gFFiltORVmW/N6IILTGxizP3PBpVpysqML1ALY5Vk0mH+7faVkCknOU31goYHN5Aoek2dkjxva1XOD2Ce9WuIg==} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/types': 7.29.7 - dev: false + '@babel/runtime': 7.29.7 + '@floating-ui/utils': 0.2.11 + '@types/react': 19.2.17 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + reselect: 5.2.0 + use-sync-external-store: 1.6.0(react@19.2.6) + dev: true - /@babel/types@7.29.7: - resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} - engines: {node: '>=6.9.0'} + /@devframes/hub@0.5.4(devframe@0.5.4)(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16): + resolution: {integrity: sha512-NZs5RFuNb6tjQd2JBsRYQT+OqE+z16Kg9/72HG4k+uJdzK90sAGtAjOwK8bsvav/9l85KGx4agfkgxnfbl313w==} + peerDependencies: + devframe: 0.5.4 dependencies: - '@babel/helper-string-parser': 7.29.7 - '@babel/helper-validator-identifier': 7.29.7 - dev: false - - /@codemirror/autocomplete@6.20.2: - resolution: {integrity: sha512-G5FPkgIiLjOgZMjqVjvuKQ1rGPtHogLldJr33eFJdVLtmwY+giGrlv/ewljLz6b9BSQLkjxuwBc6g6omDM+YxQ==} - dependencies: - '@codemirror/language': 6.12.3 - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 - '@lezer/common': 1.5.2 - dev: false - - /@codemirror/commands@6.10.3: - resolution: {integrity: sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==} - dependencies: - '@codemirror/language': 6.12.3 - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 - '@lezer/common': 1.5.2 - dev: false - - /@codemirror/lang-css@6.3.1: - resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} - dependencies: - '@codemirror/autocomplete': 6.20.2 - '@codemirror/language': 6.12.3 - '@codemirror/state': 6.6.0 - '@lezer/common': 1.5.2 - '@lezer/css': 1.3.3 - dev: false - - /@codemirror/lang-html@6.4.11: - resolution: {integrity: sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==} - dependencies: - '@codemirror/autocomplete': 6.20.2 - '@codemirror/lang-css': 6.3.1 - '@codemirror/lang-javascript': 6.2.5 - '@codemirror/language': 6.12.3 - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 - '@lezer/common': 1.5.2 - '@lezer/css': 1.3.3 - '@lezer/html': 1.3.13 - dev: false - - /@codemirror/lang-javascript@6.2.5: - resolution: {integrity: sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==} - dependencies: - '@codemirror/autocomplete': 6.20.2 - '@codemirror/language': 6.12.3 - '@codemirror/lint': 6.9.6 - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 - '@lezer/common': 1.5.2 - '@lezer/javascript': 1.5.4 - dev: false - - /@codemirror/lang-json@6.0.2: - resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==} - dependencies: - '@codemirror/language': 6.12.3 - '@lezer/json': 1.0.3 - dev: false - - /@codemirror/lang-xml@6.1.0: - resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==} - dependencies: - '@codemirror/autocomplete': 6.20.2 - '@codemirror/language': 6.12.3 - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 - '@lezer/common': 1.5.2 - '@lezer/xml': 1.0.6 - dev: false - - /@codemirror/lang-yaml@6.1.3: - resolution: {integrity: sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==} - dependencies: - '@codemirror/autocomplete': 6.20.2 - '@codemirror/language': 6.12.3 - '@codemirror/state': 6.6.0 - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.10 - '@lezer/yaml': 1.0.4 - dev: false - - /@codemirror/language@6.12.3: - resolution: {integrity: sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==} - dependencies: - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.10 - style-mod: 4.1.3 - dev: false - - /@codemirror/lint@6.9.6: - resolution: {integrity: sha512-6Kp7r6XfCi/D/5sdXieMfg9pJU1bUEx96WITuLU6ESaKizCz0QHFMjY/TaFSbigDdEAIgi93itLBIUETP4oK+A==} - dependencies: - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 - crelt: 1.0.6 - dev: false - - /@codemirror/state@6.6.0: - resolution: {integrity: sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==} - dependencies: - '@marijn/find-cluster-break': 1.0.2 - dev: false - - /@codemirror/view@6.43.0: - resolution: {integrity: sha512-V7ZCLQO3Jus9hzh2jVCCPW3mO4IBMr43O37PqSUYautJSnnJF41YlgLw21x0fLJTYvJ+Vkm6Gp+qKGH9pltgXA==} - dependencies: - '@codemirror/state': 6.6.0 - crelt: 1.0.6 - style-mod: 4.1.3 - w3c-keyname: 2.2.8 - dev: false + birpc: 4.0.0 + devframe: 0.5.4(esbuild@0.28.1)(rollup@4.60.4)(typescript@5.9.3)(vite@8.0.16) + nostics: 0.2.0(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16) + pathe: 2.0.3 + perfect-debounce: 2.1.0 + tinyexec: 1.2.4 + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - vite + - webpack + dev: true /@emnapi/core@1.10.0: resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} @@ -257,397 +182,2638 @@ packages: dev: true optional: true - /@floating-ui/core@1.7.5: - resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} - dependencies: - '@floating-ui/utils': 0.2.11 - dev: false - - /@floating-ui/dom@1.7.6: - resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/utils': 0.2.11 - dev: false - - /@floating-ui/utils@0.2.10: - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - dev: false - - /@floating-ui/utils@0.2.11: - resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - dev: false - - /@floating-ui/vue@1.1.11(vue@3.5.35): - resolution: {integrity: sha512-HzHKCNVxnGS35r9fCHBc3+uCnjw9IWIlCPL683cGgM9Kgj2BiAl8x1mS7vtvP6F9S/e/q4O6MApwSHj8hNLGfw==} - dependencies: - '@floating-ui/dom': 1.7.6 - '@floating-ui/utils': 0.2.11 - vue-demi: 0.14.10(vue@3.5.35) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: false - - /@floating-ui/vue@1.1.9(vue@3.5.35): - resolution: {integrity: sha512-BfNqNW6KA83Nexspgb9DZuz578R7HT8MZw1CfK9I6Ah4QReNWEJsXWHN+SdmOVLNGmTPDi+fDT535Df5PzMLbQ==} - dependencies: - '@floating-ui/dom': 1.7.6 - '@floating-ui/utils': 0.2.10 - vue-demi: 0.14.10(vue@3.5.35) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: false - - /@headlessui/tailwindcss@0.2.2(tailwindcss@4.3.0): - resolution: {integrity: sha512-xNe42KjdyA4kfUKLLPGzME9zkH7Q3rOZ5huFihWNWOQFxnItxPB3/67yBI8/qBfY8nwBRx5GHn4VprsoluVMGw==} - engines: {node: '>=10'} - peerDependencies: - tailwindcss: ^3.0 || ^4.0 - dependencies: - tailwindcss: 4.3.0 - dev: false - - /@headlessui/vue@1.7.23(vue@3.5.35): - resolution: {integrity: sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==} - engines: {node: '>=10'} - peerDependencies: - vue: ^3.2.0 - dependencies: - '@tanstack/vue-virtual': 3.13.26(vue@3.5.35) - vue: 3.5.35(typescript@5.9.3) - dev: false - - /@internationalized/date@3.12.2: - resolution: {integrity: sha512-FY1Y+H64NDs+HAF6omlnWxm3mEpfgaCSWtL5l551ZZfImA+kGjPFgrnJrGjH6lfmLL0g8Z/mBu1R3kufeCp6Jw==} - dependencies: - '@swc/helpers': 0.5.23 - dev: false - - /@internationalized/number@3.6.7: - resolution: {integrity: sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==} - dependencies: - '@swc/helpers': 0.5.23 - dev: false - - /@jridgewell/sourcemap-codec@1.5.5: - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - dev: false - - /@lezer/common@1.5.2: - resolution: {integrity: sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ==} - dev: false - - /@lezer/css@1.3.3: - resolution: {integrity: sha512-RzBo8r+/6QJeow7aPHIpGVIH59xTcJXp399820gZoMo9noQDRVpJLheIBUicYwKcsbOYoBRoLZlf2720dG/4Tg==} - dependencies: - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.10 - dev: false - - /@lezer/highlight@1.2.3: - resolution: {integrity: sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==} - dependencies: - '@lezer/common': 1.5.2 - dev: false - - /@lezer/html@1.3.13: - resolution: {integrity: sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==} - dependencies: - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.10 - dev: false - - /@lezer/javascript@1.5.4: - resolution: {integrity: sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==} - dependencies: - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.10 - dev: false - - /@lezer/json@1.0.3: - resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} - dependencies: - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.10 - dev: false - - /@lezer/lr@1.4.10: - resolution: {integrity: sha512-rnCpTIBafOx4mRp43xOxDJbFipJm/c0cia/V5TiGlhmMa+wsSdoGmUN3w5Bqrks/09Q/D4tNAmWaT8p6NRi77A==} - dependencies: - '@lezer/common': 1.5.2 - dev: false - - /@lezer/xml@1.0.6: - resolution: {integrity: sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==} - dependencies: - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.10 - dev: false - - /@lezer/yaml@1.0.4: - resolution: {integrity: sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==} - dependencies: - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.10 - dev: false - - /@marijn/find-cluster-break@1.0.2: - resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} - dev: false - - /@mdx-js/mdx@3.1.1: - resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + /@envelop/core@5.5.1: + resolution: {integrity: sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw==} + engines: {node: '>=18.0.0'} dependencies: - '@types/estree': 1.0.9 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 - acorn: 8.16.0 - collapse-white-space: 2.1.0 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-util-scope: 1.0.0 - estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.6 - markdown-extensions: 2.0.0 - recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.16.0) - recma-stringify: 1.0.0 - rehype-recma: 1.0.0 - remark-mdx: 3.1.1 - remark-parse: 11.0.0 - remark-rehype: 11.1.2 - source-map: 0.7.6 - unified: 11.0.5 - unist-util-position-from-estree: 2.0.0 - unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.1.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color + '@envelop/instrumentation': 1.0.0 + '@envelop/types': 5.2.1 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 dev: true - /@mdx-js/react@3.1.1(@types/react@19.2.15)(react@19.2.6): - resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} - peerDependencies: - '@types/react': '>=16' - react: '>=16' + /@envelop/instrumentation@1.0.0: + resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} + engines: {node: '>=18.0.0'} dependencies: - '@types/mdx': 2.0.13 - '@types/react': 19.2.15 - react: 19.2.6 - dev: false + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + dev: true - /@mdx-js/rollup@3.1.1(rollup@4.60.4): - resolution: {integrity: sha512-v8satFmBB+DqDzYohnm1u2JOvxx6Hl3pUvqzJvfs2Zk/ngZ1aRUhsWpXvwPkNeGN9c2NCm/38H29ZqXQUjf8dw==} - peerDependencies: - rollup: '>=2' + /@envelop/types@5.2.1: + resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==} + engines: {node: '>=18.0.0'} dependencies: - '@mdx-js/mdx': 3.1.1 - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) - rollup: 4.60.4 - source-map: 0.7.6 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 dev: true - /@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): - resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + /@esbuild/aix-ppc64@0.28.1: + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] requiresBuild: true - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.2 dev: true optional: true - /@opentelemetry/api@1.9.0: - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} - dev: false - - /@oxc-project/types@0.132.0: - resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} + /@esbuild/android-arm64@0.28.1: + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + requiresBuild: true dev: true + optional: true - /@phosphor-icons/core@2.1.1: - resolution: {integrity: sha512-v4ARvrip4qBCImOE5rmPUylOEK4iiED9ZyKjcvzuezqMaiRASCHKcRIuvvxL/twvLpkfnEODCOJp5dM4eZilxQ==} - dev: false - - /@playwright/test@1.60.0: - resolution: {integrity: sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==} + /@esbuild/android-arm@0.28.1: + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} - hasBin: true - dependencies: - playwright: 1.60.0 + cpu: [arm] + os: [android] + requiresBuild: true dev: true + optional: true - /@replit/codemirror-css-color-picker@6.3.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.43.0): - resolution: {integrity: sha512-19biDANghUm7Fz7L1SNMIhK48tagaWuCOHj4oPPxc7hxPGkTVY2lU/jVZ8tsbTKQPVG7BO2CBDzs7CBwb20t4A==} - peerDependencies: - '@codemirror/language': ^6.0.0 - '@codemirror/state': ^6.0.0 - '@codemirror/view': ^6.0.0 - dependencies: - '@codemirror/language': 6.12.3 - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 - dev: false - - /@rolldown/binding-android-arm64@1.0.2: - resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + /@esbuild/android-x64@0.28.1: + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + engines: {node: '>=18'} + cpu: [x64] os: [android] requiresBuild: true dev: true optional: true - /@rolldown/binding-darwin-arm64@1.0.2: - resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} - engines: {node: ^20.19.0 || >=22.12.0} + /@esbuild/darwin-arm64@0.28.1: + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rolldown/binding-darwin-x64@1.0.2: - resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} - engines: {node: ^20.19.0 || >=22.12.0} + /@esbuild/darwin-x64@0.28.1: + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rolldown/binding-freebsd-x64@1.0.2: - resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} - engines: {node: ^20.19.0 || >=22.12.0} + /@esbuild/freebsd-arm64@0.28.1: + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.28.1: + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] requiresBuild: true dev: true optional: true - /@rolldown/binding-linux-arm-gnueabihf@1.0.2: - resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] + /@esbuild/linux-arm64@0.28.1: + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + engines: {node: '>=18'} + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rolldown/binding-linux-arm64-gnu@1.0.2: - resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + /@esbuild/linux-arm@0.28.1: + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rolldown/binding-linux-arm64-musl@1.0.2: - resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + /@esbuild/linux-ia32@0.28.1: + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} + cpu: [ia32] os: [linux] requiresBuild: true dev: true optional: true - /@rolldown/binding-linux-ppc64-gnu@1.0.2: - resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] + /@esbuild/linux-loong64@0.28.1: + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + engines: {node: '>=18'} + cpu: [loong64] os: [linux] requiresBuild: true dev: true optional: true - /@rolldown/binding-linux-s390x-gnu@1.0.2: - resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] + /@esbuild/linux-mips64el@0.28.1: + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + engines: {node: '>=18'} + cpu: [mips64el] os: [linux] requiresBuild: true dev: true optional: true - /@rolldown/binding-linux-x64-gnu@1.0.2: - resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + /@esbuild/linux-ppc64@0.28.1: + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} + cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /@rolldown/binding-linux-x64-musl@1.0.2: - resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + /@esbuild/linux-riscv64@0.28.1: + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + engines: {node: '>=18'} + cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rolldown/binding-openharmony-arm64@1.0.2: - resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] + /@esbuild/linux-s390x@0.28.1: + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] requiresBuild: true dev: true optional: true - /@rolldown/binding-wasm32-wasi@1.0.2: - resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] + /@esbuild/linux-x64@0.28.1: + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] requiresBuild: true - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) dev: true optional: true - /@rolldown/binding-win32-arm64-msvc@1.0.2: - resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} - engines: {node: ^20.19.0 || >=22.12.0} + /@esbuild/netbsd-arm64@0.28.1: + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} cpu: [arm64] - os: [win32] + os: [netbsd] requiresBuild: true dev: true optional: true - /@rolldown/binding-win32-x64-msvc@1.0.2: - resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} - engines: {node: ^20.19.0 || >=22.12.0} + /@esbuild/netbsd-x64@0.28.1: + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + engines: {node: '>=18'} cpu: [x64] - os: [win32] + os: [netbsd] requiresBuild: true dev: true optional: true - /@rolldown/pluginutils@1.0.1: - resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - dev: true - + /@esbuild/openbsd-arm64@0.28.1: + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.28.1: + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openharmony-arm64@0.28.1: + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.28.1: + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.28.1: + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.28.1: + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.28.1: + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@fastify/busboy@3.2.0: + resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} + dev: true + + /@floating-ui/core@1.8.0: + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} + dependencies: + '@floating-ui/utils': 0.2.12 + dev: true + + /@floating-ui/dom@1.8.0: + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + dev: true + + /@floating-ui/react-dom@2.1.9(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 1.8.0 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@floating-ui/utils@0.2.11: + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + dev: true + + /@floating-ui/utils@0.2.12: + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + dev: true + + /@graphiql/toolkit@0.12.1(graphql@16.14.0): + resolution: {integrity: sha512-OuHVUIvPL7nz3uAdG9eyZ5cZx87JH+XMOHiXgv3foYZWBPW8FNMGUyFflxP70jhv7bX9UPyYmRsTIJ+GSlK0PQ==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + graphql-ws: '>= 4.5.0' + peerDependenciesMeta: + graphql-ws: + optional: true + dependencies: + '@n1ru4l/push-pull-async-iterable-iterator': 3.2.0 + graphql: 16.14.0 + meros: 1.3.2 + transitivePeerDependencies: + - '@types/node' + dev: true + + /@graphql-tools/executor@1.5.7(graphql@16.14.0): + resolution: {integrity: sha512-UcXVClkBml+qyGEsQxfEaAkboqySVGFUd9ivn7pDc9jZSckgF6zL21cNxuRH5ZA2exneV3PTtcc0I0rDOdE0Tg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 11.2.2(graphql@16.14.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.0) + '@repeaterjs/repeater': 3.1.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.14.0 + tslib: 2.8.1 + dev: true + + /@graphql-tools/merge@9.2.2(graphql@16.14.0): + resolution: {integrity: sha512-DSLLAztOIQId7QE3m8Ehk5lV+0pjxNSSRDHPzlYQ9E4KJ9AoUMBprC4C+eX3v4srh05S2ujm5/veqAr5yEWFSQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 11.2.2(graphql@16.14.0) + graphql: 16.14.0 + tslib: 2.8.1 + dev: true + + /@graphql-tools/schema@10.0.38(graphql@16.14.0): + resolution: {integrity: sha512-Kckk2/vm+rELJ7ijvFaAn9ouWSVUTD0D4SJIvYF4rKeuQHAfCzE/jzMFonZVpTXleqJjPXLZjVbuaMorw7A5Og==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/merge': 9.2.2(graphql@16.14.0) + '@graphql-tools/utils': 11.2.2(graphql@16.14.0) + graphql: 16.14.0 + tslib: 2.8.1 + dev: true + + /@graphql-tools/utils@10.11.0(graphql@16.14.0): + resolution: {integrity: sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.0) + '@whatwg-node/promise-helpers': 1.3.2 + cross-inspect: 1.0.1 + graphql: 16.14.0 + tslib: 2.8.1 + dev: true + + /@graphql-tools/utils@11.2.2(graphql@16.14.0): + resolution: {integrity: sha512-Do2A/t6ayqOma8m7PvpYMsCBswL+NB35BQSng4GWSBqafL2/BnfAZy/NSENPwV721Rm2fG0BHETFC0+FJJZmLw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.0) + '@whatwg-node/promise-helpers': 1.3.2 + cross-inspect: 1.0.1 + graphql: 16.14.0 + tslib: 2.8.1 + dev: true + + /@graphql-typed-document-node/core@3.2.0(graphql@16.14.0): + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.14.0 + dev: true + + /@graphql-yoga/logger@2.0.1: + resolution: {integrity: sha512-Nv0BoDGLMg9QBKy9cIswQ3/6aKaKjlTh87x3GiBg2Z4RrjyrM48DvOOK0pJh1C1At+b0mUIM67cwZcFTDLN4sA==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: true + + /@graphql-yoga/subscription@5.0.5: + resolution: {integrity: sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==} + engines: {node: '>=18.0.0'} + dependencies: + '@graphql-yoga/typed-event-target': 3.0.2 + '@repeaterjs/repeater': 3.1.0 + '@whatwg-node/events': 0.1.2 + tslib: 2.8.1 + dev: true + + /@graphql-yoga/typed-event-target@3.0.2: + resolution: {integrity: sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==} + engines: {node: '>=18.0.0'} + dependencies: + '@repeaterjs/repeater': 3.1.0 + tslib: 2.8.1 + dev: true + + /@hono/node-server@2.0.8(hono@4.12.27): + resolution: {integrity: sha512-GuCWzLxwg218fy1JaHculFsdcuY12hxit83V+algozTPnwhNjLrRL/Alg9OYjLZLoUZ1rw/S4CdTMsnkSKCmFA==} + engines: {node: '>=20'} + peerDependencies: + hono: ^4 + dependencies: + hono: 4.12.27 + dev: true + + /@jridgewell/gen-mapping@0.3.13: + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + dev: true + + /@jridgewell/remapping@2.3.5: + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + dev: true + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.5.5: + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + dev: true + + /@jridgewell/trace-mapping@0.3.31: + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + dev: true + + /@lekoarts/rehype-meta-as-attributes@3.0.3: + resolution: {integrity: sha512-DyG740U2y8ZWU5ZsAGzKfdVKOENg9UZsCBUJ3DVaWT7ZMHhDG5U0CjLj40CsEsJJ1gauaQPlrU9QUg5uSa4RFg==} + engines: {node: '>=18.0.0'} + dependencies: + unist-util-visit: 5.1.0 + dev: true + + /@mdx-js/mdx@3.1.0(acorn@8.16.0): + resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.16.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - acorn + - supports-color + dev: true + + /@mdx-js/mdx@3.1.1: + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + acorn: 8.16.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.16.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@mdx-js/rollup@3.1.1(rollup@4.60.4): + resolution: {integrity: sha512-v8satFmBB+DqDzYohnm1u2JOvxx6Hl3pUvqzJvfs2Zk/ngZ1aRUhsWpXvwPkNeGN9c2NCm/38H29ZqXQUjf8dw==} + peerDependencies: + rollup: '>=2' + dependencies: + '@mdx-js/mdx': 3.1.1 + '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + rollup: 4.60.4 + source-map: 0.7.6 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@n1ru4l/push-pull-async-iterable-iterator@3.2.0: + resolution: {integrity: sha512-3fkKj25kEjsfObL6IlKPAlHYPq/oYwUkkQ03zsTTiDjD7vg/RxjdiLeCydqtxHZP0JgsXL3D/X5oAkMGzuUp/Q==} + engines: {node: '>=12'} + dev: true + + /@napi-rs/nice-android-arm-eabi@1.1.1: + resolution: {integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-android-arm64@1.1.1: + resolution: {integrity: sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-darwin-arm64@1.1.1: + resolution: {integrity: sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-darwin-x64@1.1.1: + resolution: {integrity: sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-freebsd-x64@1.1.1: + resolution: {integrity: sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-linux-arm-gnueabihf@1.1.1: + resolution: {integrity: sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-linux-arm64-gnu@1.1.1: + resolution: {integrity: sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-linux-arm64-musl@1.1.1: + resolution: {integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-linux-ppc64-gnu@1.1.1: + resolution: {integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-linux-riscv64-gnu@1.1.1: + resolution: {integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-linux-s390x-gnu@1.1.1: + resolution: {integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-linux-x64-gnu@1.1.1: + resolution: {integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-linux-x64-musl@1.1.1: + resolution: {integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-openharmony-arm64@1.1.1: + resolution: {integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [openharmony] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-win32-arm64-msvc@1.1.1: + resolution: {integrity: sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-win32-ia32-msvc@1.1.1: + resolution: {integrity: sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice-win32-x64-msvc@1.1.1: + resolution: {integrity: sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@napi-rs/nice@1.1.1: + resolution: {integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==} + engines: {node: '>= 10'} + requiresBuild: true + optionalDependencies: + '@napi-rs/nice-android-arm-eabi': 1.1.1 + '@napi-rs/nice-android-arm64': 1.1.1 + '@napi-rs/nice-darwin-arm64': 1.1.1 + '@napi-rs/nice-darwin-x64': 1.1.1 + '@napi-rs/nice-freebsd-x64': 1.1.1 + '@napi-rs/nice-linux-arm-gnueabihf': 1.1.1 + '@napi-rs/nice-linux-arm64-gnu': 1.1.1 + '@napi-rs/nice-linux-arm64-musl': 1.1.1 + '@napi-rs/nice-linux-ppc64-gnu': 1.1.1 + '@napi-rs/nice-linux-riscv64-gnu': 1.1.1 + '@napi-rs/nice-linux-s390x-gnu': 1.1.1 + '@napi-rs/nice-linux-x64-gnu': 1.1.1 + '@napi-rs/nice-linux-x64-musl': 1.1.1 + '@napi-rs/nice-openharmony-arm64': 1.1.1 + '@napi-rs/nice-win32-arm64-msvc': 1.1.1 + '@napi-rs/nice-win32-ia32-msvc': 1.1.1 + '@napi-rs/nice-win32-x64-msvc': 1.1.1 + dev: true + optional: true + + /@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + requiresBuild: true + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + dev: true + optional: true + + /@opentelemetry/api-logs@0.214.0: + resolution: {integrity: sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA==} + engines: {node: '>=8.0.0'} + dependencies: + '@opentelemetry/api': 1.9.1 + dev: true + + /@opentelemetry/api@1.9.1: + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} + engines: {node: '>=8.0.0'} + dev: true + + /@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1): + resolution: {integrity: sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.43.0 + dev: true + + /@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1): + resolution: {integrity: sha512-MHqEX5Dk59cqVah5LiARMACku7jXSVk9iVDWOea4x3cr7VfdByeDCURK6o1lntT1JS/Tsovw01UJrBhN3/uC5w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.214.0 + import-in-the-middle: 3.3.2 + require-in-the-middle: 8.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1): + resolution: {integrity: sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + dev: true + + /@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1): + resolution: {integrity: sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + dev: true + + /@opentelemetry/sdk-trace@2.10.0(@opentelemetry/api@1.9.1): + resolution: {integrity: sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + dev: true + + /@opentelemetry/semantic-conventions@1.43.0: + resolution: {integrity: sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==} + engines: {node: '>=14'} + dev: true + + /@oxc-parser/binding-android-arm-eabi@0.132.0: + resolution: {integrity: sha512-KrLaPWa5c9Y7LkW+rKkaUE3y7DBDrQtaf7rlsSDfv6KAHUjgzAIRA761Lrrp6//Yd/Rlie/yEOt9YENCoJnOcw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-android-arm-eabi@0.134.0: + resolution: {integrity: sha512-N9Us7l/X9ZC3LA6eWSzPyduvBPXV1eRyDPwM6/UWpxwwXGsatb8131+d2L8UsmyHrixnKLHBd6UeH8wangV7fw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-android-arm64@0.132.0: + resolution: {integrity: sha512-SThDrSeamB/kG2+NxcJ5/wSLcV6dUqDknrPLqFYQ0ST/55mtBP4M7Q/f3QbubH6aAd11wpzZn/nwbVRSdobOpg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-android-arm64@0.134.0: + resolution: {integrity: sha512-Ic2oPZESeCaD4+9cKRqp1GMYsTO9Q3Yi9HdY2x9x75ozbnC20sybFHzeBklmaVD9PBzd8KbkmNN0gy+SVlm7zw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-darwin-arm64@0.132.0: + resolution: {integrity: sha512-Lc0f/TYoKBghE5/2Gsv7bLXk+TJZunx2Tf61X8hG4ARXdc8UYI26dCGccFSd1AyFbK3jfaNXtMnupggDbjPXdQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-darwin-arm64@0.134.0: + resolution: {integrity: sha512-1z9+nVJ1Awq4CPyHAthx5zOUrg5T1zc3dWt6juxwDcuejFGbdYzWJITkS1rv4DCdSTphDU3IW71MzyLV3BjRGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-darwin-x64@0.132.0: + resolution: {integrity: sha512-RG2eJIpf7C21z9HSSXFw1bTArdpKe7Y4fwcJTwRq1yCSe1vSavaN9GA1sm9KqzemTLAGVktQ+7qBTGp0vQeUZg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-darwin-x64@0.134.0: + resolution: {integrity: sha512-MpofofaRZnxmYrY3lE8RTLHmE1KkX2q0elEeJ8sMcLbS8At76BjYSL6axssqhx29prGGDzIZ5lYFD+IXqaTzFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-freebsd-x64@0.132.0: + resolution: {integrity: sha512-wQIPntPLtJ8NcBpvKPbEv3NqzV6k8eP8tP/jE9Rg8HTg/j7urZGFSsTCPCW5k77Qfw2DM4vRvc9p3I4yq/Shvw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-freebsd-x64@0.134.0: + resolution: {integrity: sha512-OqnPQY27vqWAbMnHfLcF8CVOUv2cCvdlTiqyK5qz5WCbH3XOLpYVQATv8S5UrR8bbEJCAqJLsI7W6cRFXAxCoA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-arm-gnueabihf@0.132.0: + resolution: {integrity: sha512-PixKEpeSe3yxQWqNyOCBALRYc72+Tj7ILDofUl3iXo25cVOzLA6jHUhmOINRtWIPh7dbUie3QNeabwaQpZTw6w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-arm-gnueabihf@0.134.0: + resolution: {integrity: sha512-0eqWl+PWrcwGC3b8DCB58w3QINAuZfpX2ULTGpI01GUMBc6zDKSpttWxvqPIydxuQEkGQTQRAXLLvc+vTDZbQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-arm-musleabihf@0.132.0: + resolution: {integrity: sha512-sCR+DzGHlyHKnbA2z9zWjTUhIo8Sy0enJl4RDsBwPmkxYynPatpwOAWe8W5127SlW0boqUWHGtr1NWn5UwIhXQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-arm-musleabihf@0.134.0: + resolution: {integrity: sha512-YToasuDmyzpyTC1ztrvkaSXz8tP+YUbx041M/4SGxaRGiyMzsKkQ869KPUTGA57A6aVsb1/DiPX8XZQQeSFkiw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-arm64-gnu@0.132.0: + resolution: {integrity: sha512-sQBix5P2cW+IpzTcCwYxnh9yALrKSIkKJThspBvMGcygSMnbzkSvhN7SfuX1hvBk8y1XEChsdkU3ET0V5DmzUw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-arm64-gnu@0.134.0: + resolution: {integrity: sha512-qMS7NLc2o8G7LLz53wisol+O7/YbMhtaGVhlfsTVLnrraf9kLFgzpiGjtQALLbdxX8uhx0Zmd4l+vY3s1/K4Gg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-arm64-musl@0.132.0: + resolution: {integrity: sha512-WozHg3Kc//8Sk756HXXgMbEAvqtG+Lzb9JOojwQzIGDtN78Az2dLttkb71akWYUF/8IgYfDSlfKh4Uot8is5Vw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-arm64-musl@0.134.0: + resolution: {integrity: sha512-jUEsnxPXhrCYxswQLYvUOxZEE5UWFMkK5kBnrcPMj7TONz1pD0yKgPmOQCAx2LPoysJ/v2Sjg4RBUVoO2VXoZQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-ppc64-gnu@0.132.0: + resolution: {integrity: sha512-CmX/ulNBOEwWTyVRmcpYKAcAizW6+OjtLJgo7fXoL9OqQvjF4VER8tPomv44vwzfSCy1BHbsB0ZlZYzYJNj4cA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-ppc64-gnu@0.134.0: + resolution: {integrity: sha512-FU5xMUsXnMuWKVCGo43c6SJsnqHcsioqm32PHdDY39cIRJa/AZbo7RMYW0W5gYcNZqb8EMhELkMDwbJOFbUhtg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-riscv64-gnu@0.132.0: + resolution: {integrity: sha512-j9oQS+hM90SdhviNGWbPgT4+Rlq+ac++q/zjgwPD1mVHgxHzATvoRGtDx0sXGmFOQ9J9YkwAhYGb5MAHL6TAsA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-riscv64-gnu@0.134.0: + resolution: {integrity: sha512-tPc7OAhslHVmNebho1RSEGL//7i7Nm39gbQ+gYreBYwzvDVqNwdQH3S13ccM+R1TpimQ+3bIyFMfnilJIGRtjQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-riscv64-musl@0.132.0: + resolution: {integrity: sha512-bLz+Xi+Agnfmd7kWPEsSVwCn2k4EyIalZkNBcQ0OGIv9rqn8VgCPLNd03tM9mKX/5TdlvDXalz0q71BIrOPNqg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-riscv64-musl@0.134.0: + resolution: {integrity: sha512-TtWEC4MUAHodX5a5kGsmK8g5K49V5ewWfwGrXdbw+gXWLXWXuhi+ectNELmOvYIwaqPSTAry1HNS/hfXssaPHQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-s390x-gnu@0.132.0: + resolution: {integrity: sha512-U6t2qbJU0ypTfyj9QV3W1Y6mITDTL8ai/OR6NUn85vyHthOvobKWgXzU4tu0EskSzlpuVFz1g0jFGulDIUKHxQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-s390x-gnu@0.134.0: + resolution: {integrity: sha512-mF4uls8TA8SPXSDLpclJ6z9S+vaeUnNp95iUEfqwv9oVJUAE7B2j4crOj8UvByRXpbO5N+aAlJadQEyFlnXU6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-x64-gnu@0.132.0: + resolution: {integrity: sha512-WcEaSNHFk8yz5YFlQQAlhq6jOFmZBB/RKE7uzhyCIf+pF1Lmv9gUH4221mle2Gd9iHyWT3ySNph8yZgb1xYdWg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-x64-gnu@0.134.0: + resolution: {integrity: sha512-hieAQplyJeCvzqdSAxpOOGvVCBVXo/ioIBxioHfsUrQu93Et7Hy52cCG/GHEnjImVyeqEIViyyjuB0nKghxz/w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-x64-musl@0.132.0: + resolution: {integrity: sha512-iQrV4iJzQgRwK3BWRmQl1C3C6g3wYpXN2WLdQdyR+efoUnncdShZAVp9OgcojtlD3MDRbuOMGG3SjxF4fL4nlQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-linux-x64-musl@0.134.0: + resolution: {integrity: sha512-OQnJAK4sFuNSLgsh2s/K+14a3kwbmqf2yh1JiADU9XSfDuRooZYbAxmmBVPiyQ97+jBIIA1x2oPZeYNto3Ioow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-openharmony-arm64@0.132.0: + resolution: {integrity: sha512-FWzmUGrZ6GUby4U7WIwcCtab6tdmlTO3xTRRKyb5kjIJVEiaUAT8animUG/nK8ZCA8gkRkPOTId4rl6uTqUmJQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-openharmony-arm64@0.134.0: + resolution: {integrity: sha512-RYLooe6g31q/PqNFN0NjR80IK/ARGsfLasAXL42LXonL+5Cyy9Or76rjBKQLAjERikJwbRU/sYW9Q5Tnpt1A4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-wasm32-wasi@0.132.0: + resolution: {integrity: sha512-TlbMppxJI5CjWDes0QaP6G3aneVg1yikBu5QYI+DUShF9WDL66ccgKFNNGmi/Wybtszw6hxwAvv76T4DaPKnHw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + dev: true + optional: true + + /@oxc-parser/binding-wasm32-wasi@0.134.0: + resolution: {integrity: sha512-h8bmHyvc0PxA811prUjfVpJlQAurOOiRbohY4QNGjCEz+L72G9CmWl28OOz3mevrYlURgUsprNuH8hDJXh1VOw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + dev: true + optional: true + + /@oxc-parser/binding-win32-arm64-msvc@0.132.0: + resolution: {integrity: sha512-RH/NbFjGKqdUAUi7Oh3LQPxUk2hsWFEEQ38HSnbRQT8QjBZFKqL1fMbmsB3N4jy/KPh9iX94+9dmkEMBBbambw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-win32-arm64-msvc@0.134.0: + resolution: {integrity: sha512-EPTfanpBMLNnSAWCDYpbJp1stmsf5x6hMsAwymf2J8ylRupIvO6FtKmHBMdc/wt43y08iz6ILlzFGIXe32/Kbw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-win32-ia32-msvc@0.132.0: + resolution: {integrity: sha512-JUr4jQY9jxoIB/YTLXr6XofSi5xikj6p5/Ns1h0VOBDT0j1jKU+kMsv2xxv51RwnETcXpA1Yw/9oUAfcqfaqEA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-win32-ia32-msvc@0.134.0: + resolution: {integrity: sha512-yAwetF+fTr9lTMtmqvkkWiiMXvH/yjMxGzUDG2rTL/LV1lL37eZ2enUGIlIo0gwhBIKWgabDEidtil+kiqNpgQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-win32-x64-msvc@0.132.0: + resolution: {integrity: sha512-2dapgHpA5X8DSXF4AU36hJWYf6zP0tKjMXFRAZFBD62pkevW/uhFDXoFH9Y/3Fd2EtDrw5ByNnR1wVE9X9y0SQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@oxc-parser/binding-win32-x64-msvc@0.134.0: + resolution: {integrity: sha512-4VY39G5tuGlBYiH13XbWqfLcwKygQEv0iyf8vtZ5NyLAGjI8M0MiYyLhj91GkWRznr+5VC0I+5R55HUDV/Rklw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@oxc-project/types@0.132.0: + resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} + dev: true + + /@oxc-project/types@0.133.0: + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + dev: true + + /@oxc-project/types@0.134.0: + resolution: {integrity: sha512-T0xuRRKrQFmocH8y+jGfpmSkGcheaJExY9lEihmR1Gm2aH+75B8CzgU2rABRQSzzDxLjZ15Sc0bRVLj5lVeNXQ==} + dev: true + + /@pagefind/darwin-arm64@1.5.2: + resolution: {integrity: sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@pagefind/darwin-x64@1.5.2: + resolution: {integrity: sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@pagefind/freebsd-x64@1.5.2: + resolution: {integrity: sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@pagefind/linux-arm64@1.5.2: + resolution: {integrity: sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@pagefind/linux-x64@1.5.2: + resolution: {integrity: sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@pagefind/windows-arm64@1.5.2: + resolution: {integrity: sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@pagefind/windows-x64@1.5.2: + resolution: {integrity: sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@playwright/test@1.60.0: + resolution: {integrity: sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==} + engines: {node: '>=18'} + hasBin: true + dependencies: + playwright: 1.60.0 + dev: true + + /@posthog/core@1.30.8: + resolution: {integrity: sha512-rRJxn7UjPR5LWgRwicJgHWD7tu3P2IebdWjGJ1xpXkbNqpFyW+SbSDGjhunmmXXl2c59ejOICtnbrwN6njS1lw==} + dependencies: + '@posthog/types': 1.380.1 + dev: true + + /@posthog/types@1.380.1: + resolution: {integrity: sha512-GaeyU1vPxwZvYlSWdpxbLCRPqY2WKUZYUNjBlJHAlaAXbMmCfLgB2cvkwjidr8lhX8nyxINjjvQMiOSSfSSxcg==} + dev: true + + /@pothos/core@4.12.0(graphql@16.14.0): + resolution: {integrity: sha512-PeiODrj3GjQ7Nbs/5p65DEyBWZTSGGjgGO/BgaMEqS1jBNX/2zJTEQJA9zM5uPmCHUCDjE7Qn2U7lOi0ALp/8A==} + peerDependencies: + graphql: ^16.10.0 + dependencies: + graphql: 16.14.0 + dev: true + + /@radix-ui/number@1.1.1: + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + dev: true + + /@radix-ui/primitive@1.1.3: + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + dev: true + + /@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-aspect-ratio@1.1.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-5nZrJTF7gH+e0nZS7/QxFz6tJV4VimhQb1avEgtsJxvvIp5JilL+c58HICsKzPxghdwaDt48hEfPM1au4zGy+w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-compose-refs@1.1.5(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-context@1.1.2(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-context@1.1.3(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + aria-hidden: 1.2.6 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.6) + dev: true + + /@radix-ui/react-direction@1.1.1(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-id@1.1.1(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-id@1.1.4(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + aria-hidden: 1.2.6 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.6) + dev: true + + /@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + aria-hidden: 1.2.6 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.6) + dev: true + + /@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/rect': 1.1.1 + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-primitive@2.1.10(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-slot': 1.3.3(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-context': 1.1.3(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + aria-hidden: 1.2.6 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-remove-scroll: 2.7.2(@types/react@19.2.17)(react@19.2.6) + dev: true + + /@radix-ui/react-separator@1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-jOLO4lssEzWpoDu7G+Ze4VjwMRUBt291pnZD0gmalREZipnTX3wadQo7Fy48GCTfe14/YRN6rw/rOJqrE85Wxw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-slot@1.2.3(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-slot@1.2.4(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-slot@1.3.3(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-use-layout-effect@1.1.4(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-use-previous@1.1.1(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-use-rect@1.1.1(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/rect': 1.1.1 + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-use-size@1.1.1(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.6) + '@types/react': 19.2.17 + react: 19.2.6 + dev: true + + /@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/react-visually-hidden@1.2.4(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /@radix-ui/rect@1.1.1: + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + dev: true + + /@repeaterjs/repeater@3.1.0: + resolution: {integrity: sha512-TaoVksZRSx2KWYYpyLQtMQXXeS98VsgZImzW65xmiVgbYhXLk+aEsmzPLirqVuE4/XuUapH2iMtxUzaBNDzdSQ==} + dev: true + + /@rolldown/binding-android-arm64@1.0.3: + resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-darwin-arm64@1.0.3: + resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-darwin-x64@1.0.3: + resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-freebsd-x64@1.0.3: + resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-linux-arm-gnueabihf@1.0.3: + resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-linux-arm64-gnu@1.0.3: + resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-linux-arm64-musl@1.0.3: + resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-linux-ppc64-gnu@1.0.3: + resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-linux-s390x-gnu@1.0.3: + resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-linux-x64-gnu@1.0.3: + resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-linux-x64-musl@1.0.3: + resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-openharmony-arm64@1.0.3: + resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-wasm32-wasi@1.0.3: + resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + dev: true + optional: true + + /@rolldown/binding-win32-arm64-msvc@1.0.3: + resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rolldown/binding-win32-x64-msvc@1.0.3: + resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rolldown/pluginutils@1.0.1: + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + dev: true + /@rollup/pluginutils@5.4.0(rollup@4.60.4): resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} engines: {node: '>=14.0.0'} @@ -863,426 +3029,428 @@ packages: dev: true optional: true - /@scalar/agent-chat@0.12.5(tailwindcss@4.3.0)(typescript@5.9.3)(zod@4.4.3): - resolution: {integrity: sha512-FS/v/GCc0H8d1s5wLOI0iz+4aAMR8eTJxl+cdVMCnhCAZYSQUf2bfwRRu9AxmK8htLHTZC7C5gPIPxItQnVelg==} + /@scalar/helpers@0.8.0: + resolution: {integrity: sha512-gmOC6VravNB9VDl6wnt/GOj4K/hn48tj5bpW4AM4MhH8Ubil6uu7g1DSoKHwltu8Ks79KEtR6JmOrROi9R7jaQ==} + engines: {node: '>=22'} + dev: true + + /@scalar/json-magic@0.12.14: + resolution: {integrity: sha512-dWrCy3ew1r7OQ1pu2r4ZjiKEVy0yVd66kXdmsl41bteOG2F2I2IBlPjmPV6p8ckjImQHxtNBIntFaQfNrdBhJg==} engines: {node: '>=22'} dependencies: - '@ai-sdk/vue': 3.0.33(vue@3.5.35)(zod@4.4.3) - '@scalar/api-client': 3.8.5(tailwindcss@4.3.0)(typescript@5.9.3) - '@scalar/components': 0.26.0(tailwindcss@4.3.0)(typescript@5.9.3) '@scalar/helpers': 0.8.0 - '@scalar/icons': 0.7.2(typescript@5.9.3) - '@scalar/json-magic': 0.12.14 - '@scalar/openapi-types': 0.9.0 - '@scalar/schemas': 0.3.2 - '@scalar/themes': 0.15.5 - '@scalar/types': 0.12.2 - '@scalar/use-toasts': 0.10.2(typescript@5.9.3) - '@scalar/validation': 0.6.0 - '@scalar/workspace-store': 0.52.0(typescript@5.9.3) - '@vueuse/core': 13.9.0(vue@3.5.35) - ai: 6.0.33(zod@4.4.3) - js-base64: 3.7.8 - neverpanic: 0.0.7(typescript@5.9.3) - truncate-json: 3.0.1 - vue: 3.5.35(typescript@5.9.3) - transitivePeerDependencies: - - '@vue/composition-api' - - async-validator - - axios - - change-case - - drauu - - idb-keyval - - jwt-decode - - nprogress - - qrcode - - sortablejs - - supports-color - - tailwindcss - - typescript - - universal-cookie - - zod - dev: false + pathe: 2.0.3 + yaml: 2.9.0 + dev: true - /@scalar/api-client@3.8.5(tailwindcss@4.3.0)(typescript@5.9.3): - resolution: {integrity: sha512-9zBFENlFark9tCThwHNiKTYLVHxcMm4Wg9jgYI1iG2hr1s0gmX5XlHHovObSn6JVyEuU8si42Eqnkg6LUrnWRQ==} + /@scalar/openapi-parser@0.28.4: + resolution: {integrity: sha512-OMrMzffQ7bfLKaIPdjQzVm1JE5Vlj781CA+qAo9YoxzGyoqLwI+YbctBbOlTgT5vNCY8qtP7vXkWWICl9E0Awg==} engines: {node: '>=22'} dependencies: - '@headlessui/tailwindcss': 0.2.2(tailwindcss@4.3.0) - '@headlessui/vue': 1.7.23(vue@3.5.35) - '@scalar/components': 0.26.0(tailwindcss@4.3.0)(typescript@5.9.3) '@scalar/helpers': 0.8.0 - '@scalar/icons': 0.7.2(typescript@5.9.3) '@scalar/json-magic': 0.12.14 - '@scalar/oas-utils': 0.17.3(typescript@5.9.3) - '@scalar/openapi-types': 0.9.0 - '@scalar/sidebar': 0.9.17(tailwindcss@4.3.0)(typescript@5.9.3) - '@scalar/snippetz': 0.9.11 - '@scalar/themes': 0.15.5 - '@scalar/typebox': 0.1.3 - '@scalar/types': 0.12.2 - '@scalar/use-codemirror': 0.14.11(typescript@5.9.3) - '@scalar/use-hooks': 0.4.6(typescript@5.9.3) - '@scalar/use-toasts': 0.10.2(typescript@5.9.3) - '@scalar/workspace-store': 0.52.0(typescript@5.9.3) - '@types/har-format': 1.2.16 - '@vueuse/core': 13.9.0(vue@3.5.35) - '@vueuse/integrations': 13.9.0(focus-trap@7.8.0)(fuse.js@7.4.0)(vue@3.5.35) - cookie: 1.1.1 - focus-trap: 7.8.0 - fuse.js: 7.4.0 - js-base64: 3.7.8 - jsonc-parser: 3.3.1 - nanoid: 5.1.11 - pretty-ms: 9.3.0 - radix-vue: 1.9.17(vue@3.5.35) - set-cookie-parser: 3.1.0 - vue: 3.5.35(typescript@5.9.3) + '@scalar/openapi-types': 0.8.0 + '@scalar/openapi-upgrader': 0.2.7 + ajv: 8.20.0 + ajv-draft-04: 1.0.0(ajv@8.20.0) + ajv-formats: 3.0.1(ajv@8.20.0) + jsonpointer: 5.0.1 + leven: 4.1.0 yaml: 2.9.0 - zod: 4.4.3 - transitivePeerDependencies: - - '@vue/composition-api' - - async-validator - - axios - - change-case - - drauu - - idb-keyval - - jwt-decode - - nprogress - - qrcode - - sortablejs - - supports-color - - tailwindcss - - typescript - - universal-cookie - dev: false + dev: true - /@scalar/api-reference-react@0.9.41(react@19.2.6)(tailwindcss@4.3.0)(typescript@5.9.3)(zod@4.4.3): - resolution: {integrity: sha512-7L8UjFj9KboSGlbe/pJAc+S5Qezi4IuUtOVdN1F6COCTF26paEiR9sZ0I+WNIkqsiTjmQouG8wFrQvwsAABfvA==} + /@scalar/openapi-types@0.8.0: + resolution: {integrity: sha512-WmaxVSfvY5K/TwcG2B2TU1WOe1As1uc2s7myswtP6dBlcjU3hM08SApxv/jmyGaCE8t4gO5BBhmHY4pDUfmr2g==} + engines: {node: '>=22'} + dev: true + + /@scalar/openapi-upgrader@0.2.7: + resolution: {integrity: sha512-sC/uLQOivfX+Oef2QhUpgmERL7KZc1z+hiYkcwZQaUyVOHh5e6OscW0skfzbxKPyJfQ6Ocv0Iom9wMToCGaAPw==} engines: {node: '>=22'} - peerDependencies: - react: ^18.0.0 || ^19.0.0 dependencies: - '@scalar/api-reference': 1.57.5(tailwindcss@4.3.0)(typescript@5.9.3)(zod@4.4.3) - '@scalar/types': 0.12.2 - react: 19.2.6 - transitivePeerDependencies: - - '@vue/composition-api' - - async-validator - - axios - - change-case - - drauu - - idb-keyval - - jwt-decode - - nprogress - - qrcode - - sortablejs - - supports-color - - tailwindcss - - typescript - - universal-cookie - - zod - dev: false + '@scalar/openapi-types': 0.8.0 + dev: true - /@scalar/api-reference@1.57.5(tailwindcss@4.3.0)(typescript@5.9.3)(zod@4.4.3): - resolution: {integrity: sha512-1T0rXEtG2XfbHuvyphlZsMr3VXUGCTDxybknMSUykl/5j1WoW9Goz16fVspf5fBLtkw5FUw2+a3DgVJKHU7vXQ==} + /@scalar/snippetz@0.9.11: + resolution: {integrity: sha512-n6zLzaCanvBWFQfR108jvu14m2JrDYRd9VMbQPOyjfU/QdraigQRctVcUOhjEUyb8O3d2Jye9V4KC5xmU47piA==} engines: {node: '>=22'} dependencies: - '@headlessui/vue': 1.7.23(vue@3.5.35) - '@scalar/agent-chat': 0.12.5(tailwindcss@4.3.0)(typescript@5.9.3)(zod@4.4.3) - '@scalar/api-client': 3.8.5(tailwindcss@4.3.0)(typescript@5.9.3) - '@scalar/code-highlight': 0.3.4 - '@scalar/components': 0.26.0(tailwindcss@4.3.0)(typescript@5.9.3) '@scalar/helpers': 0.8.0 - '@scalar/icons': 0.7.2(typescript@5.9.3) - '@scalar/oas-utils': 0.17.3(typescript@5.9.3) - '@scalar/schemas': 0.3.2 - '@scalar/sidebar': 0.9.17(tailwindcss@4.3.0)(typescript@5.9.3) - '@scalar/snippetz': 0.9.11 - '@scalar/themes': 0.15.5 '@scalar/types': 0.12.2 - '@scalar/use-hooks': 0.4.6(typescript@5.9.3) - '@scalar/use-toasts': 0.10.2(typescript@5.9.3) - '@scalar/validation': 0.6.0 - '@scalar/workspace-store': 0.52.0(typescript@5.9.3) - '@unhead/vue': 2.1.15(vue@3.5.35) - '@vueuse/core': 13.9.0(vue@3.5.35) - fuse.js: 7.4.0 - microdiff: 1.5.0 - nanoid: 5.1.11 - vue: 3.5.35(typescript@5.9.3) - yaml: 2.9.0 - transitivePeerDependencies: - - '@vue/composition-api' - - async-validator - - axios - - change-case - - drauu - - idb-keyval - - jwt-decode - - nprogress - - qrcode - - sortablejs - - supports-color - - tailwindcss - - typescript - - universal-cookie - - zod - dev: false + js-base64: 3.7.8 + stringify-object: 6.0.0 + dev: true - /@scalar/code-highlight@0.3.4: - resolution: {integrity: sha512-gGr3D8bfInwZDHsxamYIaG72Wr+kRNX8d4zcOflAfQJ0ZfvqoVbYhhkiSd6K+DLySItK9lWl/cgjJdtKWlT2ig==} + /@scalar/types@0.12.2: + resolution: {integrity: sha512-EzLkubCb7xioiTm9eYnmn/032akaq4kkrrdclgV2uezwtniR8ErQICjhMl2AjBWL6nstHiFZ9RnPZm2Z2/KM0Q==} engines: {node: '>=22'} dependencies: - hast-util-to-text: 4.0.2 - highlight.js: 11.11.1 - lowlight: 3.3.0 - rehype-external-links: 3.0.0 - rehype-format: 5.0.1 - rehype-parse: 9.0.1 - rehype-raw: 7.0.0 - rehype-sanitize: 6.0.0 - rehype-stringify: 10.0.1 - remark-gfm: 4.0.1 - remark-parse: 11.0.0 - remark-rehype: 11.1.2 - remark-stringify: 11.0.0 - unified: 11.0.5 - unist-util-visit: 5.1.0 + '@scalar/helpers': 0.8.0 + nanoid: 5.1.11 + type-fest: 5.7.0 + zod: 4.4.3 + dev: true + + /@sentry/conventions@0.12.0: + resolution: {integrity: sha512-z1JQrl/1SLY+8wpzvork6vl+fpsg/oCCxM7HWWhUnI/R+OGNyoIzieQuggX3uUMY7NBtp8UWCQx6FeFazzOF9g==} + engines: {node: '>=14'} + dev: true + + /@sentry/core@10.62.0: + resolution: {integrity: sha512-tV69fMg2sS5DUFmQSnS7Jd5qJAp0izxwcsvBVz2ieTM9VMRi99IfOSYW9UYr3p1yfuksk41kefN5PEbeedUE+A==} + engines: {node: '>=18'} + dev: true + + /@sentry/node-core@10.62.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0)(@opentelemetry/instrumentation@0.214.0)(@opentelemetry/sdk-trace-base@2.10.0): + resolution: {integrity: sha512-V7rDgbxViiHU0OpcFEDp3l41IFvWTasKHfXw8SQ6yIgtZ8VpFqmz2TR5N7X85iIOmWIvK5HV0yp0eDdsly0+rA==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/exporter-trace-otlp-http': '>=0.57.0 <1' + '@opentelemetry/instrumentation': '>=0.57.1 <1' + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@opentelemetry/core': + optional: true + '@opentelemetry/exporter-trace-otlp-http': + optional: true + '@opentelemetry/instrumentation': + optional: true + '@opentelemetry/sdk-trace-base': + optional: true + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@sentry/conventions': 0.12.0 + '@sentry/core': 10.62.0 + '@sentry/opentelemetry': 10.62.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0)(@opentelemetry/sdk-trace-base@2.10.0) + import-in-the-middle: 3.3.2 + dev: true + + /@sentry/node@10.62.0(@opentelemetry/core@2.10.0): + resolution: {integrity: sha512-4hoU67bJY0o3irEDMZu2UIztAOsvEqFkLXA7EUKl1LXMA3Ba1Lb32OUVqlsTypiEInSDs/BtM+aAFKojZ3P3Fw==} + engines: {node: '>=18'} + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + '@sentry/core': 10.62.0 + '@sentry/node-core': 10.62.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0)(@opentelemetry/instrumentation@0.214.0)(@opentelemetry/sdk-trace-base@2.10.0) + '@sentry/opentelemetry': 10.62.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0)(@opentelemetry/sdk-trace-base@2.10.0) + '@sentry/server-utils': 10.62.0 + import-in-the-middle: 3.3.2 transitivePeerDependencies: + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' - supports-color - dev: false + dev: true - /@scalar/components@0.26.0(tailwindcss@4.3.0)(typescript@5.9.3): - resolution: {integrity: sha512-hCSwedkIaJAngu4G+GnsF7BeuCV8a4dnE+7VL/HN1wYrnx3SwE94zt/LC++VB0l+GsGPdsN0gyuS6brmmtzi5A==} - engines: {node: '>=22'} + /@sentry/opentelemetry@10.62.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0)(@opentelemetry/sdk-trace-base@2.10.0): + resolution: {integrity: sha512-nFwBgtjfwgY8P5lAuQFWfAsQW1MXxuQ6kR/HtBs+A6julqwGGS2QnQ65OCWMzz6IqDEL/pRgT1405/gU+OXU3A==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@sentry/conventions': 0.12.0 + '@sentry/core': 10.62.0 + dev: true + + /@sentry/server-utils@10.62.0: + resolution: {integrity: sha512-S5szsj6kKBhxw97b2HA98fYp/PpWXvSizlisEzb2rnL4IH6RAJ8wP05/fnth8pSywTH+gtUu+i6Wn8e8rX5HvA==} + engines: {node: '>=18'} dependencies: - '@floating-ui/utils': 0.2.10 - '@floating-ui/vue': 1.1.9(vue@3.5.35) - '@headlessui/tailwindcss': 0.2.2(tailwindcss@4.3.0) - '@headlessui/vue': 1.7.23(vue@3.5.35) - '@scalar/code-highlight': 0.3.4 - '@scalar/helpers': 0.8.0 - '@scalar/icons': 0.7.2(typescript@5.9.3) - '@scalar/themes': 0.15.5 - '@scalar/use-hooks': 0.4.6(typescript@5.9.3) - '@vueuse/core': 13.9.0(vue@3.5.35) - cva: 1.0.0-beta.4(typescript@5.9.3) - nanoid: 5.1.11 - radix-vue: 1.9.17(vue@3.5.35) - vue: 3.5.35(typescript@5.9.3) - vue-component-type-helpers: 3.3.3 + '@apm-js-collab/code-transformer': 0.15.0 + '@apm-js-collab/code-transformer-bundler-plugins': 0.5.0 + '@apm-js-collab/tracing-hooks': 0.10.1 + '@sentry/conventions': 0.12.0 + '@sentry/core': 10.62.0 + magic-string: 0.30.21 transitivePeerDependencies: - - '@vue/composition-api' - supports-color - - tailwindcss - - typescript - dev: false + dev: true - /@scalar/helpers@0.8.0: - resolution: {integrity: sha512-gmOC6VravNB9VDl6wnt/GOj4K/hn48tj5bpW4AM4MhH8Ubil6uu7g1DSoKHwltu8Ks79KEtR6JmOrROi9R7jaQ==} - engines: {node: '>=22'} - dev: false + /@shikijs/core@4.2.0: + resolution: {integrity: sha512-Hc87Ab1Ld/vEbZRCbwx344I5v+4RU8CVToUTRkqXL1+TjbuOp9U5Xa0M23V4GEWHxVn+yO5otb+HkQVm3ptWQQ==} + engines: {node: '>=20'} + dependencies: + '@shikijs/primitive': 4.2.0 + '@shikijs/types': 4.2.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + dev: true - /@scalar/icons@0.7.2(typescript@5.9.3): - resolution: {integrity: sha512-21L2y/D6oU7wZHHa9i6FK98cZ+XH4HX9+e69uNpvlp4awRUpz6ifNHOLlxI607bq+Yz4G313gnV0uyUHwZ/pig==} - engines: {node: '>=22'} + /@shikijs/engine-javascript@4.2.0: + resolution: {integrity: sha512-fjETeq1k5ffyXqRgS6+3hpvqseLalp1kjNfRbXpUgWR8FpZ1CmQfiNHovc5lncYjt/Vg5JK/WJEmLahjwMa0og==} + engines: {node: '>=20'} dependencies: - '@phosphor-icons/core': 2.1.1 - '@types/node': 24.12.4 - chalk: 5.6.2 - vue: 3.5.35(typescript@5.9.3) - transitivePeerDependencies: - - typescript - dev: false + '@shikijs/types': 4.2.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + dev: true - /@scalar/json-magic@0.12.14: - resolution: {integrity: sha512-dWrCy3ew1r7OQ1pu2r4ZjiKEVy0yVd66kXdmsl41bteOG2F2I2IBlPjmPV6p8ckjImQHxtNBIntFaQfNrdBhJg==} - engines: {node: '>=22'} + /@shikijs/engine-oniguruma@4.2.0: + resolution: {integrity: sha512-hTorK1dffPkpbMUk6Z+828PgRo7d07HbnizoP0hNPFjhxMHctj0Px/qoHeGMYafc6ju+u9iMldN4JbVzNQM++g==} + engines: {node: '>=20'} dependencies: - '@scalar/helpers': 0.8.0 - pathe: 2.0.3 - yaml: 2.9.0 - dev: false + '@shikijs/types': 4.2.0 + '@shikijs/vscode-textmate': 10.0.2 + dev: true - /@scalar/oas-utils@0.17.3(typescript@5.9.3): - resolution: {integrity: sha512-L9S3f1fRTdERL/bV/vBAJNL57OJcRnFifP8Zvy/Yjj0GJEDbs+32hmAc1YxqfRfy2+QtWq1Q2VfV2CN3R66Xkw==} - engines: {node: '>=22'} + /@shikijs/langs@4.2.0: + resolution: {integrity: sha512-bwrVRlJ0wUhZxAbVdvBbv2TTC9yLsh4C/IO5Ofz0T8MQntgDvyVnkbjw9vi50r1kx7RCIJdnJnjZAwmAsXFLZQ==} + engines: {node: '>=20'} dependencies: - '@scalar/helpers': 0.8.0 - '@scalar/themes': 0.15.5 - '@scalar/types': 0.12.2 - '@scalar/workspace-store': 0.52.0(typescript@5.9.3) - flatted: 3.4.2 - vue: 3.5.35(typescript@5.9.3) - yaml: 2.9.0 - transitivePeerDependencies: - - typescript - dev: false + '@shikijs/types': 4.2.0 + dev: true - /@scalar/openapi-types@0.9.0: - resolution: {integrity: sha512-XGuYegItO8iJbEy5hHxS04vyxoFIuERy3D/twt1hGPya6KJljg9iO0geZ/X5vjDKmSKYAuMNkGqYO5Jjp4NLUA==} - engines: {node: '>=22'} - dev: false + /@shikijs/primitive@4.2.0: + resolution: {integrity: sha512-NOq+DtUkVBJtZMVXL5A0vI0Xk8nvDYaXetFHSJFlOqjDZIVhIPRYFdGkSoElDqNuegikcc3A76SNUa8dTqtAYA==} + engines: {node: '>=20'} + dependencies: + '@shikijs/types': 4.2.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + dev: true + + /@shikijs/rehype@4.2.0: + resolution: {integrity: sha512-ST3EWye/dwF1gWskczJNBnwFtDzEQ9ceytXZtyc/GfwR5V0qJrkoSGZO55O3SAKDDsXkTDcsfwd9pVe7ROlAHg==} + engines: {node: '>=20'} + dependencies: + '@shikijs/types': 4.2.0 + '@types/hast': 3.0.4 + hast-util-to-string: 3.0.1 + shiki: 4.2.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + dev: true + + /@shikijs/themes@4.2.0: + resolution: {integrity: sha512-RX8IHYeLv8Cu2W6ruc3RxUqWn0IYCqSrMBzi/uRGAmfyDNOnNO5BF/Px7o97n4XTpmFTo5GbRaazuOWj+2ak2w==} + engines: {node: '>=20'} + dependencies: + '@shikijs/types': 4.2.0 + dev: true + + /@shikijs/transformers@4.2.0: + resolution: {integrity: sha512-pKrYVNUr1oPjJvs76gkPPirDySx3GKG9O88P2Y3AQ+7AjSFws9Y+Ry/Q/6Yg6QpyigzjdQ6H5JAMNAvLXZ63dw==} + engines: {node: '>=20'} + dependencies: + '@shikijs/core': 4.2.0 + '@shikijs/types': 4.2.0 + dev: true + + /@shikijs/types@4.2.0: + resolution: {integrity: sha512-VT/MKtlpOhEPZloSH3Pb9WCZEBDoQVMa9jedp5UAwmJOar1DVc9DRODAxmYPW9M93IK4ryuqRejFfmlvlVDemw==} + engines: {node: '>=20'} + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + dev: true + + /@shikijs/vscode-textmate@10.0.2: + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + dev: true - /@scalar/openapi-upgrader@0.2.8: - resolution: {integrity: sha512-/SDb3+SIFuScKwrNRTFd7bklGDkayo81cHZlajXfUaT22Oc4VUlOUvyMXBLPa0miOfZTExYTM1I0BWW7Nujugw==} - engines: {node: '>=22'} + /@tailwindcss/node@4.3.0: + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} dependencies: - '@scalar/openapi-types': 0.9.0 - dev: false + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.24.3 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.0 + dev: true - /@scalar/schemas@0.3.2: - resolution: {integrity: sha512-iadXBgJ02XUU5C5s6/xh/PmGLzUPd7X8upXIvPWBXDcQ4FHACNgkG8PPZ/beYM8UPDDkTUPM3ygEs0G6jKwGjQ==} - engines: {node: '>=22'} - dependencies: - '@scalar/helpers': 0.8.0 - '@scalar/validation': 0.6.0 - dev: false + /@tailwindcss/oxide-android-arm64@4.3.0: + resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true - /@scalar/sidebar@0.9.17(tailwindcss@4.3.0)(typescript@5.9.3): - resolution: {integrity: sha512-VppIBTv2EWVi/Ux5MI5FB1zRr1qvY10scYVNAVo+VwzsNyBeuOoCySKpJ61fHu2y45sYtTLuN80EHH8UfJ0S9A==} - engines: {node: '>=22'} - dependencies: - '@scalar/components': 0.26.0(tailwindcss@4.3.0)(typescript@5.9.3) - '@scalar/helpers': 0.8.0 - '@scalar/icons': 0.7.2(typescript@5.9.3) - '@scalar/themes': 0.15.5 - '@scalar/use-hooks': 0.4.6(typescript@5.9.3) - '@scalar/workspace-store': 0.52.0(typescript@5.9.3) - vue: 3.5.35(typescript@5.9.3) - transitivePeerDependencies: - - '@vue/composition-api' - - supports-color - - tailwindcss - - typescript - dev: false + /@tailwindcss/oxide-darwin-arm64@4.3.0: + resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true - /@scalar/snippetz@0.9.11: - resolution: {integrity: sha512-n6zLzaCanvBWFQfR108jvu14m2JrDYRd9VMbQPOyjfU/QdraigQRctVcUOhjEUyb8O3d2Jye9V4KC5xmU47piA==} - engines: {node: '>=22'} - dependencies: - '@scalar/helpers': 0.8.0 - '@scalar/types': 0.12.2 - js-base64: 3.7.8 - stringify-object: 6.0.0 - dev: false + /@tailwindcss/oxide-darwin-x64@4.3.0: + resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true - /@scalar/themes@0.15.5: - resolution: {integrity: sha512-ku8MPNBEXigx/ES0Wm7Mf8Ns+QMePEcMHraDZoA5Ab/UO97yTZIrvuo/gy143QB+NftnQ83vgeDYcCRi6I95tQ==} - engines: {node: '>=22'} - dependencies: - nanoid: 5.1.11 - dev: false + /@tailwindcss/oxide-freebsd-x64@4.3.0: + resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true - /@scalar/typebox@0.1.3: - resolution: {integrity: sha512-lU055AUccECZMIfGA0z/C1StYmboAYIPJLDFBzOO81yXBi35Pxdq+I4fWX6iUZ8qcoHneiLGk9jAUM1rA93iEg==} - dev: false + /@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0: + resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true - /@scalar/types@0.12.2: - resolution: {integrity: sha512-EzLkubCb7xioiTm9eYnmn/032akaq4kkrrdclgV2uezwtniR8ErQICjhMl2AjBWL6nstHiFZ9RnPZm2Z2/KM0Q==} - engines: {node: '>=22'} - dependencies: - '@scalar/helpers': 0.8.0 - nanoid: 5.1.11 - type-fest: 5.7.0 - zod: 4.4.3 - dev: false + /@tailwindcss/oxide-linux-arm64-gnu@4.3.0: + resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true - /@scalar/use-codemirror@0.14.11(typescript@5.9.3): - resolution: {integrity: sha512-5wtC4pUjzhy72j3aAueJg+fh9KflevJvXMn0YscsxiDTvqwIzeZcHe1N9VNtvzDXgLblEeBT6D0+Vs+boyExxg==} - engines: {node: '>=22'} - dependencies: - '@codemirror/autocomplete': 6.20.2 - '@codemirror/commands': 6.10.3 - '@codemirror/lang-css': 6.3.1 - '@codemirror/lang-html': 6.4.11 - '@codemirror/lang-json': 6.0.2 - '@codemirror/lang-xml': 6.1.0 - '@codemirror/lang-yaml': 6.1.3 - '@codemirror/language': 6.12.3 - '@codemirror/lint': 6.9.6 - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 - '@lezer/common': 1.5.2 - '@lezer/highlight': 1.2.3 - '@replit/codemirror-css-color-picker': 6.3.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.43.0) - vue: 3.5.35(typescript@5.9.3) - transitivePeerDependencies: - - typescript - dev: false + /@tailwindcss/oxide-linux-arm64-musl@4.3.0: + resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true - /@scalar/use-hooks@0.4.6(typescript@5.9.3): - resolution: {integrity: sha512-WhsTBk3e7R31yHWQWrrr/RVPGpqwY22RPHN3i4zdEv6llxrloDbkHTpwXCDHTnX92v2A7hKESR6JrGsXcKqrQw==} - engines: {node: '>=22'} - dependencies: - '@scalar/use-toasts': 0.10.2(typescript@5.9.3) - '@scalar/validation': 0.6.0 - '@vueuse/core': 13.9.0(vue@3.5.35) - cva: 1.0.0-beta.4(typescript@5.9.3) - tailwind-merge: 3.5.0 - vue: 3.5.35(typescript@5.9.3) - transitivePeerDependencies: - - typescript - dev: false + /@tailwindcss/oxide-linux-x64-gnu@4.3.0: + resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true - /@scalar/use-toasts@0.10.2(typescript@5.9.3): - resolution: {integrity: sha512-1iHQFbDXv0YQRp13aa63S5EcTJ5K8T0ocnLxk+nziloPrLjKt6jdRt6vOHsLSv5sm9kFKcVKNQTQgialmKCOGA==} - engines: {node: '>=22'} - dependencies: - vue: 3.5.35(typescript@5.9.3) - vue-sonner: 1.3.2 - transitivePeerDependencies: - - typescript - dev: false + /@tailwindcss/oxide-linux-x64-musl@4.3.0: + resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true - /@scalar/validation@0.6.0: - resolution: {integrity: sha512-tpmmG+/xRE2Kn9RpflU3AIyZv08v10+E1ZrJCx7z6+/91zHVxy0M73kC1LT4/8PbYNt85ywyC8+n+D99JdMcGA==} - engines: {node: '>=20'} - dev: false + /@tailwindcss/oxide-wasm32-wasi@4.3.0: + resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + requiresBuild: true + dev: true + optional: true + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + /@tailwindcss/oxide-win32-arm64-msvc@4.3.0: + resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true - /@scalar/workspace-store@0.52.0(typescript@5.9.3): - resolution: {integrity: sha512-8hlFKZ/Ubd8Wy8EYEdMLy04LG+QpaYdpnNjw8UWr27hB4mxANdBo38Vnkwk9yWb4KP2vlJoR4BA/tPIn3t4aFg==} - engines: {node: '>=22'} + /@tailwindcss/oxide-win32-x64-msvc@4.3.0: + resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@tailwindcss/oxide@4.3.0: + resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==} + engines: {node: '>= 20'} + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-x64': 4.3.0 + '@tailwindcss/oxide-freebsd-x64': 4.3.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-x64-musl': 4.3.0 + '@tailwindcss/oxide-wasm32-wasi': 4.3.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 + dev: true + + /@tailwindcss/typography@0.5.20(tailwindcss@4.3.0): + resolution: {integrity: sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==} + peerDependencies: + tailwindcss: '>=3.0.0 || >=4.0.0 || insiders' dependencies: - '@scalar/helpers': 0.8.0 - '@scalar/json-magic': 0.12.14 - '@scalar/openapi-upgrader': 0.2.8 - '@scalar/schemas': 0.3.2 - '@scalar/snippetz': 0.9.11 - '@scalar/typebox': 0.1.3 - '@scalar/types': 0.12.2 - '@scalar/validation': 0.6.0 - js-base64: 3.7.8 - type-fest: 5.7.0 - vue: 3.5.35(typescript@5.9.3) - yaml: 2.9.0 - transitivePeerDependencies: - - typescript - dev: false + postcss-selector-parser: 6.0.10 + tailwindcss: 4.3.0 + dev: true - /@standard-schema/spec@1.1.0: - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - dev: false + /@tailwindcss/vite@4.3.0(vite@8.0.16): + resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 + dependencies: + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 + tailwindcss: 4.3.0 + vite: 8.0.16(esbuild@0.28.1)(yaml@2.9.0) + dev: true - /@swc/helpers@0.5.23: - resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + /@tanem/react-nprogress@6.0.3(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-OT3KZiJv/zGI/lEwX3gD9nzNnyUQuSdSL0BK3OJIUC3Prx3JD18u13TZRvzasEXxHPGzm6AtBEr6gYxPeVWjWw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 dependencies: - tslib: 2.8.1 - dev: false + '@babel/runtime': 7.29.7 + hoist-non-react-statics: 3.3.2 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true - /@tanstack/virtual-core@3.16.0: - resolution: {integrity: sha512-Er2N7q3WOiH6y2JLxsxNX+u2/sLqSsL0bxFgDjuiPiA7vKhZRm+IzcS17vRee3GNXr64UsesA5CAp9yTiIYw9A==} - dev: false + /@tanstack/query-core@5.101.0: + resolution: {integrity: sha512-cQetA74EB+seWySv1TTKr828TnP0u39m6LykwDXIo84SNortpDkp30TMEjkqtYCNP9c40uT/iwl6MLiufEt0Ow==} + dev: true - /@tanstack/vue-virtual@3.13.26(vue@3.5.35): - resolution: {integrity: sha512-4TmREKi8rKiQC8E2XVEMMgzWbrgHNYolkBgYTXVK1kqXmXRGz6xPWgBq20GUYWUDDhit94+g0ricUQKpZhWRmg==} + /@tanstack/react-query@5.101.0(react@19.2.6): + resolution: {integrity: sha512-rLlJXSpkqfizLWgkR5+eLeIk0MvTx/meEIR7LRjxic+qxiQP8zVjq7BqQkiCMNLQBlLfuOLqqr6KO5GtrDlmSg==} peerDependencies: - vue: ^2.7.0 || ^3.0.0 + react: ^18 || ^19 dependencies: - '@tanstack/virtual-core': 3.16.0 - vue: 3.5.35(typescript@5.9.3) - dev: false + '@tanstack/query-core': 5.101.0 + react: 19.2.6 + dev: true /@tybys/wasm-util@0.10.2: resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} @@ -1296,6 +3464,7 @@ packages: resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} dependencies: '@types/ms': 2.1.0 + dev: true /@types/estree-jsx@1.0.5: resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -1311,31 +3480,35 @@ packages: resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} dev: true - /@types/har-format@1.2.16: - resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} - dev: false - /@types/hast@3.0.4: resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} dependencies: '@types/unist': 3.0.3 + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true /@types/mdast@4.0.4: resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} dependencies: '@types/unist': 3.0.3 + dev: true /@types/mdx@2.0.13: resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + dev: true /@types/ms@2.1.0: resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + dev: true /@types/node@24.12.4: resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} dependencies: undici-types: 7.16.0 - dev: false + dev: true /@types/react-dom@19.2.3(@types/react@19.2.15): resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} @@ -1345,10 +3518,31 @@ packages: '@types/react': 19.2.15 dev: true + /@types/react-dom@19.2.3(@types/react@19.2.17): + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + dependencies: + '@types/react': 19.2.17 + dev: true + /@types/react@19.2.15: resolution: {integrity: sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==} dependencies: csstype: 3.2.3 + dev: true + + /@types/react@19.2.17: + resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} + dependencies: + csstype: 3.2.3 + dev: true + + /@types/sax@1.2.7: + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + dependencies: + '@types/node': 24.12.4 + dev: true /@types/unist@2.0.11: resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -1356,34 +3550,134 @@ packages: /@types/unist@3.0.3: resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - /@types/web-bluetooth@0.0.20: - resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - dev: false - - /@types/web-bluetooth@0.0.21: - resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} - dev: false + dev: true /@ungap/structured-clone@1.3.1: resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + dev: true - /@unhead/vue@2.1.15(vue@3.5.35): - resolution: {integrity: sha512-SSByXfEjhzPn8gXdEdgpYqpLMPSkLUH2HVE0GxZfOtNsJ0GgOHQs0g9T67ZZ1z0kTELLKdtOtYrzrbv9+ffF7g==} + /@unhead/bundler@3.1.3(esbuild@0.28.1)(rollup@4.60.4)(typescript@5.9.3)(unhead@3.1.3)(vite@8.0.16): + resolution: {integrity: sha512-R3FXmxDfZtF53icHvYLEsgXtrnnwmVLnV3Ueh3TeA8ceedFo8Dq6lbffo/llhc+Asqz4xocIkN2Xp0a7NDNhGQ==} peerDependencies: - vue: '>=3.5.18' + '@unhead/cli': ^3.1.3 + esbuild: '>=0.17.0' + lightningcss: '>=1.20.0' + rolldown: '>=1.0.0-beta.0' + unhead: ^3.1.3 + vite: '>=6.4.2' + webpack: '>=5.0.0' + peerDependenciesMeta: + '@unhead/cli': + optional: true + esbuild: + optional: true + lightningcss: + optional: true + rolldown: + optional: true + vite: + optional: true + webpack: + optional: true dependencies: - hookable: 6.1.1 - unhead: 2.1.15 - vue: 3.5.35(typescript@5.9.3) - dev: false + '@vitejs/devtools-kit': 0.3.4(esbuild@0.28.1)(rollup@4.60.4)(typescript@5.9.3)(vite@8.0.16) + esbuild: 0.28.1 + magic-string: 0.30.21 + oxc-parser: 0.134.0 + oxc-walker: 1.0.0(esbuild@0.28.1)(oxc-parser@0.134.0)(rollup@4.60.4)(vite@8.0.16) + ufo: 1.6.4 + unhead: 3.1.3(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16) + unplugin: 3.3.0(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16) + vite: 8.0.16(esbuild@0.28.1)(yaml@2.9.0) + transitivePeerDependencies: + - '@farmfe/core' + - '@modelcontextprotocol/sdk' + - '@rspack/core' + - bufferutil + - bun-types-no-globals + - crossws + - rollup + - typescript + - unloader + - utf-8-validate + dev: true - /@vercel/oidc@3.1.0: - resolution: {integrity: sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w==} - engines: {node: '>= 20'} - dev: false + /@unhead/react@3.1.3(esbuild@0.28.1)(react@19.2.6)(rollup@4.60.4)(typescript@5.9.3)(vite@8.0.16): + resolution: {integrity: sha512-R9BR7CKUHJDes8pX0m30O0hoWnhevPLkf7b8n0t5K1T17DKLFCPZ2ZN6m8WVb0qg0OS/1NSQ2+V5PekhxduHEw==} + peerDependencies: + react: '>=19.2.4' + vite: '>=6.4.2' + webpack: '>=5.0.0' + peerDependenciesMeta: + vite: + optional: true + webpack: + optional: true + dependencies: + '@unhead/bundler': 3.1.3(esbuild@0.28.1)(rollup@4.60.4)(typescript@5.9.3)(unhead@3.1.3)(vite@8.0.16) + magic-string: 0.30.21 + oxc-walker: 1.0.0(esbuild@0.28.1)(oxc-parser@0.134.0)(rollup@4.60.4)(vite@8.0.16) + react: 19.2.6 + unhead: 3.1.3(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16) + unplugin: 3.3.0(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16) + vite: 8.0.16(esbuild@0.28.1)(yaml@2.9.0) + transitivePeerDependencies: + - '@farmfe/core' + - '@modelcontextprotocol/sdk' + - '@rspack/core' + - '@unhead/cli' + - bufferutil + - bun-types-no-globals + - crossws + - esbuild + - lightningcss + - oxc-parser + - rolldown + - rollup + - typescript + - unloader + - utf-8-validate + dev: true + + /@valibot/to-json-schema@1.7.1(valibot@1.4.2): + resolution: {integrity: sha512-3qkmU6KXWh8GIThEAW3kuRHPQBMjWkKy+Ppz3WkUucx53DTpOa6siMn4xDGSOhlVyMrDaJTCTMLYPZVAIk1P0A==} + peerDependencies: + valibot: ^1.4.0 + dependencies: + valibot: 1.4.2(typescript@5.9.3) + dev: true + + /@vitejs/devtools-kit@0.3.4(esbuild@0.28.1)(rollup@4.60.4)(typescript@5.9.3)(vite@8.0.16): + resolution: {integrity: sha512-QHvb3wF0KZxvbfEplzzdGenB/dWoPBQlUnw3VVBm5qUYTdoud8rOoem9QI6h/+7a+iwy88LmLigxbSXbbv2Uyg==} + peerDependencies: + vite: '*' + dependencies: + '@devframes/hub': 0.5.4(devframe@0.5.4)(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16) + birpc: 4.0.0 + devframe: 0.5.4(esbuild@0.28.1)(rollup@4.60.4)(typescript@5.9.3)(vite@8.0.16) + mlly: 1.8.2 + nostics: 1.2.0 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + tinyexec: 1.2.4 + vite: 8.0.16(esbuild@0.28.1)(yaml@2.9.0) + transitivePeerDependencies: + - '@farmfe/core' + - '@modelcontextprotocol/sdk' + - '@rspack/core' + - bufferutil + - bun-types-no-globals + - crossws + - esbuild + - rolldown + - rollup + - typescript + - unloader + - utf-8-validate + - webpack + dev: true - /@vitejs/plugin-react@6.0.2(vite@8.0.14): + /@vitejs/plugin-react@6.0.2(vite@8.0.16): resolution: {integrity: sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: @@ -1397,179 +3691,72 @@ packages: optional: true dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.0.14 + vite: 8.0.16(esbuild@0.28.1)(yaml@2.9.0) dev: true - /@vue/compiler-core@3.5.35: - resolution: {integrity: sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==} - dependencies: - '@babel/parser': 7.29.7 - '@vue/shared': 3.5.35 - entities: 7.0.1 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - dev: false - - /@vue/compiler-dom@3.5.35: - resolution: {integrity: sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==} - dependencies: - '@vue/compiler-core': 3.5.35 - '@vue/shared': 3.5.35 - dev: false - - /@vue/compiler-sfc@3.5.35: - resolution: {integrity: sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==} - dependencies: - '@babel/parser': 7.29.7 - '@vue/compiler-core': 3.5.35 - '@vue/compiler-dom': 3.5.35 - '@vue/compiler-ssr': 3.5.35 - '@vue/shared': 3.5.35 - estree-walker: 2.0.2 - magic-string: 0.30.21 - postcss: 8.5.15 - source-map-js: 1.2.1 - dev: false - - /@vue/compiler-ssr@3.5.35: - resolution: {integrity: sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==} - dependencies: - '@vue/compiler-dom': 3.5.35 - '@vue/shared': 3.5.35 - dev: false - - /@vue/reactivity@3.5.35: - resolution: {integrity: sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==} - dependencies: - '@vue/shared': 3.5.35 - dev: false - - /@vue/runtime-core@3.5.35: - resolution: {integrity: sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==} - dependencies: - '@vue/reactivity': 3.5.35 - '@vue/shared': 3.5.35 - dev: false - - /@vue/runtime-dom@3.5.35: - resolution: {integrity: sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==} - dependencies: - '@vue/reactivity': 3.5.35 - '@vue/runtime-core': 3.5.35 - '@vue/shared': 3.5.35 - csstype: 3.2.3 - dev: false - - /@vue/server-renderer@3.5.35(vue@3.5.35): - resolution: {integrity: sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==} - peerDependencies: - vue: 3.5.35 - dependencies: - '@vue/compiler-ssr': 3.5.35 - '@vue/shared': 3.5.35 - vue: 3.5.35(typescript@5.9.3) - dev: false - - /@vue/shared@3.5.35: - resolution: {integrity: sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==} - dev: false - - /@vueuse/core@10.11.1(vue@3.5.35): - resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} - dependencies: - '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.35) - vue-demi: 0.14.10(vue@3.5.35) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: false - - /@vueuse/core@13.9.0(vue@3.5.35): - resolution: {integrity: sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==} - peerDependencies: - vue: ^3.5.0 + /@whatwg-node/disposablestack@0.0.6: + resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} + engines: {node: '>=18.0.0'} dependencies: - '@types/web-bluetooth': 0.0.21 - '@vueuse/metadata': 13.9.0 - '@vueuse/shared': 13.9.0(vue@3.5.35) - vue: 3.5.35(typescript@5.9.3) - dev: false + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + dev: true - /@vueuse/integrations@13.9.0(focus-trap@7.8.0)(fuse.js@7.4.0)(vue@3.5.35): - resolution: {integrity: sha512-SDobKBbPIOe0cVL7QxMzGkuUGHvWTdihi9zOrrWaWUgFKe15cwEcwfWmgrcNzjT6kHnNmWuTajPHoIzUjYNYYQ==} - peerDependencies: - async-validator: ^4 - axios: ^1 - change-case: ^5 - drauu: ^0.4 - focus-trap: ^7 - fuse.js: ^7 - idb-keyval: ^6 - jwt-decode: ^4 - nprogress: ^0.2 - qrcode: ^1.5 - sortablejs: ^1 - universal-cookie: ^7 || ^8 - vue: ^3.5.0 - peerDependenciesMeta: - async-validator: - optional: true - axios: - optional: true - change-case: - optional: true - drauu: - optional: true - focus-trap: - optional: true - fuse.js: - optional: true - idb-keyval: - optional: true - jwt-decode: - optional: true - nprogress: - optional: true - qrcode: - optional: true - sortablejs: - optional: true - universal-cookie: - optional: true + /@whatwg-node/events@0.1.2: + resolution: {integrity: sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==} + engines: {node: '>=18.0.0'} dependencies: - '@vueuse/core': 13.9.0(vue@3.5.35) - '@vueuse/shared': 13.9.0(vue@3.5.35) - focus-trap: 7.8.0 - fuse.js: 7.4.0 - vue: 3.5.35(typescript@5.9.3) - dev: false + tslib: 2.8.1 + dev: true - /@vueuse/metadata@10.11.1: - resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} - dev: false + /@whatwg-node/fetch@0.10.13: + resolution: {integrity: sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==} + engines: {node: '>=18.0.0'} + dependencies: + '@whatwg-node/node-fetch': 0.8.6 + urlpattern-polyfill: 10.1.0 + dev: true - /@vueuse/metadata@13.9.0: - resolution: {integrity: sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==} - dev: false + /@whatwg-node/node-fetch@0.8.6: + resolution: {integrity: sha512-BDMdYFcerLQkwA2RTldxOqRCs6ZQD1S7UgP3pUdGUkcbgTrP/V5ko77ZkCww9DHmC4lpoYuwigGfQYj285gMvA==} + engines: {node: '>=18.0.0'} + dependencies: + '@fastify/busboy': 3.2.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + dev: true - /@vueuse/shared@10.11.1(vue@3.5.35): - resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} + /@whatwg-node/promise-helpers@1.3.2: + resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} + engines: {node: '>=16.0.0'} dependencies: - vue-demi: 0.14.10(vue@3.5.35) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: false + tslib: 2.8.1 + dev: true - /@vueuse/shared@13.9.0(vue@3.5.35): - resolution: {integrity: sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==} - peerDependencies: - vue: ^3.5.0 + /@whatwg-node/server@0.11.0: + resolution: {integrity: sha512-VSdkwnJRr8Yv9UgB2aXB3VUPWwd6Oqnn0hycFwhg9pZgWxJXb7JmhsiXe9tmpMwjHFxli12PGcz9aI63YYloGQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@envelop/instrumentation': 1.0.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + dev: true + + /@x0k/json-schema-merge@1.0.3: + resolution: {integrity: sha512-lerJC4sI9CNUQWdff3PnU1YJOqazD6TjMcvxZIPXUBjn4j1cUiXE0LvzhMnGYzKKr271TkvXJtH7gEwksrtn+w==} + dependencies: + '@types/json-schema': 7.0.15 + dev: true + + /@zuplo/mcp@0.0.32: + resolution: {integrity: sha512-rpLTpwL+g1sXtylu2gZwCTXdNIV2L0LPOcCdwogpP5hdyp/JMLSAVtd7H5fs5Wt2cq3jTm6nn7ZZvsBAECdl3A==} dependencies: - vue: 3.5.35(typescript@5.9.3) - dev: false + eventsource-parser: 3.1.0 + zod: 3.25.76 + dev: true /acorn-jsx@5.3.2(acorn@8.16.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1585,25 +3772,67 @@ packages: hasBin: true dev: true - /ai@6.0.33(zod@4.4.3): - resolution: {integrity: sha512-bVokbmy2E2QF6Efl+5hOJx5MRWoacZ/CZY/y1E+VcewknvGlgaiCzMu8Xgddz6ArFJjiMFNUPHKxAhIePE4rmg==} - engines: {node: '>=18'} + /ajv-draft-04@1.0.0(ajv@8.20.0): + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: - zod: ^3.25.76 || ^4.1.8 + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true dependencies: - '@ai-sdk/gateway': 3.0.13(zod@4.4.3) - '@ai-sdk/provider': 3.0.2 - '@ai-sdk/provider-utils': 4.0.5(zod@4.4.3) - '@opentelemetry/api': 1.9.0 - zod: 4.4.3 - dev: false + ajv: 8.20.0 + dev: true + + /ajv-formats@3.0.1(ajv@8.20.0): + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.20.0 + dev: true + + /ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.4 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + dev: true + + /ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + dev: true + + /ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + dev: true + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true /aria-hidden@1.2.6: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} dependencies: tslib: 2.8.1 - dev: false + dev: true /astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} @@ -1612,32 +3841,99 @@ packages: /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: true + + /balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + dev: true + + /base-x@5.0.1: + resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + dev: true + + /birpc@4.0.0: + resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} + dev: true + + /brace-expansion@5.0.8: + resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==} + engines: {node: 20 || >=22} + dependencies: + balanced-match: 4.0.4 + dev: true + + /bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + dependencies: + base-x: 5.0.1 + dev: true + + /cac@7.0.0: + resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} + engines: {node: '>=20.19.0'} + dev: true /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - - /chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: false + dev: true /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: true /character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: true /character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: true /character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} dev: true + /cjs-module-lexer@2.2.0: + resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} + dev: true + + /class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + dependencies: + clsx: 2.1.1 + dev: true + + /cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + dev: true + /clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - dev: false + dev: true + + /cmdk@1.1.1(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc + dependencies: + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-id': 1.1.4(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + dev: true /collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -1645,35 +3941,38 @@ packages: /comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: true + + /confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + dev: true /convert-hrtime@5.0.0: resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} engines: {node: '>=12'} - dev: false + dev: true /cookie@1.1.1: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} - dev: false + dev: true + + /cross-inspect@1.0.1: + resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==} + engines: {node: '>=16.0.0'} + dependencies: + tslib: 2.8.1 + dev: true - /crelt@1.0.6: - resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} - dev: false + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true /csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - - /cva@1.0.0-beta.4(typescript@5.9.3): - resolution: {integrity: sha512-F/JS9hScapq4DBVQXcK85l9U91M6ePeXoBMSp7vypzShoefUBxjQTo3g3935PUHgQd+IW77DjbPRIxugy4/GCQ==} - peerDependencies: - typescript: '>= 4.5.5' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - clsx: 2.1.1 - typescript: 5.9.3 - dev: false + dev: true /debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} @@ -1685,39 +3984,119 @@ packages: optional: true dependencies: ms: 2.1.3 + dev: true /decode-named-character-reference@1.3.0: resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} dependencies: character-entities: 2.0.2 + dev: true - /defu@6.1.7: - resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} - dev: false + /delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: true /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + dev: true /detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} dev: true + /detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dev: true + + /devframe@0.5.4(esbuild@0.28.1)(rollup@4.60.4)(typescript@5.9.3)(vite@8.0.16): + resolution: {integrity: sha512-dbHU/LuptR1aMXcizjHUeY3gu7qVaRQoFYqbbyyGuO6Y+avFA4uQtwinHtG1qa7lRel/7b8JrBDm0nbnxU3vqg==} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.0.0 + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + dependencies: + '@valibot/to-json-schema': 1.7.1(valibot@1.4.2) + birpc: 4.0.0 + cac: 7.0.0 + h3: 2.0.1-rc.22 + mrmime: 2.0.1 + nostics: 0.2.0(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16) + pathe: 2.0.3 + valibot: 1.4.2(typescript@5.9.3) + ws: 8.21.1 + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bufferutil + - bun-types-no-globals + - crossws + - esbuild + - rolldown + - rollup + - typescript + - unloader + - utf-8-validate + - vite + - webpack + dev: true + /devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} dependencies: dequal: 2.0.3 + dev: true + + /dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} + engines: {node: '>=12'} + dev: true + + /embla-carousel-react@8.6.0(react@19.2.6): + resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} + peerDependencies: + react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + dependencies: + embla-carousel: 8.6.0 + embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) + react: 19.2.6 + dev: true + + /embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): + resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} + peerDependencies: + embla-carousel: 8.6.0 + dependencies: + embla-carousel: 8.6.0 + dev: true + + /embla-carousel@8.6.0: + resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} + dev: true + + /emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + dev: true + + /enhanced-resolve@5.24.3: + resolution: {integrity: sha512-PwKooW9JUzh5chmYfHM3IQl5OkK2u2Nm011MgeZrss3JmFraUx/fqrf78kk8GUMYoibx/14MdwTl/1WKkG7TpQ==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + dev: true /entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} - dev: false + dev: true - /entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} - engines: {node: '>=0.12'} - dev: false + /es-module-lexer@2.3.1: + resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} + dev: true /esast-util-from-estree@2.0.0: resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} @@ -1737,10 +4116,67 @@ packages: vfile-message: 4.0.3 dev: true + /esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} + engines: {node: '>=18'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 + dev: true + + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + dev: true + /escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - dev: false + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true /estree-util-attach-comments@3.0.0: resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} @@ -1776,6 +4212,12 @@ packages: source-map: 0.7.6 dev: true + /estree-util-value-to-estree@3.5.0: + resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==} + dependencies: + '@types/estree': 1.0.9 + dev: true + /estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} dependencies: @@ -1785,6 +4227,7 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -1795,14 +4238,42 @@ packages: /eventsource-parser@3.1.0: resolution: {integrity: sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==} engines: {node: '>=18.0.0'} - dev: false + dev: true + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: true /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: true /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: false + dev: true + + /fast-equals@6.0.0: + resolution: {integrity: sha512-PFhhIGgdM79r5Uztdj9Zb6Tt1zKafqVfdMGwVca1z5z6fbX7DmsySSuJd8HiP6I1j505DCS83cLxo5rmSNeVEA==} + engines: {node: '>=6.0.0'} + dev: true + + /fast-printf@1.6.10: + resolution: {integrity: sha512-GwTgG9O4FVIdShhbVF3JxOgSBY2+ePGsu2V/UONgoCPzF9VY6ZdBMKsHKCYQHZwNk3qNouUolRDsgVxcVA5G1w==} + engines: {node: '>=10.0'} + dev: true + + /fast-uri@3.1.4: + resolution: {integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==} + dev: true + + /fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + dependencies: + format: 0.2.2 + dev: true /fdir@6.5.0(picomatch@4.0.4): resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -1816,15 +4287,31 @@ packages: picomatch: 4.0.4 dev: true - /flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} - dev: false + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: true - /focus-trap@7.8.0: - resolution: {integrity: sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==} + /framer-motion@12.42.2(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-5XY9luDiu0oHfHBjpDthFMh0ES+122w6p/papSJBweMkO8Sn+PW2QaEgRblQBpWFnuvZS5qvarpt/hO2pjGmnw==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true dependencies: - tabbable: 6.4.0 - dev: false + motion-dom: 12.42.2 + motion-utils: 12.39.0 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + tslib: 2.8.1 + dev: true /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} @@ -1845,52 +4332,109 @@ packages: /function-timeout@1.0.2: resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} engines: {node: '>=18'} - dev: false + dev: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + dev: true - /fuse.js@7.4.0: - resolution: {integrity: sha512-3UqmoSFwzX1sNB1YSk+Co0EdH29XCW2p9g48OAiy93cjKqzuABsqw2VIgSN3CmsT/wo6pIJ3F0Jxeiiby8rhIQ==} - engines: {node: '>=10'} - dev: false + /get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + dev: true /get-own-enumerable-keys@1.0.0: resolution: {integrity: sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==} engines: {node: '>=14.16'} - dev: false + dev: true - /guess-json-indent@3.0.1: - resolution: {integrity: sha512-LWZ3Vr8BG7DHE3TzPYFqkhjNRw4vYgFSsv2nfMuHklAlOfiy54/EwiDQuQfFVLxENCVv20wpbjfTayooQHrEhQ==} - engines: {node: '>=18.18.0'} - dev: false + /github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + dev: true - /hast-util-embedded@3.0.0: - resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: - '@types/hast': 3.0.4 - hast-util-is-element: 3.0.0 - dev: false + is-glob: 4.0.3 + dev: true - /hast-util-format@1.1.0: - resolution: {integrity: sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==} + /glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} dependencies: - '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-minify-whitespace: 1.0.1 - hast-util-phrasing: 3.0.1 - hast-util-whitespace: 3.0.0 - html-whitespace-sensitive-tag-names: 3.0.1 - unist-util-visit-parents: 6.0.2 - dev: false + minimatch: 10.2.5 + minipass: 7.1.3 + path-scurry: 2.0.2 + dev: true - /hast-util-from-html@2.0.3: - resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /graphql-type-json@0.3.2(graphql@16.14.0): + resolution: {integrity: sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==} + peerDependencies: + graphql: '>=0.8.0' dependencies: - '@types/hast': 3.0.4 - devlop: 1.1.0 - hast-util-from-parse5: 8.0.3 - parse5: 7.3.0 - vfile: 6.0.3 - vfile-message: 4.0.3 - dev: false + graphql: 16.14.0 + dev: true + + /graphql-yoga@5.21.2(graphql@16.14.0): + resolution: {integrity: sha512-IIRF/3xtjj2D6caAWL9177hQ8tV3mWB3hve1GRnz7njPhQ3iY1jFtSp98fNGv0yV9kaPh9kKQ8JWdJZnedVmDw==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^15.2.0 || ^16.0.0 + dependencies: + '@envelop/core': 5.5.1 + '@envelop/instrumentation': 1.0.0 + '@graphql-tools/executor': 1.5.7(graphql@16.14.0) + '@graphql-tools/schema': 10.0.38(graphql@16.14.0) + '@graphql-tools/utils': 10.11.0(graphql@16.14.0) + '@graphql-yoga/logger': 2.0.1 + '@graphql-yoga/subscription': 5.0.5 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + '@whatwg-node/server': 0.11.0 + graphql: 16.14.0 + lru-cache: 10.4.3 + tslib: 2.8.1 + dev: true + + /graphql@16.14.0: + resolution: {integrity: sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + dev: true + + /gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + dependencies: + js-yaml: 3.15.0 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + dev: true + + /h3@2.0.1-rc.22: + resolution: {integrity: sha512-Esv0DMIuPkCTSWCA0vO73vcTqwzH1wjSrAO1TXNu/K3up1sZHa9EKMapbmxCDYBeymC3fVTk4qxp7ogQWQ+KgA==} + engines: {node: '>=20.11.1'} + hasBin: true + peerDependencies: + crossws: ^0.4.1 + peerDependenciesMeta: + crossws: + optional: true + dependencies: + rou3: 0.8.1 + srvx: 0.11.22 + dev: true /hast-util-from-parse5@8.0.3: resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} @@ -1903,51 +4447,32 @@ packages: vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 - dev: false - - /hast-util-has-property@3.0.0: - resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} - dependencies: - '@types/hast': 3.0.4 - dev: false - - /hast-util-is-body-ok-link@3.0.1: - resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} - dependencies: - '@types/hast': 3.0.4 - dev: false - - /hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - dependencies: - '@types/hast': 3.0.4 - dev: false + dev: true - /hast-util-minify-whitespace@1.0.1: - resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} + /hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} dependencies: '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-is-element: 3.0.0 - hast-util-whitespace: 3.0.0 - unist-util-is: 6.0.1 - dev: false + dev: true /hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} dependencies: '@types/hast': 3.0.4 - dev: false + dev: true - /hast-util-phrasing@3.0.1: - resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + /hast-util-properties-to-mdx-jsx-attributes@1.1.1: + resolution: {integrity: sha512-MMrAoGgvhYULEqMB/r6AlcVz1D3Cyml/9cMB2NIqZsIsEJ+XEXPMqH0gjba8dVs9AnQUYvPReAS+OIYx4ip+Ug==} dependencies: + '@types/estree': 1.0.9 '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-has-property: 3.0.0 - hast-util-is-body-ok-link: 3.0.1 - hast-util-is-element: 3.0.0 - dev: false + estree-util-value-to-estree: 3.5.0 + mdast-util-mdx-jsx: 3.2.0 + property-information: 7.1.0 + style-to-js: 1.1.21 + transitivePeerDependencies: + - supports-color + dev: true /hast-util-raw@9.1.0: resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} @@ -1965,15 +4490,7 @@ packages: vfile: 6.0.3 web-namespaces: 2.0.1 zwitch: 2.0.4 - dev: false - - /hast-util-sanitize@5.0.2: - resolution: {integrity: sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==} - dependencies: - '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.3.1 - unist-util-position: 5.0.0 - dev: false + dev: true /hast-util-to-estree@3.1.3: resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} @@ -2012,7 +4529,7 @@ packages: space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 - dev: false + dev: true /hast-util-to-jsx-runtime@2.3.6: resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} @@ -2046,21 +4563,19 @@ packages: space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 - dev: false + dev: true - /hast-util-to-text@4.0.2: - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + /hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} dependencies: '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - hast-util-is-element: 3.0.0 - unist-util-find-after: 5.0.0 - dev: false + dev: true /hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} dependencies: '@types/hast': 3.0.4 + dev: true /hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} @@ -2070,41 +4585,61 @@ packages: hast-util-parse-selector: 4.0.0 property-information: 7.1.0 space-separated-tokens: 2.0.2 - dev: false + dev: true - /highlight.js@11.11.1: - resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} - engines: {node: '>=12.0.0'} - dev: false + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: true + + /hono@4.12.27: + resolution: {integrity: sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==} + engines: {node: '>=16.9.0'} + dev: true /hookable@6.1.1: resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==} - dev: false + dev: true + + /html-url-attributes@3.0.1: + resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} + dev: true /html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - dev: false + dev: true - /html-whitespace-sensitive-tag-names@3.0.1: - resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==} - dev: false + /http-terminator@3.2.0: + resolution: {integrity: sha512-JLjck1EzPaWjsmIf8bziM3p9fgR1Y3JoUKAkyYEbZmFrIvJM6I8vVJfBGWlEtV9IWOvzNnaTtjuwZeBY2kwB4g==} + engines: {node: '>=14'} + dependencies: + delay: 5.0.0 + p-wait-for: 3.2.0 + roarr: 7.21.7 + type-fest: 2.19.0 + dev: true /identifier-regex@1.0.1: resolution: {integrity: sha512-ZrYyM0sozNPZlvBvE7Oq9Bn44n0qKGrYu5sQ0JzMUnjIhpgWYE2JB6aBoFwEYdPjqj7jPyxXTMJiHDOxDfd8yw==} engines: {node: '>=18'} dependencies: reserved-identifiers: 1.2.0 - dev: false + dev: true + + /import-in-the-middle@3.3.2: + resolution: {integrity: sha512-jTd2FfOgOWOdgjkHuk/1Ms8VKFXkPs15ymYBETw1sAOrO/dY3XeGVRWir9qBbw7pXr0T2eTFwfCZ+N02HmiNGA==} + engines: {node: '>=18'} + dependencies: + cjs-module-lexer: 2.2.0 + es-module-lexer: 2.3.1 + module-details-from-path: 1.0.4 + dev: true /inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} dev: true - /is-absolute-url@4.0.1: - resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - /is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} dev: true @@ -2120,6 +4655,23 @@ packages: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} dev: true + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + /is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} dev: true @@ -2130,33 +4682,80 @@ packages: dependencies: identifier-regex: 1.0.1 super-regex: 1.1.0 - dev: false + dev: true /is-obj@3.0.0: resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==} engines: {node: '>=12'} - dev: false + dev: true /is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + dev: true /is-regexp@3.1.0: resolution: {integrity: sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==} engines: {node: '>=12'} - dev: false + dev: true + + /javascript-stringify@2.1.0: + resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} + dev: true + + /jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + dev: true + + /jose@6.2.3: + resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + dev: true /js-base64@3.7.8: resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} - dev: false + dev: true + + /js-yaml@3.15.0: + resolution: {integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-schema-to-typescript-lite@15.0.0: + resolution: {integrity: sha512-5mMORSQm9oTLyjM4mWnyNBi2T042Fhg1/0gCIB6X8U/LVpM2A+Nmj2yEyArqVouDmFThDxpEXcnTgSrjkGJRFA==} + dependencies: + '@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15) + '@types/json-schema': 7.0.15 + dev: true - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: false + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: true - /jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - dev: false + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /leven@4.1.0: + resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true /lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} @@ -2276,22 +4875,56 @@ packages: lightningcss-win32-x64-msvc: 1.32.0 dev: true + /loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + dev: true + /longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: true + + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + dev: true + + /lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + engines: {node: 20 || >=22} + dev: true - /lowlight@3.3.0: - resolution: {integrity: sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==} + /lucide-react@1.16.0(react@19.2.6): + resolution: {integrity: sha512-dYwyPzb4MEKpGUmNYk3WKWPnMrHs3FKM+q94kAnJrcDIqqn1hq2xY8scaS2ovsOCM5D51ey2gaRG3PBb1vgoYQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 dependencies: - '@types/hast': 3.0.4 - devlop: 1.1.0 - highlight.js: 11.11.1 - dev: false + react: 19.2.6 + dev: true + + /magic-regexp@0.11.0(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16): + resolution: {integrity: sha512-LG77Z/gVnwz7oaDpD4heX6ryl+lcr4l1B2gnP4MMvt2pGhGC1Dfj7dl1pXpP4ih+VQFLuAadeKVa+lARAzfW+Q==} + dependencies: + magic-string: 0.30.21 + regexp-tree: 0.1.27 + type-level-regexp: 0.1.17 + unplugin: 3.3.0(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16) + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - vite + - webpack + dev: true /magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - dev: false + dev: true /make-asynchronous@1.1.0: resolution: {integrity: sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==} @@ -2300,7 +4933,7 @@ packages: p-event: 6.0.1 type-fest: 4.41.0 web-worker: 1.5.0 - dev: false + dev: true /markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} @@ -2309,7 +4942,23 @@ packages: /markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - dev: false + dev: true + + /mdast-util-directive@3.1.0: + resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-visit-parents: 6.0.2 + transitivePeerDependencies: + - supports-color + dev: true /mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} @@ -2318,7 +4967,26 @@ packages: escape-string-regexp: 5.0.0 unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - dev: false + dev: true + + /mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true /mdast-util-from-markdown@2.0.3: resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} @@ -2337,6 +5005,20 @@ packages: unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color + dev: true + + /mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: true /mdast-util-gfm-autolink-literal@2.0.1: resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} @@ -2346,7 +5028,7 @@ packages: devlop: 1.1.0 mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 - dev: false + dev: true /mdast-util-gfm-footnote@2.1.0: resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} @@ -2358,7 +5040,7 @@ packages: micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color - dev: false + dev: true /mdast-util-gfm-strikethrough@2.0.0: resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} @@ -2368,7 +5050,7 @@ packages: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - dev: false + dev: true /mdast-util-gfm-table@2.0.0: resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} @@ -2380,7 +5062,7 @@ packages: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - dev: false + dev: true /mdast-util-gfm-task-list-item@2.0.0: resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} @@ -2391,7 +5073,7 @@ packages: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - dev: false + dev: true /mdast-util-gfm@3.1.0: resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} @@ -2405,7 +5087,7 @@ packages: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - dev: false + dev: true /mdast-util-mdx-expression@2.0.1: resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} @@ -2469,6 +5151,7 @@ packages: dependencies: '@types/mdast': 4.0.4 unist-util-is: 6.0.1 + dev: true /mdast-util-to-hast@13.2.1: resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} @@ -2482,6 +5165,7 @@ packages: unist-util-position: 5.0.0 unist-util-visit: 5.1.0 vfile: 6.0.3 + dev: true /mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} @@ -2495,15 +5179,28 @@ packages: micromark-util-decode-string: 2.0.1 unist-util-visit: 5.1.0 zwitch: 2.0.4 + dev: true /mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} dependencies: '@types/mdast': 4.0.4 + dev: true + + /meriyah@6.1.4: + resolution: {integrity: sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==} + engines: {node: '>=18.0.0'} + dev: true - /microdiff@1.5.0: - resolution: {integrity: sha512-Drq+/THMvDdzRYrK0oxJmOKiC24ayUV8ahrt8l3oRK51PWt6gdtrIGrlIH3pT/lFh1z93FbAcidtsHcWbnRz8Q==} - dev: false + /meros@1.3.2: + resolution: {integrity: sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + dev: true /micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -2524,6 +5221,28 @@ packages: micromark-util-subtokenize: 2.1.0 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + dev: true + + /micromark-extension-directive@3.0.2: + resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + parse-entities: 4.0.2 + dev: true + + /micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + dependencies: + fault: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + dev: true /micromark-extension-gfm-autolink-literal@2.1.0: resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} @@ -2532,7 +5251,7 @@ packages: micromark-util-sanitize-uri: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - dev: false + dev: true /micromark-extension-gfm-footnote@2.1.0: resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} @@ -2545,7 +5264,7 @@ packages: micromark-util-sanitize-uri: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - dev: false + dev: true /micromark-extension-gfm-strikethrough@2.1.0: resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} @@ -2556,7 +5275,7 @@ packages: micromark-util-resolve-all: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - dev: false + dev: true /micromark-extension-gfm-table@2.1.1: resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} @@ -2566,13 +5285,13 @@ packages: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - dev: false + dev: true /micromark-extension-gfm-tagfilter@2.0.0: resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} dependencies: micromark-util-types: 2.0.2 - dev: false + dev: true /micromark-extension-gfm-task-list-item@2.1.0: resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} @@ -2582,7 +5301,7 @@ packages: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - dev: false + dev: true /micromark-extension-gfm@3.0.0: resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} @@ -2595,7 +5314,7 @@ packages: micromark-extension-gfm-task-list-item: 2.1.0 micromark-util-combine-extensions: 2.0.1 micromark-util-types: 2.0.2 - dev: false + dev: true /micromark-extension-mdx-expression@3.0.1: resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} @@ -2664,6 +5383,7 @@ packages: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + dev: true /micromark-factory-label@2.0.1: resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} @@ -2672,6 +5392,7 @@ packages: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + dev: true /micromark-factory-mdx-expression@2.0.3: resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} @@ -2687,11 +5408,19 @@ packages: vfile-message: 4.0.3 dev: true + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + dev: true + /micromark-factory-space@2.0.1: resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} dependencies: micromark-util-character: 2.1.1 micromark-util-types: 2.0.2 + dev: true /micromark-factory-title@2.0.1: resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} @@ -2700,6 +5429,7 @@ packages: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + dev: true /micromark-factory-whitespace@2.0.1: resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} @@ -2708,17 +5438,27 @@ packages: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + dev: true + + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true /micromark-util-character@2.1.1: resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} dependencies: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + dev: true /micromark-util-chunked@2.0.1: resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} dependencies: micromark-util-symbol: 2.0.1 + dev: true /micromark-util-classify-character@2.0.1: resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} @@ -2726,17 +5466,20 @@ packages: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + dev: true /micromark-util-combine-extensions@2.0.1: resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} dependencies: micromark-util-chunked: 2.0.1 micromark-util-types: 2.0.2 + dev: true /micromark-util-decode-numeric-character-reference@2.0.2: resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} dependencies: micromark-util-symbol: 2.0.1 + dev: true /micromark-util-decode-string@2.0.1: resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} @@ -2745,9 +5488,11 @@ packages: micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 + dev: true /micromark-util-encode@2.0.1: resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + dev: true /micromark-util-events-to-acorn@2.0.3: resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} @@ -2763,16 +5508,19 @@ packages: /micromark-util-html-tag-name@2.0.1: resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + dev: true /micromark-util-normalize-identifier@2.0.1: resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} dependencies: micromark-util-symbol: 2.0.1 + dev: true /micromark-util-resolve-all@2.0.1: resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} dependencies: micromark-util-types: 2.0.2 + dev: true /micromark-util-sanitize-uri@2.0.1: resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} @@ -2780,6 +5528,7 @@ packages: micromark-util-character: 2.1.1 micromark-util-encode: 2.0.1 micromark-util-symbol: 2.0.1 + dev: true /micromark-util-subtokenize@2.1.0: resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} @@ -2788,69 +5537,304 @@ packages: micromark-util-chunked: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + dev: true + + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + dev: true /micromark-util-symbol@2.0.1: resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + dev: true + + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + dev: true /micromark-util-types@2.0.2: resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + dev: true /micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} dependencies: - '@types/debug': 4.1.13 - debug: 4.4.3 - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-encode: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - transitivePeerDependencies: - - supports-color + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + dependencies: + brace-expansion: 5.0.8 + dev: true + + /minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.4 + dev: true + + /module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + dev: true + + /motion-dom@12.42.2: + resolution: {integrity: sha512-5gIMWLp/PycBtJRJWRgjxke5n8dlvkSn2DrYW+tr3XcqAZY1xZh6BJyooJXCM8wdfM7wfMjkBJNLge1CKPUIRA==} + dependencies: + motion-utils: 12.39.0 + dev: true + + /motion-utils@12.39.0: + resolution: {integrity: sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==} + dev: true + + /motion@12.40.0(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-yjrHUrBFW6kQvjJwRsoiPSAhC5tRwRqNGJWmiJ4CrGnbKp0V88AdzkhBmDoqIsIPfarOe0Uddd37Xq43/gIocA==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + dependencies: + framer-motion: 12.42.2(react-dom@19.2.6)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + tslib: 2.8.1 + dev: true + + /mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /nanoevents@9.1.0: + resolution: {integrity: sha512-Jd0fILWG44a9luj8v5kED4WI+zfkkgwKyRQKItTtlPfEsh7Lznfi1kr8/iZ+XAIss4Qq5GqRB0qtWbaz9ceO/A==} + engines: {node: ^18.0.0 || >=20.0.0} + dev: true /nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + dev: true /nanoid@5.1.11: resolution: {integrity: sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg==} engines: {node: ^18 || >=20} hasBin: true - dev: false + dev: true - /neverpanic@0.0.7(typescript@5.9.3): - resolution: {integrity: sha512-GFRTSX2JAEATOCQYlyFkR+9FJPl0pD24toE1foqYAsL6aPLlRKn6L0UFOtJhZCxEbDv+SUsiW4AcPs9cIFwkFw==} + /next-themes@0.4.6(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: - typescript: '5' + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc dependencies: - typescript: 5.9.3 - dev: false + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + dev: true + + /nostics@0.2.0(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16): + resolution: {integrity: sha512-/WQpI46UMbqvy1okYb+V+9wW3J8/m6GJ33wm691n/tyi6YtJiZ6ssJjENAU7y4evfYrrgYN9HllKDzPvffil1w==} + dependencies: + magic-string: 0.30.21 + oxc-parser: 0.132.0 + unplugin: 3.3.0(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16) + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - vite + - webpack + dev: true + + /nostics@1.2.0: + resolution: {integrity: sha512-FGqEfhQjrvo1lL8KFifdTQiNwwQHJxC1jtYE1Rc54qF/jxONUNL+kC9gS1krX8Q65PgrQ5fCqH/I4NhWBvdSqg==} + dev: true + + /oauth4webapi@3.8.5: + resolution: {integrity: sha512-A8jmyUckVhRJj5lspguklcl90Ydqk61H3dcU0oLhH3Yv13KpAliKTt5hknpGGPZSSfOwGyraNEFmofDYH+1kSg==} + dev: true + + /oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + dev: true + + /oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + dev: true + + /openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + dev: true + + /oxc-parser@0.132.0: + resolution: {integrity: sha512-+0LAPHaqtfQlvWdpaAa09SmOaZZgP8C552xosEkGJ4+ruEwP1Vgx+sqBgcBCNfR6KDCmagGOZTde8wmAvcI/Hg==} + engines: {node: ^20.19.0 || >=22.12.0} + dependencies: + '@oxc-project/types': 0.132.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.132.0 + '@oxc-parser/binding-android-arm64': 0.132.0 + '@oxc-parser/binding-darwin-arm64': 0.132.0 + '@oxc-parser/binding-darwin-x64': 0.132.0 + '@oxc-parser/binding-freebsd-x64': 0.132.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.132.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.132.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.132.0 + '@oxc-parser/binding-linux-arm64-musl': 0.132.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.132.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.132.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.132.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.132.0 + '@oxc-parser/binding-linux-x64-gnu': 0.132.0 + '@oxc-parser/binding-linux-x64-musl': 0.132.0 + '@oxc-parser/binding-openharmony-arm64': 0.132.0 + '@oxc-parser/binding-wasm32-wasi': 0.132.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.132.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.132.0 + '@oxc-parser/binding-win32-x64-msvc': 0.132.0 + dev: true + + /oxc-parser@0.134.0: + resolution: {integrity: sha512-Hs8fRG6A94BzMrMkGOtrUS7JQjmslfF+IvIXslf3QURzK3ud0QmFJRiYZjTe4TzAQnTfvlk4AwZnqIbrUjiE4w==} + engines: {node: ^20.19.0 || >=22.12.0} + dependencies: + '@oxc-project/types': 0.134.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.134.0 + '@oxc-parser/binding-android-arm64': 0.134.0 + '@oxc-parser/binding-darwin-arm64': 0.134.0 + '@oxc-parser/binding-darwin-x64': 0.134.0 + '@oxc-parser/binding-freebsd-x64': 0.134.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.134.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.134.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.134.0 + '@oxc-parser/binding-linux-arm64-musl': 0.134.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.134.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.134.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.134.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.134.0 + '@oxc-parser/binding-linux-x64-gnu': 0.134.0 + '@oxc-parser/binding-linux-x64-musl': 0.134.0 + '@oxc-parser/binding-openharmony-arm64': 0.134.0 + '@oxc-parser/binding-wasm32-wasi': 0.134.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.134.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.134.0 + '@oxc-parser/binding-win32-x64-msvc': 0.134.0 + dev: true + + /oxc-walker@1.0.0(esbuild@0.28.1)(oxc-parser@0.134.0)(rollup@4.60.4)(vite@8.0.16): + resolution: {integrity: sha512-eMsHflAGfOskpWxtp9xP/f5b96XLEU8ifTd2gOOCkdux9HMxKGy5S1ru0Gh1B3aPu+YbfmWUUVkcb7MrZz3XyQ==} + peerDependencies: + oxc-parser: '>=0.98.0' + rolldown: '>=1.0.0' + peerDependenciesMeta: + oxc-parser: + optional: true + rolldown: + optional: true + dependencies: + magic-regexp: 0.11.0(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16) + oxc-parser: 0.134.0 + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rollup + - unloader + - vite + - webpack + dev: true /p-event@6.0.1: resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} engines: {node: '>=16.17'} dependencies: p-timeout: 6.1.4 - dev: false + dev: true + + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: true + + /p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: true /p-timeout@6.1.4: resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} engines: {node: '>=14.16'} - dev: false + dev: true + + /p-wait-for@3.2.0: + resolution: {integrity: sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==} + engines: {node: '>=8'} + dependencies: + p-timeout: 3.2.0 + dev: true + + /pagefind@1.5.2: + resolution: {integrity: sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==} + hasBin: true + optionalDependencies: + '@pagefind/darwin-arm64': 1.5.2 + '@pagefind/darwin-x64': 1.5.2 + '@pagefind/freebsd-x64': 1.5.2 + '@pagefind/linux-arm64': 1.5.2 + '@pagefind/linux-x64': 1.5.2 + '@pagefind/windows-arm64': 1.5.2 + '@pagefind/windows-x64': 1.5.2 + dev: true /parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} @@ -2864,29 +5848,56 @@ packages: is-hexadecimal: 2.0.1 dev: true - /parse-ms@4.0.0: - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} - engines: {node: '>=18'} - dev: false + /parse-srcset@1.0.2: + resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} + dev: true /parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} dependencies: entities: 6.0.1 - dev: false + dev: true + + /path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} + dependencies: + lru-cache: 11.5.2 + minipass: 7.1.3 + dev: true /pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - dev: false + dev: true + + /perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + dev: true /picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + dev: true /picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} dev: true + /piscina@5.2.0: + resolution: {integrity: sha512-DszUCKeVN/5G5QKo6jAVHL8fmKnkJvQ0ACiVgY7YGCq3TUB2oznAOayvZPIAdEThvhczkXR+qm3IHsNXpFCYfA==} + engines: {node: '>=20.x'} + optionalDependencies: + '@napi-rs/nice': 1.1.1 + dev: true + + /pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + dev: true + /playwright-core@1.60.0: resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==} engines: {node: '>=18'} @@ -2903,6 +5914,14 @@ packages: fsevents: 2.3.2 dev: true + /postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + /postcss@8.5.15: resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} @@ -2910,37 +5929,28 @@ packages: nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 + dev: true - /pretty-ms@9.3.0: - resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} - engines: {node: '>=18'} + /posthog-node@5.36.2: + resolution: {integrity: sha512-k+URjhZyxR0PJ92JZkYcgyk7+2U+T8r0fnfsQFNkW4GeKcuYH6t13VLzjI+bH4YLSknUuLmDDg4CczGO9nad2Q==} + engines: {node: ^20.20.0 || >=22.22.0} + peerDependencies: + rxjs: ^7.0.0 + peerDependenciesMeta: + rxjs: + optional: true dependencies: - parse-ms: 4.0.0 - dev: false + '@posthog/core': 1.30.8 + dev: true /property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + dev: true - /radix-vue@1.9.17(vue@3.5.35): - resolution: {integrity: sha512-mVCu7I2vXt1L2IUYHTt0sZMz7s1K2ZtqKeTIxG3yC5mMFfLBG4FtE1FDeRMpDd+Hhg/ybi9+iXmAP1ISREndoQ==} - peerDependencies: - vue: '>= 3.2.0' - dependencies: - '@floating-ui/dom': 1.7.6 - '@floating-ui/vue': 1.1.11(vue@3.5.35) - '@internationalized/date': 3.12.2 - '@internationalized/number': 3.6.7 - '@tanstack/vue-virtual': 3.13.26(vue@3.5.35) - '@vueuse/core': 10.11.1(vue@3.5.35) - '@vueuse/shared': 10.11.1(vue@3.5.35) - aria-hidden: 1.2.6 - defu: 6.1.7 - fast-deep-equal: 3.1.3 - nanoid: 5.1.11 - vue: 3.5.35(typescript@5.9.3) - transitivePeerDependencies: - - '@vue/composition-api' - dev: false + /quick-lru@7.3.0: + resolution: {integrity: sha512-k9lSsjl36EJdK7I06v7APZCbyGT2vMTsYSRX1Q2nbYmnkBqgUhRkAuzH08Ciotteu/PLJmIF2+tti7o3C/ts2g==} + engines: {node: '>=18'} + dev: true /react-dom@19.2.6(react@19.2.6): resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} @@ -2949,12 +5959,125 @@ packages: dependencies: react: 19.2.6 scheduler: 0.27.0 - dev: false + + /react-error-boundary@6.1.1(react@19.2.6): + resolution: {integrity: sha512-BrYwPOdXi5mqkk5lw+Uvt0ThHx32rCt3BkukS4X23A2AIWDPSGX6iaWTc0y9TU/mHDA/6qOSGel+B2ERkOvD1w==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + dependencies: + react: 19.2.6 + dev: true + + /react-hook-form@7.76.1(react@19.2.6): + resolution: {integrity: sha512-rYM7tPiWlu3nZchkR/ex7piyzui2vFPyaLnXnI/RnblB/L4qfMmyses8llJVtF1NpE9WBBsJlGtcSZzPCXW1qQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + dependencies: + react: 19.2.6 + dev: true + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true + + /react-is@19.2.7: + resolution: {integrity: sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==} + dev: true + + /react-markdown@10.1.0(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/react': 19.2.17 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.6 + html-url-attributes: 3.0.1 + mdast-util-to-hast: 13.2.1 + react: 19.2.6 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /react-remove-scroll-bar@2.3.8(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + react-style-singleton: 2.2.3(@types/react@19.2.17)(react@19.2.6) + tslib: 2.8.1 + dev: true + + /react-remove-scroll@2.7.2(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.17)(react@19.2.6) + react-style-singleton: 2.2.3(@types/react@19.2.17)(react@19.2.6) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.17)(react@19.2.6) + use-sidecar: 1.1.3(@types/react@19.2.17)(react@19.2.6) + dev: true + + /react-router@7.16.0(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-wArC8lVyJb3+jM9OpDyW6hLCizACWkvQR/sSGqSs+o5uEXEtGlqdZ4v8hENR3Jad6i+LRkK93q/+bQAcvl6V1A==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + dependencies: + cookie: 1.1.1 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + set-cookie-parser: 2.7.2 + dev: true + + /react-style-singleton@2.2.3(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + get-nonce: 1.0.1 + react: 19.2.6 + tslib: 2.8.1 + dev: true /react@19.2.6: resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} engines: {node: '>=0.10.0'} - dev: false /recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -2995,31 +6118,38 @@ packages: vfile: 6.0.3 dev: true - /rehype-external-links@3.0.0: - resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} + /regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} dependencies: - '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.3.1 - hast-util-is-element: 3.0.0 - is-absolute-url: 4.0.1 - space-separated-tokens: 2.0.2 - unist-util-visit: 5.1.0 - dev: false + regex-utilities: 2.3.0 + dev: true - /rehype-format@5.0.1: - resolution: {integrity: sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==} + /regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + dev: true + + /regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} dependencies: - '@types/hast': 3.0.4 - hast-util-format: 1.1.0 - dev: false + regex-utilities: 2.3.0 + dev: true - /rehype-parse@9.0.1: - resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + + /rehype-mdx-import-media@1.4.0: + resolution: {integrity: sha512-O2Q/yFj8lj0IXK7iwfHFowYrn0c5wA4/RCoS8J30HVioMmMzr+fF82PbxV3YPf6IpmbaRrVPvRfae1LhM8hXmQ==} dependencies: '@types/hast': 3.0.4 - hast-util-from-html: 2.0.3 + hast-util-properties-to-mdx-jsx-attributes: 1.1.1 + parse-srcset: 1.0.2 unified: 11.0.5 - dev: false + unist-util-visit: 5.1.0 + transitivePeerDependencies: + - supports-color + dev: true /rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} @@ -3027,7 +6157,7 @@ packages: '@types/hast': 3.0.4 hast-util-raw: 9.1.0 vfile: 6.0.3 - dev: false + dev: true /rehype-recma@1.0.0: resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} @@ -3039,20 +6169,53 @@ packages: - supports-color dev: true - /rehype-sanitize@6.0.0: - resolution: {integrity: sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==} + /rehype-slug@6.0.0: + resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} dependencies: '@types/hast': 3.0.4 - hast-util-sanitize: 5.0.2 - dev: false + github-slugger: 2.0.0 + hast-util-heading-rank: 3.0.0 + hast-util-to-string: 3.0.1 + unist-util-visit: 5.1.0 + dev: true - /rehype-stringify@10.0.1: - resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + /remark-comment@1.0.0: + resolution: {integrity: sha512-k8YPo5MGvl8l4gGxOH6Zk4Fa2AhDACN5eqKnKZcHDORZQS15hlnezlBHj2lqyDiqzApNmYOMTibkEJbMSKU25w==} dependencies: - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + dev: true + + /remark-directive-rehype@1.0.0: + resolution: {integrity: sha512-10XpgKG/v5pqSpp/lLXEqqJ+EeHY1mhmcgSgno1Zw+PygBvkMguY9X39dj5sMkaMt0GbUmlhWidbBqLzFLZmXg==} + engines: {node: '>=20.0.0'} + dependencies: + hastscript: 9.0.1 + unist-util-map: 4.0.0 + dev: true + + /remark-directive@3.0.1: + resolution: {integrity: sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-directive: 3.1.0 + micromark-extension-directive: 3.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + dev: true + + /remark-frontmatter@5.0.0: + resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-frontmatter: 2.0.1 + micromark-extension-frontmatter: 2.0.0 unified: 11.0.5 - dev: false + transitivePeerDependencies: + - supports-color + dev: true /remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} @@ -3065,7 +6228,18 @@ packages: unified: 11.0.5 transitivePeerDependencies: - supports-color - dev: false + dev: true + + /remark-mdx-frontmatter@5.2.0: + resolution: {integrity: sha512-U/hjUYTkQqNjjMRYyilJgLXSPF65qbLPdoESOkXyrwz2tVyhAnm4GUKhfXqOOS9W34M3545xEMq+aMpHgVjEeQ==} + dependencies: + '@types/mdast': 4.0.4 + estree-util-value-to-estree: 3.5.0 + toml: 3.0.0 + unified: 11.0.5 + unist-util-mdx-define: 1.1.2 + yaml: 2.9.0 + dev: true /remark-mdx@3.1.1: resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} @@ -3085,6 +6259,7 @@ packages: unified: 11.0.5 transitivePeerDependencies: - supports-color + dev: true /remark-rehype@11.1.2: resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} @@ -3094,6 +6269,7 @@ packages: mdast-util-to-hast: 13.2.1 unified: 11.0.5 vfile: 6.0.3 + dev: true /remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} @@ -3101,36 +6277,64 @@ packages: '@types/mdast': 4.0.4 mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - dev: false + dev: true + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /require-in-the-middle@8.0.1: + resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} + engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} + dependencies: + debug: 4.4.3 + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /reselect@5.2.0: + resolution: {integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==} + dev: true /reserved-identifiers@1.2.0: resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==} engines: {node: '>=18'} - dev: false + dev: true - /rolldown@1.0.2: - resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} + /roarr@7.21.7: + resolution: {integrity: sha512-6X9ID9jb83kPkDxm5xLb9rZdGm6ksdDjpeL0iW5weKelJFi+NVBSowRpEuH8CdpX2x+7RW0TZaezibE7yQB7pg==} + engines: {node: '>=18.0'} + dependencies: + fast-printf: 1.6.10 + safe-stable-stringify: 2.5.0 + semver-compare: 1.0.0 + dev: true + + /rolldown@1.0.3: + resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true dependencies: - '@oxc-project/types': 0.132.0 + '@oxc-project/types': 0.133.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.2 - '@rolldown/binding-darwin-arm64': 1.0.2 - '@rolldown/binding-darwin-x64': 1.0.2 - '@rolldown/binding-freebsd-x64': 1.0.2 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 - '@rolldown/binding-linux-arm64-gnu': 1.0.2 - '@rolldown/binding-linux-arm64-musl': 1.0.2 - '@rolldown/binding-linux-ppc64-gnu': 1.0.2 - '@rolldown/binding-linux-s390x-gnu': 1.0.2 - '@rolldown/binding-linux-x64-gnu': 1.0.2 - '@rolldown/binding-linux-x64-musl': 1.0.2 - '@rolldown/binding-openharmony-arm64': 1.0.2 - '@rolldown/binding-wasm32-wasi': 1.0.2 - '@rolldown/binding-win32-arm64-msvc': 1.0.2 - '@rolldown/binding-win32-x64-msvc': 1.0.2 + '@rolldown/binding-android-arm64': 1.0.3 + '@rolldown/binding-darwin-arm64': 1.0.3 + '@rolldown/binding-darwin-x64': 1.0.3 + '@rolldown/binding-freebsd-x64': 1.0.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 + '@rolldown/binding-linux-arm64-gnu': 1.0.3 + '@rolldown/binding-linux-arm64-musl': 1.0.3 + '@rolldown/binding-linux-ppc64-gnu': 1.0.3 + '@rolldown/binding-linux-s390x-gnu': 1.0.3 + '@rolldown/binding-linux-x64-gnu': 1.0.3 + '@rolldown/binding-linux-x64-musl': 1.0.3 + '@rolldown/binding-openharmony-arm64': 1.0.3 + '@rolldown/binding-wasm32-wasi': 1.0.3 + '@rolldown/binding-win32-arm64-msvc': 1.0.3 + '@rolldown/binding-win32-x64-msvc': 1.0.3 dev: true /rollup@4.60.4: @@ -3168,17 +6372,83 @@ packages: fsevents: 2.3.3 dev: true + /rou3@0.8.1: + resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==} + dev: true + + /safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + dev: true + + /sax@1.6.1: + resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} + engines: {node: '>=11.0.0'} + dev: true + /scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - dev: false - /set-cookie-parser@3.1.0: - resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==} - dev: false + /section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + dev: true + + /semifies@1.0.0: + resolution: {integrity: sha512-xXR3KGeoxTNWPD4aBvL5NUpMTT7WMANr3EWnaS190QVkY52lqqcVRD7Q05UVbBhiWDGWMlJEUam9m7uFFGVScw==} + dev: true + + /semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + dev: true + + /semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + dev: true + + /shiki@4.2.0: + resolution: {integrity: sha512-hjNax6o/ylDy9lefQEaSDtzaT3iVNtZ3WmpQnbuQNoG4xvnSKf2kSKbihZVO4JRG1TTMejs7CmNRYlWgAL66pQ==} + engines: {node: '>=20'} + dependencies: + '@shikijs/core': 4.2.0 + '@shikijs/engine-javascript': 4.2.0 + '@shikijs/engine-oniguruma': 4.2.0 + '@shikijs/langs': 4.2.0 + '@shikijs/themes': 4.2.0 + '@shikijs/types': 4.2.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + dev: true + + /sitemap@9.0.1: + resolution: {integrity: sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==} + engines: {node: '>=20.19.5', npm: '>=10.8.2'} + hasBin: true + dependencies: + '@types/node': 24.12.4 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.6.1 + dev: true /source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true /source-map@0.7.6: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} @@ -3187,22 +6457,33 @@ packages: /space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true - /string-byte-length@3.0.1: - resolution: {integrity: sha512-yJ8vP0HMwZ54CcA8S8mKoXbkezpZHANFtmafFo8lGxZThCQcAwRHjdFabuSLgOzxj9OFJcmssmiAvmcOK4O2Hw==} - engines: {node: '>=18.18.0'} - dev: false + /srvx@0.11.22: + resolution: {integrity: sha512-LqZxxBDMKuMAZzFzJnDCkFOrs9MZQZr0LvHiO/SuSZVdQaXD7xQ5UWTUxheJrQPve1qk9MG2B/yttUvJxw8egQ==} + engines: {node: '>=20.16.0'} + hasBin: true + dev: true - /string-byte-slice@3.0.1: - resolution: {integrity: sha512-GWv2K4lYyd2+AhmKH3BV+OVx62xDX+99rSLfKpaqFiQU7uOMaUY1tDjdrRD4gsrCr9lTyjMgjna7tZcCOw+Smg==} - engines: {node: '>=18.18.0'} - dev: false + /string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + dev: true /stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + dev: true /stringify-object@6.0.0: resolution: {integrity: sha512-6f94vIED6vmJJfh3lyVsVWxCYSfI5uM+16ntED/Ql37XIyV6kj0mRAAiTeMMc/QLYIaizC3bUprQ8pQnDDrKfA==} @@ -3212,11 +6493,19 @@ packages: is-identifier: 1.0.1 is-obj: 3.0.0 is-regexp: 3.1.0 - dev: false + dev: true + + /strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.2.2 + dev: true - /style-mod@4.1.3: - resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} - dev: false + /strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + dev: true /style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -3237,39 +6526,37 @@ packages: function-timeout: 1.0.2 make-asynchronous: 1.1.0 time-span: 5.1.0 - dev: false - - /swrv@1.2.0(vue@3.5.35): - resolution: {integrity: sha512-lH/g4UcNyj+7lzK4eRGT4C68Q4EhQ6JtM9otPRIASfhhzfLWtbZPHcMuhuba7S9YVYuxkMUGImwMyGpfbkH07A==} - peerDependencies: - vue: '>=3.2.26 < 4' - dependencies: - vue: 3.5.35(typescript@5.9.3) - dev: false - - /tabbable@6.4.0: - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} - dev: false + dev: true /tagged-tag@1.0.0: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - dev: false + dev: true - /tailwind-merge@3.5.0: - resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} - dev: false + /tailwind-merge@3.6.0: + resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} + dev: true /tailwindcss@4.3.0: resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} - dev: false + dev: true + + /tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + dev: true /time-span@5.1.0: resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} engines: {node: '>=12'} dependencies: convert-hrtime: 5.0.0 - dev: false + dev: true + + /tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} + dev: true /tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} @@ -3279,50 +6566,82 @@ packages: picomatch: 4.0.4 dev: true + /toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + dev: true + /trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: true /trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - - /truncate-json@3.0.1: - resolution: {integrity: sha512-QVsbr1WhGLq2F0oDyYbqtOXcf3gcnL8C9H5EX8bBwAr8ZWvWGJzukpPrDrWgJMrNtgDbo74BIjI4kJu3q2xQWw==} - engines: {node: '>=18.18.0'} - dependencies: - guess-json-indent: 3.0.1 - string-byte-length: 3.0.1 - string-byte-slice: 3.0.1 - dev: false + dev: true /tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + dev: true + + /tw-animate-css@1.4.0: + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + dev: true + + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true /type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - dev: false + dev: true /type-fest@5.7.0: resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} engines: {node: '>=20'} dependencies: tagged-tag: 1.0.0 - dev: false + dev: true + + /type-level-regexp@0.1.17: + resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==} + dev: true /typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true + dev: true + + /ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + dev: true /undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - dev: false + dev: true - /unhead@2.1.15: - resolution: {integrity: sha512-MCt5T90mCWyr3Z6pUCdM9lVRXoMoVBlL7z7U4CYVIiaDiuzad/UCfLuMqz5MeNmpZUgoBCQnrucJimU7EZR+XA==} + /unhead@3.1.3(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16): + resolution: {integrity: sha512-mAlNpNmafwHM/13qvoDbzKmNU+zJBC2CHtmCvUtFDep5kAsUhHomBWtEAEQEw+rNnQ6g6RVo71elWKD/QDAbQQ==} + peerDependencies: + vite: '>=6.4.2' + peerDependenciesMeta: + vite: + optional: true dependencies: hookable: 6.1.1 - dev: false + unplugin: 3.3.0(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16) + vite: 8.0.16(esbuild@0.28.1)(yaml@2.9.0) + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - webpack + dev: true /unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -3334,18 +6653,31 @@ packages: is-plain-obj: 4.1.0 trough: 2.2.0 vfile: 6.0.3 + dev: true - /unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + /unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - dev: false + dev: true - /unist-util-is@6.0.1: - resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + /unist-util-map@4.0.0: + resolution: {integrity: sha512-HJs1tpkSmRJUzj6fskQrS5oYhBYlmtcvy4SepdDEEsL04FjBrgF0Mgggvxc1/qGBGgW7hRh9+UBK1aqTEnBpIA==} dependencies: '@types/unist': 3.0.3 + dev: true + + /unist-util-mdx-define@1.1.2: + resolution: {integrity: sha512-9ncH7i7TN5Xn7/tzX5bE3rXgz1X/u877gYVAUB3mLeTKYJmQHmqKTDBi6BTGXV7AeolBCI9ErcVsOt2qryoD0g==} + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + vfile: 6.0.3 + dev: true /unist-util-position-from-estree@2.0.0: resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} @@ -3357,17 +6689,20 @@ packages: resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} dependencies: '@types/unist': 3.0.3 + dev: true /unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} dependencies: '@types/unist': 3.0.3 + dev: true /unist-util-visit-parents@6.0.2: resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.1 + dev: true /unist-util-visit@5.1.0: resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} @@ -3375,28 +6710,144 @@ packages: '@types/unist': 3.0.3 unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 + dev: true + + /unplugin@3.3.0(esbuild@0.28.1)(rollup@4.60.4)(vite@8.0.16): + resolution: {integrity: sha512-qa66K+crbfyE6JK10GjvbJeRrOsuC/JpbnHctfyp/i4oBTxWOzJfRZyDiOk1PtErMFRu8JhsU/wPvOdBNWe5Rg==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@farmfe/core': '*' + '@rspack/core': '*' + bun-types-no-globals: '*' + esbuild: '*' + rolldown: '*' + rollup: '*' + unloader: '*' + vite: '*' + webpack: '*' + peerDependenciesMeta: + '@farmfe/core': + optional: true + '@rspack/core': + optional: true + bun-types-no-globals: + optional: true + esbuild: + optional: true + rolldown: + optional: true + rollup: + optional: true + unloader: + optional: true + vite: + optional: true + webpack: + optional: true + dependencies: + '@jridgewell/remapping': 2.3.5 + esbuild: 0.28.1 + picomatch: 4.0.4 + rollup: 4.60.4 + vite: 8.0.16(esbuild@0.28.1)(yaml@2.9.0) + webpack-virtual-modules: 0.6.2 + dev: true + + /urlpattern-polyfill@10.1.0: + resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} + dev: true + + /use-callback-ref@1.3.3(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + tslib: 2.8.1 + dev: true + + /use-sidecar@1.1.3(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 19.2.17 + detect-node-es: 1.1.0 + react: 19.2.6 + tslib: 2.8.1 + dev: true + + /use-sync-external-store@1.6.0(react@19.2.6): + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + dependencies: + react: 19.2.6 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /valibot@1.4.2(typescript@5.9.3): + resolution: {integrity: sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.9.3 + dev: true + + /vaul@1.1.2(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6): + resolution: {integrity: sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc + dependencies: + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + dev: true /vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} dependencies: '@types/unist': 3.0.3 vfile: 6.0.3 - dev: false + dev: true /vfile-message@4.0.3: resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 + dev: true /vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} dependencies: '@types/unist': 3.0.3 vfile-message: 4.0.3 + dev: true - /vite@8.0.14: - resolution: {integrity: sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==} + /vite@8.0.16(esbuild@0.28.1)(yaml@2.9.0): + resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3438,75 +6889,299 @@ packages: yaml: optional: true dependencies: + esbuild: 0.28.1 lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.15 - rolldown: 1.0.2 + rolldown: 1.0.3 tinyglobby: 0.2.17 + yaml: 2.9.0 optionalDependencies: fsevents: 2.3.3 dev: true - /vue-component-type-helpers@3.3.3: - resolution: {integrity: sha512-x4nsFpy5Pe8fqPzp/5vkTPeTTDBpAx4WVtV47Ejt0+2FQrq4pRRsJs7JmYRqMFzTu/LW+pCWEjQ3YVCkPV7f9g==} - dev: false + /web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + dev: true + + /web-worker@1.5.0: + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} + dev: true - /vue-demi@0.14.10(vue@3.5.35): - resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - peerDependencies: - '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - dependencies: - vue: 3.5.35(typescript@5.9.3) - dev: false + /webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + dev: true - /vue-sonner@1.3.2: - resolution: {integrity: sha512-UbZ48E9VIya3ToiRHAZUbodKute/z/M1iT8/3fU8zEbwBRE11AKuHikssv18LMk2gTTr6eMQT4qf6JoLHWuj/A==} - dev: false + /wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 + dev: true - /vue@3.5.35(typescript@5.9.3): - resolution: {integrity: sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==} + /ws@8.21.1: + resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} + engines: {node: '>=10.0.0'} peerDependencies: - typescript: '*' + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' peerDependenciesMeta: - typescript: + bufferutil: optional: true - dependencies: - '@vue/compiler-dom': 3.5.35 - '@vue/compiler-sfc': 3.5.35 - '@vue/runtime-dom': 3.5.35 - '@vue/server-renderer': 3.5.35(vue@3.5.35) - '@vue/shared': 3.5.35 - typescript: 5.9.3 - dev: false - - /w3c-keyname@2.2.8: - resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} - dev: false - - /web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - dev: false + utf-8-validate: + optional: true + dev: true - /web-worker@1.5.0: - resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} - dev: false + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true /yaml@2.9.0: resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true - dev: false + dev: true + + /yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + dev: true + + /yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + dev: true + + /zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + dev: true /zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} - dev: false + dev: true + + /zudoku@0.82.3(@opentelemetry/core@2.10.0)(@types/json-schema@7.0.15)(acorn@8.16.0)(react-dom@19.2.6)(react@19.2.6)(rollup@4.60.4)(typescript@5.9.3): + resolution: {integrity: sha512-5Eehor7pwSm9nlZSR6wfk2vXt1i4vd1W8y6Pf2lVwRZEsJyv5o4bAIKNxMGEXH4cva0zX96Mbns7USTc0/c4zg==} + engines: {node: '>=20.19.0 <21.0.0 || >=22.12.0'} + hasBin: true + peerDependencies: + '@azure/msal-browser': ^4.13.0 + '@sentry/react': ^10.0.0 + '@supabase/supabase-js': ^2.49.4 + firebase: ^12.6.0 + mermaid: ^11.0.0 + react: '>=19.2.0' + react-dom: '>=19.2.0' + peerDependenciesMeta: + '@azure/msal-browser': + optional: true + '@sentry/react': + optional: true + '@supabase/supabase-js': + optional: true + firebase: + optional: true + mermaid: + optional: true + dependencies: + '@apidevtools/json-schema-ref-parser': 15.3.5(@types/json-schema@7.0.15) + '@base-ui/react': 1.6.0(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@envelop/core': 5.5.1 + '@graphiql/toolkit': 0.12.1(graphql@16.14.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.0) + '@hono/node-server': 2.0.8(hono@4.12.27) + '@lekoarts/rehype-meta-as-attributes': 3.0.3 + '@mdx-js/mdx': 3.1.0(acorn@8.16.0) + '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.6) + '@mdx-js/rollup': 3.1.1(rollup@4.60.4) + '@pothos/core': 4.12.0(graphql@16.14.0) + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-aspect-ratio': 1.1.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-label': 2.1.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-progress': 1.1.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-separator': 1.1.15(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.17)(react@19.2.6) + '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@radix-ui/react-visually-hidden': 1.2.4(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + '@scalar/openapi-parser': 0.28.4 + '@scalar/snippetz': 0.9.11 + '@sentry/node': 10.62.0(@opentelemetry/core@2.10.0) + '@shikijs/langs': 4.2.0 + '@shikijs/rehype': 4.2.0 + '@shikijs/themes': 4.2.0 + '@shikijs/transformers': 4.2.0 + '@tailwindcss/typography': 0.5.20(tailwindcss@4.3.0) + '@tailwindcss/vite': 4.3.0(vite@8.0.16) + '@tanem/react-nprogress': 6.0.3(react-dom@19.2.6)(react@19.2.6) + '@tanstack/react-query': 5.101.0(react@19.2.6) + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + '@unhead/react': 3.1.3(esbuild@0.28.1)(react@19.2.6)(rollup@4.60.4)(typescript@5.9.3)(vite@8.0.16) + '@vitejs/plugin-react': 6.0.2(vite@8.0.16) + '@x0k/json-schema-merge': 1.0.3 + '@zuplo/mcp': 0.0.32 + bs58: 6.0.0 + class-variance-authority: 0.7.1 + clsx: 2.1.1 + cmdk: 1.1.1(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + dotenv: 17.4.2 + embla-carousel-react: 8.6.0(react@19.2.6) + esbuild: 0.28.1 + estree-util-is-identifier-name: 3.0.0 + estree-util-value-to-estree: 3.5.0 + fast-equals: 6.0.0 + glob: 13.0.6 + glob-parent: 6.0.2 + graphql: 16.14.0 + graphql-type-json: 0.3.2(graphql@16.14.0) + graphql-yoga: 5.21.2(graphql@16.14.0) + gray-matter: 4.0.3 + hast-util-heading-rank: 3.0.0 + hast-util-to-jsx-runtime: 2.3.6 + hast-util-to-string: 3.0.1 + hono: 4.12.27 + http-terminator: 3.2.0 + javascript-stringify: 2.1.0 + jose: 6.2.3 + json-schema-to-typescript-lite: 15.0.0 + loglevel: 1.9.2 + lucide-react: 1.16.0(react@19.2.6) + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx: 3.0.0 + mdast-util-mdx-jsx: 3.2.0 + micromark-extension-mdxjs: 3.0.0 + motion: 12.40.0(react-dom@19.2.6)(react@19.2.6) + nanoevents: 9.1.0 + next-themes: 0.4.6(react-dom@19.2.6)(react@19.2.6) + oauth4webapi: 3.8.5 + openapi-types: 12.1.3 + pagefind: 1.5.2 + picocolors: 1.1.1 + piscina: 5.2.0 + posthog-node: 5.36.2 + quick-lru: 7.3.0 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-error-boundary: 6.1.1(react@19.2.6) + react-hook-form: 7.76.1(react@19.2.6) + react-is: 19.2.7 + react-markdown: 10.1.0(@types/react@19.2.17)(react@19.2.6) + react-router: 7.16.0(react-dom@19.2.6)(react@19.2.6) + rehype-mdx-import-media: 1.4.0 + rehype-raw: 7.0.0 + rehype-slug: 6.0.0 + remark-comment: 1.0.0 + remark-directive: 3.0.1 + remark-directive-rehype: 1.0.0 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.1 + remark-mdx-frontmatter: 5.2.0 + semver: 7.8.5 + shiki: 4.2.0 + sitemap: 9.0.1 + strip-ansi: 7.2.0 + tailwind-merge: 3.6.0 + tailwindcss: 4.3.0 + tw-animate-css: 1.4.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vaul: 1.1.2(@types/react-dom@19.2.3)(@types/react@19.2.17)(react-dom@19.2.6)(react@19.2.6) + vfile: 6.0.3 + vite: 8.0.16(esbuild@0.28.1)(yaml@2.9.0) + yaml: 2.9.0 + yargs: 18.0.0 + zod: 4.4.3 + zustand: 5.0.14(@types/react@19.2.17)(react@19.2.6) + transitivePeerDependencies: + - '@date-fns/tz' + - '@emotion/is-prop-valid' + - '@farmfe/core' + - '@modelcontextprotocol/sdk' + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' + - '@rolldown/plugin-babel' + - '@rspack/core' + - '@types/json-schema' + - '@types/node' + - '@unhead/cli' + - '@vitejs/devtools' + - acorn + - babel-plugin-react-compiler + - bufferutil + - bun-types-no-globals + - crossws + - date-fns + - graphql-ws + - immer + - jiti + - less + - lightningcss + - oxc-parser + - rolldown + - rollup + - rxjs + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - unloader + - use-sync-external-store + - utf-8-validate + - webpack + dev: true + + /zustand@5.0.14(@types/react@19.2.17)(react@19.2.6): + resolution: {integrity: sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + dependencies: + '@types/react': 19.2.17 + react: 19.2.6 + dev: true /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: true diff --git a/src/assets/call-e-logo.svg b/public/call-e-logo.svg similarity index 99% rename from src/assets/call-e-logo.svg rename to public/call-e-logo.svg index 8606cdf..aca98af 100644 --- a/src/assets/call-e-logo.svg +++ b/public/call-e-logo.svg @@ -1,2 +1,3 @@ + diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..53a343c --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://docs.heycall-e.com/sitemap.xml diff --git a/scripts/augment-llms.mjs b/scripts/augment-llms.mjs new file mode 100644 index 0000000..c58ec16 --- /dev/null +++ b/scripts/augment-llms.mjs @@ -0,0 +1,19 @@ +import { readFile, writeFile } from "node:fs/promises"; +import { resolve } from "node:path"; + +const llmsPath = resolve("dist/llms.txt"); +const llms = await readFile(llmsPath, "utf8"); +const apiSection = `## API Reference + +- [API Reference](/api-reference): Browse the read-only CALL-E Developer API reference. +- [OpenAPI Specification](/openapi/calle.openapi.yaml): Read the authoritative OpenAPI 3.1 contract for tools and code generation. +`; + +if ( + llms.includes("](/api-reference)") || + llms.includes("](/openapi/calle.openapi.yaml)") +) { + throw new Error("llms.txt already contains an API discovery link."); +} + +await writeFile(llmsPath, `${llms.trimEnd()}\n\n${apiSection}`, "utf8"); diff --git a/scripts/deploy_docs_to_oss.py b/scripts/deploy_docs_to_oss.py index 182c4c0..b518b7e 100644 --- a/scripts/deploy_docs_to_oss.py +++ b/scripts/deploy_docs_to_oss.py @@ -34,10 +34,18 @@ def parse_bucket(bucket_uri: str) -> str: def content_type_for(path: Path) -> str: guessed, _ = mimetypes.guess_type(path.name) + if path.suffix == ".html": + return "text/html; charset=utf-8" + if path.suffix == ".md": + return "text/markdown; charset=utf-8" + if path.suffix == ".txt": + return "text/plain; charset=utf-8" + if path.suffix == ".css": + return "text/css; charset=utf-8" if path.suffix == ".yaml": - return "application/yaml" + return "application/yaml; charset=utf-8" if path.suffix == ".js": - return "text/javascript" + return "text/javascript; charset=utf-8" return guessed or "application/octet-stream" @@ -76,12 +84,38 @@ def collect_files(dist_dir: Path) -> list[Path]: return sorted( files, key=lambda path: ( - path == dist_dir / "index.html", + ( + 2 + if path == dist_dir / "index.html" + else 1 + if path.suffix == ".html" + else 0 + ), path.relative_to(dist_dir).as_posix(), ), ) +def object_names_for(path: Path, dist_dir: Path) -> tuple[str, ...]: + relative = path.relative_to(dist_dir).as_posix() + status_pages = {"400.html", "404.html", "500.html"} + if ( + path.suffix == ".html" + and relative != "index.html" + and relative not in status_pages + ): + return relative, relative.removesuffix(".html") + return (relative,) + + +def collect_uploads(dist_dir: Path) -> list[tuple[Path, str]]: + return [ + (path, object_name) + for path in collect_files(dist_dir) + for object_name in object_names_for(path, dist_dir) + ] + + class OssClient: def __init__( self, @@ -241,10 +275,10 @@ def main() -> int: endpoint=os.environ["OSS_ENDPOINT"], ) - files: list[Path] = [] + uploads: list[tuple[Path, str]] = [] if not args.skip_upload: try: - files = collect_files(dist_dir) + uploads = collect_uploads(dist_dir) except FileNotFoundError as exc: print(str(exc), file=sys.stderr) return 2 @@ -254,19 +288,16 @@ def main() -> int: print(f"prefix={deploy_prefix}") if args.dry_run: - print(f"dry_run=true files={len(files)}") - for path in files[:10]: - print( - "plan " - f"{deploy_prefix}{path.relative_to(dist_dir).as_posix()}" - ) - if len(files) > 10: + print(f"dry_run=true objects={len(uploads)}") + for _, object_name in uploads[:10]: + print(f"plan {deploy_prefix}{object_name}") + if len(uploads) > 10: print("...") return 0 if not args.skip_upload: - for index, local_path in enumerate(files, start=1): - key = deploy_prefix + local_path.relative_to(dist_dir).as_posix() + for index, (local_path, object_name) in enumerate(uploads, start=1): + key = deploy_prefix + object_name try: client.put_file(local_path, key) except urllib.error.HTTPError as exc: @@ -276,11 +307,16 @@ def main() -> int: file=sys.stderr, ) return 1 - if index % 20 == 0 or index == len(files): - print(f"uploaded={index}/{len(files)}") + if index % 20 == 0 or index == len(uploads): + print(f"uploaded={index}/{len(uploads)}") for key in ( f"{deploy_prefix}index.html", + f"{deploy_prefix}quickstart", + f"{deploy_prefix}quickstart.md", + f"{deploy_prefix}llms.txt", + f"{deploy_prefix}llms-full.txt", + f"{deploy_prefix}sitemap.xml", f"{deploy_prefix}openapi/calle.openapi.yaml", ): try: @@ -295,10 +331,10 @@ def main() -> int: keys = client.list_prefix(deploy_prefix) print(f"listed_objects={len(keys)}") - if files: + if uploads: expected = { - deploy_prefix + path.relative_to(dist_dir).as_posix() - for path in files + deploy_prefix + object_name + for _, object_name in uploads } missing_objects = expected.difference(keys) if missing_objects: diff --git a/scripts/test_deploy_docs_to_oss.py b/scripts/test_deploy_docs_to_oss.py index 2f7b540..f0e7746 100644 --- a/scripts/test_deploy_docs_to_oss.py +++ b/scripts/test_deploy_docs_to_oss.py @@ -5,8 +5,10 @@ from scripts.deploy_docs_to_oss import ( cache_control_for, collect_files, + collect_uploads, content_type_for, normalize_prefix, + object_names_for, parse_bucket, ) @@ -45,21 +47,77 @@ def test_normalize_prefix_rejects_unsafe_segments(self) -> None: def test_content_type_for_openapi(self) -> None: self.assertEqual( content_type_for(Path("calle.openapi.yaml")), - "application/yaml", + "application/yaml; charset=utf-8", ) - def test_collect_files_uploads_index_last(self) -> None: + def test_content_types_for_agent_and_html_files(self) -> None: + self.assertEqual( + content_type_for(Path("quickstart.html")), + "text/html; charset=utf-8", + ) + self.assertEqual( + content_type_for(Path("quickstart.md")), + "text/markdown; charset=utf-8", + ) + self.assertEqual( + content_type_for(Path("llms.txt")), + "text/plain; charset=utf-8", + ) + + def test_collect_files_uploads_assets_before_html_and_index_last(self) -> None: with tempfile.TemporaryDirectory() as directory: dist = Path(directory) assets = dist / "assets" assets.mkdir() (dist / "index.html").write_text("") + (dist / "quickstart.html").write_text("Quickstart") (assets / "index.js").write_text("console.log('ready')") files = collect_files(dist) + self.assertEqual(files[0].name, "index.js") + self.assertEqual(files[-2].name, "quickstart.html") self.assertEqual(files[-1].name, "index.html") + def test_html_routes_have_extensionless_oss_aliases(self) -> None: + with tempfile.TemporaryDirectory() as directory: + dist = Path(directory) + route = dist / "api-reference" / "calls.html" + route.parent.mkdir() + route.write_text("Calls") + + names = object_names_for(route, dist) + + self.assertEqual( + names, + ("api-reference/calls.html", "api-reference/calls"), + ) + + def test_status_and_index_pages_do_not_have_aliases(self) -> None: + with tempfile.TemporaryDirectory() as directory: + dist = Path(directory) + index = dist / "index.html" + not_found = dist / "404.html" + index.write_text("Index") + not_found.write_text("Not found") + + self.assertEqual(object_names_for(index, dist), ("index.html",)) + self.assertEqual(object_names_for(not_found, dist), ("404.html",)) + + def test_collect_uploads_includes_clean_route_object(self) -> None: + with tempfile.TemporaryDirectory() as directory: + dist = Path(directory) + (dist / "index.html").write_text("Index") + (dist / "quickstart.html").write_text("Quickstart") + + object_names = [ + object_name + for _, object_name in collect_uploads(dist) + ] + + self.assertIn("quickstart.html", object_names) + self.assertIn("quickstart", object_names) + if __name__ == "__main__": unittest.main() diff --git a/scripts/verify-dist.mjs b/scripts/verify-dist.mjs index fbf7d35..b0b84b7 100644 --- a/scripts/verify-dist.mjs +++ b/scripts/verify-dist.mjs @@ -5,8 +5,16 @@ import { fileURLToPath } from "node:url"; const scriptDir = dirname(fileURLToPath(import.meta.url)); const docsRoot = resolve(scriptDir, ".."); const distRoot = resolve(docsRoot, "dist"); -const indexPath = resolve(distRoot, "index.html"); -const openApiPath = resolve(distRoot, "openapi/calle.openapi.yaml"); + +const guides = [ + { slug: "quickstart", title: "Quickstart" }, + { slug: "authentication", title: "Authentication" }, + { slug: "calls", title: "Calls" }, + { slug: "webhooks", title: "Webhooks" }, + { slug: "errors", title: "Errors" }, + { slug: "sdks", title: "SDKs" }, + { slug: "changelog", title: "What's New" }, +]; function assertFile(path, label) { try { @@ -24,36 +32,136 @@ function assertFile(path, label) { } } -assertFile(indexPath, "dist index"); -assertFile(openApiPath, "OpenAPI document"); +function readRequired(relativePath, label = relativePath) { + const path = resolve(distRoot, relativePath); + assertFile(path, label); + return readFileSync(path, "utf8"); +} -const indexHtml = readFileSync(indexPath, "utf8"); -const scriptMatch = indexHtml.match(/]+src="([^"]+assets\/index-[^"]+\.js)"/); -const stylesheetMatch = indexHtml.match(/]+href="([^"]+assets\/index-[^"]+\.css)"/); +const indexHtml = readRequired("index.html", "dist index"); +readRequired("400.html", "400 status page"); +readRequired("404.html", "404 status page"); +readRequired("500.html", "500 status page"); +const apiInfoHtml = readRequired( + "api-reference.html", + "API Reference entry", +); +const apiCallsHtml = readRequired( + "api-reference/calls.html", + "Calls API Reference", +); +readRequired("api-reference/webhooks.html", "Webhooks API Reference"); +readRequired("api-reference/~schemas.html", "API schemas page"); +readRequired("favicon.svg", "favicon"); +readRequired("call-e-logo.svg", "CALL-E logo"); +const robots = readRequired("robots.txt", "robots policy"); +const sitemap = readRequired("sitemap.xml", "sitemap"); +const llms = readRequired("llms.txt", "LLM index"); +const llmsFull = readRequired("llms-full.txt", "full LLM export"); +readRequired("pagefind/pagefind.js", "Pagefind search runtime"); -if (!scriptMatch) { - throw new Error("dist index does not reference a hashed entry script."); +if ( + !indexHtml.includes("CALL-E Developer Docs") || + !indexHtml.includes('window.location.replace("/quickstart")') || + !indexHtml.includes('"/authentication"') +) { + throw new Error( + "dist index is missing the documentation entry page or legacy hash bridge.", + ); } -if (!stylesheetMatch) { - throw new Error("dist index does not reference a hashed stylesheet."); + +const scriptMatch = indexHtml.match( + /]+src="(\/assets\/entry\.client-[^"]+\.js)"/, +); +const stylesheetMatch = indexHtml.match( + /]+href="(\/assets\/entry-[^"]+\.css)"/, +); + +if (!scriptMatch || !stylesheetMatch) { + throw new Error("dist index does not reference Zudoku entry assets."); } for (const assetPath of [scriptMatch[1], stylesheetMatch[1]]) { - if (!assetPath.startsWith("./assets/")) { - throw new Error( - `Expected relative asset path for subpath hosting, got ${assetPath}`, - ); + assertFile(join(distRoot, assetPath.slice(1)), `asset ${assetPath}`); +} + +for (const guide of guides) { + const html = readRequired(`${guide.slug}.html`, `${guide.title} HTML`); + const markdown = readRequired(`${guide.slug}.md`, `${guide.title} Markdown`); + + if ( + !html.includes('data-pagefind-body="true"') || + !html.includes("

https://docs.heycall-e.com/${guide.slug}`)) { + throw new Error(`sitemap.xml does not contain /${guide.slug}.`); + } +} + +if ( + !llms.includes("[API Reference](/api-reference)") || + !llms.includes( + "[OpenAPI Specification](/openapi/calle.openapi.yaml)", + ) +) { + throw new Error( + "llms.txt does not expose the API Reference and OpenAPI contract.", + ); +} + +if ( + !apiInfoHtml.includes('data-pagefind-body="true"') || + !apiInfoHtml.includes("CALL-E Developer API") || + !apiInfoHtml.includes("Developer API contract") +) { + throw new Error( + "API Reference entry is missing prerendered OpenAPI information.", + ); +} +if ( + apiInfoHtml.includes('window.location.href="/api-reference/') || + apiInfoHtml.includes('window.location.replace("/api-reference/') +) { + throw new Error("API Reference entry must not be a client-side redirect."); +} - assertFile(join(distRoot, assetPath.slice(2)), `asset ${assetPath}`); +if ( + !apiCallsHtml.includes("Create Call") || + !apiCallsHtml.includes("List Call Events") +) { + throw new Error("Calls API Reference is missing prerendered operations."); +} +if (apiCallsHtml.includes(">Try it<") || apiCallsHtml.includes(">Send Request<")) { + throw new Error("API Reference unexpectedly exposes a request playground."); } -const openApi = readFileSync(openApiPath, "utf8"); +const openApi = readRequired( + "openapi/calle.openapi.yaml", + "OpenAPI document", +); if (!openApi.includes("openapi: 3.1.0")) { - throw new Error("OpenAPI document does not look like the Phase 1 contract."); + throw new Error("OpenAPI document does not look like the public contract."); } if (!openApi.includes("/v1/calls") || !openApi.includes("/calle/webhook")) { - throw new Error("OpenAPI document is missing Phase 1 endpoint paths."); + throw new Error("OpenAPI document is missing public endpoint paths."); +} + +if ( + !robots.includes("User-agent: *") || + !robots.includes("https://docs.heycall-e.com/sitemap.xml") +) { + throw new Error("robots.txt does not allow crawling or link the sitemap."); } -console.log(`Verified static docs dist at ${distRoot}.`); +console.log(`Verified Zudoku static docs dist at ${distRoot}.`); diff --git a/src/App.tsx b/src/App.tsx deleted file mode 100644 index cc17c2f..0000000 --- a/src/App.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import { lazy, Suspense, useEffect, useMemo, useState } from "react"; -import { DocsLayout } from "./components/DocsLayout"; -import { PageToc } from "./components/PageToc"; -import { SiteHeader } from "./components/SiteHeader"; -import { - apiReferenceNavItem, - getGuideNavItem, - isGuideSlug, - type GuideSlug, -} from "./docs-nav"; -import { GuidePage } from "./routes/GuidePage"; - -const ApiReferencePage = lazy(() => - import("./routes/ApiReferencePage").then((module) => ({ - default: module.ApiReferencePage, - })), -); - -type DocsRoute = - | { - type: "guide"; - slug: GuideSlug; - href: string; - sectionId: string | null; - } - | { - type: "api-reference"; - href: string; - sectionId: string | null; - }; - -export function App() { - const [hash, setHash] = useState(window.location.hash); - - useEffect(() => { - function handleHashChange() { - setHash(window.location.hash); - } - - window.addEventListener("hashchange", handleHashChange); - return () => window.removeEventListener("hashchange", handleHashChange); - }, []); - - const route = useMemo(() => parseRoute(hash), [hash]); - - useEffect(() => { - if (route.type !== "api-reference" || !route.sectionId) { - return; - } - - const canonicalHash = `#/api-reference?section=${encodeURIComponent( - route.sectionId, - )}`; - if (hash === canonicalHash) { - return; - } - - window.history.replaceState({}, "", canonicalHash); - setHash(canonicalHash); - }, [hash, route]); - - useEffect(() => { - if (route.type !== "guide" || !route.sectionId) { - return; - } - - window.setTimeout(() => { - document.getElementById(route.sectionId ?? "")?.scrollIntoView({ - block: "start", - }); - }, 0); - }, [route]); - - if (route.type === "api-reference") { - return ( - }> - - - ); - } - - const guide = getGuideNavItem(route.slug); - - return ( - } - > - - - ); -} - -function ApiReferenceLoading() { - return ( -
- -
- -
-
-
API Reference
-
-
-
-
-
-
-
- ); -} - -function parseRoute(hash: string): DocsRoute { - let value = ""; - if (hash.startsWith("#/")) { - value = hash.slice(2); - } else if (hash.startsWith("#")) { - value = hash.slice(1); - } - - const [path, queryString = ""] = value.split("?", 2); - const sectionId = new URLSearchParams(queryString).get("section"); - - if (path === "api-reference") { - return { - type: "api-reference", - href: apiReferenceNavItem.href, - sectionId, - }; - } - - if ( - path.startsWith("api-1/") || - path.startsWith("description/") || - path.startsWith("tag/") || - path === "models" - ) { - return { - type: "api-reference", - href: apiReferenceNavItem.href, - sectionId: path.startsWith("api-1/") ? path : `api-1/${path}`, - }; - } - - if (isGuideSlug(path)) { - return { - type: "guide", - slug: path, - href: `#/${path}`, - sectionId, - }; - } - - return { - type: "guide", - slug: "quickstart", - href: "#/quickstart", - sectionId: null, - }; -} diff --git a/src/components/CodeBlock.tsx b/src/components/CodeBlock.tsx deleted file mode 100644 index 143409b..0000000 --- a/src/components/CodeBlock.tsx +++ /dev/null @@ -1,201 +0,0 @@ -import { Children, isValidElement, useMemo, useState } from "react"; -import type { HTMLAttributes, ReactElement, ReactNode } from "react"; - -type CodeElementProps = { - className?: string; - children?: ReactNode; -}; - -type HighlightSpec = { - className: string; - pattern: RegExp; -}; - -const jsonHighlightSpecs: HighlightSpec[] = [ - { className: "token-comment", pattern: /\/\/.*/ }, - { className: "token-key", pattern: /"(?:\\.|[^"\\])*"(?=\s*:)/ }, - { className: "token-string", pattern: /"(?:\\.|[^"\\])*"/ }, - { className: "token-number", pattern: /-?\b\d+(?:\.\d+)?\b/ }, - { className: "token-constant", pattern: /\b(?:true|false|null)\b/ }, - { className: "token-punctuation", pattern: /[{}[\](),:]/ }, -]; - -const tsHighlightSpecs: HighlightSpec[] = [ - { className: "token-comment", pattern: /\/\/.*/ }, - { className: "token-string", pattern: /`(?:\\.|[^`\\])*`|'(?:\\.|[^'\\])*'|"(?:\\.|[^"\\])*"/ }, - { className: "token-keyword", pattern: /\b(?:async|await|const|export|from|function|if|import|let|new|return|type)\b/ }, - { className: "token-constant", pattern: /\b(?:false|null|true|undefined)\b/ }, - { className: "token-number", pattern: /\b\d[\d_]*(?:\.\d+)?\b/ }, - { className: "token-key", pattern: /[A-Za-z_$][\w$]*(?=\s*:)/ }, - { className: "token-function", pattern: /[A-Za-z_$][\w$]*(?=\()/ }, - { className: "token-punctuation", pattern: /[{}[\](),.;:]/ }, -]; - -const pythonHighlightSpecs: HighlightSpec[] = [ - { className: "token-comment", pattern: /#.*/ }, - { className: "token-string", pattern: /'''[\s\S]*?'''|"""[\s\S]*?"""|'(?:\\.|[^'\\])*'|"(?:\\.|[^"\\])*"/ }, - { className: "token-keyword", pattern: /\b(?:False|None|True|def|from|if|import|return)\b/ }, - { className: "token-number", pattern: /\b\d+(?:\.\d+)?\b/ }, - { className: "token-function", pattern: /[A-Za-z_]\w*(?=\()/ }, - { className: "token-punctuation", pattern: /[{}[\](),.:]/ }, -]; - -const bashHighlightSpecs: HighlightSpec[] = [ - { className: "token-comment", pattern: /#.*/ }, - { className: "token-string", pattern: /'(?:\\.|[^'\\])*'|"(?:\\.|[^"\\])*"/ }, - { className: "token-env", pattern: /\$\{?[A-Z_][A-Z0-9_]*\}?/ }, - { className: "token-shell-command", pattern: /\b(?:curl|export|node|pip|pnpm|python)\b/ }, - { className: "token-shell-flag", pattern: /--?[A-Za-z][\w-]*/ }, - { className: "token-punctuation", pattern: /[{}[\](),=]/ }, -]; - -export function CodeBlock(props: HTMLAttributes) { - const [copied, setCopied] = useState(false); - const { children, ...preProps } = props; - const codeText = useMemo(() => extractCodeText(children), [children]); - const language = useMemo(() => extractLanguage(children), [children]); - const highlightedCode = useMemo( - () => highlightCode(codeText, language), - [codeText, language], - ); - - async function copyCode() { - if (!navigator.clipboard || !codeText) { - return; - } - - try { - await navigator.clipboard.writeText(codeText); - setCopied(true); - window.setTimeout(() => setCopied(false), 1200); - } catch { - return; - } - } - - return ( -
- -
-        
-          {highlightedCode}
-        
-      
-
- ); -} - -function extractCodeText(children: ReactNode): string { - const codeElement = extractCodeElement(children); - return String(codeElement?.props.children ?? "").trimEnd(); -} - -function extractLanguage(children: ReactNode): string { - const codeElement = extractCodeElement(children); - const languageMatch = codeElement?.props.className?.match(/language-([\w-]+)/); - return languageMatch?.[1] ?? ""; -} - -function extractCodeElement( - children: ReactNode, -): ReactElement | null { - const onlyChild = Children.toArray(children)[0]; - if (!isValidElement(onlyChild)) { - return null; - } - - return onlyChild as ReactElement; -} - -function highlightCode(codeText: string, language: string): ReactNode[] { - const specs = getHighlightSpecs(language); - if (specs.length === 0) { - return [codeText]; - } - - return codeText.split("\n").flatMap((line, lineIndex, lines) => { - const highlightedLine = highlightLine(line, specs, lineIndex); - if (lineIndex === lines.length - 1) { - return highlightedLine; - } - - return [...highlightedLine, "\n"]; - }); -} - -function getHighlightSpecs(language: string): HighlightSpec[] { - if (language === "json") { - return jsonHighlightSpecs; - } - - if (language === "python" || language === "py") { - return pythonHighlightSpecs; - } - - if (language === "bash" || language === "sh" || language === "shell") { - return bashHighlightSpecs; - } - - if (language === "ts" || language === "tsx" || language === "js") { - return tsHighlightSpecs; - } - - return []; -} - -function highlightLine( - line: string, - specs: HighlightSpec[], - lineIndex: number, -): ReactNode[] { - const nodes: ReactNode[] = []; - let plainText = ""; - let index = 0; - - while (index < line.length) { - const match = findTokenMatch(line.slice(index), specs); - if (!match) { - plainText += line[index]; - index += 1; - continue; - } - - if (plainText) { - nodes.push(plainText); - plainText = ""; - } - - nodes.push( - - {match.text} - , - ); - index += match.text.length; - } - - if (plainText) { - nodes.push(plainText); - } - - return nodes; -} - -function findTokenMatch( - source: string, - specs: HighlightSpec[], -): { className: string; text: string } | null { - for (const spec of specs) { - const regex = new RegExp(`^(?:${spec.pattern.source})`); - const match = regex.exec(source); - if (match?.[0]) { - return { className: spec.className, text: match[0] }; - } - } - - return null; -} diff --git a/src/components/DocsLayout.tsx b/src/components/DocsLayout.tsx deleted file mode 100644 index 8a00a2f..0000000 --- a/src/components/DocsLayout.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import type { ReactNode } from "react"; -import { docsNavItems, guideNavItems } from "../docs-nav"; -import { SiteHeader, type SiteHeaderSection } from "./SiteHeader"; - -type DocsLayoutProps = { - activeHref: string; - children: ReactNode; - rightRail: ReactNode; -}; - -export function DocsLayout({ activeHref, children, rightRail }: DocsLayoutProps) { - const activeSection: SiteHeaderSection = - activeHref === "#/sdks" - ? "sdks" - : activeHref === "#/changelog" - ? "changelog" - : "guides"; - - return ( -
- - -
- - -
{children}
- -
-
- ); -} diff --git a/src/components/PageToc.tsx b/src/components/PageToc.tsx deleted file mode 100644 index ffac016..0000000 --- a/src/components/PageToc.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import type { TocItem } from "../docs-nav"; - -type PageTocProps = { - baseHref: string; - items: TocItem[]; -}; - -export function PageToc({ baseHref, items }: PageTocProps) { - return ( - - ); -} diff --git a/src/components/SiteHeader.tsx b/src/components/SiteHeader.tsx deleted file mode 100644 index 637ef2f..0000000 --- a/src/components/SiteHeader.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import callELogoUrl from "../assets/call-e-logo.svg"; - -export type SiteHeaderSection = - | "guides" - | "api-reference" - | "sdks" - | "changelog"; - -type SiteHeaderProps = { - activeSection: SiteHeaderSection; -}; - -export function SiteHeader({ activeSection }: SiteHeaderProps) { - return ( -
- - CALL-E - - -
- ); -} diff --git a/src/docs-nav.ts b/src/docs-nav.ts deleted file mode 100644 index 029121d..0000000 --- a/src/docs-nav.ts +++ /dev/null @@ -1,154 +0,0 @@ -export type GuideSlug = - | "quickstart" - | "authentication" - | "calls" - | "webhooks" - | "errors" - | "sdks" - | "changelog"; - -export type TocItem = { - id: string; - title: string; -}; - -export type GuideNavItem = { - type: "guide"; - slug: GuideSlug; - title: string; - href: string; - description: string; - toc: TocItem[]; -}; - -export type ApiReferenceNavItem = { - type: "api-reference"; - title: string; - href: string; - description: string; -}; - -export type DocsNavItem = GuideNavItem | ApiReferenceNavItem; - -export const guideNavItems: GuideNavItem[] = [ - { - type: "guide", - slug: "quickstart", - title: "Quickstart", - href: "#/quickstart", - description: "Create one call and read the structured result.", - toc: [ - { id: "install", title: "Install" }, - { id: "create-a-client", title: "Create a client" }, - { id: "create-and-wait", title: "Create and wait" }, - { id: "read-the-result", title: "Read the result" }, - ], - }, - { - type: "guide", - slug: "authentication", - title: "Authentication", - href: "#/authentication", - description: "Use API keys safely from trusted server environments.", - toc: [ - { id: "api-keys", title: "API keys" }, - { id: "authorization-header", title: "Authorization header" }, - { id: "environments", title: "Environments" }, - { id: "server-only", title: "Server-only usage" }, - { id: "webhook-secrets", title: "Webhook secrets" }, - { id: "auth-errors", title: "Auth errors" }, - ], - }, - { - type: "guide", - slug: "calls", - title: "Calls", - href: "#/calls", - description: "Understand the call creation contract and event flow.", - toc: [ - { id: "call-inputs", title: "Call inputs" }, - { id: "structured-results", title: "Structured results" }, - { id: "idempotency", title: "Idempotency" }, - { id: "polling-and-events", title: "Polling and events" }, - ], - }, - { - type: "guide", - slug: "webhooks", - title: "Webhooks", - href: "#/webhooks", - description: "Verify terminal webhooks and process events safely.", - toc: [ - { id: "terminal-events", title: "Terminal events" }, - { id: "signature-verification", title: "Signature verification" }, - { id: "example-servers", title: "Example servers" }, - { id: "idempotent-handling", title: "Idempotent handling" }, - ], - }, - { - type: "guide", - slug: "errors", - title: "Errors", - href: "#/errors", - description: "Handle stable API errors and recovery paths.", - toc: [ - { id: "error-envelope", title: "Error envelope" }, - { id: "stable-error-codes", title: "Stable error codes" }, - { id: "recovery-guidance", title: "Recovery guidance" }, - ], - }, - { - type: "guide", - slug: "sdks", - title: "SDKs", - href: "#/sdks", - description: "Install the stable TypeScript and Python server SDKs.", - toc: [ - { id: "packages", title: "Packages" }, - { id: "package-status", title: "Package status" }, - { id: "source-repositories", title: "Source repositories" }, - { id: "local-examples", title: "Local examples" }, - { id: "supported-methods", title: "Supported methods" }, - { id: "availability", title: "Availability" }, - { id: "supported-scope", title: "Supported scope" }, - ], - }, - { - type: "guide", - slug: "changelog", - title: "What's New", - href: "#/changelog", - description: "Track CALL-E Developer API and SDK product updates.", - toc: [ - { id: "june-8-2026", title: "June 8, 2026" }, - { - id: "developer-api-and-server-sdks", - title: "What's New: Developer API and server SDKs", - }, - ], - }, -]; - -export const apiReferenceNavItem: ApiReferenceNavItem = { - type: "api-reference", - title: "API Reference", - href: "#/api-reference", - description: "Read the OpenAPI-powered endpoint reference.", -}; - -export const docsNavItems: DocsNavItem[] = [ - ...guideNavItems, - apiReferenceNavItem, -]; - -export function getGuideNavItem(slug: GuideSlug): GuideNavItem { - const item = guideNavItems.find((navItem) => navItem.slug === slug); - if (!item) { - throw new Error(`Unknown guide slug: ${slug}`); - } - return item; -} - -export function isGuideSlug(value: string): value is GuideSlug { - return guideNavItems.some((item) => item.slug === value); -} diff --git a/src/guide-content.tsx b/src/guide-content.tsx deleted file mode 100644 index e296f48..0000000 --- a/src/guide-content.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import AuthenticationGuide from "../content/guides/authentication.mdx"; -import CallsGuide from "../content/guides/calls.mdx"; -import ChangelogGuide from "../content/guides/changelog.mdx"; -import ErrorsGuide from "../content/guides/errors.mdx"; -import QuickstartGuide from "../content/guides/quickstart.mdx"; -import SdksGuide from "../content/guides/sdks.mdx"; -import WebhooksGuide from "../content/guides/webhooks.mdx"; -import type { ComponentType } from "react"; -import type { GuideSlug } from "./docs-nav"; - -export const guideComponents: Record = { - quickstart: QuickstartGuide, - authentication: AuthenticationGuide, - calls: CallsGuide, - webhooks: WebhooksGuide, - errors: ErrorsGuide, - sdks: SdksGuide, - changelog: ChangelogGuide, -}; diff --git a/src/main.tsx b/src/main.tsx deleted file mode 100644 index 489d4a4..0000000 --- a/src/main.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { StrictMode } from "react"; -import { createRoot } from "react-dom/client"; -import { App } from "./App"; -import "./styles/globals.css"; - -const rootElement = document.getElementById("root"); - -if (!rootElement) { - throw new Error("Root element #root was not found."); -} - -createRoot(rootElement).render( - - - , -); diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx deleted file mode 100644 index b9014aa..0000000 --- a/src/mdx-components.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { CodeBlock } from "./components/CodeBlock"; - -export const mdxComponents = { - pre: CodeBlock, -}; diff --git a/src/routes/ApiReferencePage.tsx b/src/routes/ApiReferencePage.tsx deleted file mode 100644 index a470e90..0000000 --- a/src/routes/ApiReferencePage.tsx +++ /dev/null @@ -1,456 +0,0 @@ -import { - ApiReferenceReact, - type AnyApiReferenceConfiguration, -} from "@scalar/api-reference-react"; -import "@scalar/api-reference-react/style.css"; -import "../styles/api-reference.css"; -import { useEffect, type MouseEvent } from "react"; -import { SiteHeader } from "../components/SiteHeader"; - -type ScalarConfiguration = AnyApiReferenceConfiguration & { - showToolbar: "never"; -}; - -const scalarConfiguration = { - url: new URL("openapi/calle.openapi.yaml", document.baseURI).toString(), - layout: "modern", - forceDarkModeState: "light", - hideClientButton: true, - hideDarkModeToggle: true, - hideTestRequestButton: true, - showDeveloperTools: "never", - showToolbar: "never", - showOperationId: true, - defaultOpenAllTags: true, - defaultOpenFirstTag: true, - hiddenClients: [], - agent: { - disabled: true, - }, -} satisfies ScalarConfiguration; - -type ApiReferencePageProps = { - activeSectionId: string | null; -}; - -type ApiReferenceNavGroup = { - title: string; - items: ApiReferenceNavItem[]; -}; - -type ApiReferenceNavItem = { - endpointDisplay?: string; - title: string; - method: "GET" | "POST" | null; - path: string | null; - sectionId: string; -}; - -const apiReferenceNavGroups: ApiReferenceNavGroup[] = [ - { - title: "Overview", - items: [ - { - title: "Introduction", - method: null, - path: null, - sectionId: "api-1/description/introduction", - }, - ], - }, - { - title: "Calls", - items: [ - { - title: "Create Call", - method: "POST", - path: "/v1/calls", - sectionId: "api-1/tag/calls/POST/v1/calls", - }, - { - title: "Get Call", - method: "GET", - path: "/v1/calls/{call_id}", - sectionId: "api-1/tag/calls/GET/v1/calls/{call_id}", - }, - { - title: "List Call Events", - method: "GET", - path: "/v1/calls/{call_id}/events", - sectionId: "api-1/tag/calls/GET/v1/calls/{call_id}/events", - }, - ], - }, - { - title: "Webhooks", - items: [ - { - endpointDisplay: "https://{yourserver}.com/calle/webhook", - title: "Server Message", - method: "POST", - path: "/calle/webhook", - sectionId: "api-1/tag/webhooks/POST/calle/webhook", - }, - ], - }, -]; - -const defaultApiReferenceSectionId = - apiReferenceNavGroups[1]?.items[0]?.sectionId ?? null; - -export function ApiReferencePage({ activeSectionId }: ApiReferencePageProps) { - const selectedSectionId = isVisibleApiReferenceSectionId(activeSectionId) - ? activeSectionId - : defaultApiReferenceSectionId; - - useEffect(() => { - if (!selectedSectionId) { - return; - } - - const stopVisibleSection = syncVisibleApiSection(selectedSectionId); - const stopScrolling = scrollToApiSection(selectedSectionId); - const stopOpeningResponse = openSuccessResponseInSection(selectedSectionId); - const stopEndpointLines = renderEndpointLines(); - - return () => { - stopVisibleSection(); - stopScrolling(); - stopOpeningResponse(); - stopEndpointLines(); - }; - }, [selectedSectionId]); - - function handleNavigationClick( - event: MouseEvent, - sectionId: string, - ) { - event.preventDefault(); - window.history.pushState( - {}, - "", - `#/api-reference?section=${encodeURIComponent(sectionId)}`, - ); - window.dispatchEvent(new HashChangeEvent("hashchange")); - scrollToApiSection(sectionId); - } - - return ( -
- -
- -
- -
-
-
- ); -} - -function isVisibleApiReferenceSectionId( - sectionId: string | null, -): sectionId is string { - if (!sectionId) { - return false; - } - - return apiReferenceNavGroups.some((group) => - group.items.some((item) => item.sectionId === sectionId), - ); -} - -function scrollToApiSection(sectionId: string) { - let attempts = 0; - const root = document.querySelector(".api-reference-page"); - - const timer = window.setInterval(() => { - attempts += 1; - if (scrollToSection() || attempts >= 20) { - stop(); - } - }, 100); - - const observer = new MutationObserver(() => { - if (scrollToSection()) { - stop(); - } - }); - - if (root) { - observer.observe(root, { childList: true, subtree: true }); - } - - window.requestAnimationFrame(() => { - if (scrollToSection()) { - stop(); - } - }); - - function scrollToSection() { - const element = document.getElementById(sectionId); - if (element) { - element.scrollIntoView({ block: "start" }); - return true; - } - - return false; - } - - function stop() { - window.clearInterval(timer); - observer.disconnect(); - } - - return stop; -} - -function syncVisibleApiSection(sectionId: string) { - let attempts = 0; - const root = document.querySelector(".api-reference-page"); - const sectionIds = apiReferenceNavGroups.flatMap((group) => - group.items.map((item) => item.sectionId), - ); - - const timer = window.setInterval(() => { - attempts += 1; - if (syncSections() || attempts >= 20) { - stop(); - } - }, 100); - - const observer = new MutationObserver(() => { - if (syncSections()) { - stop(); - } - }); - - if (root) { - observer.observe(root, { - attributes: false, - childList: true, - subtree: true, - }); - } - - window.requestAnimationFrame(() => { - if (syncSections()) { - stop(); - } - }); - - function syncSections() { - let renderedCount = 0; - - for (const currentSectionId of sectionIds) { - const section = document.getElementById(currentSectionId); - if (!section) { - continue; - } - - renderedCount += 1; - const isSelected = currentSectionId === sectionId; - const shouldHide = !isSelected; - if (section.hidden !== shouldHide) { - section.hidden = shouldHide; - } - } - - return renderedCount === sectionIds.length; - } - - function stop() { - window.clearInterval(timer); - observer.disconnect(); - } - - return stop; -} - -function renderEndpointLines() { - let attempts = 0; - const root = document.querySelector(".api-reference-page"); - const items = apiReferenceNavGroups.flatMap((group) => group.items); - - const timer = window.setInterval(() => { - attempts += 1; - if (syncEndpointLines() || attempts >= 20) { - stop(); - } - }, 100); - - const observer = new MutationObserver(() => { - if (syncEndpointLines()) { - stop(); - } - }); - - if (root) { - observer.observe(root, { childList: true, subtree: true }); - } - - window.requestAnimationFrame(() => { - if (syncEndpointLines()) { - stop(); - } - }); - - function syncEndpointLines() { - let renderedCount = 0; - const renderableItems = items.filter((item) => item.method && item.path); - - for (const item of items) { - if (!item.method || !item.path) { - continue; - } - - const section = document.getElementById(item.sectionId); - const header = section?.querySelector(".operation-header"); - if (!header) { - continue; - } - - const endpoint = item.endpointDisplay ?? item.path; - const existing = section?.querySelector( - ".calle-endpoint-line", - ); - if (existing) { - const method = existing.querySelector(".method-badge"); - const path = existing.querySelector("code"); - if (!method || !path) { - existing.remove(); - } else { - if (method.textContent !== item.method) { - method.textContent = item.method; - } - if (path.textContent !== endpoint) { - path.textContent = endpoint; - } - renderedCount += 1; - continue; - } - } - - const line = document.createElement("div"); - line.className = "calle-endpoint-line"; - - const method = document.createElement("span"); - method.className = `method-badge method-${item.method.toLowerCase()}`; - method.textContent = item.method; - - const path = document.createElement("code"); - path.textContent = endpoint; - - line.append(method, path); - header.after(line); - renderedCount += 1; - } - - return renderedCount === renderableItems.length; - } - - function stop() { - window.clearInterval(timer); - observer.disconnect(); - } - - return stop; -} - -function openSuccessResponseInSection(sectionId: string) { - let attempts = 0; - const root = document.querySelector(".api-reference-page"); - - const timer = window.setInterval(() => { - attempts += 1; - if (openSuccessResponse() || attempts >= 20) { - stop(); - } - }, 100); - - const observer = new MutationObserver(() => { - if (openSuccessResponse()) { - stop(); - } - }); - - if (root) { - observer.observe(root, { childList: true, subtree: true }); - } - - window.requestAnimationFrame(() => { - if (openSuccessResponse()) { - stop(); - } - }); - - function openSuccessResponse() { - const section = document.getElementById(sectionId); - if (!section) { - return false; - } - - const responseButton = section.querySelector( - 'ul[aria-label="Responses"] > li:first-child > button', - ); - if (!responseButton) { - return false; - } - - if (responseButton.getAttribute("aria-expanded") === "true") { - return true; - } - - if (!responseButton.textContent?.includes("200")) { - return false; - } - - responseButton.click(); - return true; - } - - function stop() { - window.clearInterval(timer); - observer.disconnect(); - } - - return stop; -} diff --git a/src/routes/GuidePage.tsx b/src/routes/GuidePage.tsx deleted file mode 100644 index f21093d..0000000 --- a/src/routes/GuidePage.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { MDXProvider } from "@mdx-js/react"; -import { guideComponents } from "../guide-content"; -import { mdxComponents } from "../mdx-components"; -import type { ComponentType } from "react"; -import type { GuideSlug } from "../docs-nav"; - -type GuidePageProps = { - slug: GuideSlug; -}; - -export function GuidePage({ slug }: GuidePageProps) { - const GuideComponent = guideComponents[slug] as ComponentType<{ - components?: typeof mdxComponents; - }>; - - return ( -
- - - -
- ); -} diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..4faa89c --- /dev/null +++ b/src/styles.css @@ -0,0 +1,430 @@ +:root { + --top-header-height: 4.5rem; + --top-nav-height: 3rem; + --side-nav-width: 18.75rem; + --padding-content-top: 2.5rem; + --sidecar-grid-cols: minmax(0, 42rem) minmax(13rem, 15rem); + --call-signal: #0a9f90; + --code-background: #0b0f14; + --code-chrome: #11161d; + --code-border: #242b35; + --code-foreground: #e6edf3; + --code-muted: #a4afbd; +} + +.dark { + --call-signal: #35c9b8; +} + +body { + min-width: 320px; + color: var(--foreground); + font-family: + Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, + "Segoe UI", sans-serif; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; +} + +code, +kbd, +pre, +samp { + font-family: + "SFMono-Regular", "Cascadia Code", "Roboto Mono", Consolas, + "Liberation Mono", monospace; +} + +header[data-pagefind-ignore="all"] { + background: color-mix(in srgb, var(--background) 96%, transparent); +} + +header[data-pagefind-ignore="all"]::after { + display: none; +} + +header[data-pagefind-ignore="all"] img { + object-fit: contain; +} + +.dark header a.shrink-0 img { + filter: invert(1); +} + +header[data-pagefind-ignore="all"] nav[aria-label="Main"] a { + color: var(--muted-foreground); + font-weight: 500; +} + +header[data-pagefind-ignore="all"] + nav[aria-label="Main"] + a[href="https://dashboard.heycall-e.com/"] { + height: 2.25rem; + padding-inline: 1rem; + border-radius: 999px; + background: var(--primary); + color: var(--primary-foreground); + box-shadow: 0 1px 2px color-mix(in srgb, var(--primary) 24%, transparent); +} + +header[data-pagefind-ignore="all"] + nav[aria-label="Main"] + a[href="https://dashboard.heycall-e.com/"]:hover { + background: color-mix(in srgb, var(--primary) 88%, black); + color: var(--primary-foreground); +} + +nav[class*="overflow-y-auto"][class*="shrink-0"] { + padding-top: 1.5rem; +} + +nav[class*="overflow-y-auto"][class*="shrink-0"] a { + min-height: 2rem; + color: var(--muted-foreground); +} + +nav[class*="overflow-y-auto"][class*="shrink-0"] a:hover { + color: var(--foreground); +} + +nav[class*="overflow-y-auto"][class*="shrink-0"] a[aria-current="page"] { + color: var(--foreground); + box-shadow: inset 2px 0 0 var(--call-signal); +} + +@media (min-width: 64rem) { + nav[class*="overflow-y-auto"][class*="shrink-0"] + :is( + a[href="/quickstart"], + a[href="/authentication"], + a[href="/calls"], + a[href="/webhooks"], + a[href="/errors"], + a[href="/sdks"], + a[href="/changelog"] + ) { + display: grid; + min-height: 3.5rem; + margin-block: 0.1875rem; + padding: 0.625rem 0.75rem; + align-content: center; + gap: 0.125rem; + border: 1px solid transparent; + color: color-mix(in srgb, var(--foreground) 86%, transparent); + font-size: 0.875rem; + font-weight: 700; + line-height: 1.3; + } + + nav[class*="overflow-y-auto"][class*="shrink-0"] + :is( + a[href="/quickstart"], + a[href="/authentication"], + a[href="/calls"], + a[href="/webhooks"], + a[href="/errors"], + a[href="/sdks"], + a[href="/changelog"] + ) + > span { + width: 100%; + overflow: visible; + white-space: normal; + } + + nav[class*="overflow-y-auto"][class*="shrink-0"] + :is( + a[href="/quickstart"], + a[href="/authentication"], + a[href="/calls"], + a[href="/webhooks"], + a[href="/errors"], + a[href="/sdks"], + a[href="/changelog"] + )::after { + color: var(--muted-foreground); + font-size: 0.75rem; + font-weight: 400; + line-height: 1.35; + } + + nav[class*="overflow-y-auto"][class*="shrink-0"] + :is( + a[href="/quickstart"], + a[href="/authentication"], + a[href="/calls"], + a[href="/webhooks"], + a[href="/errors"], + a[href="/sdks"], + a[href="/changelog"] + )[aria-current="page"] { + border-color: color-mix( + in srgb, + var(--call-signal) 24%, + var(--border) + ); + } + + nav[class*="overflow-y-auto"][class*="shrink-0"] + a[href="/quickstart"]::after { + content: "Create your first call."; + } + + nav[class*="overflow-y-auto"][class*="shrink-0"] + a[href="/authentication"]::after { + content: "Secure API key setup."; + } + + nav[class*="overflow-y-auto"][class*="shrink-0"] a[href="/calls"]::after { + content: "Create, track, and read calls."; + } + + nav[class*="overflow-y-auto"][class*="shrink-0"] a[href="/webhooks"]::after { + content: "Receive terminal call events."; + } + + nav[class*="overflow-y-auto"][class*="shrink-0"] a[href="/errors"]::after { + content: "Recover from stable API errors."; + } + + nav[class*="overflow-y-auto"][class*="shrink-0"] a[href="/sdks"]::after { + content: "TypeScript and Python packages."; + } + + nav[class*="overflow-y-auto"][class*="shrink-0"] + a[href="/changelog"]::after { + content: "Product and SDK updates."; + } +} + +[data-pagefind-filter="section:markdown"] > .typography { + max-width: 42rem; + margin-inline: 0; +} + +[data-pagefind-filter="section:markdown"] { + justify-content: start; +} + +.typography { + color: color-mix(in srgb, var(--foreground) 92%, transparent); + font-size: 1rem; + line-height: 1.75; +} + +.typography > header.flow-root > .text-sm.font-semibold.text-primary { + display: none; +} + +.typography h1 { + color: var(--foreground); + font-size: 2.25rem; + font-weight: 800; + line-height: 1.25; + letter-spacing: -0.025em; +} + +.typography h2 { + margin-top: 2.5rem; + color: var(--foreground); + font-size: 1.5rem; + font-weight: 700; + line-height: 1.34; + letter-spacing: -0.02em; +} + +.typography h3 { + margin-top: 2rem; + color: var(--foreground); + font-size: 1.125rem; + font-weight: 700; + line-height: 1.45; + letter-spacing: -0.01em; +} + +.typography p, +.typography li { + line-height: 1.75; +} + +.typography :where(p, li, td, blockquote) a { + color: color-mix(in srgb, var(--primary) 82%, var(--foreground)); + text-decoration-color: color-mix(in srgb, var(--primary) 38%, transparent); + text-decoration-thickness: 1px; + text-underline-offset: 0.18em; +} + +.typography :where(p, li, td, blockquote) a:hover { + color: var(--primary); + text-decoration-color: var(--primary); +} + +.typography code.inline { + border-color: transparent; + border-radius: 0.25rem; + background: var(--muted); + color: var(--foreground); +} + +.typography pre > .code-block-wrapper { + overflow: hidden; + border-color: var(--code-border); + border-radius: 0.5rem; + background: var(--code-background); + color: var(--code-foreground); + box-shadow: none; +} + +.typography pre > .code-block-wrapper > div:first-child { + border-bottom: 1px solid var(--code-border); + background: var(--code-chrome); + color: var(--code-muted); +} + +.typography .code-block, +.typography code.shiki { + background-color: var(--code-background) !important; +} + +code.shiki.not-inline { + --shiki-light-bg: var(--code-background) !important; + --shiki-dark-bg: var(--code-background) !important; +} + +.typography pre > .code-block-wrapper .fill-foreground { + fill: var(--code-foreground); +} + +.typography pre > .code-block-wrapper button:hover { + background: #1b222c; + color: var(--code-foreground); +} + +.typography pre > .code-block-wrapper button:focus-visible { + outline: 2px solid var(--call-signal); + outline-offset: -2px; +} + +.typography .code-block { + font-size: 0.8125rem; + line-height: 1.6; +} + +aside[class*="overflow-y-auto"] { + color: var(--muted-foreground); +} + +aside[class*="overflow-y-auto"] a:hover { + color: var(--foreground); +} + +.docs-index { + display: grid; + width: min(42rem, calc(100% - 2rem)); + min-height: 100vh; + margin: 0 auto; + align-content: center; + gap: 1rem; +} + +.docs-index__eyebrow { + margin: 0; + color: var(--primary); + font-size: 0.75rem; + font-weight: 750; + letter-spacing: 0.12em; + text-transform: uppercase; +} + +.docs-index h1, +.docs-index p { + margin: 0; +} + +.docs-index h1 { + color: var(--foreground); + font-size: clamp(2.25rem, 8vw, 4.5rem); + line-height: 0.98; + letter-spacing: -0.04em; +} + +.docs-index > p:not(.docs-index__eyebrow) { + max-width: 34rem; + color: var(--muted-foreground); + font-size: 1.125rem; +} + +.docs-index nav { + display: flex; + flex-wrap: wrap; + gap: 0.75rem; + margin-top: 0.5rem; +} + +.docs-index a { + padding: 0.65rem 0.9rem; + border: 1px solid var(--primary); + border-radius: 0.5rem; + color: var(--primary); + font-weight: 700; + text-decoration: none; +} + +.docs-index a:first-child { + background: var(--primary); + color: var(--primary-foreground); +} + +.docs-index a:focus-visible { + outline: 2px solid var(--ring); + outline-offset: 2px; +} + +@media (min-width: 64rem) { + header[data-pagefind-ignore="all"] button:has(.lucide-search) { + width: min(43vw, 34rem); + height: 2.25rem; + border-color: var(--border); + background: var(--background); + font-weight: 500; + } +} + +@media (max-width: 63.999rem) { + :root { + --top-header-height: 4rem; + --padding-content-top: 2rem; + } + + .typography h1 { + font-size: 2rem; + } + + .typography .code-block { + font-size: 0.75rem; + } +} + +@media (max-width: 22.5rem) { + .typography [aria-label="Page actions"] button:first-of-type span { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; + } +} + +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + scroll-behavior: auto !important; + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } +} diff --git a/src/styles/api-reference.css b/src/styles/api-reference.css deleted file mode 100644 index 5a7332a..0000000 --- a/src/styles/api-reference.css +++ /dev/null @@ -1,283 +0,0 @@ -.api-reference-page .scalar-app { - --refs-sidebar-width: 0px; - --scalar-color-accent: #0f766e; - --scalar-radius: 6px; - --scalar-radius-lg: 8px; - --scalar-radius-xl: 10px; - --scalar-font: - Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, - "Segoe UI", sans-serif; - --scalar-font-code: - "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; - border: 0; - border-radius: 0; - min-height: calc(100vh - 56px); - overflow: visible; -} - -.api-reference-page .t-doc__sidebar, -.api-reference-page .t-doc__header { - display: none !important; -} - -.api-reference-page .references-rendered { - grid-area: rendered; - min-width: 0; - width: 100%; -} - -.api-reference-page .section-container { - padding-right: 0; - padding-left: 0; -} - -.api-reference-page .section { - border-bottom: 1px solid #f0f2f4; - width: 100%; - max-width: none; - padding-right: 0; - padding-left: 0; -} - -.api-reference-page .section[hidden] { - display: none !important; -} - -.api-reference-page .section-content { - width: 100%; - max-width: none; - margin: 0; - padding: 42px clamp(28px, 3vw, 56px) 58px; -} - -.api-reference-page .operation-header { - align-items: flex-start; - margin-bottom: 12px; -} - -.api-reference-page .section-header-label { - color: #202124; - font-size: 38px; - line-height: 1.1; - letter-spacing: 0; -} - -.calle-endpoint-line { - display: flex; - align-items: center; - gap: 10px; - min-width: 0; - margin-bottom: 34px; - color: #6b7280; -} - -.calle-endpoint-line code { - overflow: hidden; - color: #6b7280; - font-family: - "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; - font-size: 15px; - text-overflow: ellipsis; - white-space: nowrap; -} - -.api-reference-page .section-columns { - align-items: flex-start; - gap: clamp(32px, 3vw, 64px); - justify-content: stretch; -} - -.api-reference-page .section-column:first-child { - flex: 1 1 520px; - min-width: 0; - max-width: 760px; -} - -.api-reference-page .section-column:last-child { - flex: 1.1 1 520px; - min-width: min(480px, 100%); - max-width: none; - max-height: calc(100vh - 88px); - overflow-y: auto; - overscroll-behavior: contain; - position: sticky; - scrollbar-color: #cbd5e1 transparent; - scrollbar-gutter: stable; - scrollbar-width: thin; - top: 72px; -} - -.api-reference-page .scalar-card { - border-color: #e5e7eb; - border-radius: 12px; - box-shadow: none; -} - -.api-reference-page .scalar-card.dark-mode { - overflow: hidden; - border-color: #111827; - background: #111827; - box-shadow: 0 22px 48px rgba(15, 23, 42, 0.14); -} - -.api-reference-page .scalar-card.dark-mode pre, -.api-reference-page .scalar-card.dark-mode code { - font-family: - "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; - font-size: 12px; - line-height: 1.65; -} - -.api-reference-page .response-card { - overflow: hidden; - border-color: #111827; - background: #111827; - color: #d1d5db; - box-shadow: 0 22px 48px rgba(15, 23, 42, 0.14); -} - -.api-reference-page .response-card .scalar-card-header { - border-color: #1f2937; - background: #151923; - color: #cbd5e1; -} - -.api-reference-page .response-card .scalar-card-footer { - border-color: #1f2937; - background: #111827; - color: #cbd5e1; -} - -.api-reference-page .response-card .tab { - color: #94a3b8; -} - -.api-reference-page .response-card .tab-selected { - color: #34d399; - font-weight: 800; -} - -.api-reference-page .response-card .tab:not(.tab-selected), -.api-reference-page .response-card .scalar-card-checkbox { - display: none; -} - -.api-reference-page - ul[aria-label="Responses"] - > .parameter-item:not(:first-child) { - display: none; -} - -.api-reference-page .response-card .scalar-code-block { - background: #0b0f19; - color: #cbd5e1; -} - -.api-reference-page .response-card pre, -.api-reference-page .response-card code, -.api-reference-page .scalar-card.dark-mode pre, -.api-reference-page .scalar-card.dark-mode code { - color: #cbd5e1; -} - -.api-reference-page .response-card .hljs, -.api-reference-page .scalar-card.dark-mode .hljs { - color: #cbd5e1; -} - -.api-reference-page .response-card .hljs-attr, -.api-reference-page .scalar-card.dark-mode .hljs-attr { - color: #7dd3fc; -} - -.api-reference-page .response-card .hljs-string, -.api-reference-page .scalar-card.dark-mode .hljs-string { - color: #86efac; -} - -.api-reference-page .response-card .hljs-number, -.api-reference-page .scalar-card.dark-mode .hljs-number { - color: #facc15; -} - -.api-reference-page .response-card .hljs-literal, -.api-reference-page .response-card .hljs-keyword, -.api-reference-page .scalar-card.dark-mode .hljs-literal, -.api-reference-page .scalar-card.dark-mode .hljs-keyword { - color: #f0abfc; -} - -.api-reference-page .response-card .hljs-punctuation, -.api-reference-page .scalar-card.dark-mode .hljs-punctuation { - color: #94a3b8; -} - -.api-reference-page .response-card .scalar-code-copy { - background: #1f2937; - color: #cbd5e1; -} - -.api-reference-page .parameter-item-trigger, -.api-reference-page .schema-card-title { - border-radius: 8px; -} - -.api-reference-page #api-1\/models { - display: none; -} - -.api-reference-page #api-1\/tag\/calls, -.api-reference-page #api-1\/tag\/webhooks { - display: none; -} - -.api-reference-page .security-requirement-badge { - color: #202124; -} - -/* Hide interactive API client controls while keeping read-only endpoint docs visible. */ -.api-reference-page [data-addressbar-action="send"], -.api-reference-page .response-section-content { - display: none; -} - -@media (max-width: 1180px) { - .api-reference-page .section-columns { - flex-direction: column; - } - - .api-reference-page .section-column, - .api-reference-page .section-column:last-child { - width: 100%; - min-width: 0; - max-width: 100%; - max-height: none; - overflow: visible; - position: static; - scrollbar-gutter: auto; - } - - .api-reference-page .section-column:first-child { - max-width: 100%; - } -} - -@media (max-width: 1080px) { - .api-reference-page .section-content { - padding: 34px 32px 50px; - } - - .api-reference-page .section-header-label { - font-size: 30px; - } - - .api-reference-page .section-columns { - gap: 24px; - } -} - -@media (max-width: 760px) { - .api-reference-page .section-content { - padding: 28px 18px 44px; - } -} diff --git a/src/styles/globals.css b/src/styles/globals.css deleted file mode 100644 index 76d7e5e..0000000 --- a/src/styles/globals.css +++ /dev/null @@ -1,581 +0,0 @@ -:root { - color: #171717; - background: #ffffff; - font-family: - Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", - sans-serif; - font-size: 16px; - line-height: 1.5; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - --color-border: #e5e7eb; - --color-muted: #6b7280; - --color-accent: #0f766e; - --color-accent-soft: #ecfdf5; - --color-warning: #b45309; - --content-width: 820px; -} - -* { - box-sizing: border-box; -} - -body { - margin: 0; - min-width: 320px; -} - -a { - color: inherit; -} - -.docs-app { - min-height: 100vh; - background: #ffffff; -} - -.topbar { - position: sticky; - top: 0; - z-index: 20; - display: flex; - align-items: center; - justify-content: flex-start; - height: 56px; - padding: 0 28px; - border-bottom: 1px solid var(--color-border); - background: rgba(255, 255, 255, 0.96); - backdrop-filter: blur(12px); -} - -.brand, -.topnav, -.topnav a { - display: flex; - align-items: center; -} - -.brand { - flex: 0 0 auto; - text-decoration: none; -} - -.brand-logo { - display: block; - width: auto; - height: 32px; -} - -.topnav { - align-self: stretch; - gap: 2px; - margin-left: 28px; -} - -.topnav a { - position: relative; - height: 56px; - padding: 0 12px; - border-bottom: 2px solid transparent; - color: #404040; - font-size: 15px; - font-weight: 600; - text-decoration: none; - white-space: nowrap; -} - -.topnav a:hover { - color: #171717; -} - -.topnav a.active { - border-bottom-color: var(--color-accent); - color: var(--color-accent); -} - -.docs-frame { - display: grid; - grid-template-columns: 280px minmax(0, 1fr) 220px; - gap: 32px; - width: min(1440px, 100%); - margin: 0 auto; - padding: 28px 28px 64px; -} - -.sidebar, -.right-rail { - position: sticky; - top: 84px; - align-self: start; - max-height: calc(100vh - 104px); - overflow: auto; -} - -.sidebar-section + .sidebar-section { - margin-top: 28px; -} - -.sidebar-label, -.page-toc-title { - margin-bottom: 8px; - color: var(--color-muted); - font-size: 12px; - font-weight: 700; - letter-spacing: 0; - text-transform: uppercase; -} - -.sidebar a { - display: block; - padding: 9px 10px; - border: 1px solid transparent; - border-radius: 8px; - color: #262626; - text-decoration: none; -} - -.sidebar a:hover, -.sidebar a.active { - border-color: #99f6e4; - background: var(--color-accent-soft); -} - -.sidebar span { - display: block; - font-size: 14px; - font-weight: 700; -} - -.sidebar small { - display: block; - margin-top: 2px; - color: var(--color-muted); - font-size: 12px; -} - -.content-shell { - min-width: 0; -} - -.guide-article { - width: min(var(--content-width), 100%); -} - -.guide-article h1 { - margin: 0 0 16px; - color: #111827; - font-size: 40px; - line-height: 1.1; - letter-spacing: 0; -} - -.guide-article h2 { - margin: 40px 0 12px; - color: #111827; - font-size: 24px; - letter-spacing: 0; -} - -.guide-article h3 { - margin: 28px 0 10px; - color: #111827; - font-size: 18px; - letter-spacing: 0; -} - -.guide-article h2[id], -.guide-article h3[id] { - scroll-margin-top: 84px; -} - -.guide-article p, -.guide-article li { - color: #404040; -} - -.guide-article p { - margin: 0 0 16px; -} - -.guide-article ul { - padding-left: 22px; -} - -.guide-article table { - width: 100%; - margin: 16px 0 24px; - border-collapse: collapse; - border: 1px solid var(--color-border); - border-radius: 8px; - overflow: hidden; - font-size: 14px; -} - -.guide-article th, -.guide-article td { - padding: 12px 14px; - border-bottom: 1px solid var(--color-border); - text-align: left; - vertical-align: top; -} - -.guide-article th { - background: #f9fafb; - color: #111827; - font-size: 12px; - font-weight: 700; - text-transform: uppercase; -} - -.guide-article tr:last-child td { - border-bottom: 0; -} - -.guide-article td { - color: #404040; -} - -.guide-article td a { - color: var(--color-accent); - font-weight: 700; - text-decoration-thickness: 1px; - text-underline-offset: 3px; -} - -.lead { - color: var(--color-muted); - font-size: 18px; -} - -.doc-badge { - display: inline-flex; - align-items: center; - margin: 0 8px 8px 0; - padding: 4px 8px; - border: 1px solid #99f6e4; - border-radius: 999px; - background: var(--color-accent-soft); - color: #115e59; - font-size: 12px; - font-weight: 700; -} - -.code-block { - position: relative; - margin: 16px 0 24px; -} - -.code-block pre { - overflow-x: auto; - margin: 0; - padding: 20px 18px; - border: 1px solid #1f2937; - border-radius: 8px; - background: #111827; - color: #d1d5db; - font-size: 13px; - line-height: 1.6; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04); -} - -.code-block code { - font-family: - "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; -} - -.code-token { - color: inherit; -} - -.token-keyword, -.token-shell-command { - color: #67e8f9; -} - -.token-string { - color: #86efac; -} - -.token-key { - color: #fca5a5; -} - -.token-function { - color: #c4b5fd; -} - -.token-number, -.token-shell-flag { - color: #facc15; -} - -.token-constant, -.token-env { - color: #f0abfc; -} - -.token-comment { - color: #94a3b8; -} - -.token-punctuation { - color: #cbd5e1; -} - -.code-copy-button { - position: absolute; - top: 8px; - right: 8px; - border: 1px solid #525252; - border-radius: 6px; - background: #262626; - color: #f5f5f5; - cursor: pointer; - font-size: 12px; - font-weight: 700; - padding: 4px 8px; -} - -.page-toc { - display: grid; - gap: 8px; - font-size: 13px; -} - -.page-toc a { - color: #525252; - text-decoration: none; -} - -.page-toc a:hover { - color: var(--color-accent); -} - -.api-reference-shell { - display: grid; - grid-template-columns: 316px minmax(0, 1fr); - min-height: calc(100vh - 56px); - border-top: 1px solid var(--color-border); - background: #ffffff; -} - -.api-reference-sidebar { - position: sticky; - top: 56px; - height: calc(100vh - 56px); - overflow: auto; - border-right: 1px solid var(--color-border); - background: #ffffff; - padding: 34px 16px 48px; -} - -.api-reference-nav-group + .api-reference-nav-group { - margin-top: 30px; -} - -.api-reference-nav-label { - margin: 0 0 12px; - color: #262626; - font-size: 13px; - font-weight: 800; - letter-spacing: 0; -} - -.api-reference-nav-group a { - display: grid; - grid-template-columns: auto minmax(0, 1fr); - gap: 4px 12px; - align-items: center; - min-height: 42px; - padding: 8px 12px; - border: 1px solid transparent; - border-radius: 8px; - color: #262626; - text-decoration: none; - transition: - background 120ms ease, - border-color 120ms ease, - color 120ms ease; -} - -.api-reference-nav-group a:hover { - border-color: #99f6e4; - background: #f0fdfa; -} - -.api-reference-nav-group a.active { - border-color: #7dd3c7; - background: #dff8ef; - color: #04786c; -} - -.api-reference-nav-title { - overflow: hidden; - font-size: 14px; - font-weight: 700; - text-overflow: ellipsis; - white-space: nowrap; -} - -.api-reference-nav-path { - grid-column: 2; - overflow: hidden; - color: var(--color-muted); - font-family: - "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; - font-size: 12px; - text-overflow: ellipsis; - white-space: nowrap; -} - -.method-badge { - display: inline-flex; - align-items: center; - justify-content: center; - min-width: 38px; - height: 22px; - border-radius: 5px; - font-size: 11px; - font-weight: 800; - line-height: 1; -} - -.method-get { - background: #dcfce7; - color: #15803d; -} - -.method-post { - background: #dbeafe; - color: #1d4ed8; -} - -.api-reference-page { - min-width: 0; - background: #ffffff; -} - -.api-reference-loading-row, -.api-reference-loading-title, -.api-reference-loading-line, -.api-reference-loading-card { - border-radius: 8px; - background: linear-gradient(90deg, #f3f4f6, #e5e7eb, #f3f4f6); - background-size: 180% 100%; - animation: loading-pulse 1.3s ease-in-out infinite; -} - -.api-reference-loading-row { - height: 42px; - margin-bottom: 8px; -} - -.api-reference-loading-panel { - width: min(820px, calc(100vw - 380px)); - padding: 72px 48px; -} - -.api-reference-loading-kicker { - margin-bottom: 14px; - color: var(--color-accent); - font-size: 14px; - font-weight: 700; -} - -.api-reference-loading-title { - width: min(420px, 80%); - height: 44px; - margin-bottom: 20px; -} - -.api-reference-loading-line { - width: min(620px, 92%); - height: 18px; - margin-bottom: 40px; -} - -.api-reference-loading-card { - width: min(760px, 100%); - height: 260px; -} - -@keyframes loading-pulse { - from { - background-position: 120% 0; - } - - to { - background-position: -80% 0; - } -} - -@media (max-width: 1080px) { - .docs-frame { - grid-template-columns: 240px minmax(0, 1fr); - } - - .api-reference-shell { - grid-template-columns: 278px minmax(0, 1fr); - } - - .right-rail { - display: none; - } -} - -@media (max-width: 760px) { - .topbar { - align-items: flex-start; - flex-direction: column; - height: auto; - gap: 0; - padding: 14px 18px 0; - } - - .topnav { - width: 100%; - margin-left: 0; - overflow-x: auto; - } - - .topnav a { - height: 44px; - } - - .docs-frame { - display: block; - padding: 20px 18px 48px; - } - - .api-reference-shell { - display: block; - } - - .sidebar { - position: static; - max-height: none; - margin-bottom: 28px; - } - - .api-reference-sidebar { - position: static; - height: auto; - border-bottom: 1px solid var(--color-border); - border-right: 0; - padding: 18px; - } - - .api-reference-nav-group { - min-width: 220px; - } - - .api-reference-sidebar nav { - display: flex; - gap: 18px; - overflow-x: auto; - } - - .guide-article h1 { - font-size: 32px; - } -} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts deleted file mode 100644 index ced3661..0000000 --- a/src/vite-env.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// - -declare module "*.mdx" { - import type { ComponentType } from "react"; - - const MDXComponent: ComponentType; - export default MDXComponent; -} diff --git a/tests/docs-site.spec.ts b/tests/docs-site.spec.ts index 00a0b0a..4792ec3 100644 --- a/tests/docs-site.spec.ts +++ b/tests/docs-site.spec.ts @@ -1,341 +1,206 @@ -import { expect, type Page, test } from "@playwright/test"; -import path from "node:path"; +import { expect, test } from "@playwright/test"; -test("renders the default quickstart page inside the docs shell", async ({ - page, -}) => { - await page.goto("/"); +const guides = [ + { path: "/quickstart", heading: "Quickstart" }, + { path: "/authentication", heading: "Authentication" }, + { path: "/calls", heading: "Calls" }, + { path: "/webhooks", heading: "Webhooks" }, + { path: "/errors", heading: "Errors" }, + { path: "/sdks", heading: "SDKs" }, + { path: "/changelog", heading: "What's New" }, +]; + +test("serves prerendered guides on clean URLs", async ({ page, request }) => { + const response = await request.get("/quickstart"); + expect(response.status()).toBe(200); + expect(response.headers()["content-type"]).toContain("text/html"); + expect(await response.text()).toContain('data-pagefind-body="true"'); + + await page.goto("/quickstart"); await expect( page.getByRole("heading", { name: "Quickstart" }), ).toBeVisible(); await expect( - page.getByRole("link", { name: "API Reference" }).first(), - ).toBeVisible(); - await expect(page.getByRole("link", { name: "Webhooks" })).toBeVisible(); + page.getByRole("link", { name: "Authentication", exact: true }).first(), + ).toHaveAttribute("href", "/authentication"); await expect( - page.locator(".code-block").filter({ hasText: "pnpm add @call-e/calle" }) - .first(), - ).toBeVisible(); + page.getByRole("link", { name: "API Reference", exact: true }).first(), + ).toHaveAttribute("href", "/api-reference"); await expect( - page.locator(".code-block").filter({ hasText: "pip install calle-ai" }) - .first(), + page.locator("pre").filter({ hasText: "pnpm add @call-e/calle" }).first(), ).toBeVisible(); - await expect(page.getByText("@call-e/calle@beta")).toHaveCount(0); - await expect(page.getByText("Python SDK package is in preparation.")) - .toHaveCount(0); - await expect(page.locator(".doc-badge", { hasText: "Phase 1" })) - .toHaveCount(0); - await expect(page.getByRole("link", { name: "Authentication", exact: true })) - .toHaveAttribute("href", "#/authentication"); -}); - -test("links the header brand back to the CALL-E website", async ({ page }) => { - await page.goto("/"); - - const brand = page.getByRole("link", { name: "Go to CALL-E website" }); - await expect(brand).toHaveAttribute("href", "https://www.heycall-e.com/"); - await expect(brand.getByRole("img", { name: "CALL-E" })).toBeVisible(); -}); - -test("publishes the official CALL-E favicon metadata", async ({ page }) => { - await page.goto("/"); - - await expect(page.locator('link[rel="icon"]')).toHaveAttribute( - "href", - "./favicon.svg", - ); - await expect(page.locator('link[rel="apple-touch-icon"]')).toHaveAttribute( - "href", - "./favicon.svg", + await expect(page.locator("code.shiki.not-inline").first()).toHaveCSS( + "background-color", + "rgb(11, 15, 20)", ); - await expect(page.locator('meta[name="msapplication-TileImage"]')) - .toHaveAttribute("content", "./favicon.svg"); -}); - -test("shows minimal required fields in quickstart create examples", async ({ - page, -}) => { - await page.goto("/"); - - const taskOnlyJson = page.locator(".code-block", { - hasText: /"task":\s*"[^"]*[^"]*"/, - }).first(); - await expect(taskOnlyJson).toBeVisible(); - await expect(taskOnlyJson).not.toContainText('"recipient"'); - await expect(taskOnlyJson).not.toContainText('"recipients"'); - - await expect(page.locator(".code-block", { - hasText: /task:\s*"[^"]*[^"]*"/, - }).first()).toBeVisible(); - await expect(page.locator(".code-block", { - hasText: /task="[^"]*[^"]*"/, - }).first()).toBeVisible(); - await expect(page.getByText("call task").first()).toBeVisible(); - await expect(page.getByText('region: "US"')).toHaveCount(0); - await expect(page.getByText('locale: "en-US"')).toHaveCount(0); - await expect(page.getByText("workflow_run_id")).toHaveCount(0); - await expect(page.getByText("idempotencyKey")).toHaveCount(0); - await expect(page.getByText("idempotency_key")).toHaveCount(0); - await expect(page.getByText("additionalProperties")).toHaveCount(0); }); -test("shows quickstart result examples", async ({ page }) => { - await page.goto("/"); +test("uses the roomy CALL-E guide navigation on desktop", async ({ page }) => { + await page.goto("/quickstart"); - await expect( - page.locator(".code-block", { - hasText: /"status": "completed"[\s\S]*"structuredResult"[\s\S]*"can_hear_clearly"/, - }), - ).toBeVisible(); - await expect( - page.locator(".code-block", { - hasText: /"status": "completed"[\s\S]*"taskCompleted"[\s\S]*"completionConfidence"[\s\S]*"evidence"/, - }), - ).toBeVisible(); - await expect( - page.locator(".code-block", { - hasText: /"status": "completed"[\s\S]*"structured_result"[\s\S]*"can_hear_clearly"/, - }), - ).toBeVisible(); - await expect( - page.locator(".code-block", { - hasText: /"status": "completed"[\s\S]*"task_completed"[\s\S]*"completion_confidence"[\s\S]*"evidence"/, - }), - ).toBeVisible(); - await expect(page.getByText("resultValidation")).toHaveCount(0); - await expect(page.getByText("result_validation")).toHaveCount(0); -}); - -test("positions the primary navigation beside the brand", async ({ page }) => { - await page.goto("/"); + const activeGuide = page.locator( + 'nav[class*="overflow-y-auto"][class*="shrink-0"] a[href="/quickstart"]', + ); + await expect(activeGuide).toBeVisible(); - const brandRight = await page.locator(".brand").evaluate((element) => { - return element.getBoundingClientRect().right; - }); - const navigationLeft = await page.locator(".topnav").evaluate((element) => { - return element.getBoundingClientRect().left; + const activeGuideHeight = await activeGuide.evaluate((element) => { + return element.getBoundingClientRect().height; }); - const activeBottom = await page.locator(".topnav a.active").evaluate((element) => { - const style = window.getComputedStyle(element); - return { - borderBottomColor: style.borderBottomColor, - borderBottomWidth: style.borderBottomWidth, - }; + const descriptionContent = await activeGuide.evaluate((element) => { + return window.getComputedStyle(element, "::after").content; }); - expect(navigationLeft).toBeLessThan(brandRight + 40); - expect(activeBottom.borderBottomColor).toBe("rgb(15, 118, 110)"); - expect(activeBottom.borderBottomWidth).toBe("2px"); + expect(activeGuideHeight).toBeGreaterThanOrEqual(56); + expect(descriptionContent).not.toBe("none"); + expect(descriptionContent).not.toBe('""'); }); -test("renders syntax-colored guide code blocks", async ({ page }) => { - await page.goto("/"); - - const codeBlock = page.locator(".code-block").filter({ - hasText: 'import { CalleClient } from "@call-e/calle";', - }).first(); - - const keyword = codeBlock.locator(".token-keyword", { hasText: "import" }) - .first(); - const stringToken = codeBlock.locator(".token-string", { - hasText: "@call-e/calle", - }).first(); +test("publishes non-empty Markdown and LLM discovery files", async ({ + request, +}) => { + const markdown = await request.get("/quickstart.md"); + expect(markdown.status()).toBe(200); + expect(markdown.headers()["content-type"]).toContain("text/markdown"); + expect(await markdown.text()).toMatch( + /^# Quickstart[\s\S]+pnpm add @call-e\/calle/, + ); - await expect(keyword).toBeVisible(); - await expect(stringToken).toBeVisible(); + const llms = await request.get("/llms.txt"); + expect(llms.status()).toBe(200); + const llmsText = await llms.text(); - const defaultCodeColor = await codeBlock.locator("pre").evaluate((element) => { - return window.getComputedStyle(element).color; - }); - const keywordColor = await keyword.evaluate((element) => { - return window.getComputedStyle(element).color; - }); + const llmsFull = await request.get("/llms-full.txt"); + expect(llmsFull.status()).toBe(200); + const llmsFullText = await llmsFull.text(); - expect(keywordColor).not.toBe(defaultCodeColor); -}); - -test("keeps guide examples US-specific", async ({ page }) => { - const guideHashes = ["/#/calls", "/#/sdks"]; - const nonUsExampleFragments = [ - "+8613800000000", - 'region: "CN"', - '"region": "CN"', - 'locale: "zh-CN"', - '"locale": "zh-CN"', - ]; - - for (const guideHash of guideHashes) { - await page.goto(guideHash); - await expect(page.getByText("").first()).toBeVisible(); - await expect(page.getByText("en-US").first()).toBeVisible(); - - for (const fragment of nonUsExampleFragments) { - await expect(page.getByText(fragment)).toHaveCount(0); - } + for (const guide of guides) { + expect(llmsText).toContain(`${guide.path}.md`); + expect(llmsFullText).toContain(`# ${guide.heading}`); } -}); + expect(llmsText).toContain("[API Reference](/api-reference)"); + expect(llmsText).toContain( + "[OpenAPI Specification](/openapi/calle.openapi.yaml)", + ); -test("uses phone placeholders instead of copy-pasteable example numbers", async ({ - page, -}) => { - const guideHashes = ["/", "/#/calls", "/#/webhooks", "/#/errors", "/#/sdks"]; - const realLookingExampleNumbers = [ - "+14155550100", - "+14155550101", - "+8618585062540", - ]; - - for (const guideHash of guideHashes) { - await page.goto(guideHash); - await expect(page.getByText("").or( - page.getByText(""), - ).first()).toBeVisible(); - - for (const phone of realLookingExampleNumbers) { - await expect(page.getByText(phone)).toHaveCount(0); - } - } + const missingMarkdown = await request.get("/does-not-exist.md"); + expect(missingMarkdown.status()).toBe(404); }); -test("documents call tasks with plural recipients and no legacy recipient field", async ({ - page, -}) => { - const guideHashes = ["/", "/#/calls", "/#/webhooks", "/#/sdks"]; +test("publishes crawler and OpenAPI artifacts", async ({ request }) => { + const robots = await request.get("/robots.txt"); + expect(robots.status()).toBe(200); + expect(await robots.text()).toContain( + "Sitemap: https://docs.heycall-e.com/sitemap.xml", + ); - for (const guideHash of guideHashes) { - await page.goto(guideHash); - await expect(page.getByText("call task").first()).toBeVisible(); - await expect( - page.locator(".code-block").filter({ hasText: /"recipient"\s*:\s*\{/ }), - ).toHaveCount(0); - await expect( - page.locator(".code-block").filter({ hasText: /recipient:\s*\{/ }), - ).toHaveCount(0); - await expect( - page.locator(".code-block").filter({ hasText: /recipient=\s*\{/ }), - ).toHaveCount(0); - } + const sitemap = await request.get("/sitemap.xml"); + expect(sitemap.status()).toBe(200); + const sitemapText = await sitemap.text(); + expect(sitemapText).toContain( + "https://docs.heycall-e.com/quickstart", + ); + expect(sitemapText).toContain( + "https://docs.heycall-e.com/api-reference/calls", + ); - for (const guideHash of ["/#/calls", "/#/webhooks", "/#/sdks"]) { - await page.goto(guideHash); - await expect(page.getByText("recipients").first()).toBeVisible(); - } + const openApi = await request.get("/openapi/calle.openapi.yaml"); + expect(openApi.status()).toBe(200); + const openApiText = await openApi.text(); + expect(openApiText).toContain("openapi: 3.1.0"); + expect(openApiText).toContain("/v1/calls"); + expect(openApiText).toContain("/calle/webhook"); + + const apiReference = await request.get("/api-reference"); + expect(apiReference.status()).toBe(200); + const apiReferenceText = await apiReference.text(); + expect(apiReferenceText).toContain('data-pagefind-body="true"'); + expect(apiReferenceText).toContain("CALL-E Developer API"); + expect(apiReferenceText).toContain("Developer API contract"); + expect(apiReferenceText).not.toContain( + 'window.location.href="/api-reference/', + ); }); -test("documents webhook recipient attempts", async ({ page }) => { - await page.goto("/#/webhooks"); - +test("bridges legacy hash routes to clean URLs", async ({ page }) => { + await page.goto("/#/authentication"); + await expect(page).toHaveURL(/\/authentication$/); await expect( - page.locator(".code-block").filter({ - hasText: /"recipients"[\s\S]*"attempts"[\s\S]*"provider_call_id"/, - }).first(), + page.getByRole("heading", { name: "Authentication" }), ).toBeVisible(); - await expect(page.getByText("transcript_turns").first()).toBeVisible(); + + await page.goto("/#/calls?section=idempotency"); + await expect(page).toHaveURL(/\/calls#idempotency$/); await expect( - page.locator(".code-block").filter({ - hasText: /"transcript_turns"[\s\S]*"offset_seconds"[\s\S]*"speaker"[\s\S]*"text"/, - }).first(), + page.getByRole("heading", { name: "Idempotency" }), ).toBeVisible(); -}); -test("renders all guide pages from navigation", async ({ page }) => { - const guides = [ - { - hash: "#/authentication", - heading: "Authentication", - text: "Authorization: Bearer", - }, - { hash: "#/calls", heading: "Calls", text: "result_schema" }, - { hash: "#/webhooks", heading: "Webhooks", text: "structured_result" }, - { hash: "#/errors", heading: "Errors", text: "idempotency_conflict" }, - { hash: "#/sdks", heading: "SDKs", text: "server-sdk-typescript" }, - { - hash: "#/changelog", - heading: "What's New", - text: "What's New: Developer API and server SDKs", - }, - ]; + await page.goto("/#/api-reference"); + await expect(page).toHaveURL(/\/api-reference(?:\/calls)?$/); +}); +test("renders every migrated guide from its file route", async ({ page }) => { for (const guide of guides) { - await page.goto(`/${guide.hash}`); + await page.goto(guide.path); await expect( - page.getByRole("heading", { exact: true, name: guide.heading }), + page.locator("h1").filter({ hasText: guide.heading }), ).toBeVisible(); - await expect(page.getByText(guide.text).first()).toBeVisible(); } }); -test("documents API key authentication and server-only boundaries", async ({ - page, -}) => { - await page.goto("/#/authentication"); +test("preserves CALL-E brand and favicon metadata", async ({ page }) => { + await page.goto("/quickstart"); - await expect( - page.getByRole("heading", { name: "Authentication" }), - ).toBeVisible(); - await expect(page.getByText('export CALLE_API_KEY="calle_test_key"')) - .toBeVisible(); - await expect( - page.getByRole("link", { name: "CALL-E dashboard", exact: true }), - ).toHaveAttribute("href", "https://dashboard.heycall-e.com/account/api-keys"); - await expect( - page.getByText("Authorization: Bearer $CALLE_API_KEY"), - ).toBeVisible(); - await expect( - page.getByText("Do not commit API keys, print them in logs"), - ).toBeVisible(); - await expect(page.getByText("The CALL-E SDKs are server SDKs")) + const brand = page + .locator('header a[href="https://www.heycall-e.com/"]') + .first(); + await expect(brand.getByRole("img", { name: "CALL-E" }).first()) .toBeVisible(); - await expect(page.getByText("CALLE_WEBHOOK_SECRET")).toBeVisible(); await expect( - page.getByRole("link", { name: "Webhooks", exact: true }), - ).toHaveAttribute("href", "#/webhooks"); + page.getByRole("link", { name: "Dashboard", exact: true }), + ).toHaveAttribute("href", "https://dashboard.heycall-e.com/"); + await expect(page.locator('link[rel="icon"]')).toHaveAttribute( + "href", + "/favicon.svg", + ); }); -test("documents public What's New updates", async ({ page }) => { - await page.goto("/#/changelog"); +test("keeps quickstart requests minimal and safe to copy", async ({ page }) => { + await page.goto("/quickstart"); - await expect( - page.getByRole("heading", { exact: true, name: "What's New" }), - ).toBeVisible(); - await expect(page.getByText("Product updates for the CALL-E Developer API")) - .toBeVisible(); - await expect(page.getByRole("heading", { name: "June 8, 2026" })) + const minimumRequest = page + .locator("pre") + .filter({ hasText: /"task":\s*"[^"]*[^"]*"/ }) + .first(); + await expect(minimumRequest).toBeVisible(); + await expect(minimumRequest).not.toContainText('"recipient"'); + await expect(minimumRequest).not.toContainText('"recipients"'); + await expect(page.getByText("+14155550100")).toHaveCount(0); + await expect(page.getByText("+8613800000000")).toHaveCount(0); +}); + +test("preserves authentication, webhook, and SDK guidance", async ({ + page, +}) => { + await page.goto("/authentication"); + await expect(page.getByText("Authorization: Bearer $CALLE_API_KEY")) .toBeVisible(); await expect( - page.getByRole("heading", { - name: "What's New: Developer API and server SDKs", - }), - ).toBeVisible(); + page.getByRole("link", { name: "CALL-E dashboard", exact: true }), + ).toHaveAttribute("href", "https://dashboard.heycall-e.com/account/api-keys"); await expect( - page.locator(".code-block").filter({ hasText: "pnpm add @call-e/calle" }) - .first(), - ).toBeVisible(); + page.getByRole("link", { name: "Webhooks", exact: true }).first(), + ).toHaveAttribute("href", "/webhooks"); + + await page.goto("/webhooks"); await expect( - page.locator(".code-block").filter({ hasText: "pip install calle-ai" }) - .first(), + page.locator("pre").filter({ + hasText: /"recipients"[\s\S]*"attempts"[\s\S]*"provider_call_id"/, + }).first(), ).toBeVisible(); - await expect(page.getByText("@call-e/calle@beta")).toHaveCount(0); - await expect(page.getByText("Python SDK support is in preparation.")) - .toHaveCount(0); - await expect(page.getByText("Create outbound call tasks")).toBeVisible(); - await expect(page.getByText("Phase 1")).toHaveCount(0); - await expect(page.getByText(["pend", "ing", " publisher"].join(""))) - .toHaveCount(0); - await expect(page.getByText(["release", " run", "book"].join(""))) - .toHaveCount(0); - await expect(page.getByText(`publish-${"npm"}.yml`)).toHaveCount(0); - await expect(page.locator(".topnav a", { hasText: "What's New" })).toHaveClass( - /active/, - ); -}); - -test("documents SDK source repositories and stable package availability", async ({ - page, -}) => { - await page.goto("/#/sdks"); + await expect(page.getByText("transcript_turns").first()).toBeVisible(); + await page.goto("/sdks"); await expect( page.getByRole("link", { name: "CALLE-AI/server-sdk-typescript" }), ).toHaveAttribute( @@ -348,623 +213,62 @@ test("documents SDK source repositories and stable package availability", async "href", "https://github.com/CALLE-AI/server-sdk-python", ); - await expect(page.locator("li code", { hasText: "@call-e/calle@0.2.0" })) - .toBeVisible(); - await expect(page.locator("li code", { hasText: "calle-ai==0.2.0" })) - .toBeVisible(); - await expect(page.getByText("Phase 1")).toHaveCount(0); - await expect( - page.locator(".code-block").filter({ hasText: "pnpm add @call-e/calle" }) - .first(), - ).toBeVisible(); - await expect( - page.locator(".code-block").filter({ hasText: "pip install calle-ai" }) - .first(), - ).toBeVisible(); - await expect(page.getByText("@call-e/calle@beta")).toHaveCount(0); - await expect(page.getByText("Python SDK support is in preparation.")) - .toHaveCount(0); - await expect(page.getByText(["Test", "Py", "PI"].join(""))).toHaveCount(0); - await expect(page.getByText(["Py", "PI", " packages"].join(""))) - .toHaveCount(0); - await expect(page.getByText(["rehe", "arsal"].join(""))).toHaveCount(0); - await expect(page.getByText(["pend", "ing"].join(""))).toHaveCount(0); - await expect(page.getByText("Each repository includes public source code")) - .toBeVisible(); - await expect(page.getByText(["release", "checklist"].join(" "))) - .toHaveCount(0); - await expect(page.getByText(["SDK", "release", "run", "book"].join(" "))) - .toHaveCount(0); - await expect( - page.getByRole("link", { name: "Python security policy" }), - ).toHaveAttribute( - "href", - "https://github.com/CALLE-AI/server-sdk-python/blob/main/SECURITY.md", - ); - await expect(page.getByText("pnpm run example:webhook")).toBeVisible(); - await expect(page.getByText("uv run python examples/webhook_server.py")) - .toBeVisible(); - - const tableBackground = await page - .locator(".guide-article table th") - .first() - .evaluate((element) => window.getComputedStyle(element).backgroundColor); - expect(tableBackground).toBe("rgb(249, 250, 251)"); }); -test("links webhook guides to runnable SDK webhook server examples", async ({ +test("connects the Calls guide to HTTP and related references", async ({ page, }) => { - await page.goto("/#/webhooks"); + await page.goto("/calls"); + const callsBody = page.locator('[data-pagefind-body="true"]'); await expect( - page.getByRole("link", { name: "TypeScript webhook server" }), - ).toHaveAttribute( - "href", - "https://github.com/CALLE-AI/server-sdk-typescript/blob/main/examples/webhook-server.ts", - ); - await expect( - page.getByRole("link", { name: "Python webhook server" }), - ).toHaveAttribute( - "href", - "https://github.com/CALLE-AI/server-sdk-python/blob/main/examples/webhook_server.py", - ); - await expect(page.getByText("POST /calle/webhook")).toBeVisible(); - await expect( - page.locator("p code", { hasText: "client.webhooks.unwrap" }), + callsBody.locator('p a[href="/api-reference/calls"]'), ).toBeVisible(); -}); - -test("renders the read-only Scalar API Reference from the OpenAPI contract", async ({ - page, -}) => { - const openApiResponse = page.waitForResponse((response) => { - return ( - response.url().endsWith("/openapi/calle.openapi.yaml") && - response.status() === 200 - ); - }); - - await page.goto("/#/api-reference"); - await openApiResponse; - - await expect( - page.getByRole("navigation", { name: "API Reference navigation" }), - ).toBeVisible(); - await expect( - page.getByRole("link", { name: "POST Create Call /v1/calls" }), - ).toBeVisible(); - await expect( - page.getByRole("link", { name: "POST Create Call /v1/calls" }), - ).toHaveClass(/active/); await expect( - page.getByRole("link", { - name: "GET List Call Events /v1/calls/{call_id}/events", - }), + callsBody.locator('p a[href="/errors"]'), ).toBeVisible(); await expect( - page.getByRole("link", { - name: "POST Server Message /calle/webhook", - }), + callsBody.locator('p a[href="/webhooks"]'), ).toBeVisible(); - await expect(page.getByRole("link", { name: "Models" })).toHaveCount(0); - await expect( - page.locator(".api-reference-nav-label", { hasText: "Schemas" }), - ).toHaveCount(0); - await expect - .poll(() => - page - .locator(".api-reference-page .references-rendered") - .evaluate((element) => element.getBoundingClientRect().width), - ) - .toBeGreaterThan(400); - await expect(page.locator(".api-reference-page .t-doc__header")) - .toHaveCSS("display", "none"); - await page.setViewportSize({ width: 835, height: 700 }); - await expect - .poll(() => - page - .locator(".api-reference-page .references-rendered") - .evaluate((element) => element.getBoundingClientRect().width), - ) - .toBeGreaterThan(300); - await expect(page.getByLabel("Docs navigation")).toHaveCount(0); - await expect(page.getByText("Create one call and read the structured result.")) - .toHaveCount(0); - await page.getByRole("link", { name: "POST Create Call /v1/calls" }).click(); - await expect(page).toHaveURL(/section=api-1%2Ftag%2Fcalls%2FPOST%2Fv1%2Fcalls/); - const createCallRegion = page.getByRole("region", { - name: "Create Call", - }); - await expect - .poll(() => - createCallRegion.evaluate((element) => element.getBoundingClientRect().top), - ) - .toBeLessThanOrEqual(70); - await expectNoVisibleText(page, "CALL-E Developer API"); - await expect( - createCallRegion.getByRole("heading", { - name: "Create Call", - }), - ).toBeVisible(); - await expect( - createCallRegion.getByText("Stable caller-provided key", { exact: false }) - .first(), - ).toBeVisible(); - await expect( - createCallRegion.getByText("Natural-language instruction for the call task", { - exact: false, - }).first(), - ).toBeVisible(); - await expect( - createCallRegion.getByText("Optional explicit recipients for this call task", { - exact: false, - }).first(), - ).toBeVisible(); - await expect( - createCallRegion.getByText("JSON Schema object that defines", { - exact: false, - }).first(), - ).toBeVisible(); - const responseToggle = createCallRegion.locator( - 'ul[aria-label="Responses"] > li:first-child > button', - ); - if ((await responseToggle.getAttribute("aria-expanded")) === "false") { - await responseToggle.click(); - } - await expect(responseToggle).toHaveAttribute("aria-expanded", "true"); - await expect( - createCallRegion.getByText("Public CALL-E call task identifier", { - exact: false, - }).first(), - ).toBeVisible(); - await expect( - createCallRegion.getByText("Structured result object extracted", { - exact: false, - }).first(), - ).toBeVisible(); - await expectNoVisibleText(page, "400 Stable API error."); - await expectNoVisibleText(page, "401 Stable API error."); - await expect(createCallRegion.getByRole("tab", { name: "Status: 201" })) - .toBeVisible(); - const narrowRenderedWidth = await page - .locator(".api-reference-page .references-rendered") - .evaluate((element) => element.getBoundingClientRect().width); - const narrowDarkCardWidth = await page - .locator(".api-reference-page .scalar-card.dark-mode") - .first() - .evaluate((element) => element.getBoundingClientRect().width); - expect(narrowDarkCardWidth).toBeLessThanOrEqual(narrowRenderedWidth); - await expect(page.getByText("Try it")).toHaveCount(0); - await expectNoVisibleText(page, "Test Request"); - await expectNoVisibleText(page, "Send Request"); - await expectNoVisibleText(page, "Developer Tools"); - await expectNoVisibleText(page, "Configure"); - await expectNoVisibleText(page, "Share"); - await expectNoVisibleText(page, "Deploy"); - await expect( - page.locator('[data-addressbar-action="send"]:visible'), - ).toHaveCount(0); +}); - await page.goto("/#tag/calls/POST/v1/calls"); +test("renders a read-only OpenAPI reference", async ({ page }) => { + await page.goto("/api-reference"); await expect( - page.getByRole("navigation", { name: "API Reference navigation" }), + page.getByRole("heading", { name: "CALL-E Developer API" }), ).toBeVisible(); - await expect(page).toHaveURL( - /#\/api-reference\?section=api-1%2Ftag%2Fcalls%2FPOST%2Fv1%2Fcalls/, - ); - await expect - .poll(() => - page - .getByRole("region", { name: "Create Call" }) - .evaluate((element) => element.getBoundingClientRect().top), - ) - .toBeLessThanOrEqual(70); await expect( - page.getByRole("region", { name: "Create Call" }) - .getByText("Natural-language instruction for the call", { - exact: false, - }), + page.getByText( + "Developer API contract used by the CALL-E TypeScript and Python SDKs.", + ), ).toBeVisible(); - await page.waitForTimeout(2000); - await expect(page.getByRole("region", { name: "Get Call" })).toHaveCount(0); - await expect( - page.getByRole("region", { name: "List Call Events" }), - ).toHaveCount(0); - await expect( - page.getByRole("region", { name: "Server Message" }), - ).toHaveCount(0); -}); -test("loads the OpenAPI document relative to the published page path", async ({ - page, -}) => { - await page.route("**/calle-docs-site/**", async (route) => { - const url = new URL(route.request().url()); - const relativePath = - url.pathname.replace(/^\/calle-docs-site\/?/, "") || "index.html"; - await route.fulfill({ - path: path.join(process.cwd(), "dist", relativePath), - }); - }); - - const openApiResponse = page.waitForResponse((response) => { - return ( - new URL(response.url()).pathname === - "/calle-docs-site/openapi/calle.openapi.yaml" && - response.status() === 200 - ); - }); - - await page.goto("/calle-docs-site/#/api-reference"); - await openApiResponse; - - await expect( - page.getByRole("link", { name: "POST Create Call /v1/calls" }), - ).toBeVisible(); -}); + await page.goto("/api-reference/calls"); -test("renders the webhook Server Message reference like an inbound endpoint", async ({ - page, -}) => { - await page.setViewportSize({ width: 1920, height: 900 }); - const openApiResponse = page.waitForResponse((response) => { - return ( - response.url().endsWith("/openapi/calle.openapi.yaml") && - response.status() === 200 - ); - }); - - await page.goto("/#/api-reference"); - await openApiResponse; - await page.getByRole("link", { - name: "POST Server Message /calle/webhook", - }).click(); - - await expect(page).toHaveURL( - /section=api-1%2Ftag%2Fwebhooks%2FPOST%2Fcalle%2Fwebhook/, - ); - - const webhookRegion = page.getByRole("region", { - name: "Server Message", - }); - await expect( - webhookRegion.getByRole("heading", { name: "Server Message" }), - ).toBeVisible(); - await expect( - webhookRegion.getByText("https://{yourserver}.com/calle/webhook"), - ).toBeVisible(); - await expect(webhookRegion.getByText("Auth Required")).toHaveCount(0); - await expect( - webhookRegion.locator(".property-name", { hasText: "CALL-E-Event-Id" }), - ).toBeVisible(); - await expect( - webhookRegion.locator(".property-name", { hasText: "CALL-E-Timestamp" }), - ).toBeVisible(); - await expect( - webhookRegion.locator(".property-name", { hasText: "CALL-E-Signature" }), - ).toBeVisible(); - await expect( - webhookRegion.getByText("Event payload CALL-E sends", { exact: false }), - ).toBeVisible(); await expect( - webhookRegion.getByText("Terminal call task snapshot", { exact: false }), + page.locator("h2#create-call"), ).toBeVisible(); await expect( - webhookRegion.getByText("curl https://example.com/calle/webhook", { - exact: false, - }), - ).toBeVisible(); - await expect( - webhookRegion.locator( - 'ul[aria-label="Responses"] > li:first-child > button', - ), - ).toHaveAttribute("aria-expanded", "true"); - await expect( - webhookRegion.getByText("CALL-E treats any 2xx response as delivered", { - exact: false, - }), + page.locator("h2#list-call-events"), ).toBeVisible(); -}); - -test("keeps the API Reference pinned to the selected API", async ({ page }) => { - await page.setViewportSize({ width: 1440, height: 900 }); - const openApiResponse = page.waitForResponse((response) => { - return ( - response.url().endsWith("/openapi/calle.openapi.yaml") && - response.status() === 200 - ); - }); - - await page.goto("/#/api-reference"); - await openApiResponse; - - await page.getByRole("link", { - name: "GET List Call Events /v1/calls/{call_id}/events", - }).click(); + await expect(page.getByText("POST").first()).toBeVisible(); + await expect(page.getByText("Try it", { exact: true })).toHaveCount(0); + await expect(page.getByText("Send Request", { exact: true })).toHaveCount(0); + await page.goto("/api-reference/webhooks"); await expect( - page.getByRole("region", { name: "List Call Events" }), + page.locator("h2#server-message"), ).toBeVisible(); - await expect( - page.getByRole("region", { name: "Create Call" }), - ).toHaveCount(0); - await expect(page.getByRole("region", { name: "Get Call" })).toHaveCount(0); - await expect( - page.getByRole("region", { name: "Server Message" }), - ).toHaveCount(0); - - const scrollHeight = await page.evaluate(() => document.body.scrollHeight); - await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight)); - await expect - .poll(() => - page - .getByRole("region", { name: "List Call Events" }) - .evaluate((element) => element.getBoundingClientRect().top), - ) - .toBeLessThanOrEqual(56); - await expect( - page.getByRole("region", { name: "Server Message" }), - ).toHaveCount(0); - expect(scrollHeight).toBeLessThan(2200); -}); - -test("allows immediate scrolling after selecting an API", async ({ page }) => { - await page.setViewportSize({ width: 1440, height: 900 }); - const openApiResponse = page.waitForResponse((response) => { - return ( - response.url().endsWith("/openapi/calle.openapi.yaml") && - response.status() === 200 - ); - }); - - await page.goto("/#/api-reference"); - await openApiResponse; - await page.getByRole("link", { name: "POST Create Call /v1/calls" }).click(); - - await expect(page.getByRole("region", { name: "Create Call" })) - .toBeVisible(); - await page.mouse.wheel(0, 900); - await page.waitForTimeout(350); - - await expect - .poll(() => page.evaluate(() => window.scrollY)) - .toBeGreaterThan(200); -}); - -test("keeps the API sample column within one viewport", async ({ - page, -}) => { - await page.setViewportSize({ width: 1920, height: 900 }); - const openApiResponse = page.waitForResponse((response) => { - return ( - response.url().endsWith("/openapi/calle.openapi.yaml") && - response.status() === 200 - ); - }); - - await page.goto("/#/api-reference"); - await openApiResponse; - await page.getByRole("link", { name: "POST Create Call /v1/calls" }).click(); - - const rightColumn = page - .locator("#api-1\\/tag\\/calls\\/POST\\/v1\\/calls .section-columns") - .locator(":scope > .section-column") - .nth(1); - await expect(rightColumn).toBeVisible(); - - const initialBox = await rightColumn.evaluate((element) => { - const rect = element.getBoundingClientRect(); - return { - bottom: rect.bottom, - height: rect.height, - top: rect.top, - }; - }); - expect(initialBox.height).toBeLessThanOrEqual(812); - - await page.evaluate((top) => { - window.scrollBy(0, top - 80); - }, initialBox.top); - await page.waitForTimeout(200); - - const visibleBox = await rightColumn.evaluate((element) => { - const rect = element.getBoundingClientRect(); - return { - bottom: rect.bottom, - height: rect.height, - top: rect.top, - }; - }); - expect(visibleBox.top).toBeGreaterThanOrEqual(68); - expect(visibleBox.top).toBeLessThanOrEqual(120); - expect(visibleBox.bottom).toBeLessThanOrEqual(900); - expect(visibleBox.height).toBeLessThanOrEqual(812); }); -test("renders API Reference with a Vapi-like desktop endpoint layout", async ({ - page, -}) => { - await page.setViewportSize({ width: 1920, height: 900 }); - const openApiResponse = page.waitForResponse((response) => { - return ( - response.url().endsWith("/openapi/calle.openapi.yaml") && - response.status() === 200 - ); - }); - - await page.goto("/#/api-reference"); - await openApiResponse; - await page.getByRole("link", { name: "POST Create Call /v1/calls" }).click(); - - const sidebarWidth = await page.locator(".api-reference-sidebar").evaluate( - (element) => element.getBoundingClientRect().width, - ); - expect(sidebarWidth).toBeGreaterThanOrEqual(300); - - const contentBox = await page - .locator("#api-1\\/tag\\/calls\\/POST\\/v1\\/calls .section-content") - .evaluate((element) => { - const rect = element.getBoundingClientRect(); - return { - rightGap: window.innerWidth - rect.right, - width: rect.width, - }; - }); - expect(contentBox.width).toBeGreaterThan(1400); - expect(contentBox.rightGap).toBeLessThan(2); - - const sectionColumns = page - .locator("#api-1\\/tag\\/calls\\/POST\\/v1\\/calls .section-columns") - .locator(":scope > .section-column"); - await expect(sectionColumns).toHaveCount(2); - - const leftColumnBox = await sectionColumns.nth(0).evaluate((element) => { - const rect = element.getBoundingClientRect(); - return { x: rect.x, y: rect.y, width: rect.width }; - }); - const rightColumnBox = await sectionColumns.nth(1).evaluate((element) => { - const rect = element.getBoundingClientRect(); - return { x: rect.x, y: rect.y, width: rect.width }; - }); - expect(rightColumnBox.x).toBeGreaterThan(leftColumnBox.x + leftColumnBox.width); - expect(Math.abs(rightColumnBox.y - leftColumnBox.y)).toBeLessThan(80); - expect(rightColumnBox.width).toBeGreaterThan(600); - - const darkCardBackground = await page - .locator(".api-reference-page .scalar-card.dark-mode") - .first() - .evaluate((element) => window.getComputedStyle(element).backgroundColor); - expect(darkCardBackground).toBe("rgb(17, 24, 39)"); - - const responseCard = page.locator( - "#api-1\\/tag\\/calls\\/POST\\/v1\\/calls .response-card", - ); - const visibleResponseRows = await page - .locator( - '#api-1\\/tag\\/calls\\/POST\\/v1\\/calls ul[aria-label="Responses"] > li', - ) - .evaluateAll((items) => { - return items.flatMap((item) => { - const style = window.getComputedStyle(item); - const rect = item.getBoundingClientRect(); - if ( - style.display === "none" || - style.visibility === "hidden" || - rect.width === 0 || - rect.height === 0 - ) { - return []; - } - - return [item.textContent?.replace(/\s+/g, " ").trim() ?? ""]; - }); - }); - expect(visibleResponseRows).toHaveLength(1); - const visibleResponseRow = visibleResponseRows[0] ?? ""; - expect(visibleResponseRow).toContain("201 Call task accepted."); - await expect(responseCard).toHaveCSS("background-color", "rgb(17, 24, 39)"); - await expect(responseCard.locator(".scalar-code-block")) - .toHaveCSS("background-color", "rgb(11, 15, 25)"); - const visibleResponseControls = await responseCard.evaluate((element) => { - return Array.from( - element.querySelectorAll(".tab, .scalar-card-checkbox"), - ).flatMap((control) => { - const style = window.getComputedStyle(control); - const rect = control.getBoundingClientRect(); - if ( - style.display === "none" || - style.visibility === "hidden" || - rect.width === 0 || - rect.height === 0 - ) { - return []; - } - - return [control.textContent?.replace(/\s+/g, " ").trim() ?? ""]; - }); - }); - expect(visibleResponseControls).toEqual(["Status: 201"]); - - const responseCodeDefaultColor = await responseCard - .locator("code") - .evaluate((element) => window.getComputedStyle(element).color); - const responseKeyColor = await responseCard - .locator(".hljs-attr", { hasText: '"id"' }) - .first() - .evaluate((element) => window.getComputedStyle(element).color); - const responseStringColor = await responseCard - .locator(".hljs-string", { hasText: "call_123" }) - .first() - .evaluate((element) => window.getComputedStyle(element).color); - - expect(responseKeyColor).not.toBe(responseCodeDefaultColor); - expect(responseStringColor).not.toBe(responseKeyColor); -}); - -test("omits API Reference schemas from navigation and rendered content", async ({ - page, -}) => { - await page.setViewportSize({ width: 1440, height: 900 }); - const openApiResponse = page.waitForResponse((response) => { - return ( - response.url().endsWith("/openapi/calle.openapi.yaml") && - response.status() === 200 - ); - }); - - await page.goto("/#/api-reference?section=api-1%2Fmodels"); - await openApiResponse; +test("keeps the guide usable on a narrow screen", async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto("/quickstart"); await expect( - page.getByRole("link", { name: "POST Create Call /v1/calls" }), - ).toHaveClass(/active/); - await expect(page.getByRole("link", { name: "Models" })).toHaveCount(0); + page.getByRole("heading", { name: "Quickstart" }), + ).toBeVisible(); await expect( - page.locator(".api-reference-nav-label", { hasText: "Schemas" }), - ).toHaveCount(0); - await expect(page.getByRole("heading", { name: "Models" })).toHaveCount(0); - await expect(page.locator("#api-1\\/models:visible")).toHaveCount(0); -}); - -test("page toc links preserve the guide route and scroll to sections", async ({ - page, -}) => { - await page.goto("/"); - - const scrollYBeforeClick = await page.evaluate(() => window.scrollY); - - await page.getByRole("navigation", { name: "On this page" }) - .getByRole("link", { name: "Read the result" }) - .click(); - - await expect(page).toHaveURL(/#\/quickstart\?section=read-the-result$/); - - await expect - .poll(() => page.evaluate(() => window.scrollY)) - .toBeGreaterThan(scrollYBeforeClick); - - const headingTop = await page.locator("#read-the-result").evaluate((element) => { - return element.getBoundingClientRect().top; - }); - expect(headingTop).toBeGreaterThanOrEqual(56); + page.getByRole("button", { name: "Open navigation menu" }), + ).toBeVisible(); }); - -async function expectNoVisibleText(page: Page, text: string) { - await expect - .poll(async () => { - return page.getByText(text).evaluateAll((elements) => { - return elements.filter((element) => { - const style = window.getComputedStyle(element); - const rect = element.getBoundingClientRect(); - return ( - style.display !== "none" && - style.visibility !== "hidden" && - rect.width > 0 && - rect.height > 0 - ); - }).length; - }); - }) - .toBe(0); -} diff --git a/tsconfig.json b/tsconfig.json index 73f6ff5..2e0b8b1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,20 +1,25 @@ { "compilerOptions": { "target": "ES2022", - "useDefineForClassFields": true, - "lib": ["DOM", "DOM.Iterable", "ES2022"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, + "lib": ["ESNext", "DOM", "DOM.Iterable", "WebWorker"], "module": "ESNext", "moduleResolution": "Bundler", + "useDefineForClassFields": true, + "skipLibCheck": true, + "skipDefaultLibCheck": true, "resolveJsonModule": true, "isolatedModules": true, + "useUnknownInCatchVariables": false, + "strict": true, "noEmit": true, - "jsx": "react-jsx" + "jsx": "react-jsx", + "types": ["zudoku/client"] }, - "include": ["src", "content", "tests", "vite.config.ts", "playwright.config.ts"] + "include": [ + "src", + "content", + "tests", + "zudoku.config.tsx", + "playwright.config.ts" + ] } diff --git a/vite.config.ts b/vite.config.ts deleted file mode 100644 index ca73100..0000000 --- a/vite.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import mdx from "@mdx-js/rollup"; -import react from "@vitejs/plugin-react"; -import { defineConfig } from "vite"; - -export default defineConfig({ - base: "./", - plugins: [mdx(), react()], - server: { - host: "127.0.0.1", - port: 5174, - }, - preview: { - host: "127.0.0.1", - port: 4174, - }, -}); diff --git a/zudoku.config.tsx b/zudoku.config.tsx new file mode 100644 index 0000000..6759052 --- /dev/null +++ b/zudoku.config.tsx @@ -0,0 +1,216 @@ +import type { ZudokuConfig } from "zudoku"; +import "./src/styles.css"; + +const legacyHashRedirect = ` +(() => { + if (window.location.pathname !== "/") return; + + const [route, query = ""] = window.location.hash.slice(1).split("?", 2); + const guideRoutes = new Set([ + "/quickstart", + "/authentication", + "/calls", + "/webhooks", + "/errors", + "/sdks", + "/changelog", + ]); + + if (guideRoutes.has(route)) { + const section = new URLSearchParams(query).get("section"); + window.location.replace( + section ? \`\${route}#\${encodeURIComponent(section)}\` : route, + ); + return; + } + + if ( + route === "/api-reference" || + route.startsWith("/api-1/") || + route.startsWith("tag/") || + route.startsWith("description/") || + route === "models" + ) { + window.location.replace("/api-reference"); + return; + } + + window.location.replace("/quickstart"); +})(); +`; + +const config = { + port: 5174, + canonicalUrlOrigin: "https://docs.heycall-e.com", + metadata: { + title: "%s | CALL-E Developer Docs", + defaultTitle: "CALL-E Developer Docs", + description: + "Guides and API reference for building server-side CALL-E integrations.", + favicon: "/favicon.svg", + applicationName: "CALL-E Developer Docs", + }, + site: { + logo: { + src: { + light: "/call-e-logo.svg", + dark: "/call-e-logo.svg", + }, + alt: "CALL-E", + width: "100px", + href: "https://www.heycall-e.com/", + reloadDocument: true, + }, + showPoweredBy: false, + }, + header: { + navigation: [ + { + label: "Website", + to: "https://www.heycall-e.com/", + target: "_blank", + }, + { + label: "Dashboard", + to: "https://dashboard.heycall-e.com/", + target: "_blank", + }, + ], + placements: { + navigation: "end", + search: "center", + }, + }, + docs: { + files: "/content/guides/**/*.{md,mdx}", + defaultOptions: { + copyPage: true, + toc: true, + showLastModified: false, + }, + publishMarkdown: true, + llms: { + llmsTxt: true, + llmsTxtFull: true, + includeProtected: false, + }, + }, + navigation: [ + { + type: "custom-page", + path: "/", + display: "hide", + layout: "none", + element: ( +
+

CALL-E Developer API

+

CALL-E Developer Docs

+

+ Start with the Quickstart or browse the machine-readable API + contract. +

+ +
+ ), + }, + { + type: "category", + label: "Guides", + collapsible: false, + items: [ + { type: "doc", file: "quickstart", label: "Quickstart" }, + { type: "doc", file: "authentication", label: "Authentication" }, + { type: "doc", file: "calls", label: "Calls" }, + { type: "doc", file: "webhooks", label: "Webhooks" }, + { type: "doc", file: "errors", label: "Errors" }, + { type: "doc", file: "sdks", label: "SDKs" }, + { type: "doc", file: "changelog", label: "What's New" }, + ], + }, + { + type: "link", + label: "API Reference", + to: "/api-reference", + }, + ], + apis: [ + { + type: "file", + input: "./openapi/calle.openapi.yaml", + path: "/api-reference", + options: { + disablePlayground: true, + disableSecurity: false, + showInfoPage: true, + expandAllTags: true, + schemaDownload: { + enabled: true, + fileName: "calle-openapi", + }, + }, + }, + ], + defaults: { + apis: { + disablePlayground: true, + }, + }, + aiAssistants: ["claude", "chatgpt"], + search: { + type: "pagefind", + }, + syntaxHighlighting: { + themes: { + light: "github-dark", + dark: "github-dark", + }, + }, + sitemap: { + siteUrl: "https://docs.heycall-e.com", + }, + enableStatusPages: true, + plugins: [ + { + getHead: () => , + }, + ], + theme: { + light: { + background: "#ffffff", + foreground: "#2a2a2a", + card: "#ffffff", + cardForeground: "#2a2a2a", + primary: "#087f75", + primaryForeground: "#ffffff", + muted: "#f5f6f7", + mutedForeground: "#666b73", + accent: "#e2f7f3", + accentForeground: "#07766d", + border: "#e6e8eb", + input: "#dfe3e6", + ring: "#0a9f90", + radius: "0.5rem", + }, + dark: { + background: "#0f1217", + foreground: "#f3f4f6", + card: "#151920", + cardForeground: "#f3f4f6", + primary: "#35c9b8", + primaryForeground: "#08110f", + muted: "#1b2028", + mutedForeground: "#a4a9b1", + accent: "#163c38", + accentForeground: "#91e8dd", + border: "#2b3038", + input: "#343a44", + ring: "#35c9b8", + radius: "0.5rem", + }, + }, +} satisfies ZudokuConfig; + +export default config; From 80f778ca058ab231cb49a0e9b0dc1b807d6aec4a Mon Sep 17 00:00:00 2001 From: "lin.si" Date: Tue, 28 Jul 2026 11:01:24 +0800 Subject: [PATCH 2/2] feat(docs): add theme menu and scroll to top --- src/components/ScrollToTop.tsx | 50 ++++++++++++++ src/components/ThemeMenu.tsx | 112 +++++++++++++++++++++++++++++++ src/styles.css | 116 +++++++++++++++++++++++++++++++++ tests/docs-site.spec.ts | 84 ++++++++++++++++++++++++ zudoku.config.tsx | 20 ++++++ 5 files changed, 382 insertions(+) create mode 100644 src/components/ScrollToTop.tsx create mode 100644 src/components/ThemeMenu.tsx diff --git a/src/components/ScrollToTop.tsx b/src/components/ScrollToTop.tsx new file mode 100644 index 0000000..c1c21bd --- /dev/null +++ b/src/components/ScrollToTop.tsx @@ -0,0 +1,50 @@ +import { useEffect, useState } from "react"; +import { ArrowUpIcon } from "zudoku/icons"; +import { Button } from "zudoku/ui/Button.js"; + +export const ScrollToTop = () => { + const [isVisible, setIsVisible] = useState(false); + + useEffect(() => { + const updateVisibility = () => { + setIsVisible(window.scrollY > window.innerHeight); + }; + + updateVisibility(); + window.addEventListener("scroll", updateVisibility, { passive: true }); + window.addEventListener("resize", updateVisibility); + + return () => { + window.removeEventListener("scroll", updateVisibility); + window.removeEventListener("resize", updateVisibility); + }; + }, []); + + const scrollToTop = () => { + const prefersReducedMotion = window.matchMedia( + "(prefers-reduced-motion: reduce)", + ).matches; + + window.scrollTo({ + top: 0, + behavior: prefersReducedMotion ? "auto" : "smooth", + }); + }; + + return ( + + ); +}; diff --git a/src/components/ThemeMenu.tsx b/src/components/ThemeMenu.tsx new file mode 100644 index 0000000..0659f3f --- /dev/null +++ b/src/components/ThemeMenu.tsx @@ -0,0 +1,112 @@ +import { forwardRef } from "react"; +import { ClientOnly } from "zudoku/components"; +import { + ChevronDownIcon, + MonitorIcon, + MoonIcon, + SunIcon, +} from "zudoku/icons"; +import { useTheme } from "zudoku/hooks"; +import { Button, type ButtonProps } from "zudoku/ui/Button.js"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuLabel, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "zudoku/ui/DropdownMenu.js"; + +const themeOptions = [ + { value: "system", label: "System", Icon: MonitorIcon }, + { value: "light", label: "Light", Icon: SunIcon }, + { value: "dark", label: "Dark", Icon: MoonIcon }, +] as const; + +type ThemeValue = (typeof themeOptions)[number]["value"]; + +type ThemeMenuProps = { + className?: string; + testId?: string; +}; + +type ThemeTriggerProps = ButtonProps & { + selected: ThemeValue; + testId?: string; +}; + +const ThemeTrigger = forwardRef( + ({ selected, testId, ...props }, ref) => { + const activeOption = + themeOptions.find(({ value }) => value === selected) ?? themeOptions[0]; + const ActiveIcon = activeOption.Icon; + + return ( + + ); + }, +); + +ThemeTrigger.displayName = "ThemeTrigger"; + +const ThemeMenuClient = ({ testId }: Pick) => { + const { theme, setTheme } = useTheme(); + const selected: ThemeValue = + theme === "light" || theme === "dark" ? theme : "system"; + + return ( + + + + + + Appearance + + + {themeOptions.map(({ value, label, Icon }) => ( + + + ))} + + + + ); +}; + +export const ThemeMenu = ({ className, testId }: ThemeMenuProps) => ( +
+ } + > + + +
+); diff --git a/src/styles.css b/src/styles.css index 4faa89c..738893a 100644 --- a/src/styles.css +++ b/src/styles.css @@ -47,6 +47,107 @@ header[data-pagefind-ignore="all"] img { object-fit: contain; } +.theme-menu { + display: flex; + align-items: center; +} + +.theme-menu__trigger { + height: 2.25rem; + min-width: 2.5rem; + padding-inline: 0.625rem; + gap: 0.3rem; + border-radius: 999px; + color: var(--muted-foreground); + box-shadow: 0 1px 2px color-mix(in srgb, var(--foreground) 7%, transparent); +} + +.theme-menu__trigger:hover, +.theme-menu__trigger[aria-expanded="true"] { + border-color: color-mix(in srgb, var(--call-signal) 34%, var(--border)); + color: var(--foreground); +} + +.theme-menu__trigger > svg:first-child { + color: var(--call-signal); +} + +.theme-menu__chevron { + width: 0.75rem; + height: 0.75rem; + opacity: 0.6; +} + +.theme-menu__label { + display: none; + font-size: 0.75rem; +} + +.theme-menu__content { + min-width: 10rem; +} + +.theme-menu__content [role="menuitemradio"] { + min-height: 2rem; +} + +.theme-menu--mobile .theme-menu__label { + display: inline; +} + +div:has(> .theme-menu--mobile) { + display: flex; + min-width: 0; + align-items: center; + gap: 0.5rem; +} + +div:has(> .theme-menu--mobile) + > [aria-label="Toggle table of contents"] { + min-width: 0; +} + +.scroll-to-top { + position: fixed; + right: max(1.5rem, calc((100vw - 96rem) / 2 + 1.5rem)); + bottom: calc(1.5rem + env(safe-area-inset-bottom)); + z-index: 30; + display: none; + width: 2.75rem; + height: 2.75rem; + border-color: color-mix(in srgb, var(--call-signal) 30%, var(--border)); + border-radius: 999px; + background: color-mix(in srgb, var(--background) 92%, transparent); + color: var(--foreground); + opacity: 0; + visibility: hidden; + pointer-events: none; + transform: translateY(0.5rem); + box-shadow: + 0 0 0 1px color-mix(in srgb, var(--background) 70%, transparent), + 0 0.75rem 2rem color-mix(in srgb, var(--foreground) 13%, transparent); + backdrop-filter: blur(0.75rem); + transition: + opacity 160ms ease, + visibility 160ms ease, + transform 160ms ease, + border-color 160ms ease, + color 160ms ease; +} + +.scroll-to-top[data-visible="true"] { + opacity: 1; + visibility: visible; + pointer-events: auto; + transform: translateY(0); +} + +.scroll-to-top[data-visible="true"]:hover { + border-color: var(--call-signal); + color: var(--call-signal); + transform: translateY(-0.125rem); +} + .dark header a.shrink-0 img { filter: invert(1); } @@ -93,6 +194,10 @@ nav[class*="overflow-y-auto"][class*="shrink-0"] a[aria-current="page"] { } @media (min-width: 64rem) { + .scroll-to-top { + display: inline-flex; + } + nav[class*="overflow-y-auto"][class*="shrink-0"] :is( a[href="/quickstart"], @@ -406,6 +511,10 @@ aside[class*="overflow-y-auto"] a:hover { } @media (max-width: 22.5rem) { + .theme-menu--mobile .theme-menu__label { + display: none; + } + .typography [aria-label="Page actions"] button:first-of-type span { position: absolute; width: 1px; @@ -419,6 +528,13 @@ aside[class*="overflow-y-auto"] a:hover { } @media (prefers-reduced-motion: reduce) { + .scroll-to-top, + .scroll-to-top[data-visible="true"], + .scroll-to-top[data-visible="true"]:hover { + transform: none; + transition: none; + } + *, *::before, *::after { diff --git a/tests/docs-site.spec.ts b/tests/docs-site.spec.ts index 4792ec3..016b8eb 100644 --- a/tests/docs-site.spec.ts +++ b/tests/docs-site.spec.ts @@ -56,6 +56,69 @@ test("uses the roomy CALL-E guide navigation on desktop", async ({ page }) => { expect(descriptionContent).not.toBe('""'); }); +test("offers system, light, and dark appearance modes", async ({ page }) => { + await page.emulateMedia({ colorScheme: "dark" }); + await page.goto("/quickstart"); + + const html = page.locator("html"); + const trigger = page.getByTestId("theme-menu-trigger"); + + await expect(trigger).toHaveAttribute("data-theme", "system"); + await expect(html).toHaveClass("dark"); + + await trigger.click(); + const lightOption = page.getByRole("menuitemradio", { + name: "Light", + exact: true, + }); + await lightOption.click(); + await expect(trigger).toHaveAttribute("data-theme", "light"); + await expect(html).toHaveClass("light"); + await expect(lightOption).toBeHidden(); + + await trigger.click(); + const darkOption = page.getByRole("menuitemradio", { + name: "Dark", + exact: true, + }); + await darkOption.click(); + await expect(trigger).toHaveAttribute("data-theme", "dark"); + await expect(html).toHaveClass("dark"); + await expect(darkOption).toBeHidden(); + + await trigger.click(); + const systemOption = page.getByRole("menuitemradio", { + name: "System", + exact: true, + }); + await systemOption.click(); + await expect(trigger).toHaveAttribute("data-theme", "system"); + await expect(html).toHaveClass("dark"); + + await page.emulateMedia({ colorScheme: "light" }); + await expect(html).toHaveClass("light"); +}); + +test("shows a desktop scroll-to-top control after one viewport", async ({ + page, +}) => { + await page.setViewportSize({ width: 1280, height: 720 }); + await page.emulateMedia({ reducedMotion: "reduce" }); + await page.goto("/calls"); + + const scrollToTop = page.getByTestId("scroll-to-top"); + await expect(scrollToTop).toBeHidden(); + + await page.evaluate(() => { + window.scrollTo(0, document.documentElement.scrollHeight); + }); + await expect(scrollToTop).toBeVisible(); + await expect(scrollToTop).toHaveCSS("transform", "none"); + + await scrollToTop.click(); + await expect.poll(() => page.evaluate(() => window.scrollY)).toBe(0); +}); + test("publishes non-empty Markdown and LLM discovery files", async ({ request, }) => { @@ -271,4 +334,25 @@ test("keeps the guide usable on a narrow screen", async ({ page }) => { await expect( page.getByRole("button", { name: "Open navigation menu" }), ).toBeVisible(); + const mobileTheme = page.getByTestId("theme-menu-trigger-mobile"); + const mobileToc = page.getByRole("button", { + name: "Toggle table of contents", + }); + await expect(mobileTheme).toBeVisible(); + await expect(mobileToc).toBeVisible(); + + const themeCenterY = await mobileTheme.evaluate((element) => { + const rect = element.getBoundingClientRect(); + return rect.top + rect.height / 2; + }); + const tocCenterY = await mobileToc.evaluate((element) => { + const rect = element.getBoundingClientRect(); + return rect.top + rect.height / 2; + }); + expect(Math.abs(themeCenterY - tocCenterY)).toBeLessThan(4); + + await page.evaluate(() => { + window.scrollTo(0, document.documentElement.scrollHeight); + }); + await expect(page.getByTestId("scroll-to-top")).toHaveCSS("display", "none"); }); diff --git a/zudoku.config.tsx b/zudoku.config.tsx index 6759052..dabe3f4 100644 --- a/zudoku.config.tsx +++ b/zudoku.config.tsx @@ -1,4 +1,6 @@ import type { ZudokuConfig } from "zudoku"; +import { ScrollToTop } from "./src/components/ScrollToTop.js"; +import { ThemeMenu } from "./src/components/ThemeMenu.js"; import "./src/styles.css"; const legacyHashRedirect = ` @@ -64,6 +66,9 @@ const config = { showPoweredBy: false, }, header: { + themeSwitcher: { + enabled: false, + }, navigation: [ { label: "Website", @@ -81,6 +86,21 @@ const config = { search: "center", }, }, + slots: { + "head-navigation-end": () => ( + + ), + "mobile-top-bar-end": () => ( + + ), + "layout-after-head": ScrollToTop, + }, docs: { files: "/content/guides/**/*.{md,mdx}", defaultOptions: {