From 7ee25c07f23d13e29db1cb4034a0585870f3db0c Mon Sep 17 00:00:00 2001 From: Musa Date: Mon, 12 Jan 2026 10:59:30 -0800 Subject: [PATCH] chore: cleanup to remove extra tools --- .../vercel-ai-sdk/.github/workflows/lint.yml | 25 - .../.github/workflows/playwright.yml | 73 - demos/use_cases/vercel-ai-sdk/LICENSE | 13 - .../app/(chat)/api/document/route.ts | 126 - .../app/(chat)/api/suggestions/route.ts | 37 - .../vercel-ai-sdk/artifacts/actions.ts | 8 - .../vercel-ai-sdk/artifacts/code/client.tsx | 280 - .../vercel-ai-sdk/artifacts/code/server.ts | 75 - .../vercel-ai-sdk/artifacts/image/client.tsx | 76 - .../vercel-ai-sdk/artifacts/sheet/client.tsx | 115 - .../vercel-ai-sdk/artifacts/sheet/server.ts | 81 - .../vercel-ai-sdk/artifacts/text/client.tsx | 179 - .../vercel-ai-sdk/artifacts/text/server.ts | 73 - .../components/artifact-actions.tsx | 107 - .../components/artifact-close-button.tsx | 30 - .../components/artifact-messages.tsx | 115 - .../vercel-ai-sdk/components/artifact.tsx | 532 - .../vercel-ai-sdk/components/chat.tsx | 23 - .../vercel-ai-sdk/components/code-editor.tsx | 121 - .../vercel-ai-sdk/components/console.tsx | 193 - .../components/create-artifact.tsx | 93 - .../components/currency-exchange.tsx | 4 - .../components/data-stream-handler.tsx | 64 +- .../vercel-ai-sdk/components/diffview.tsx | 100 - .../components/document-preview.tsx | 295 - .../components/document-skeleton.tsx | 39 - .../vercel-ai-sdk/components/document.tsx | 161 - .../vercel-ai-sdk/components/image-editor.tsx | 49 - .../vercel-ai-sdk/components/messages.tsx | 5 - .../vercel-ai-sdk/components/sheet-editor.tsx | 140 - .../vercel-ai-sdk/components/suggestion.tsx | 77 - .../vercel-ai-sdk/components/text-editor.tsx | 164 - .../vercel-ai-sdk/components/toolbar.tsx | 476 - .../components/version-footer.tsx | 107 - .../vercel-ai-sdk/hooks/use-artifact.ts | 89 - .../vercel-ai-sdk/instrumentation.ts | 5 - .../vercel-ai-sdk/lib/ai/models.mock.ts | 173 - .../vercel-ai-sdk/lib/ai/models.test.ts | 81 - .../use_cases/vercel-ai-sdk/lib/ai/prompts.ts | 98 +- .../vercel-ai-sdk/lib/ai/providers.ts | 65 +- .../vercel-ai-sdk/lib/artifacts/server.ts | 98 - .../use_cases/vercel-ai-sdk/lib/db/queries.ts | 130 - .../use_cases/vercel-ai-sdk/lib/db/schema.ts | 49 - .../vercel-ai-sdk/lib/editor/config.ts | 49 - .../vercel-ai-sdk/lib/editor/diff.js | 475 - .../vercel-ai-sdk/lib/editor/functions.tsx | 62 - .../lib/editor/react-renderer.tsx | 13 - .../vercel-ai-sdk/lib/editor/suggestions.tsx | 158 - demos/use_cases/vercel-ai-sdk/lib/errors.ts | 13 - demos/use_cases/vercel-ai-sdk/lib/types.ts | 12 - demos/use_cases/vercel-ai-sdk/lib/utils.ts | 12 +- .../vercel-ai-sdk/playwright.config.ts | 100 - demos/use_cases/vercel-ai-sdk/pnpm-lock.yaml | 8951 ----------------- .../public/images/demo-thumbnail.png | Bin 23198 -> 0 bytes .../images/mouth of the seine, monet.jpg | Bin 33497 -> 0 bytes .../vercel-ai-sdk/tests/e2e/api.test.ts | 95 - .../vercel-ai-sdk/tests/e2e/auth.test.ts | 31 - .../vercel-ai-sdk/tests/e2e/chat.test.ts | 61 - .../tests/e2e/model-selector.test.ts | 69 - .../use_cases/vercel-ai-sdk/tests/fixtures.ts | 15 - .../use_cases/vercel-ai-sdk/tests/helpers.ts | 16 - .../vercel-ai-sdk/tests/pages/chat.ts | 71 - .../vercel-ai-sdk/tests/prompts/utils.ts | 30 - demos/use_cases/vercel-ai-sdk/vercel.json | 3 - 64 files changed, 28 insertions(+), 15052 deletions(-) delete mode 100644 demos/use_cases/vercel-ai-sdk/.github/workflows/lint.yml delete mode 100644 demos/use_cases/vercel-ai-sdk/.github/workflows/playwright.yml delete mode 100644 demos/use_cases/vercel-ai-sdk/LICENSE delete mode 100644 demos/use_cases/vercel-ai-sdk/app/(chat)/api/document/route.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/app/(chat)/api/suggestions/route.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/artifacts/actions.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/artifacts/code/client.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/artifacts/code/server.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/artifacts/image/client.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/artifacts/sheet/client.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/artifacts/sheet/server.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/artifacts/text/client.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/artifacts/text/server.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/components/artifact-actions.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/artifact-close-button.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/artifact-messages.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/artifact.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/code-editor.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/console.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/create-artifact.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/diffview.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/document-preview.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/document-skeleton.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/document.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/image-editor.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/sheet-editor.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/suggestion.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/text-editor.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/toolbar.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/components/version-footer.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/hooks/use-artifact.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/instrumentation.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/lib/ai/models.mock.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/lib/ai/models.test.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/lib/artifacts/server.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/lib/editor/config.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/lib/editor/diff.js delete mode 100644 demos/use_cases/vercel-ai-sdk/lib/editor/functions.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/lib/editor/react-renderer.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/lib/editor/suggestions.tsx delete mode 100644 demos/use_cases/vercel-ai-sdk/playwright.config.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/pnpm-lock.yaml delete mode 100644 demos/use_cases/vercel-ai-sdk/public/images/demo-thumbnail.png delete mode 100644 demos/use_cases/vercel-ai-sdk/public/images/mouth of the seine, monet.jpg delete mode 100644 demos/use_cases/vercel-ai-sdk/tests/e2e/api.test.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/tests/e2e/auth.test.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/tests/e2e/chat.test.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/tests/e2e/model-selector.test.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/tests/fixtures.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/tests/helpers.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/tests/pages/chat.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/tests/prompts/utils.ts delete mode 100644 demos/use_cases/vercel-ai-sdk/vercel.json diff --git a/demos/use_cases/vercel-ai-sdk/.github/workflows/lint.yml b/demos/use_cases/vercel-ai-sdk/.github/workflows/lint.yml deleted file mode 100644 index 1d57a670..00000000 --- a/demos/use_cases/vercel-ai-sdk/.github/workflows/lint.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Lint -on: - push: - -jobs: - build: - runs-on: ubuntu-22.04 - strategy: - matrix: - node-version: [20] - steps: - - uses: actions/checkout@v4 - - name: Install pnpm - uses: pnpm/action-setup@v4 - with: - version: 9.12.3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - cache: "pnpm" - - name: Install dependencies - run: pnpm install - - name: Run lint - run: pnpm lint diff --git a/demos/use_cases/vercel-ai-sdk/.github/workflows/playwright.yml b/demos/use_cases/vercel-ai-sdk/.github/workflows/playwright.yml deleted file mode 100644 index 6e18c3ec..00000000 --- a/demos/use_cases/vercel-ai-sdk/.github/workflows/playwright.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: Playwright Tests -on: - push: - branches: [main, master] - pull_request: - branches: [main, master] - -jobs: - test: - timeout-minutes: 30 - runs-on: ubuntu-latest - env: - AUTH_SECRET: ${{ secrets.AUTH_SECRET }} - POSTGRES_URL: ${{ secrets.POSTGRES_URL }} - BLOB_READ_WRITE_TOKEN: ${{ secrets.BLOB_READ_WRITE_TOKEN }} - REDIS_URL: ${{ secrets.REDIS_URL }} - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - - uses: actions/setup-node@v4 - with: - node-version: lts/* - - - name: Install pnpm - uses: pnpm/action-setup@v2 - with: - version: latest - run_install: false - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - - uses: actions/cache@v3 - with: - path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - uses: actions/setup-node@v4 - with: - node-version: lts/* - cache: "pnpm" - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Cache Playwright browsers - uses: actions/cache@v3 - id: playwright-cache - with: - path: ~/.cache/ms-playwright - key: ${{ runner.os }}-playwright-${{ hashFiles('**/pnpm-lock.yaml') }} - - - name: Install Playwright Browsers - if: steps.playwright-cache.outputs.cache-hit != 'true' - run: pnpm exec playwright install --with-deps chromium - - - name: Run Playwright tests - run: pnpm test - - - uses: actions/upload-artifact@v4 - if: always() && !cancelled() - with: - name: playwright-report - path: playwright-report/ - retention-days: 7 diff --git a/demos/use_cases/vercel-ai-sdk/LICENSE b/demos/use_cases/vercel-ai-sdk/LICENSE deleted file mode 100644 index f8a36dbb..00000000 --- a/demos/use_cases/vercel-ai-sdk/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2024 Vercel, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/demos/use_cases/vercel-ai-sdk/app/(chat)/api/document/route.ts b/demos/use_cases/vercel-ai-sdk/app/(chat)/api/document/route.ts deleted file mode 100644 index 0ea78ff5..00000000 --- a/demos/use_cases/vercel-ai-sdk/app/(chat)/api/document/route.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { auth } from "@/app/(auth)/auth"; -import type { ArtifactKind } from "@/components/artifact"; -import { - deleteDocumentsByIdAfterTimestamp, - getDocumentsById, - saveDocument, -} from "@/lib/db/queries"; -import { ChatSDKError } from "@/lib/errors"; - -export async function GET(request: Request) { - const { searchParams } = new URL(request.url); - const id = searchParams.get("id"); - - if (!id) { - return new ChatSDKError( - "bad_request:api", - "Parameter id is missing" - ).toResponse(); - } - - const session = await auth(); - - if (!session?.user) { - return new ChatSDKError("unauthorized:document").toResponse(); - } - - const documents = await getDocumentsById({ id }); - - const [document] = documents; - - if (!document) { - return new ChatSDKError("not_found:document").toResponse(); - } - - if (document.userId !== session.user.id) { - return new ChatSDKError("forbidden:document").toResponse(); - } - - return Response.json(documents, { status: 200 }); -} - -export async function POST(request: Request) { - const { searchParams } = new URL(request.url); - const id = searchParams.get("id"); - - if (!id) { - return new ChatSDKError( - "bad_request:api", - "Parameter id is required." - ).toResponse(); - } - - const session = await auth(); - - if (!session?.user) { - return new ChatSDKError("not_found:document").toResponse(); - } - - const { - content, - title, - kind, - }: { content: string; title: string; kind: ArtifactKind } = - await request.json(); - - const documents = await getDocumentsById({ id }); - - if (documents.length > 0) { - const [doc] = documents; - - if (doc.userId !== session.user.id) { - return new ChatSDKError("forbidden:document").toResponse(); - } - } - - const document = await saveDocument({ - id, - content, - title, - kind, - userId: session.user.id, - }); - - return Response.json(document, { status: 200 }); -} - -export async function DELETE(request: Request) { - const { searchParams } = new URL(request.url); - const id = searchParams.get("id"); - const timestamp = searchParams.get("timestamp"); - - if (!id) { - return new ChatSDKError( - "bad_request:api", - "Parameter id is required." - ).toResponse(); - } - - if (!timestamp) { - return new ChatSDKError( - "bad_request:api", - "Parameter timestamp is required." - ).toResponse(); - } - - const session = await auth(); - - if (!session?.user) { - return new ChatSDKError("unauthorized:document").toResponse(); - } - - const documents = await getDocumentsById({ id }); - - const [document] = documents; - - if (document.userId !== session.user.id) { - return new ChatSDKError("forbidden:document").toResponse(); - } - - const documentsDeleted = await deleteDocumentsByIdAfterTimestamp({ - id, - timestamp: new Date(timestamp), - }); - - return Response.json(documentsDeleted, { status: 200 }); -} diff --git a/demos/use_cases/vercel-ai-sdk/app/(chat)/api/suggestions/route.ts b/demos/use_cases/vercel-ai-sdk/app/(chat)/api/suggestions/route.ts deleted file mode 100644 index 8801004e..00000000 --- a/demos/use_cases/vercel-ai-sdk/app/(chat)/api/suggestions/route.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { auth } from "@/app/(auth)/auth"; -import { getSuggestionsByDocumentId } from "@/lib/db/queries"; -import { ChatSDKError } from "@/lib/errors"; - -export async function GET(request: Request) { - const { searchParams } = new URL(request.url); - const documentId = searchParams.get("documentId"); - - if (!documentId) { - return new ChatSDKError( - "bad_request:api", - "Parameter documentId is required." - ).toResponse(); - } - - const session = await auth(); - - if (!session?.user) { - return new ChatSDKError("unauthorized:suggestions").toResponse(); - } - - const suggestions = await getSuggestionsByDocumentId({ - documentId, - }); - - const [suggestion] = suggestions; - - if (!suggestion) { - return Response.json([], { status: 200 }); - } - - if (suggestion.userId !== session.user.id) { - return new ChatSDKError("forbidden:api").toResponse(); - } - - return Response.json(suggestions, { status: 200 }); -} diff --git a/demos/use_cases/vercel-ai-sdk/artifacts/actions.ts b/demos/use_cases/vercel-ai-sdk/artifacts/actions.ts deleted file mode 100644 index 2000ca11..00000000 --- a/demos/use_cases/vercel-ai-sdk/artifacts/actions.ts +++ /dev/null @@ -1,8 +0,0 @@ -"use server"; - -import { getSuggestionsByDocumentId } from "@/lib/db/queries"; - -export async function getSuggestions({ documentId }: { documentId: string }) { - const suggestions = await getSuggestionsByDocumentId({ documentId }); - return suggestions ?? []; -} diff --git a/demos/use_cases/vercel-ai-sdk/artifacts/code/client.tsx b/demos/use_cases/vercel-ai-sdk/artifacts/code/client.tsx deleted file mode 100644 index 5444a12f..00000000 --- a/demos/use_cases/vercel-ai-sdk/artifacts/code/client.tsx +++ /dev/null @@ -1,280 +0,0 @@ -import { toast } from "sonner"; -import { CodeEditor } from "@/components/code-editor"; -import { - Console, - type ConsoleOutput, - type ConsoleOutputContent, -} from "@/components/console"; -import { Artifact } from "@/components/create-artifact"; -import { - CopyIcon, - LogsIcon, - MessageIcon, - PlayIcon, - RedoIcon, - UndoIcon, -} from "@/components/icons"; -import { generateUUID } from "@/lib/utils"; - -const OUTPUT_HANDLERS = { - matplotlib: ` - import io - import base64 - from matplotlib import pyplot as plt - - # Clear any existing plots - plt.clf() - plt.close('all') - - # Switch to agg backend - plt.switch_backend('agg') - - def setup_matplotlib_output(): - def custom_show(): - if plt.gcf().get_size_inches().prod() * plt.gcf().dpi ** 2 > 25_000_000: - print("Warning: Plot size too large, reducing quality") - plt.gcf().set_dpi(100) - - png_buf = io.BytesIO() - plt.savefig(png_buf, format='png') - png_buf.seek(0) - png_base64 = base64.b64encode(png_buf.read()).decode('utf-8') - print(f'data:image/png;base64,{png_base64}') - png_buf.close() - - plt.clf() - plt.close('all') - - plt.show = custom_show - `, - basic: ` - # Basic output capture setup - `, -}; - -function detectRequiredHandlers(code: string): string[] { - const handlers: string[] = ["basic"]; - - if (code.includes("matplotlib") || code.includes("plt.")) { - handlers.push("matplotlib"); - } - - return handlers; -} - -type Metadata = { - outputs: ConsoleOutput[]; -}; - -export const codeArtifact = new Artifact<"code", Metadata>({ - kind: "code", - description: - "Useful for code generation; Code execution is only available for python code.", - initialize: ({ setMetadata }) => { - setMetadata({ - outputs: [], - }); - }, - onStreamPart: ({ streamPart, setArtifact }) => { - if (streamPart.type === "data-codeDelta") { - setArtifact((draftArtifact) => ({ - ...draftArtifact, - content: streamPart.data, - isVisible: - draftArtifact.status === "streaming" && - draftArtifact.content.length > 300 && - draftArtifact.content.length < 310 - ? true - : draftArtifact.isVisible, - status: "streaming", - })); - } - }, - content: ({ metadata, setMetadata, ...props }) => { - return ( - <> -
- -
- - {metadata?.outputs && ( - { - setMetadata({ - ...metadata, - outputs: [], - }); - }} - /> - )} - - ); - }, - actions: [ - { - icon: , - label: "Run", - description: "Execute code", - onClick: async ({ content, setMetadata }) => { - const runId = generateUUID(); - const outputContent: ConsoleOutputContent[] = []; - - setMetadata((metadata) => ({ - ...metadata, - outputs: [ - ...metadata.outputs, - { - id: runId, - contents: [], - status: "in_progress", - }, - ], - })); - - try { - // @ts-expect-error - loadPyodide is not defined - const currentPyodideInstance = await globalThis.loadPyodide({ - indexURL: "https://cdn.jsdelivr.net/pyodide/v0.23.4/full/", - }); - - currentPyodideInstance.setStdout({ - batched: (output: string) => { - outputContent.push({ - type: output.startsWith("data:image/png;base64") - ? "image" - : "text", - value: output, - }); - }, - }); - - await currentPyodideInstance.loadPackagesFromImports(content, { - messageCallback: (message: string) => { - setMetadata((metadata) => ({ - ...metadata, - outputs: [ - ...metadata.outputs.filter((output) => output.id !== runId), - { - id: runId, - contents: [{ type: "text", value: message }], - status: "loading_packages", - }, - ], - })); - }, - }); - - const requiredHandlers = detectRequiredHandlers(content); - for (const handler of requiredHandlers) { - if (OUTPUT_HANDLERS[handler as keyof typeof OUTPUT_HANDLERS]) { - await currentPyodideInstance.runPythonAsync( - OUTPUT_HANDLERS[handler as keyof typeof OUTPUT_HANDLERS] - ); - - if (handler === "matplotlib") { - await currentPyodideInstance.runPythonAsync( - "setup_matplotlib_output()" - ); - } - } - } - - await currentPyodideInstance.runPythonAsync(content); - - setMetadata((metadata) => ({ - ...metadata, - outputs: [ - ...metadata.outputs.filter((output) => output.id !== runId), - { - id: runId, - contents: outputContent, - status: "completed", - }, - ], - })); - } catch (error: any) { - setMetadata((metadata) => ({ - ...metadata, - outputs: [ - ...metadata.outputs.filter((output) => output.id !== runId), - { - id: runId, - contents: [{ type: "text", value: error.message }], - status: "failed", - }, - ], - })); - } - }, - }, - { - icon: , - description: "View Previous version", - onClick: ({ handleVersionChange }) => { - handleVersionChange("prev"); - }, - isDisabled: ({ currentVersionIndex }) => { - if (currentVersionIndex === 0) { - return true; - } - - return false; - }, - }, - { - icon: , - description: "View Next version", - onClick: ({ handleVersionChange }) => { - handleVersionChange("next"); - }, - isDisabled: ({ isCurrentVersion }) => { - if (isCurrentVersion) { - return true; - } - - return false; - }, - }, - { - icon: , - description: "Copy code to clipboard", - onClick: ({ content }) => { - navigator.clipboard.writeText(content); - toast.success("Copied to clipboard!"); - }, - }, - ], - toolbar: [ - { - icon: , - description: "Add comments", - onClick: ({ sendMessage }) => { - sendMessage({ - role: "user", - parts: [ - { - type: "text", - text: "Add comments to the code snippet for understanding", - }, - ], - }); - }, - }, - { - icon: , - description: "Add logs", - onClick: ({ sendMessage }) => { - sendMessage({ - role: "user", - parts: [ - { - type: "text", - text: "Add logs to the code snippet for debugging", - }, - ], - }); - }, - }, - ], -}); diff --git a/demos/use_cases/vercel-ai-sdk/artifacts/code/server.ts b/demos/use_cases/vercel-ai-sdk/artifacts/code/server.ts deleted file mode 100644 index 1318ef86..00000000 --- a/demos/use_cases/vercel-ai-sdk/artifacts/code/server.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { streamObject } from "ai"; -import { z } from "zod"; -import { codePrompt, updateDocumentPrompt } from "@/lib/ai/prompts"; -import { getArtifactModel } from "@/lib/ai/providers"; -import { createDocumentHandler } from "@/lib/artifacts/server"; - -export const codeDocumentHandler = createDocumentHandler<"code">({ - kind: "code", - onCreateDocument: async ({ title, dataStream }) => { - let draftContent = ""; - - const { fullStream } = streamObject({ - model: getArtifactModel(), - system: codePrompt, - prompt: title, - schema: z.object({ - code: z.string(), - }), - }); - - for await (const delta of fullStream) { - const { type } = delta; - - if (type === "object") { - const { object } = delta; - const { code } = object; - - if (code) { - dataStream.write({ - type: "data-codeDelta", - data: code ?? "", - transient: true, - }); - - draftContent = code; - } - } - } - - return draftContent; - }, - onUpdateDocument: async ({ document, description, dataStream }) => { - let draftContent = ""; - - const { fullStream } = streamObject({ - model: getArtifactModel(), - system: updateDocumentPrompt(document.content, "code"), - prompt: description, - schema: z.object({ - code: z.string(), - }), - }); - - for await (const delta of fullStream) { - const { type } = delta; - - if (type === "object") { - const { object } = delta; - const { code } = object; - - if (code) { - dataStream.write({ - type: "data-codeDelta", - data: code ?? "", - transient: true, - }); - - draftContent = code; - } - } - } - - return draftContent; - }, -}); diff --git a/demos/use_cases/vercel-ai-sdk/artifacts/image/client.tsx b/demos/use_cases/vercel-ai-sdk/artifacts/image/client.tsx deleted file mode 100644 index 54045eb1..00000000 --- a/demos/use_cases/vercel-ai-sdk/artifacts/image/client.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { toast } from "sonner"; -import { Artifact } from "@/components/create-artifact"; -import { CopyIcon, RedoIcon, UndoIcon } from "@/components/icons"; -import { ImageEditor } from "@/components/image-editor"; - -export const imageArtifact = new Artifact({ - kind: "image", - description: "Useful for image generation", - onStreamPart: ({ streamPart, setArtifact }) => { - if (streamPart.type === "data-imageDelta") { - setArtifact((draftArtifact) => ({ - ...draftArtifact, - content: streamPart.data, - isVisible: true, - status: "streaming", - })); - } - }, - content: ImageEditor, - actions: [ - { - icon: , - description: "View Previous version", - onClick: ({ handleVersionChange }) => { - handleVersionChange("prev"); - }, - isDisabled: ({ currentVersionIndex }) => { - if (currentVersionIndex === 0) { - return true; - } - - return false; - }, - }, - { - icon: , - description: "View Next version", - onClick: ({ handleVersionChange }) => { - handleVersionChange("next"); - }, - isDisabled: ({ isCurrentVersion }) => { - if (isCurrentVersion) { - return true; - } - - return false; - }, - }, - { - icon: , - description: "Copy image to clipboard", - onClick: ({ content }) => { - const img = new Image(); - img.src = `data:image/png;base64,${content}`; - - img.onload = () => { - const canvas = document.createElement("canvas"); - canvas.width = img.width; - canvas.height = img.height; - const ctx = canvas.getContext("2d"); - ctx?.drawImage(img, 0, 0); - canvas.toBlob((blob) => { - if (blob) { - navigator.clipboard.write([ - new ClipboardItem({ "image/png": blob }), - ]); - } - }, "image/png"); - }; - - toast.success("Copied image to clipboard!"); - }, - }, - ], - toolbar: [], -}); diff --git a/demos/use_cases/vercel-ai-sdk/artifacts/sheet/client.tsx b/demos/use_cases/vercel-ai-sdk/artifacts/sheet/client.tsx deleted file mode 100644 index 5db4abf4..00000000 --- a/demos/use_cases/vercel-ai-sdk/artifacts/sheet/client.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { parse, unparse } from "papaparse"; -import { toast } from "sonner"; -import { Artifact } from "@/components/create-artifact"; -import { - CopyIcon, - LineChartIcon, - RedoIcon, - SparklesIcon, - UndoIcon, -} from "@/components/icons"; -import { SpreadsheetEditor } from "@/components/sheet-editor"; - -type Metadata = any; - -export const sheetArtifact = new Artifact<"sheet", Metadata>({ - kind: "sheet", - description: "Useful for working with spreadsheets", - initialize: () => null, - onStreamPart: ({ setArtifact, streamPart }) => { - if (streamPart.type === "data-sheetDelta") { - setArtifact((draftArtifact) => ({ - ...draftArtifact, - content: streamPart.data, - isVisible: true, - status: "streaming", - })); - } - }, - content: ({ content, currentVersionIndex, onSaveContent, status }) => { - return ( - - ); - }, - actions: [ - { - icon: , - description: "View Previous version", - onClick: ({ handleVersionChange }) => { - handleVersionChange("prev"); - }, - isDisabled: ({ currentVersionIndex }) => { - if (currentVersionIndex === 0) { - return true; - } - - return false; - }, - }, - { - icon: , - description: "View Next version", - onClick: ({ handleVersionChange }) => { - handleVersionChange("next"); - }, - isDisabled: ({ isCurrentVersion }) => { - if (isCurrentVersion) { - return true; - } - - return false; - }, - }, - { - icon: , - description: "Copy as .csv", - onClick: ({ content }) => { - const parsed = parse(content, { skipEmptyLines: true }); - - const nonEmptyRows = parsed.data.filter((row) => - row.some((cell) => cell.trim() !== "") - ); - - const cleanedCsv = unparse(nonEmptyRows); - - navigator.clipboard.writeText(cleanedCsv); - toast.success("Copied csv to clipboard!"); - }, - }, - ], - toolbar: [ - { - description: "Format and clean data", - icon: , - onClick: ({ sendMessage }) => { - sendMessage({ - role: "user", - parts: [ - { type: "text", text: "Can you please format and clean the data?" }, - ], - }); - }, - }, - { - description: "Analyze and visualize data", - icon: , - onClick: ({ sendMessage }) => { - sendMessage({ - role: "user", - parts: [ - { - type: "text", - text: "Can you please analyze and visualize the data by creating a new code artifact in python?", - }, - ], - }); - }, - }, - ], -}); diff --git a/demos/use_cases/vercel-ai-sdk/artifacts/sheet/server.ts b/demos/use_cases/vercel-ai-sdk/artifacts/sheet/server.ts deleted file mode 100644 index 4d90f2c9..00000000 --- a/demos/use_cases/vercel-ai-sdk/artifacts/sheet/server.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { streamObject } from "ai"; -import { z } from "zod"; -import { sheetPrompt, updateDocumentPrompt } from "@/lib/ai/prompts"; -import { getArtifactModel } from "@/lib/ai/providers"; -import { createDocumentHandler } from "@/lib/artifacts/server"; - -export const sheetDocumentHandler = createDocumentHandler<"sheet">({ - kind: "sheet", - onCreateDocument: async ({ title, dataStream }) => { - let draftContent = ""; - - const { fullStream } = streamObject({ - model: getArtifactModel(), - system: sheetPrompt, - prompt: title, - schema: z.object({ - csv: z.string().describe("CSV data"), - }), - }); - - for await (const delta of fullStream) { - const { type } = delta; - - if (type === "object") { - const { object } = delta; - const { csv } = object; - - if (csv) { - dataStream.write({ - type: "data-sheetDelta", - data: csv, - transient: true, - }); - - draftContent = csv; - } - } - } - - dataStream.write({ - type: "data-sheetDelta", - data: draftContent, - transient: true, - }); - - return draftContent; - }, - onUpdateDocument: async ({ document, description, dataStream }) => { - let draftContent = ""; - - const { fullStream } = streamObject({ - model: getArtifactModel(), - system: updateDocumentPrompt(document.content, "sheet"), - prompt: description, - schema: z.object({ - csv: z.string(), - }), - }); - - for await (const delta of fullStream) { - const { type } = delta; - - if (type === "object") { - const { object } = delta; - const { csv } = object; - - if (csv) { - dataStream.write({ - type: "data-sheetDelta", - data: csv, - transient: true, - }); - - draftContent = csv; - } - } - } - - return draftContent; - }, -}); diff --git a/demos/use_cases/vercel-ai-sdk/artifacts/text/client.tsx b/demos/use_cases/vercel-ai-sdk/artifacts/text/client.tsx deleted file mode 100644 index 10730e49..00000000 --- a/demos/use_cases/vercel-ai-sdk/artifacts/text/client.tsx +++ /dev/null @@ -1,179 +0,0 @@ -import { toast } from "sonner"; -import { Artifact } from "@/components/create-artifact"; -import { DiffView } from "@/components/diffview"; -import { DocumentSkeleton } from "@/components/document-skeleton"; -import { - ClockRewind, - CopyIcon, - MessageIcon, - PenIcon, - RedoIcon, - UndoIcon, -} from "@/components/icons"; -import { Editor } from "@/components/text-editor"; -import type { Suggestion } from "@/lib/db/schema"; -import { getSuggestions } from "../actions"; - -type TextArtifactMetadata = { - suggestions: Suggestion[]; -}; - -export const textArtifact = new Artifact<"text", TextArtifactMetadata>({ - kind: "text", - description: "Useful for text content, like drafting essays and emails.", - initialize: async ({ documentId, setMetadata }) => { - const suggestions = await getSuggestions({ documentId }); - - setMetadata({ - suggestions, - }); - }, - onStreamPart: ({ streamPart, setMetadata, setArtifact }) => { - if (streamPart.type === "data-suggestion") { - setMetadata((metadata) => { - return { - suggestions: [...metadata.suggestions, streamPart.data], - }; - }); - } - - if (streamPart.type === "data-textDelta") { - setArtifact((draftArtifact) => { - return { - ...draftArtifact, - content: draftArtifact.content + streamPart.data, - isVisible: - draftArtifact.status === "streaming" && - draftArtifact.content.length > 400 && - draftArtifact.content.length < 450 - ? true - : draftArtifact.isVisible, - status: "streaming", - }; - }); - } - }, - content: ({ - mode, - status, - content, - isCurrentVersion, - currentVersionIndex, - onSaveContent, - getDocumentContentById, - isLoading, - metadata, - }) => { - if (isLoading) { - return ; - } - - if (mode === "diff") { - const oldContent = getDocumentContentById(currentVersionIndex - 1); - const newContent = getDocumentContentById(currentVersionIndex); - - return ; - } - - return ( -
- - - {metadata?.suggestions && metadata.suggestions.length > 0 ? ( -
- ) : null} -
- ); - }, - actions: [ - { - icon: , - description: "View changes", - onClick: ({ handleVersionChange }) => { - handleVersionChange("toggle"); - }, - isDisabled: ({ currentVersionIndex }) => { - if (currentVersionIndex === 0) { - return true; - } - - return false; - }, - }, - { - icon: , - description: "View Previous version", - onClick: ({ handleVersionChange }) => { - handleVersionChange("prev"); - }, - isDisabled: ({ currentVersionIndex }) => { - if (currentVersionIndex === 0) { - return true; - } - - return false; - }, - }, - { - icon: , - description: "View Next version", - onClick: ({ handleVersionChange }) => { - handleVersionChange("next"); - }, - isDisabled: ({ isCurrentVersion }) => { - if (isCurrentVersion) { - return true; - } - - return false; - }, - }, - { - icon: , - description: "Copy to clipboard", - onClick: ({ content }) => { - navigator.clipboard.writeText(content); - toast.success("Copied to clipboard!"); - }, - }, - ], - toolbar: [ - { - icon: , - description: "Add final polish", - onClick: ({ sendMessage }) => { - sendMessage({ - role: "user", - parts: [ - { - type: "text", - text: "Please add final polish and check for grammar, add section titles for better structure, and ensure everything reads smoothly.", - }, - ], - }); - }, - }, - { - icon: , - description: "Request suggestions", - onClick: ({ sendMessage }) => { - sendMessage({ - role: "user", - parts: [ - { - type: "text", - text: "Please add suggestions you have that could improve the writing.", - }, - ], - }); - }, - }, - ], -}); diff --git a/demos/use_cases/vercel-ai-sdk/artifacts/text/server.ts b/demos/use_cases/vercel-ai-sdk/artifacts/text/server.ts deleted file mode 100644 index 8f7756cc..00000000 --- a/demos/use_cases/vercel-ai-sdk/artifacts/text/server.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { smoothStream, streamText } from "ai"; -import { updateDocumentPrompt } from "@/lib/ai/prompts"; -import { getArtifactModel } from "@/lib/ai/providers"; -import { createDocumentHandler } from "@/lib/artifacts/server"; - -export const textDocumentHandler = createDocumentHandler<"text">({ - kind: "text", - onCreateDocument: async ({ title, dataStream }) => { - let draftContent = ""; - - const { fullStream } = streamText({ - model: getArtifactModel(), - system: - "Write about the given topic. Markdown is supported. Use headings wherever appropriate.", - experimental_transform: smoothStream({ chunking: "word" }), - prompt: title, - }); - - for await (const delta of fullStream) { - const { type } = delta; - - if (type === "text-delta") { - const { text } = delta; - - draftContent += text; - - dataStream.write({ - type: "data-textDelta", - data: text, - transient: true, - }); - } - } - - return draftContent; - }, - onUpdateDocument: async ({ document, description, dataStream }) => { - let draftContent = ""; - - const { fullStream } = streamText({ - model: getArtifactModel(), - system: updateDocumentPrompt(document.content, "text"), - experimental_transform: smoothStream({ chunking: "word" }), - prompt: description, - providerOptions: { - openai: { - prediction: { - type: "content", - content: document.content, - }, - }, - }, - }); - - for await (const delta of fullStream) { - const { type } = delta; - - if (type === "text-delta") { - const { text } = delta; - - draftContent += text; - - dataStream.write({ - type: "data-textDelta", - data: text, - transient: true, - }); - } - } - - return draftContent; - }, -}); diff --git a/demos/use_cases/vercel-ai-sdk/components/artifact-actions.tsx b/demos/use_cases/vercel-ai-sdk/components/artifact-actions.tsx deleted file mode 100644 index 308b56ae..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/artifact-actions.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { type Dispatch, memo, type SetStateAction, useState } from "react"; -import { toast } from "sonner"; -import { cn } from "@/lib/utils"; -import { artifactDefinitions, type UIArtifact } from "./artifact"; -import type { ArtifactActionContext } from "./create-artifact"; -import { Button } from "./ui/button"; -import { Tooltip, TooltipContent, TooltipTrigger } from "./ui/tooltip"; - -type ArtifactActionsProps = { - artifact: UIArtifact; - handleVersionChange: (type: "next" | "prev" | "toggle" | "latest") => void; - currentVersionIndex: number; - isCurrentVersion: boolean; - mode: "edit" | "diff"; - metadata: any; - setMetadata: Dispatch>; -}; - -function PureArtifactActions({ - artifact, - handleVersionChange, - currentVersionIndex, - isCurrentVersion, - mode, - metadata, - setMetadata, -}: ArtifactActionsProps) { - const [isLoading, setIsLoading] = useState(false); - - const artifactDefinition = artifactDefinitions.find( - (definition) => definition.kind === artifact.kind - ); - - if (!artifactDefinition) { - throw new Error("Artifact definition not found!"); - } - - const actionContext: ArtifactActionContext = { - content: artifact.content, - handleVersionChange, - currentVersionIndex, - isCurrentVersion, - mode, - metadata, - setMetadata, - }; - - return ( -
- {artifactDefinition.actions.map((action) => ( - - - - - {action.description} - - ))} -
- ); -} - -export const ArtifactActions = memo( - PureArtifactActions, - (prevProps, nextProps) => { - if (prevProps.artifact.status !== nextProps.artifact.status) { - return false; - } - if (prevProps.currentVersionIndex !== nextProps.currentVersionIndex) { - return false; - } - if (prevProps.isCurrentVersion !== nextProps.isCurrentVersion) { - return false; - } - if (prevProps.artifact.content !== nextProps.artifact.content) { - return false; - } - - return true; - } -); diff --git a/demos/use_cases/vercel-ai-sdk/components/artifact-close-button.tsx b/demos/use_cases/vercel-ai-sdk/components/artifact-close-button.tsx deleted file mode 100644 index 02112a22..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/artifact-close-button.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { memo } from "react"; -import { initialArtifactData, useArtifact } from "@/hooks/use-artifact"; -import { CrossIcon } from "./icons"; -import { Button } from "./ui/button"; - -function PureArtifactCloseButton() { - const { setArtifact } = useArtifact(); - - return ( - - ); -} - -export const ArtifactCloseButton = memo(PureArtifactCloseButton, () => true); diff --git a/demos/use_cases/vercel-ai-sdk/components/artifact-messages.tsx b/demos/use_cases/vercel-ai-sdk/components/artifact-messages.tsx deleted file mode 100644 index 3cfa972b..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/artifact-messages.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import type { UseChatHelpers } from "@ai-sdk/react"; -import equal from "fast-deep-equal"; -import { AnimatePresence, motion } from "framer-motion"; -import { memo } from "react"; -import { useMessages } from "@/hooks/use-messages"; -import type { Vote } from "@/lib/db/schema"; -import type { ChatMessage } from "@/lib/types"; -import type { UIArtifact } from "./artifact"; -import { PreviewMessage, ThinkingMessage } from "./message"; - -type ArtifactMessagesProps = { - addToolApprovalResponse: UseChatHelpers["addToolApprovalResponse"]; - chatId: string; - status: UseChatHelpers["status"]; - votes: Vote[] | undefined; - messages: ChatMessage[]; - setMessages: UseChatHelpers["setMessages"]; - regenerate: UseChatHelpers["regenerate"]; - isReadonly: boolean; - artifactStatus: UIArtifact["status"]; -}; - -function PureArtifactMessages({ - addToolApprovalResponse, - chatId, - status, - votes, - messages, - setMessages, - regenerate, - isReadonly, -}: ArtifactMessagesProps) { - const { - containerRef: messagesContainerRef, - endRef: messagesEndRef, - onViewportEnter, - onViewportLeave, - hasSentMessage, - } = useMessages({ - status, - }); - - return ( -
- {messages.map((message, index) => ( - vote.messageId === message.id) - : undefined - } - /> - ))} - - - {status === "submitted" && - !messages.some((msg) => - msg.parts?.some( - (part) => "state" in part && part.state === "approval-responded" - ) - ) && } - - - -
- ); -} - -function areEqual( - prevProps: ArtifactMessagesProps, - nextProps: ArtifactMessagesProps -) { - if ( - prevProps.artifactStatus === "streaming" && - nextProps.artifactStatus === "streaming" - ) { - return true; - } - - if (prevProps.status !== nextProps.status) { - return false; - } - if (prevProps.status && nextProps.status) { - return false; - } - if (prevProps.messages.length !== nextProps.messages.length) { - return false; - } - if (!equal(prevProps.votes, nextProps.votes)) { - return false; - } - - return true; -} - -export const ArtifactMessages = memo(PureArtifactMessages, areEqual); diff --git a/demos/use_cases/vercel-ai-sdk/components/artifact.tsx b/demos/use_cases/vercel-ai-sdk/components/artifact.tsx deleted file mode 100644 index 5cde3b18..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/artifact.tsx +++ /dev/null @@ -1,532 +0,0 @@ -import type { UseChatHelpers } from "@ai-sdk/react"; -import { formatDistance } from "date-fns"; -import equal from "fast-deep-equal"; -import { AnimatePresence, motion } from "framer-motion"; -import { - type Dispatch, - memo, - type SetStateAction, - useCallback, - useEffect, - useState, -} from "react"; -import useSWR, { useSWRConfig } from "swr"; -import { useDebounceCallback, useWindowSize } from "usehooks-ts"; -import { codeArtifact } from "@/artifacts/code/client"; -import { imageArtifact } from "@/artifacts/image/client"; -import { sheetArtifact } from "@/artifacts/sheet/client"; -import { textArtifact } from "@/artifacts/text/client"; -import { useArtifact } from "@/hooks/use-artifact"; -import type { Document, Vote } from "@/lib/db/schema"; -import type { Attachment, ChatMessage } from "@/lib/types"; -import { fetcher } from "@/lib/utils"; -import { ArtifactActions } from "./artifact-actions"; -import { ArtifactCloseButton } from "./artifact-close-button"; -import { ArtifactMessages } from "./artifact-messages"; -import { MultimodalInput } from "./multimodal-input"; -import { Toolbar } from "./toolbar"; -import { useSidebar } from "./ui/sidebar"; -import { VersionFooter } from "./version-footer"; -import type { VisibilityType } from "./visibility-selector"; - -export const artifactDefinitions = [ - textArtifact, - codeArtifact, - imageArtifact, - sheetArtifact, -]; -export type ArtifactKind = (typeof artifactDefinitions)[number]["kind"]; - -export type UIArtifact = { - title: string; - documentId: string; - kind: ArtifactKind; - content: string; - isVisible: boolean; - status: "streaming" | "idle"; - boundingBox: { - top: number; - left: number; - width: number; - height: number; - }; -}; - -function PureArtifact({ - addToolApprovalResponse, - chatId, - input, - setInput, - status, - stop, - attachments, - setAttachments, - sendMessage, - messages, - setMessages, - regenerate, - votes, - isReadonly, - selectedVisibilityType, - selectedModelId, -}: { - addToolApprovalResponse: UseChatHelpers["addToolApprovalResponse"]; - chatId: string; - input: string; - setInput: Dispatch>; - status: UseChatHelpers["status"]; - stop: UseChatHelpers["stop"]; - attachments: Attachment[]; - setAttachments: Dispatch>; - messages: ChatMessage[]; - setMessages: UseChatHelpers["setMessages"]; - votes: Vote[] | undefined; - sendMessage: UseChatHelpers["sendMessage"]; - regenerate: UseChatHelpers["regenerate"]; - isReadonly: boolean; - selectedVisibilityType: VisibilityType; - selectedModelId: string; -}) { - const { artifact, setArtifact, metadata, setMetadata } = useArtifact(); - - const { - data: documents, - isLoading: isDocumentsFetching, - mutate: mutateDocuments, - } = useSWR( - artifact.documentId !== "init" && artifact.status !== "streaming" - ? `/api/document?id=${artifact.documentId}` - : null, - fetcher - ); - - const [mode, setMode] = useState<"edit" | "diff">("edit"); - const [document, setDocument] = useState(null); - const [currentVersionIndex, setCurrentVersionIndex] = useState(-1); - - const { open: isSidebarOpen } = useSidebar(); - - useEffect(() => { - if (documents && documents.length > 0) { - const mostRecentDocument = documents.at(-1); - - if (mostRecentDocument) { - setDocument(mostRecentDocument); - setCurrentVersionIndex(documents.length - 1); - setArtifact((currentArtifact) => ({ - ...currentArtifact, - content: mostRecentDocument.content ?? "", - })); - } - } - }, [documents, setArtifact]); - - useEffect(() => { - mutateDocuments(); - }, [mutateDocuments]); - - const { mutate } = useSWRConfig(); - const [isContentDirty, setIsContentDirty] = useState(false); - - const handleContentChange = useCallback( - (updatedContent: string) => { - if (!artifact) { - return; - } - - mutate( - `/api/document?id=${artifact.documentId}`, - async (currentDocuments) => { - if (!currentDocuments) { - return []; - } - - const currentDocument = currentDocuments.at(-1); - - if (!currentDocument || !currentDocument.content) { - setIsContentDirty(false); - return currentDocuments; - } - - if (currentDocument.content !== updatedContent) { - await fetch(`/api/document?id=${artifact.documentId}`, { - method: "POST", - body: JSON.stringify({ - title: artifact.title, - content: updatedContent, - kind: artifact.kind, - }), - }); - - setIsContentDirty(false); - - const newDocument = { - ...currentDocument, - content: updatedContent, - createdAt: new Date(), - }; - - return [...currentDocuments, newDocument]; - } - return currentDocuments; - }, - { revalidate: false } - ); - }, - [artifact, mutate] - ); - - const debouncedHandleContentChange = useDebounceCallback( - handleContentChange, - 2000 - ); - - const saveContent = useCallback( - (updatedContent: string, debounce: boolean) => { - if (document && updatedContent !== document.content) { - setIsContentDirty(true); - - if (debounce) { - debouncedHandleContentChange(updatedContent); - } else { - handleContentChange(updatedContent); - } - } - }, - [document, debouncedHandleContentChange, handleContentChange] - ); - - function getDocumentContentById(index: number) { - if (!documents) { - return ""; - } - if (!documents[index]) { - return ""; - } - return documents[index].content ?? ""; - } - - const handleVersionChange = (type: "next" | "prev" | "toggle" | "latest") => { - if (!documents) { - return; - } - - if (type === "latest") { - setCurrentVersionIndex(documents.length - 1); - setMode("edit"); - } - - if (type === "toggle") { - setMode((currentMode) => (currentMode === "edit" ? "diff" : "edit")); - } - - if (type === "prev") { - if (currentVersionIndex > 0) { - setCurrentVersionIndex((index) => index - 1); - } - } else if (type === "next" && currentVersionIndex < documents.length - 1) { - setCurrentVersionIndex((index) => index + 1); - } - }; - - const [isToolbarVisible, setIsToolbarVisible] = useState(false); - - /* - * NOTE: if there are no documents, or if - * the documents are being fetched, then - * we mark it as the current version. - */ - - const isCurrentVersion = - documents && documents.length > 0 - ? currentVersionIndex === documents.length - 1 - : true; - - const { width: windowWidth, height: windowHeight } = useWindowSize(); - const isMobile = windowWidth ? windowWidth < 768 : false; - - const artifactDefinition = artifactDefinitions.find( - (definition) => definition.kind === artifact.kind - ); - - if (!artifactDefinition) { - throw new Error("Artifact definition not found!"); - } - - useEffect(() => { - if (artifact.documentId !== "init" && artifactDefinition.initialize) { - artifactDefinition.initialize({ - documentId: artifact.documentId, - setMetadata, - }); - } - }, [artifact.documentId, artifactDefinition, setMetadata]); - - return ( - - {artifact.isVisible && ( - - {!isMobile && ( - - )} - - {!isMobile && ( - - - {!isCurrentVersion && ( - - )} - - -
- - -
- -
-
-
- )} - - -
-
- - -
-
{artifact.title}
- - {isContentDirty ? ( -
- Saving changes... -
- ) : document ? ( -
- {`Updated ${formatDistance( - new Date(document.createdAt), - new Date(), - { - addSuffix: true, - } - )}`} -
- ) : ( -
- )} -
-
- - -
- -
- - - - {isCurrentVersion && ( - - )} - -
- - - {!isCurrentVersion && ( - - )} - - - - )} - - ); -} - -export const Artifact = memo(PureArtifact, (prevProps, nextProps) => { - if (prevProps.status !== nextProps.status) { - return false; - } - if (!equal(prevProps.votes, nextProps.votes)) { - return false; - } - if (prevProps.input !== nextProps.input) { - return false; - } - if (!equal(prevProps.messages, nextProps.messages.length)) { - return false; - } - if (prevProps.selectedVisibilityType !== nextProps.selectedVisibilityType) { - return false; - } - - return true; -}); diff --git a/demos/use_cases/vercel-ai-sdk/components/chat.tsx b/demos/use_cases/vercel-ai-sdk/components/chat.tsx index 03bc28c0..4db08fd6 100644 --- a/demos/use_cases/vercel-ai-sdk/components/chat.tsx +++ b/demos/use_cases/vercel-ai-sdk/components/chat.tsx @@ -17,14 +17,12 @@ import { AlertDialogHeader, AlertDialogTitle, } from "@/components/ui/alert-dialog"; -import { useArtifactSelector } from "@/hooks/use-artifact"; import { useAutoResume } from "@/hooks/use-auto-resume"; import { useChatVisibility } from "@/hooks/use-chat-visibility"; import type { Vote } from "@/lib/db/schema"; import { ChatSDKError } from "@/lib/errors"; import type { Attachment, ChatMessage } from "@/lib/types"; import { fetcher, fetchWithErrorHandlers, generateUUID } from "@/lib/utils"; -import { Artifact } from "./artifact"; import { useDataStream } from "./data-stream-provider"; import { Messages } from "./messages"; import { MultimodalInput } from "./multimodal-input"; @@ -186,7 +184,6 @@ export function Chat({ ); const [attachments, setAttachments] = useState([]); - const isArtifactVisible = useArtifactSelector((state) => state.isVisible); useAutoResume({ autoResume, @@ -207,7 +204,6 @@ export function Chat({
- - void; - status: "streaming" | "idle"; - isCurrentVersion: boolean; - currentVersionIndex: number; - suggestions: Suggestion[]; -}; - -function PureCodeEditor({ content, onSaveContent, status }: EditorProps) { - const containerRef = useRef(null); - const editorRef = useRef(null); - - useEffect(() => { - if (containerRef.current && !editorRef.current) { - const startState = EditorState.create({ - doc: content, - extensions: [basicSetup, python(), oneDark], - }); - - editorRef.current = new EditorView({ - state: startState, - parent: containerRef.current, - }); - } - - return () => { - if (editorRef.current) { - editorRef.current.destroy(); - editorRef.current = null; - } - }; - // NOTE: we only want to run this effect once - // eslint-disable-next-line - }, [content]); - - useEffect(() => { - if (editorRef.current) { - const updateListener = EditorView.updateListener.of((update) => { - if (update.docChanged) { - const transaction = update.transactions.find( - (tr) => !tr.annotation(Transaction.remote) - ); - - if (transaction) { - const newContent = update.state.doc.toString(); - onSaveContent(newContent, true); - } - } - }); - - const currentSelection = editorRef.current.state.selection; - - const newState = EditorState.create({ - doc: editorRef.current.state.doc, - extensions: [basicSetup, python(), oneDark, updateListener], - selection: currentSelection, - }); - - editorRef.current.setState(newState); - } - }, [onSaveContent]); - - useEffect(() => { - if (editorRef.current && content) { - const currentContent = editorRef.current.state.doc.toString(); - - if (status === "streaming" || currentContent !== content) { - const transaction = editorRef.current.state.update({ - changes: { - from: 0, - to: currentContent.length, - insert: content, - }, - annotations: [Transaction.remote.of(true)], - }); - - editorRef.current.dispatch(transaction); - } - } - }, [content, status]); - - return ( -
- ); -} - -function areEqual(prevProps: EditorProps, nextProps: EditorProps) { - if (prevProps.suggestions !== nextProps.suggestions) { - return false; - } - if (prevProps.currentVersionIndex !== nextProps.currentVersionIndex) { - return false; - } - if (prevProps.isCurrentVersion !== nextProps.isCurrentVersion) { - return false; - } - if (prevProps.status === "streaming" && nextProps.status === "streaming") { - return false; - } - if (prevProps.content !== nextProps.content) { - return false; - } - - return true; -} - -export const CodeEditor = memo(PureCodeEditor, areEqual); diff --git a/demos/use_cases/vercel-ai-sdk/components/console.tsx b/demos/use_cases/vercel-ai-sdk/components/console.tsx deleted file mode 100644 index a9995785..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/console.tsx +++ /dev/null @@ -1,193 +0,0 @@ -import { - type Dispatch, - type SetStateAction, - useCallback, - useEffect, - useRef, - useState, -} from "react"; -import { useArtifactSelector } from "@/hooks/use-artifact"; -import { cn } from "@/lib/utils"; -import { Loader } from "./elements/loader"; -import { CrossSmallIcon, TerminalWindowIcon } from "./icons"; -import { Button } from "./ui/button"; - -export type ConsoleOutputContent = { - type: "text" | "image"; - value: string; -}; - -export type ConsoleOutput = { - id: string; - status: "in_progress" | "loading_packages" | "completed" | "failed"; - contents: ConsoleOutputContent[]; -}; - -type ConsoleProps = { - consoleOutputs: ConsoleOutput[]; - setConsoleOutputs: Dispatch>; -}; - -export function Console({ consoleOutputs, setConsoleOutputs }: ConsoleProps) { - const [height, setHeight] = useState(300); - const [isResizing, setIsResizing] = useState(false); - const consoleEndRef = useRef(null); - - const isArtifactVisible = useArtifactSelector((state) => state.isVisible); - - const minHeight = 100; - const maxHeight = 800; - - const startResizing = useCallback(() => { - setIsResizing(true); - }, []); - - const stopResizing = useCallback(() => { - setIsResizing(false); - }, []); - - const resize = useCallback( - (e: MouseEvent) => { - if (isResizing) { - const newHeight = window.innerHeight - e.clientY; - if (newHeight >= minHeight && newHeight <= maxHeight) { - setHeight(newHeight); - } - } - }, - [isResizing] - ); - - useEffect(() => { - window.addEventListener("mousemove", resize); - window.addEventListener("mouseup", stopResizing); - return () => { - window.removeEventListener("mousemove", resize); - window.removeEventListener("mouseup", stopResizing); - }; - }, [resize, stopResizing]); - - useEffect(() => { - consoleEndRef.current?.scrollIntoView({ behavior: "smooth" }); - }, []); - - useEffect(() => { - if (!isArtifactVisible) { - setConsoleOutputs([]); - } - }, [isArtifactVisible, setConsoleOutputs]); - - return consoleOutputs.length > 0 ? ( - <> -
{ - if (e.key === "ArrowUp") { - setHeight((prev) => Math.min(prev + 10, maxHeight)); - } else if (e.key === "ArrowDown") { - setHeight((prev) => Math.max(prev - 10, minHeight)); - } - }} - onMouseDown={startResizing} - role="slider" - style={{ bottom: height - 4 }} - tabIndex={0} - /> - -
-
-
-
- -
-
Console
-
- -
- -
- {consoleOutputs.map((consoleOutput, index) => ( -
-
- [{index + 1}] -
- {["in_progress", "loading_packages"].includes( - consoleOutput.status - ) ? ( -
-
- -
-
- {consoleOutput.status === "in_progress" - ? "Initializing..." - : consoleOutput.status === "loading_packages" - ? consoleOutput.contents.map((content) => - content.type === "text" ? content.value : null - ) - : null} -
-
- ) : ( -
- {consoleOutput.contents.map((content, contentIndex) => - content.type === "image" ? ( - - {/** biome-ignore lint/nursery/useImageSize: "Generated image without explicit size" */} - output - - ) : ( -
- {content.value} -
- ) - )} -
- )} -
- ))} -
-
-
- - ) : null; -} diff --git a/demos/use_cases/vercel-ai-sdk/components/create-artifact.tsx b/demos/use_cases/vercel-ai-sdk/components/create-artifact.tsx deleted file mode 100644 index 78b24b10..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/create-artifact.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import type { UseChatHelpers } from "@ai-sdk/react"; -import type { DataUIPart } from "ai"; -import type { ComponentType, Dispatch, ReactNode, SetStateAction } from "react"; -import type { Suggestion } from "@/lib/db/schema"; -import type { ChatMessage, CustomUIDataTypes } from "@/lib/types"; -import type { UIArtifact } from "./artifact"; - -export type ArtifactActionContext = { - content: string; - handleVersionChange: (type: "next" | "prev" | "toggle" | "latest") => void; - currentVersionIndex: number; - isCurrentVersion: boolean; - mode: "edit" | "diff"; - metadata: M; - setMetadata: Dispatch>; -}; - -type ArtifactAction = { - icon: ReactNode; - label?: string; - description: string; - onClick: (context: ArtifactActionContext) => Promise | void; - isDisabled?: (context: ArtifactActionContext) => boolean; -}; - -export type ArtifactToolbarContext = { - sendMessage: UseChatHelpers["sendMessage"]; -}; - -export type ArtifactToolbarItem = { - description: string; - icon: ReactNode; - onClick: (context: ArtifactToolbarContext) => void; -}; - -type ArtifactContent = { - title: string; - content: string; - mode: "edit" | "diff"; - isCurrentVersion: boolean; - currentVersionIndex: number; - status: "streaming" | "idle"; - suggestions: Suggestion[]; - onSaveContent: (updatedContent: string, debounce: boolean) => void; - isInline: boolean; - getDocumentContentById: (index: number) => string; - isLoading: boolean; - metadata: M; - setMetadata: Dispatch>; -}; - -type InitializeParameters = { - documentId: string; - setMetadata: Dispatch>; -}; - -type ArtifactConfig = { - kind: T; - description: string; - content: ComponentType>; - actions: ArtifactAction[]; - toolbar: ArtifactToolbarItem[]; - initialize?: (parameters: InitializeParameters) => void; - onStreamPart: (args: { - setMetadata: Dispatch>; - setArtifact: Dispatch>; - streamPart: DataUIPart; - }) => void; -}; - -export class Artifact { - readonly kind: T; - readonly description: string; - readonly content: ComponentType>; - readonly actions: ArtifactAction[]; - readonly toolbar: ArtifactToolbarItem[]; - readonly initialize?: (parameters: InitializeParameters) => void; - readonly onStreamPart: (args: { - setMetadata: Dispatch>; - setArtifact: Dispatch>; - streamPart: DataUIPart; - }) => void; - - constructor(config: ArtifactConfig) { - this.kind = config.kind; - this.description = config.description; - this.content = config.content; - this.actions = config.actions || []; - this.toolbar = config.toolbar || []; - this.initialize = config.initialize || (async () => ({})); - this.onStreamPart = config.onStreamPart; - } -} diff --git a/demos/use_cases/vercel-ai-sdk/components/currency-exchange.tsx b/demos/use_cases/vercel-ai-sdk/components/currency-exchange.tsx index f32cd51e..a4d94396 100644 --- a/demos/use_cases/vercel-ai-sdk/components/currency-exchange.tsx +++ b/demos/use_cases/vercel-ai-sdk/components/currency-exchange.tsx @@ -181,10 +181,6 @@ export function CurrencyExchange({
)} - -
- Powered by Frankfurter API -
); diff --git a/demos/use_cases/vercel-ai-sdk/components/data-stream-handler.tsx b/demos/use_cases/vercel-ai-sdk/components/data-stream-handler.tsx index cb53d940..b4d875dc 100644 --- a/demos/use_cases/vercel-ai-sdk/components/data-stream-handler.tsx +++ b/demos/use_cases/vercel-ai-sdk/components/data-stream-handler.tsx @@ -3,8 +3,6 @@ import { useEffect } from "react"; import { useSWRConfig } from "swr"; import { unstable_serialize } from "swr/infinite"; -import { initialArtifactData, useArtifact } from "@/hooks/use-artifact"; -import { artifactDefinitions } from "./artifact"; import { useDataStream } from "./data-stream-provider"; import { getChatHistoryPaginationKey } from "./sidebar-history"; @@ -12,8 +10,6 @@ export function DataStreamHandler() { const { dataStream, setDataStream } = useDataStream(); const { mutate } = useSWRConfig(); - const { artifact, setArtifact, setMetadata } = useArtifact(); - useEffect(() => { if (!dataStream?.length) { return; @@ -26,67 +22,9 @@ export function DataStreamHandler() { // Handle chat title updates if (delta.type === "data-chat-title") { mutate(unstable_serialize(getChatHistoryPaginationKey)); - continue; } - const artifactDefinition = artifactDefinitions.find( - (currentArtifactDefinition) => - currentArtifactDefinition.kind === artifact.kind - ); - - if (artifactDefinition?.onStreamPart) { - artifactDefinition.onStreamPart({ - streamPart: delta, - setArtifact, - setMetadata, - }); - } - - setArtifact((draftArtifact) => { - if (!draftArtifact) { - return { ...initialArtifactData, status: "streaming" }; - } - - switch (delta.type) { - case "data-id": - return { - ...draftArtifact, - documentId: delta.data, - status: "streaming", - }; - - case "data-title": - return { - ...draftArtifact, - title: delta.data, - status: "streaming", - }; - - case "data-kind": - return { - ...draftArtifact, - kind: delta.data, - status: "streaming", - }; - - case "data-clear": - return { - ...draftArtifact, - content: "", - status: "streaming", - }; - - case "data-finish": - return { - ...draftArtifact, - status: "idle", - }; - - default: - return draftArtifact; - } - }); } - }, [dataStream, setArtifact, setMetadata, artifact, setDataStream, mutate]); + }, [dataStream, setDataStream, mutate]); return null; } diff --git a/demos/use_cases/vercel-ai-sdk/components/diffview.tsx b/demos/use_cases/vercel-ai-sdk/components/diffview.tsx deleted file mode 100644 index 9b1d10fe..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/diffview.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import OrderedMap from "orderedmap"; -import { - DOMParser, - type MarkSpec, - type Node as ProsemirrorNode, - Schema, -} from "prosemirror-model"; -import { schema } from "prosemirror-schema-basic"; -import { addListNodes } from "prosemirror-schema-list"; -import { EditorState } from "prosemirror-state"; -import { EditorView } from "prosemirror-view"; -import { useEffect, useRef } from "react"; -import { renderToString } from "react-dom/server"; -import { Streamdown } from "streamdown"; - -import { DiffType, diffEditor } from "@/lib/editor/diff"; - -const diffSchema = new Schema({ - nodes: addListNodes(schema.spec.nodes, "paragraph block*", "block"), - marks: OrderedMap.from({ - ...schema.spec.marks.toObject(), - diffMark: { - attrs: { type: { default: "" } }, - toDOM(mark) { - let className = ""; - - switch (mark.attrs.type) { - case DiffType.Inserted: - className = - "bg-green-100 text-green-700 dark:bg-green-500/70 dark:text-green-300"; - break; - case DiffType.Deleted: - className = - "bg-red-100 line-through text-red-600 dark:bg-red-500/70 dark:text-red-300"; - break; - default: - className = ""; - } - return ["span", { class: className }, 0]; - }, - } as MarkSpec, - }), -}); - -function computeDiff(oldDoc: ProsemirrorNode, newDoc: ProsemirrorNode) { - return diffEditor(diffSchema, oldDoc.toJSON(), newDoc.toJSON()); -} - -type DiffEditorProps = { - oldContent: string; - newContent: string; -}; - -export const DiffView = ({ oldContent, newContent }: DiffEditorProps) => { - const editorRef = useRef(null); - const viewRef = useRef(null); - - useEffect(() => { - if (editorRef.current && !viewRef.current) { - const parser = DOMParser.fromSchema(diffSchema); - - const oldHtmlContent = renderToString( - {oldContent} - ); - const newHtmlContent = renderToString( - {newContent} - ); - - const oldContainer = document.createElement("div"); - oldContainer.innerHTML = oldHtmlContent; - - const newContainer = document.createElement("div"); - newContainer.innerHTML = newHtmlContent; - - const oldDoc = parser.parse(oldContainer); - const newDoc = parser.parse(newContainer); - - const diffedDoc = computeDiff(oldDoc, newDoc); - - const state = EditorState.create({ - doc: diffedDoc, - plugins: [], - }); - - viewRef.current = new EditorView(editorRef.current, { - state, - editable: () => false, - }); - } - - return () => { - if (viewRef.current) { - viewRef.current.destroy(); - viewRef.current = null; - } - }; - }, [oldContent, newContent]); - - return
; -}; diff --git a/demos/use_cases/vercel-ai-sdk/components/document-preview.tsx b/demos/use_cases/vercel-ai-sdk/components/document-preview.tsx deleted file mode 100644 index cd0e331f..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/document-preview.tsx +++ /dev/null @@ -1,295 +0,0 @@ -"use client"; - -import equal from "fast-deep-equal"; -import { - type MouseEvent, - memo, - useCallback, - useEffect, - useMemo, - useRef, -} from "react"; -import useSWR from "swr"; -import { useArtifact } from "@/hooks/use-artifact"; -import type { Document } from "@/lib/db/schema"; -import { cn, fetcher } from "@/lib/utils"; -import type { ArtifactKind, UIArtifact } from "./artifact"; -import { CodeEditor } from "./code-editor"; -import { DocumentToolCall, DocumentToolResult } from "./document"; -import { InlineDocumentSkeleton } from "./document-skeleton"; -import { FileIcon, FullscreenIcon, ImageIcon, LoaderIcon } from "./icons"; -import { ImageEditor } from "./image-editor"; -import { SpreadsheetEditor } from "./sheet-editor"; -import { Editor } from "./text-editor"; - -type DocumentPreviewProps = { - isReadonly: boolean; - result?: any; - args?: any; -}; - -export function DocumentPreview({ - isReadonly, - result, - args, -}: DocumentPreviewProps) { - const { artifact, setArtifact } = useArtifact(); - - const { data: documents, isLoading: isDocumentsFetching } = useSWR< - Document[] - >(result ? `/api/document?id=${result.id}` : null, fetcher); - - const previewDocument = useMemo(() => documents?.[0], [documents]); - const hitboxRef = useRef(null); - - useEffect(() => { - const boundingBox = hitboxRef.current?.getBoundingClientRect(); - - if (artifact.documentId && boundingBox) { - setArtifact((currentArtifact) => ({ - ...currentArtifact, - boundingBox: { - left: boundingBox.x, - top: boundingBox.y, - width: boundingBox.width, - height: boundingBox.height, - }, - })); - } - }, [artifact.documentId, setArtifact]); - - if (artifact.isVisible) { - if (result) { - return ( - - ); - } - - if (args) { - return ( - - ); - } - } - - if (isDocumentsFetching) { - return ; - } - - const document: Document | null = previewDocument - ? previewDocument - : artifact.status === "streaming" - ? { - title: artifact.title, - kind: artifact.kind, - content: artifact.content, - id: artifact.documentId, - createdAt: new Date(), - userId: "noop", - } - : null; - - if (!document) { - return ; - } - - return ( -
- - - -
- ); -} - -const LoadingSkeleton = ({ artifactKind }: { artifactKind: ArtifactKind }) => ( -
-
-
-
-
-
-
-
-
- -
-
- {artifactKind === "image" ? ( -
-
-
- ) : ( -
- -
- )} -
-); - -const PureHitboxLayer = ({ - hitboxRef, - result, - setArtifact, -}: { - hitboxRef: React.RefObject; - result: any; - setArtifact: ( - updaterFn: UIArtifact | ((currentArtifact: UIArtifact) => UIArtifact) - ) => void; -}) => { - const handleClick = useCallback( - (event: MouseEvent) => { - const boundingBox = event.currentTarget.getBoundingClientRect(); - - setArtifact((artifact) => - artifact.status === "streaming" - ? { ...artifact, isVisible: true } - : { - ...artifact, - title: result.title, - documentId: result.id, - kind: result.kind, - isVisible: true, - boundingBox: { - left: boundingBox.x, - top: boundingBox.y, - width: boundingBox.width, - height: boundingBox.height, - }, - } - ); - }, - [setArtifact, result] - ); - - return ( - - ); -}; - -const HitboxLayer = memo(PureHitboxLayer, (prevProps, nextProps) => { - if (!equal(prevProps.result, nextProps.result)) { - return false; - } - return true; -}); - -const PureDocumentHeader = ({ - title, - kind, - isStreaming, -}: { - title: string; - kind: ArtifactKind; - isStreaming: boolean; -}) => ( -
-
-
- {isStreaming ? ( -
- -
- ) : kind === "image" ? ( - - ) : ( - - )} -
-
{title}
-
-
-
-); - -const DocumentHeader = memo(PureDocumentHeader, (prevProps, nextProps) => { - if (prevProps.title !== nextProps.title) { - return false; - } - if (prevProps.isStreaming !== nextProps.isStreaming) { - return false; - } - - return true; -}); - -const DocumentContent = ({ document }: { document: Document }) => { - const { artifact } = useArtifact(); - - const containerClassName = cn( - "h-[257px] overflow-y-scroll rounded-b-2xl border border-t-0 dark:border-zinc-700 dark:bg-muted", - { - "p-4 sm:px-14 sm:py-16": document.kind === "text", - "p-0": document.kind === "code", - } - ); - - const commonProps = { - content: document.content ?? "", - isCurrentVersion: true, - currentVersionIndex: 0, - status: artifact.status, - saveContent: () => null, - suggestions: [], - }; - - const handleSaveContent = () => null; - - return ( -
- {document.kind === "text" ? ( - - ) : document.kind === "code" ? ( -
-
- -
-
- ) : document.kind === "sheet" ? ( -
-
- -
-
- ) : document.kind === "image" ? ( - - ) : null} -
- ); -}; diff --git a/demos/use_cases/vercel-ai-sdk/components/document-skeleton.tsx b/demos/use_cases/vercel-ai-sdk/components/document-skeleton.tsx deleted file mode 100644 index 3dae0c02..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/document-skeleton.tsx +++ /dev/null @@ -1,39 +0,0 @@ -"use client"; - -import type { ArtifactKind } from "./artifact"; - -export const DocumentSkeleton = ({ - artifactKind, -}: { - artifactKind: ArtifactKind; -}) => { - return artifactKind === "image" ? ( -
-
-
- ) : ( -
-
-
-
-
-
-
-
-
- ); -}; - -export const InlineDocumentSkeleton = () => { - return ( -
-
-
-
-
-
-
-
-
- ); -}; diff --git a/demos/use_cases/vercel-ai-sdk/components/document.tsx b/demos/use_cases/vercel-ai-sdk/components/document.tsx deleted file mode 100644 index 27f5567a..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/document.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import { memo } from "react"; -import { toast } from "sonner"; -import { useArtifact } from "@/hooks/use-artifact"; -import type { ArtifactKind } from "./artifact"; -import { FileIcon, LoaderIcon, MessageIcon, PencilEditIcon } from "./icons"; - -const getActionText = ( - type: "create" | "update" | "request-suggestions", - tense: "present" | "past" -) => { - switch (type) { - case "create": - return tense === "present" ? "Creating" : "Created"; - case "update": - return tense === "present" ? "Updating" : "Updated"; - case "request-suggestions": - return tense === "present" - ? "Adding suggestions" - : "Added suggestions to"; - default: - return null; - } -}; - -type DocumentToolResultProps = { - type: "create" | "update" | "request-suggestions"; - result: { id: string; title: string; kind: ArtifactKind }; - isReadonly: boolean; -}; - -function PureDocumentToolResult({ - type, - result, - isReadonly, -}: DocumentToolResultProps) { - const { setArtifact } = useArtifact(); - - return ( - - ); -} - -export const DocumentToolResult = memo(PureDocumentToolResult, () => true); - -type DocumentToolCallProps = { - type: "create" | "update" | "request-suggestions"; - args: - | { title: string; kind: ArtifactKind } // for create - | { id: string; description: string } // for update - | { documentId: string }; // for request-suggestions - isReadonly: boolean; -}; - -function PureDocumentToolCall({ - type, - args, - isReadonly, -}: DocumentToolCallProps) { - const { setArtifact } = useArtifact(); - - return ( - - ); -} - -export const DocumentToolCall = memo(PureDocumentToolCall, () => true); diff --git a/demos/use_cases/vercel-ai-sdk/components/image-editor.tsx b/demos/use_cases/vercel-ai-sdk/components/image-editor.tsx deleted file mode 100644 index 2ee56b9c..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/image-editor.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import cn from "classnames"; -import { LoaderIcon } from "./icons"; - -type ImageEditorProps = { - title: string; - content: string; - isCurrentVersion: boolean; - currentVersionIndex: number; - status: string; - isInline: boolean; -}; - -export function ImageEditor({ - title, - content, - status, - isInline, -}: ImageEditorProps) { - return ( -
- {status === "streaming" ? ( -
- {!isInline && ( -
- -
- )} -
Generating Image...
-
- ) : ( - - {/** biome-ignore lint/nursery/useImageSize: "Generated image without explicit size" */} - {title} - - )} -
- ); -} diff --git a/demos/use_cases/vercel-ai-sdk/components/messages.tsx b/demos/use_cases/vercel-ai-sdk/components/messages.tsx index 729c4307..6bb59791 100644 --- a/demos/use_cases/vercel-ai-sdk/components/messages.tsx +++ b/demos/use_cases/vercel-ai-sdk/components/messages.tsx @@ -18,7 +18,6 @@ type MessagesProps = { setMessages: UseChatHelpers["setMessages"]; regenerate: UseChatHelpers["regenerate"]; isReadonly: boolean; - isArtifactVisible: boolean; selectedModelId: string; }; @@ -108,10 +107,6 @@ function PureMessages({ } export const Messages = memo(PureMessages, (prevProps, nextProps) => { - if (prevProps.isArtifactVisible && nextProps.isArtifactVisible) { - return true; - } - if (prevProps.status !== nextProps.status) { return false; } diff --git a/demos/use_cases/vercel-ai-sdk/components/sheet-editor.tsx b/demos/use_cases/vercel-ai-sdk/components/sheet-editor.tsx deleted file mode 100644 index 3f60e2b6..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/sheet-editor.tsx +++ /dev/null @@ -1,140 +0,0 @@ -"use client"; - -import { useTheme } from "next-themes"; -import { parse, unparse } from "papaparse"; -import { memo, useEffect, useMemo, useState } from "react"; -import DataGrid, { textEditor } from "react-data-grid"; -import { cn } from "@/lib/utils"; - -import "react-data-grid/lib/styles.css"; - -type SheetEditorProps = { - content: string; - saveContent: (content: string, isCurrentVersion: boolean) => void; - currentVersionIndex: number; - isCurrentVersion: boolean; - status: string; -}; - -const MIN_ROWS = 50; -const MIN_COLS = 26; - -const PureSpreadsheetEditor = ({ content, saveContent }: SheetEditorProps) => { - const { resolvedTheme } = useTheme(); - - const parseData = useMemo(() => { - if (!content) { - return new Array(MIN_ROWS).fill(new Array(MIN_COLS).fill("")); - } - const result = parse(content, { skipEmptyLines: true }); - - const paddedData = result.data.map((row) => { - const paddedRow = [...row]; - while (paddedRow.length < MIN_COLS) { - paddedRow.push(""); - } - return paddedRow; - }); - - while (paddedData.length < MIN_ROWS) { - paddedData.push(new Array(MIN_COLS).fill("")); - } - - return paddedData; - }, [content]); - - const columns = useMemo(() => { - const rowNumberColumn = { - key: "rowNumber", - name: "", - frozen: true, - width: 50, - renderCell: ({ rowIdx }: { rowIdx: number }) => rowIdx + 1, - cellClass: "border-t border-r dark:bg-zinc-950 dark:text-zinc-50", - headerCellClass: "border-t border-r dark:bg-zinc-900 dark:text-zinc-50", - }; - - const dataColumns = Array.from({ length: MIN_COLS }, (_, i) => ({ - key: i.toString(), - name: String.fromCharCode(65 + i), - renderEditCell: textEditor, - width: 120, - cellClass: cn("border-t dark:bg-zinc-950 dark:text-zinc-50", { - "border-l": i !== 0, - }), - headerCellClass: cn("border-t dark:bg-zinc-900 dark:text-zinc-50", { - "border-l": i !== 0, - }), - })); - - return [rowNumberColumn, ...dataColumns]; - }, []); - - const initialRows = useMemo(() => { - return parseData.map((row, rowIndex) => { - const rowData: any = { - id: rowIndex, - rowNumber: rowIndex + 1, - }; - - columns.slice(1).forEach((col, colIndex) => { - rowData[col.key] = row[colIndex] || ""; - }); - - return rowData; - }); - }, [parseData, columns]); - - const [localRows, setLocalRows] = useState(initialRows); - - useEffect(() => { - setLocalRows(initialRows); - }, [initialRows]); - - const generateCsv = (data: any[][]) => { - return unparse(data); - }; - - const handleRowsChange = (newRows: any[]) => { - setLocalRows(newRows); - - const updatedData = newRows.map((row) => { - return columns.slice(1).map((col) => row[col.key] || ""); - }); - - const newCsvContent = generateCsv(updatedData); - saveContent(newCsvContent, true); - }; - - return ( - { - if (args.column.key !== "rowNumber") { - args.selectCell(true); - } - }} - onRowsChange={handleRowsChange} - rows={localRows} - style={{ height: "100%" }} - /> - ); -}; - -function areEqual(prevProps: SheetEditorProps, nextProps: SheetEditorProps) { - return ( - prevProps.currentVersionIndex === nextProps.currentVersionIndex && - prevProps.isCurrentVersion === nextProps.isCurrentVersion && - !(prevProps.status === "streaming" && nextProps.status === "streaming") && - prevProps.content === nextProps.content && - prevProps.saveContent === nextProps.saveContent - ); -} - -export const SpreadsheetEditor = memo(PureSpreadsheetEditor, areEqual); diff --git a/demos/use_cases/vercel-ai-sdk/components/suggestion.tsx b/demos/use_cases/vercel-ai-sdk/components/suggestion.tsx deleted file mode 100644 index 846ab0fb..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/suggestion.tsx +++ /dev/null @@ -1,77 +0,0 @@ -"use client"; - -import { AnimatePresence, motion } from "framer-motion"; -import { useState } from "react"; -import { useWindowSize } from "usehooks-ts"; - -import type { UISuggestion } from "@/lib/editor/suggestions"; -import { cn } from "@/lib/utils"; -import type { ArtifactKind } from "./artifact"; -import { CrossIcon, MessageIcon } from "./icons"; -import { Button } from "./ui/button"; - -export const Suggestion = ({ - suggestion, - onApply, - artifactKind, -}: { - suggestion: UISuggestion; - onApply: () => void; - artifactKind: ArtifactKind; -}) => { - const [isExpanded, setIsExpanded] = useState(false); - const { width: windowWidth } = useWindowSize(); - - return ( - - {isExpanded ? ( - -
-
-
-
Assistant
-
- -
-
{suggestion.description}
- - - ) : ( - { - setIsExpanded(true); - }} - whileHover={{ scale: 1.1 }} - > - - - )} - - ); -}; diff --git a/demos/use_cases/vercel-ai-sdk/components/text-editor.tsx b/demos/use_cases/vercel-ai-sdk/components/text-editor.tsx deleted file mode 100644 index 7f600788..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/text-editor.tsx +++ /dev/null @@ -1,164 +0,0 @@ -"use client"; - -import { exampleSetup } from "prosemirror-example-setup"; -import { inputRules } from "prosemirror-inputrules"; -import { EditorState } from "prosemirror-state"; -import { EditorView } from "prosemirror-view"; -import { memo, useEffect, useRef } from "react"; - -import type { Suggestion } from "@/lib/db/schema"; -import { - documentSchema, - handleTransaction, - headingRule, -} from "@/lib/editor/config"; -import { - buildContentFromDocument, - buildDocumentFromContent, - createDecorations, -} from "@/lib/editor/functions"; -import { - projectWithPositions, - suggestionsPlugin, - suggestionsPluginKey, -} from "@/lib/editor/suggestions"; - -type EditorProps = { - content: string; - onSaveContent: (updatedContent: string, debounce: boolean) => void; - status: "streaming" | "idle"; - isCurrentVersion: boolean; - currentVersionIndex: number; - suggestions: Suggestion[]; -}; - -function PureEditor({ - content, - onSaveContent, - suggestions, - status, -}: EditorProps) { - const containerRef = useRef(null); - const editorRef = useRef(null); - - useEffect(() => { - if (containerRef.current && !editorRef.current) { - const state = EditorState.create({ - doc: buildDocumentFromContent(content), - plugins: [ - ...exampleSetup({ schema: documentSchema, menuBar: false }), - inputRules({ - rules: [ - headingRule(1), - headingRule(2), - headingRule(3), - headingRule(4), - headingRule(5), - headingRule(6), - ], - }), - suggestionsPlugin, - ], - }); - - editorRef.current = new EditorView(containerRef.current, { - state, - }); - } - - return () => { - if (editorRef.current) { - editorRef.current.destroy(); - editorRef.current = null; - } - }; - // NOTE: we only want to run this effect once - // eslint-disable-next-line - }, [content]); - - useEffect(() => { - if (editorRef.current) { - editorRef.current.setProps({ - dispatchTransaction: (transaction) => { - handleTransaction({ - transaction, - editorRef, - onSaveContent, - }); - }, - }); - } - }, [onSaveContent]); - - useEffect(() => { - if (editorRef.current && content) { - const currentContent = buildContentFromDocument( - editorRef.current.state.doc - ); - - if (status === "streaming") { - const newDocument = buildDocumentFromContent(content); - - const transaction = editorRef.current.state.tr.replaceWith( - 0, - editorRef.current.state.doc.content.size, - newDocument.content - ); - - transaction.setMeta("no-save", true); - editorRef.current.dispatch(transaction); - return; - } - - if (currentContent !== content) { - const newDocument = buildDocumentFromContent(content); - - const transaction = editorRef.current.state.tr.replaceWith( - 0, - editorRef.current.state.doc.content.size, - newDocument.content - ); - - transaction.setMeta("no-save", true); - editorRef.current.dispatch(transaction); - } - } - }, [content, status]); - - useEffect(() => { - if (editorRef.current?.state.doc && content) { - const projectedSuggestions = projectWithPositions( - editorRef.current.state.doc, - suggestions - ).filter( - (suggestion) => suggestion.selectionStart && suggestion.selectionEnd - ); - - const decorations = createDecorations( - projectedSuggestions, - editorRef.current - ); - - const transaction = editorRef.current.state.tr; - transaction.setMeta(suggestionsPluginKey, { decorations }); - editorRef.current.dispatch(transaction); - } - }, [suggestions, content]); - - return ( -
- ); -} - -function areEqual(prevProps: EditorProps, nextProps: EditorProps) { - return ( - prevProps.suggestions === nextProps.suggestions && - prevProps.currentVersionIndex === nextProps.currentVersionIndex && - prevProps.isCurrentVersion === nextProps.isCurrentVersion && - !(prevProps.status === "streaming" && nextProps.status === "streaming") && - prevProps.content === nextProps.content && - prevProps.onSaveContent === nextProps.onSaveContent - ); -} - -export const Editor = memo(PureEditor, areEqual); diff --git a/demos/use_cases/vercel-ai-sdk/components/toolbar.tsx b/demos/use_cases/vercel-ai-sdk/components/toolbar.tsx deleted file mode 100644 index b6b4fd08..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/toolbar.tsx +++ /dev/null @@ -1,476 +0,0 @@ -"use client"; -import type { UseChatHelpers } from "@ai-sdk/react"; -import cx from "classnames"; -import { - AnimatePresence, - motion, - useMotionValue, - useTransform, -} from "framer-motion"; -import { nanoid } from "nanoid"; -import { - type Dispatch, - memo, - type ReactNode, - type SetStateAction, - useEffect, - useRef, - useState, -} from "react"; -import { useOnClickOutside } from "usehooks-ts"; -import { - Tooltip, - TooltipContent, - TooltipProvider, - TooltipTrigger, -} from "@/components/ui/tooltip"; -import type { ChatMessage } from "@/lib/types"; -import { type ArtifactKind, artifactDefinitions } from "./artifact"; -import type { ArtifactToolbarItem } from "./create-artifact"; -import { ArrowUpIcon, StopIcon, SummarizeIcon } from "./icons"; - -type ToolProps = { - description: string; - icon: ReactNode; - selectedTool: string | null; - setSelectedTool: Dispatch>; - isToolbarVisible?: boolean; - setIsToolbarVisible?: Dispatch>; - isAnimating: boolean; - sendMessage: UseChatHelpers["sendMessage"]; - onClick: ({ - sendMessage, - }: { - sendMessage: UseChatHelpers["sendMessage"]; - }) => void; -}; - -const Tool = ({ - description, - icon, - selectedTool, - setSelectedTool, - isToolbarVisible, - setIsToolbarVisible, - isAnimating, - sendMessage, - onClick, -}: ToolProps) => { - const [isHovered, setIsHovered] = useState(false); - - useEffect(() => { - if (selectedTool !== description) { - setIsHovered(false); - } - }, [selectedTool, description]); - - const handleSelect = () => { - if (!isToolbarVisible && setIsToolbarVisible) { - setIsToolbarVisible(true); - return; - } - - if (!selectedTool) { - setIsHovered(true); - setSelectedTool(description); - return; - } - - if (selectedTool !== description) { - setSelectedTool(description); - } else { - setSelectedTool(null); - onClick({ sendMessage }); - } - }; - - return ( - - - { - handleSelect(); - }} - onHoverEnd={() => { - if (selectedTool !== description) { - setIsHovered(false); - } - }} - onHoverStart={() => { - setIsHovered(true); - }} - onKeyDown={(event) => { - if (event.key === "Enter") { - handleSelect(); - } - }} - whileHover={{ scale: 1.1 }} - whileTap={{ scale: 0.95 }} - > - {selectedTool === description ? : icon} - - - - {description} - - - ); -}; - -const randomArr = [...new Array(6)].map((_x) => nanoid(5)); - -const ReadingLevelSelector = ({ - setSelectedTool, - sendMessage, - isAnimating, -}: { - setSelectedTool: Dispatch>; - isAnimating: boolean; - sendMessage: UseChatHelpers["sendMessage"]; -}) => { - const LEVELS = [ - "Elementary", - "Middle School", - "Keep current level", - "High School", - "College", - "Graduate", - ]; - - const y = useMotionValue(-40 * 2); - const dragConstraints = 5 * 40 + 2; - const yToLevel = useTransform(y, [0, -dragConstraints], [0, 5]); - - const [currentLevel, setCurrentLevel] = useState(2); - const [hasUserSelectedLevel, setHasUserSelectedLevel] = - useState(false); - - useEffect(() => { - const unsubscribe = yToLevel.on("change", (latest) => { - const level = Math.min(5, Math.max(0, Math.round(Math.abs(latest)))); - setCurrentLevel(level); - }); - - return () => unsubscribe(); - }, [yToLevel]); - - return ( -
- {randomArr.map((id) => ( - -
- - ))} - - - - - { - if (currentLevel !== 2 && hasUserSelectedLevel) { - sendMessage({ - role: "user", - parts: [ - { - type: "text", - text: `Please adjust the reading level to ${LEVELS[currentLevel]} level.`, - }, - ], - }); - - setSelectedTool(null); - } - }} - onDragEnd={() => { - if (currentLevel === 2) { - setSelectedTool(null); - } else { - setHasUserSelectedLevel(true); - } - }} - onDragStart={() => { - setHasUserSelectedLevel(false); - }} - style={{ y }} - transition={{ duration: 0.1 }} - whileHover={{ scale: 1.05 }} - whileTap={{ scale: 0.95 }} - > - {currentLevel === 2 ? : } - - - - {LEVELS[currentLevel]} - - - -
- ); -}; - -export const Tools = ({ - isToolbarVisible, - selectedTool, - setSelectedTool, - sendMessage, - isAnimating, - setIsToolbarVisible, - tools, -}: { - isToolbarVisible: boolean; - selectedTool: string | null; - setSelectedTool: Dispatch>; - sendMessage: UseChatHelpers["sendMessage"]; - isAnimating: boolean; - setIsToolbarVisible: Dispatch>; - tools: ArtifactToolbarItem[]; -}) => { - const [primaryTool, ...secondaryTools] = tools; - - return ( - - - {isToolbarVisible && - secondaryTools.map((secondaryTool) => ( - - ))} - - - - - ); -}; - -const PureToolbar = ({ - isToolbarVisible, - setIsToolbarVisible, - sendMessage, - status, - stop, - setMessages, - artifactKind, -}: { - isToolbarVisible: boolean; - setIsToolbarVisible: Dispatch>; - status: UseChatHelpers["status"]; - sendMessage: UseChatHelpers["sendMessage"]; - stop: UseChatHelpers["stop"]; - setMessages: UseChatHelpers["setMessages"]; - artifactKind: ArtifactKind; -}) => { - const toolbarRef = useRef(null); - const timeoutRef = useRef>(); - - const [selectedTool, setSelectedTool] = useState(null); - const [isAnimating, setIsAnimating] = useState(false); - - useOnClickOutside(toolbarRef, () => { - setIsToolbarVisible(false); - setSelectedTool(null); - }); - - const startCloseTimer = () => { - if (timeoutRef.current) { - clearTimeout(timeoutRef.current); - } - - timeoutRef.current = setTimeout(() => { - setSelectedTool(null); - setIsToolbarVisible(false); - }, 2000); - }; - - const cancelCloseTimer = () => { - if (timeoutRef.current) { - clearTimeout(timeoutRef.current); - } - }; - - useEffect(() => { - return () => { - if (timeoutRef.current) { - clearTimeout(timeoutRef.current); - } - }; - }, []); - - useEffect(() => { - if (status === "streaming") { - setIsToolbarVisible(false); - } - }, [status, setIsToolbarVisible]); - - const artifactDefinition = artifactDefinitions.find( - (definition) => definition.kind === artifactKind - ); - - if (!artifactDefinition) { - throw new Error("Artifact definition not found!"); - } - - const toolsByArtifactKind = artifactDefinition.toolbar; - - if (toolsByArtifactKind.length === 0) { - return null; - } - - return ( - - { - setIsAnimating(false); - }} - onAnimationStart={() => { - setIsAnimating(true); - }} - onHoverEnd={() => { - if (status === "streaming") { - return; - } - - startCloseTimer(); - }} - onHoverStart={() => { - if (status === "streaming") { - return; - } - - cancelCloseTimer(); - setIsToolbarVisible(true); - }} - ref={toolbarRef} - transition={{ type: "spring", stiffness: 300, damping: 25 }} - > - {status === "streaming" ? ( - { - stop(); - setMessages((messages) => messages); - }} - > - - - ) : selectedTool === "adjust-reading-level" ? ( - - ) : ( - - )} - - - ); -}; - -export const Toolbar = memo(PureToolbar, (prevProps, nextProps) => { - if (prevProps.status !== nextProps.status) { - return false; - } - if (prevProps.isToolbarVisible !== nextProps.isToolbarVisible) { - return false; - } - if (prevProps.artifactKind !== nextProps.artifactKind) { - return false; - } - - return true; -}); diff --git a/demos/use_cases/vercel-ai-sdk/components/version-footer.tsx b/demos/use_cases/vercel-ai-sdk/components/version-footer.tsx deleted file mode 100644 index 41bf5e58..00000000 --- a/demos/use_cases/vercel-ai-sdk/components/version-footer.tsx +++ /dev/null @@ -1,107 +0,0 @@ -"use client"; - -import { isAfter } from "date-fns"; -import { motion } from "framer-motion"; -import { useState } from "react"; -import { useSWRConfig } from "swr"; -import { useWindowSize } from "usehooks-ts"; -import { useArtifact } from "@/hooks/use-artifact"; -import type { Document } from "@/lib/db/schema"; -import { getDocumentTimestampByIndex } from "@/lib/utils"; -import { LoaderIcon } from "./icons"; -import { Button } from "./ui/button"; - -type VersionFooterProps = { - handleVersionChange: (type: "next" | "prev" | "toggle" | "latest") => void; - documents: Document[] | undefined; - currentVersionIndex: number; -}; - -export const VersionFooter = ({ - handleVersionChange, - documents, - currentVersionIndex, -}: VersionFooterProps) => { - const { artifact } = useArtifact(); - - const { width } = useWindowSize(); - const isMobile = width < 768; - - const { mutate } = useSWRConfig(); - const [isMutating, setIsMutating] = useState(false); - - if (!documents) { - return; - } - - return ( - -
-
You are viewing a previous version
-
- Restore this version to make edits -
-
- -
- - -
-
- ); -}; diff --git a/demos/use_cases/vercel-ai-sdk/hooks/use-artifact.ts b/demos/use_cases/vercel-ai-sdk/hooks/use-artifact.ts deleted file mode 100644 index 61107986..00000000 --- a/demos/use_cases/vercel-ai-sdk/hooks/use-artifact.ts +++ /dev/null @@ -1,89 +0,0 @@ -"use client"; - -import { useCallback, useMemo } from "react"; -import useSWR from "swr"; -import type { UIArtifact } from "@/components/artifact"; - -export const initialArtifactData: UIArtifact = { - documentId: "init", - content: "", - kind: "text", - title: "", - status: "idle", - isVisible: false, - boundingBox: { - top: 0, - left: 0, - width: 0, - height: 0, - }, -}; - -type Selector = (state: UIArtifact) => T; - -export function useArtifactSelector(selector: Selector) { - const { data: localArtifact } = useSWR("artifact", null, { - fallbackData: initialArtifactData, - }); - - const selectedValue = useMemo(() => { - if (!localArtifact) { - return selector(initialArtifactData); - } - return selector(localArtifact); - }, [localArtifact, selector]); - - return selectedValue; -} - -export function useArtifact() { - const { data: localArtifact, mutate: setLocalArtifact } = useSWR( - "artifact", - null, - { - fallbackData: initialArtifactData, - } - ); - - const artifact = useMemo(() => { - if (!localArtifact) { - return initialArtifactData; - } - return localArtifact; - }, [localArtifact]); - - const setArtifact = useCallback( - (updaterFn: UIArtifact | ((currentArtifact: UIArtifact) => UIArtifact)) => { - setLocalArtifact((currentArtifact) => { - const artifactToUpdate = currentArtifact || initialArtifactData; - - if (typeof updaterFn === "function") { - return updaterFn(artifactToUpdate); - } - - return updaterFn; - }); - }, - [setLocalArtifact] - ); - - const { data: localArtifactMetadata, mutate: setLocalArtifactMetadata } = - useSWR( - () => - artifact.documentId ? `artifact-metadata-${artifact.documentId}` : null, - null, - { - fallbackData: null, - } - ); - - return useMemo( - () => ({ - artifact, - setArtifact, - metadata: localArtifactMetadata, - setMetadata: setLocalArtifactMetadata, - }), - [artifact, setArtifact, localArtifactMetadata, setLocalArtifactMetadata] - ); -} diff --git a/demos/use_cases/vercel-ai-sdk/instrumentation.ts b/demos/use_cases/vercel-ai-sdk/instrumentation.ts deleted file mode 100644 index 4b3bdee4..00000000 --- a/demos/use_cases/vercel-ai-sdk/instrumentation.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { registerOTel } from "@vercel/otel"; - -export function register() { - registerOTel({ serviceName: "ai-chatbot" }); -} diff --git a/demos/use_cases/vercel-ai-sdk/lib/ai/models.mock.ts b/demos/use_cases/vercel-ai-sdk/lib/ai/models.mock.ts deleted file mode 100644 index 31ee31a3..00000000 --- a/demos/use_cases/vercel-ai-sdk/lib/ai/models.mock.ts +++ /dev/null @@ -1,173 +0,0 @@ -import type { LanguageModel } from "ai"; - -const mockResponses: Record = { - default: "This is a mock response for testing.", - weather: "The weather in San Francisco is sunny and 72°F.", - greeting: "Hello! How can I help you today?", -}; - -const mockUsage = { - inputTokens: { total: 10, noCache: 10, cacheRead: 0, cacheWrite: 0 }, - outputTokens: { total: 20, text: 20, reasoning: 0 }, -}; - -function getResponseForPrompt(prompt: unknown): string { - const promptStr = JSON.stringify(prompt).toLowerCase(); - - if (promptStr.includes("weather") || promptStr.includes("temperature")) { - return mockResponses.weather; - } - if ( - promptStr.includes("hello") || - promptStr.includes("hi") || - promptStr.includes("hey") - ) { - return mockResponses.greeting; - } - - return mockResponses.default; -} - -const createMockModel = (): LanguageModel => { - return { - specificationVersion: "v3", - provider: "mock", - modelId: "mock-model", - defaultObjectGenerationMode: "tool", - supportedUrls: {}, - doGenerate: async ({ prompt }: { prompt: unknown }) => ({ - finishReason: "stop", - usage: mockUsage, - content: [{ type: "text", text: getResponseForPrompt(prompt) }], - warnings: [], - }), - doStream: ({ prompt }: { prompt: unknown }) => { - const response = getResponseForPrompt(prompt); - const words = response.split(" "); - - return { - stream: new ReadableStream({ - async start(controller) { - controller.enqueue({ type: "text-start", id: "t1" }); - for (const word of words) { - controller.enqueue({ - type: "text-delta", - id: "t1", - delta: `${word} `, - }); - await new Promise((resolve) => { - setTimeout(resolve, 10); - }); - } - controller.enqueue({ type: "text-end", id: "t1" }); - controller.enqueue({ - type: "finish", - finishReason: "stop", - usage: mockUsage, - }); - controller.close(); - }, - }), - }; - }, - } as unknown as LanguageModel; -}; - -const createMockReasoningModel = (): LanguageModel => { - return { - specificationVersion: "v3", - provider: "mock", - modelId: "mock-reasoning-model", - defaultObjectGenerationMode: "tool", - supportedUrls: {}, - doGenerate: async () => ({ - finishReason: "stop", - usage: mockUsage, - content: [{ type: "text", text: "This is a reasoned response." }], - reasoning: [ - { type: "text", text: "Let me think through this step by step..." }, - ], - warnings: [], - }), - doStream: () => ({ - stream: new ReadableStream({ - async start(controller) { - controller.enqueue({ type: "reasoning-start", id: "r1" }); - controller.enqueue({ - type: "reasoning-delta", - id: "r1", - delta: "Let me think through this step by step... ", - }); - controller.enqueue({ type: "reasoning-end", id: "r1" }); - await new Promise((resolve) => { - setTimeout(resolve, 10); - }); - controller.enqueue({ type: "text-start", id: "t1" }); - controller.enqueue({ - type: "text-delta", - id: "t1", - delta: "This is a reasoned response.", - }); - controller.enqueue({ type: "text-end", id: "t1" }); - controller.enqueue({ - type: "finish", - finishReason: "stop", - usage: mockUsage, - }); - controller.close(); - }, - }), - }), - } as unknown as LanguageModel; -}; - -const createMockTitleModel = (): LanguageModel => { - return { - specificationVersion: "v3", - provider: "mock", - modelId: "mock-title-model", - defaultObjectGenerationMode: "tool", - supportedUrls: {}, - doGenerate: async () => ({ - finishReason: "stop", - usage: { - inputTokens: { total: 5, noCache: 5, cacheRead: 0, cacheWrite: 0 }, - outputTokens: { total: 5, text: 5, reasoning: 0 }, - }, - content: [{ type: "text", text: "Test Conversation" }], - warnings: [], - }), - doStream: () => ({ - stream: new ReadableStream({ - start(controller) { - controller.enqueue({ type: "text-start", id: "t1" }); - controller.enqueue({ - type: "text-delta", - id: "t1", - delta: "Test Conversation", - }); - controller.enqueue({ type: "text-end", id: "t1" }); - controller.enqueue({ - type: "finish", - finishReason: "stop", - usage: { - inputTokens: { - total: 5, - noCache: 5, - cacheRead: 0, - cacheWrite: 0, - }, - outputTokens: { total: 5, text: 5, reasoning: 0 }, - }, - }); - controller.close(); - }, - }), - }), - } as unknown as LanguageModel; -}; - -export const chatModel = createMockModel(); -export const reasoningModel = createMockReasoningModel(); -export const titleModel = createMockTitleModel(); -export const artifactModel = createMockModel(); diff --git a/demos/use_cases/vercel-ai-sdk/lib/ai/models.test.ts b/demos/use_cases/vercel-ai-sdk/lib/ai/models.test.ts deleted file mode 100644 index 66d7b81a..00000000 --- a/demos/use_cases/vercel-ai-sdk/lib/ai/models.test.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { simulateReadableStream } from "ai"; -import { MockLanguageModelV3 } from "ai/test"; -import { getResponseChunksByPrompt } from "@/tests/prompts/utils"; - -const mockUsage = { - inputTokens: { total: 10, noCache: 10, cacheRead: 0, cacheWrite: 0 }, - outputTokens: { total: 20, text: 20, reasoning: 0 }, -}; - -export const chatModel = new MockLanguageModelV3({ - doGenerate: async () => ({ - finishReason: "stop", - usage: mockUsage, - content: [{ type: "text", text: "Hello, world!" }], - warnings: [], - }), - doStream: async ({ prompt }) => ({ - stream: simulateReadableStream({ - chunkDelayInMs: 500, - initialDelayInMs: 1000, - chunks: getResponseChunksByPrompt(prompt), - }), - }), -}); - -export const reasoningModel = new MockLanguageModelV3({ - doGenerate: async () => ({ - finishReason: "stop", - usage: mockUsage, - content: [{ type: "text", text: "Hello, world!" }], - warnings: [], - }), - doStream: async ({ prompt }) => ({ - stream: simulateReadableStream({ - chunkDelayInMs: 500, - initialDelayInMs: 1000, - chunks: getResponseChunksByPrompt(prompt, true), - }), - }), -}); - -export const titleModel = new MockLanguageModelV3({ - doGenerate: async () => ({ - finishReason: "stop", - usage: mockUsage, - content: [{ type: "text", text: "This is a test title" }], - warnings: [], - }), - doStream: async () => ({ - stream: simulateReadableStream({ - chunkDelayInMs: 500, - initialDelayInMs: 1000, - chunks: [ - { id: "1", type: "text-start" }, - { id: "1", type: "text-delta", delta: "This is a test title" }, - { id: "1", type: "text-end" }, - { - type: "finish", - finishReason: "stop", - usage: mockUsage, - }, - ], - }), - }), -}); - -export const artifactModel = new MockLanguageModelV3({ - doGenerate: async () => ({ - finishReason: "stop", - usage: mockUsage, - content: [{ type: "text", text: "Hello, world!" }], - warnings: [], - }), - doStream: async ({ prompt }) => ({ - stream: simulateReadableStream({ - chunkDelayInMs: 50, - initialDelayInMs: 100, - chunks: getResponseChunksByPrompt(prompt), - }), - }), -}); diff --git a/demos/use_cases/vercel-ai-sdk/lib/ai/prompts.ts b/demos/use_cases/vercel-ai-sdk/lib/ai/prompts.ts index fabb2245..65d0d670 100644 --- a/demos/use_cases/vercel-ai-sdk/lib/ai/prompts.ts +++ b/demos/use_cases/vercel-ai-sdk/lib/ai/prompts.ts @@ -1,44 +1,9 @@ import type { Geo } from "@vercel/functions"; -import type { ArtifactKind } from "@/components/artifact"; - -export const artifactsPrompt = ` -Artifacts is a special user interface mode that helps users with writing, editing, and other content creation tasks. When artifact is open, it is on the right side of the screen, while the conversation is on the left side. When creating or updating documents, changes are reflected in real-time on the artifacts and visible to the user. - -When asked to write code, always use artifacts. When writing code, specify the language in the backticks, e.g. \`\`\`python\`code here\`\`\`. The default language is Python. Other languages are not yet supported, so let the user know if they request a different language. - -DO NOT UPDATE DOCUMENTS IMMEDIATELY AFTER CREATING THEM. WAIT FOR USER FEEDBACK OR REQUEST TO UPDATE IT. - -This is a guide for using artifacts tools: \`createDocument\` and \`updateDocument\`, which render content on a artifacts beside the conversation. - -**When to use \`createDocument\`:** -- For substantial content (>10 lines) or code -- For content users will likely save/reuse (emails, code, essays, etc.) -- When explicitly requested to create a document -- For when content contains a single code snippet - -**When NOT to use \`createDocument\`:** -- For informational/explanatory content -- For conversational responses -- When asked to keep it in chat - -**Using \`updateDocument\`:** -- Default to full document rewrites for major changes -- Use targeted updates only for specific, isolated changes -- Follow user instructions for which parts to modify - -**When NOT to use \`updateDocument\`:** -- Immediately after creating a document - -Do not update document right after creating it. Wait for user feedback or request to update it. - -**Using \`requestSuggestions\`:** -- ONLY use when the user explicitly asks for suggestions on an existing document -- Requires a valid document ID from a previously created document -- Never use for general questions or information requests -`; export const regularPrompt = `You are a friendly assistant! Keep your responses concise and helpful. +You can use tools to help answer weather and currency exchange questions when needed. + When asked to write, create, or help with something, just do it directly. Don't ask clarifying questions unless absolutely necessary - make reasonable assumptions and proceed with the task.`; export type RequestHints = { @@ -57,7 +22,7 @@ About the origin of user's request: `; export const systemPrompt = ({ - selectedChatModel, + selectedChatModel: _selectedChatModel, requestHints, }: { selectedChatModel: string; @@ -65,62 +30,7 @@ export const systemPrompt = ({ }) => { const requestPrompt = getRequestPromptFromHints(requestHints); - // reasoning models don't need artifacts prompt (they can't use tools) - if ( - selectedChatModel.includes("reasoning") || - selectedChatModel.includes("thinking") - ) { - return `${regularPrompt}\n\n${requestPrompt}`; - } - - return `${regularPrompt}\n\n${requestPrompt}\n\n${artifactsPrompt}`; -}; - -export const codePrompt = ` -You are a Python code generator that creates self-contained, executable code snippets. When writing code: - -1. Each snippet should be complete and runnable on its own -2. Prefer using print() statements to display outputs -3. Include helpful comments explaining the code -4. Keep snippets concise (generally under 15 lines) -5. Avoid external dependencies - use Python standard library -6. Handle potential errors gracefully -7. Return meaningful output that demonstrates the code's functionality -8. Don't use input() or other interactive functions -9. Don't access files or network resources -10. Don't use infinite loops - -Examples of good snippets: - -# Calculate factorial iteratively -def factorial(n): - result = 1 - for i in range(1, n + 1): - result *= i - return result - -print(f"Factorial of 5 is: {factorial(5)}") -`; - -export const sheetPrompt = ` -You are a spreadsheet creation assistant. Create a spreadsheet in csv format based on the given prompt. The spreadsheet should contain meaningful column headers and data. -`; - -export const updateDocumentPrompt = ( - currentContent: string | null, - type: ArtifactKind -) => { - let mediaType = "document"; - - if (type === "code") { - mediaType = "code snippet"; - } else if (type === "sheet") { - mediaType = "spreadsheet"; - } - - return `Improve the following contents of the ${mediaType} based on the given prompt. - -${currentContent}`; + return `${regularPrompt}\n\n${requestPrompt}`; }; export const titlePrompt = `Generate a very short chat title (2-5 words max) based on the user's message. diff --git a/demos/use_cases/vercel-ai-sdk/lib/ai/providers.ts b/demos/use_cases/vercel-ai-sdk/lib/ai/providers.ts index 876dbf1e..1acbdc21 100644 --- a/demos/use_cases/vercel-ai-sdk/lib/ai/providers.ts +++ b/demos/use_cases/vercel-ai-sdk/lib/ai/providers.ts @@ -1,69 +1,48 @@ import { createOpenAI } from "@ai-sdk/openai"; import { - customProvider, extractReasoningMiddleware, + type LanguageModel, wrapLanguageModel, } from "ai"; -import { isTestEnvironment } from "../constants"; const plano = createOpenAI({ baseURL: process.env.PLANO_BASE_URL || "http://localhost:12000/v1", - apiKey: process.env.AI_GATEWAY_API_KEY || "plano", + apiKey: "plano", }); const THINKING_SUFFIX_REGEX = /-thinking$/; -export const myProvider = isTestEnvironment - ? (() => { - const { - artifactModel, - chatModel, - reasoningModel, - titleModel, - } = require("./models.mock"); - return customProvider({ - languageModels: { - "chat-model": chatModel, - "chat-model-reasoning": reasoningModel, - "title-model": titleModel, - "artifact-model": artifactModel, - }, - }); - })() - : null; +type WrapLanguageModelInput = Parameters[0]["model"]; -export function getLanguageModel(modelId: string) { - if (isTestEnvironment && myProvider) { - return myProvider.languageModel(modelId); - } +function asLanguageModel(model: unknown): LanguageModel { + // We intentionally cast here to avoid TS conflicts when multiple copies of + // `@ai-sdk/provider` exist in node_modules (e.g. nested under @ai-sdk/openai). + return model as unknown as LanguageModel; +} +function asWrapLanguageModelInput(model: unknown): WrapLanguageModelInput { + return model as unknown as WrapLanguageModelInput; +} + +export function getLanguageModel(modelId: string): LanguageModel { const isReasoningModel = modelId.includes("reasoning") || modelId.endsWith("-thinking"); if (isReasoningModel) { const gatewayModelId = modelId.replace(THINKING_SUFFIX_REGEX, ""); - return wrapLanguageModel({ - model: plano(gatewayModelId), - middleware: extractReasoningMiddleware({ tagName: "thinking" }), - }); + return asLanguageModel( + wrapLanguageModel({ + model: asWrapLanguageModelInput(plano(gatewayModelId)), + middleware: extractReasoningMiddleware({ tagName: "thinking" }), + }) + ); } - return plano(modelId); + return asLanguageModel(plano(modelId)); } -export function getTitleModel() { - if (isTestEnvironment && myProvider) { - return myProvider.languageModel("title-model"); - } +export function getTitleModel(): LanguageModel { // Keep demo dependency-light: default to an OpenAI model so only OPENAI_API_KEY is required. - return plano("openai/gpt-4.1-mini"); -} - -export function getArtifactModel() { - if (isTestEnvironment && myProvider) { - return myProvider.languageModel("artifact-model"); - } - // Keep demo dependency-light: default to an OpenAI model so only OPENAI_API_KEY is required. - return plano("openai/gpt-4o"); + return asLanguageModel(plano("openai/gpt-4.1-mini")); } diff --git a/demos/use_cases/vercel-ai-sdk/lib/artifacts/server.ts b/demos/use_cases/vercel-ai-sdk/lib/artifacts/server.ts deleted file mode 100644 index a11ecfdd..00000000 --- a/demos/use_cases/vercel-ai-sdk/lib/artifacts/server.ts +++ /dev/null @@ -1,98 +0,0 @@ -import type { UIMessageStreamWriter } from "ai"; -import type { Session } from "next-auth"; -import { codeDocumentHandler } from "@/artifacts/code/server"; -import { sheetDocumentHandler } from "@/artifacts/sheet/server"; -import { textDocumentHandler } from "@/artifacts/text/server"; -import type { ArtifactKind } from "@/components/artifact"; -import { saveDocument } from "../db/queries"; -import type { Document } from "../db/schema"; -import type { ChatMessage } from "../types"; - -export type SaveDocumentProps = { - id: string; - title: string; - kind: ArtifactKind; - content: string; - userId: string; -}; - -export type CreateDocumentCallbackProps = { - id: string; - title: string; - dataStream: UIMessageStreamWriter; - session: Session; -}; - -export type UpdateDocumentCallbackProps = { - document: Document; - description: string; - dataStream: UIMessageStreamWriter; - session: Session; -}; - -export type DocumentHandler = { - kind: T; - onCreateDocument: (args: CreateDocumentCallbackProps) => Promise; - onUpdateDocument: (args: UpdateDocumentCallbackProps) => Promise; -}; - -export function createDocumentHandler(config: { - kind: T; - onCreateDocument: (params: CreateDocumentCallbackProps) => Promise; - onUpdateDocument: (params: UpdateDocumentCallbackProps) => Promise; -}): DocumentHandler { - return { - kind: config.kind, - onCreateDocument: async (args: CreateDocumentCallbackProps) => { - const draftContent = await config.onCreateDocument({ - id: args.id, - title: args.title, - dataStream: args.dataStream, - session: args.session, - }); - - if (args.session?.user?.id) { - await saveDocument({ - id: args.id, - title: args.title, - content: draftContent, - kind: config.kind, - userId: args.session.user.id, - }); - } - - return; - }, - onUpdateDocument: async (args: UpdateDocumentCallbackProps) => { - const draftContent = await config.onUpdateDocument({ - document: args.document, - description: args.description, - dataStream: args.dataStream, - session: args.session, - }); - - if (args.session?.user?.id) { - await saveDocument({ - id: args.document.id, - title: args.document.title, - content: draftContent, - kind: config.kind, - userId: args.session.user.id, - }); - } - - return; - }, - }; -} - -/* - * Use this array to define the document handlers for each artifact kind. - */ -export const documentHandlersByArtifactKind: DocumentHandler[] = [ - textDocumentHandler, - codeDocumentHandler, - sheetDocumentHandler, -]; - -export const artifactKinds = ["text", "code", "sheet"] as const; diff --git a/demos/use_cases/vercel-ai-sdk/lib/db/queries.ts b/demos/use_cases/vercel-ai-sdk/lib/db/queries.ts index 2855423a..daebaaa2 100644 --- a/demos/use_cases/vercel-ai-sdk/lib/db/queries.ts +++ b/demos/use_cases/vercel-ai-sdk/lib/db/queries.ts @@ -14,7 +14,6 @@ import { } from "drizzle-orm"; import { drizzle } from "drizzle-orm/postgres-js"; import postgres from "postgres"; -import type { ArtifactKind } from "@/components/artifact"; import type { VisibilityType } from "@/components/visibility-selector"; import { ChatSDKError } from "../errors"; import { generateUUID } from "../utils"; @@ -22,11 +21,8 @@ import { type Chat, chat, type DBMessage, - document, message, - type Suggestion, stream, - suggestion, type User, user, vote, @@ -321,132 +317,6 @@ export async function getVotesByChatId({ id }: { id: string }) { } } -export async function saveDocument({ - id, - title, - kind, - content, - userId, -}: { - id: string; - title: string; - kind: ArtifactKind; - content: string; - userId: string; -}) { - try { - return await db - .insert(document) - .values({ - id, - title, - kind, - content, - userId, - createdAt: new Date(), - }) - .returning(); - } catch (_error) { - throw new ChatSDKError("bad_request:database", "Failed to save document"); - } -} - -export async function getDocumentsById({ id }: { id: string }) { - try { - const documents = await db - .select() - .from(document) - .where(eq(document.id, id)) - .orderBy(asc(document.createdAt)); - - return documents; - } catch (_error) { - throw new ChatSDKError( - "bad_request:database", - "Failed to get documents by id" - ); - } -} - -export async function getDocumentById({ id }: { id: string }) { - try { - const [selectedDocument] = await db - .select() - .from(document) - .where(eq(document.id, id)) - .orderBy(desc(document.createdAt)); - - return selectedDocument; - } catch (_error) { - throw new ChatSDKError( - "bad_request:database", - "Failed to get document by id" - ); - } -} - -export async function deleteDocumentsByIdAfterTimestamp({ - id, - timestamp, -}: { - id: string; - timestamp: Date; -}) { - try { - await db - .delete(suggestion) - .where( - and( - eq(suggestion.documentId, id), - gt(suggestion.documentCreatedAt, timestamp) - ) - ); - - return await db - .delete(document) - .where(and(eq(document.id, id), gt(document.createdAt, timestamp))) - .returning(); - } catch (_error) { - throw new ChatSDKError( - "bad_request:database", - "Failed to delete documents by id after timestamp" - ); - } -} - -export async function saveSuggestions({ - suggestions, -}: { - suggestions: Suggestion[]; -}) { - try { - return await db.insert(suggestion).values(suggestions); - } catch (_error) { - throw new ChatSDKError( - "bad_request:database", - "Failed to save suggestions" - ); - } -} - -export async function getSuggestionsByDocumentId({ - documentId, -}: { - documentId: string; -}) { - try { - return await db - .select() - .from(suggestion) - .where(eq(suggestion.documentId, documentId)); - } catch (_error) { - throw new ChatSDKError( - "bad_request:database", - "Failed to get suggestions by document id" - ); - } -} - export async function getMessageById({ id }: { id: string }) { try { return await db.select().from(message).where(eq(message.id, id)); diff --git a/demos/use_cases/vercel-ai-sdk/lib/db/schema.ts b/demos/use_cases/vercel-ai-sdk/lib/db/schema.ts index da060e27..e838b5a4 100644 --- a/demos/use_cases/vercel-ai-sdk/lib/db/schema.ts +++ b/demos/use_cases/vercel-ai-sdk/lib/db/schema.ts @@ -102,55 +102,6 @@ export const vote = pgTable( export type Vote = InferSelectModel; -export const document = pgTable( - "Document", - { - id: uuid("id").notNull().defaultRandom(), - createdAt: timestamp("createdAt").notNull(), - title: text("title").notNull(), - content: text("content"), - kind: varchar("text", { enum: ["text", "code", "image", "sheet"] }) - .notNull() - .default("text"), - userId: uuid("userId") - .notNull() - .references(() => user.id), - }, - (table) => { - return { - pk: primaryKey({ columns: [table.id, table.createdAt] }), - }; - } -); - -export type Document = InferSelectModel; - -export const suggestion = pgTable( - "Suggestion", - { - id: uuid("id").notNull().defaultRandom(), - documentId: uuid("documentId").notNull(), - documentCreatedAt: timestamp("documentCreatedAt").notNull(), - originalText: text("originalText").notNull(), - suggestedText: text("suggestedText").notNull(), - description: text("description"), - isResolved: boolean("isResolved").notNull().default(false), - userId: uuid("userId") - .notNull() - .references(() => user.id), - createdAt: timestamp("createdAt").notNull(), - }, - (table) => ({ - pk: primaryKey({ columns: [table.id] }), - documentRef: foreignKey({ - columns: [table.documentId, table.documentCreatedAt], - foreignColumns: [document.id, document.createdAt], - }), - }) -); - -export type Suggestion = InferSelectModel; - export const stream = pgTable( "Stream", { diff --git a/demos/use_cases/vercel-ai-sdk/lib/editor/config.ts b/demos/use_cases/vercel-ai-sdk/lib/editor/config.ts deleted file mode 100644 index 1d73e852..00000000 --- a/demos/use_cases/vercel-ai-sdk/lib/editor/config.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { textblockTypeInputRule } from "prosemirror-inputrules"; -import { Schema } from "prosemirror-model"; -import { schema } from "prosemirror-schema-basic"; -import { addListNodes } from "prosemirror-schema-list"; -import type { Transaction } from "prosemirror-state"; -import type { EditorView } from "prosemirror-view"; -import type { MutableRefObject } from "react"; - -import { buildContentFromDocument } from "./functions"; - -export const documentSchema = new Schema({ - nodes: addListNodes(schema.spec.nodes, "paragraph block*", "block"), - marks: schema.spec.marks, -}); - -export function headingRule(level: number) { - return textblockTypeInputRule( - new RegExp(`^(#{1,${level}})\\s$`), - documentSchema.nodes.heading, - () => ({ level }) - ); -} - -export const handleTransaction = ({ - transaction, - editorRef, - onSaveContent, -}: { - transaction: Transaction; - editorRef: MutableRefObject; - onSaveContent: (updatedContent: string, debounce: boolean) => void; -}) => { - if (!editorRef || !editorRef.current) { - return; - } - - const newState = editorRef.current.state.apply(transaction); - editorRef.current.updateState(newState); - - if (transaction.docChanged && !transaction.getMeta("no-save")) { - const updatedContent = buildContentFromDocument(newState.doc); - - if (transaction.getMeta("no-debounce")) { - onSaveContent(updatedContent, false); - } else { - onSaveContent(updatedContent, true); - } - } -}; diff --git a/demos/use_cases/vercel-ai-sdk/lib/editor/diff.js b/demos/use_cases/vercel-ai-sdk/lib/editor/diff.js deleted file mode 100644 index 696681e0..00000000 --- a/demos/use_cases/vercel-ai-sdk/lib/editor/diff.js +++ /dev/null @@ -1,475 +0,0 @@ -// Modified from https://github.com/hamflx/prosemirror-diff/blob/master/src/diff.js - -import { diff_match_patch } from "diff-match-patch"; -import { Fragment, Node } from "prosemirror-model"; - -export const DiffType = { - Unchanged: 0, - Deleted: -1, - Inserted: 1, -}; - -export const patchDocumentNode = (schema, oldNode, newNode) => { - assertNodeTypeEqual(oldNode, newNode); - - const finalLeftChildren = []; - const finalRightChildren = []; - - const oldChildren = normalizeNodeContent(oldNode); - const newChildren = normalizeNodeContent(newNode); - const oldChildLen = oldChildren.length; - const newChildLen = newChildren.length; - const minChildLen = Math.min(oldChildLen, newChildLen); - - let left = 0; - let right = 0; - - for (; left < minChildLen; left++) { - const oldChild = oldChildren[left]; - const newChild = newChildren[left]; - if (!isNodeEqual(oldChild, newChild)) { - break; - } - finalLeftChildren.push(...ensureArray(oldChild)); - } - - for (; right + left + 1 < minChildLen; right++) { - const oldChild = oldChildren[oldChildLen - right - 1]; - const newChild = newChildren[newChildLen - right - 1]; - if (!isNodeEqual(oldChild, newChild)) { - break; - } - finalRightChildren.unshift(...ensureArray(oldChild)); - } - - const diffOldChildren = oldChildren.slice(left, oldChildLen - right); - const diffNewChildren = newChildren.slice(left, newChildLen - right); - - if (diffOldChildren.length && diffNewChildren.length) { - const matchedNodes = matchNodes( - schema, - diffOldChildren, - diffNewChildren - ).sort((a, b) => b.count - a.count); - const bestMatch = matchedNodes[0]; - if (bestMatch) { - const { oldStartIndex, newStartIndex, oldEndIndex, newEndIndex } = - bestMatch; - const oldBeforeMatchChildren = diffOldChildren.slice(0, oldStartIndex); - const newBeforeMatchChildren = diffNewChildren.slice(0, newStartIndex); - - finalLeftChildren.push( - ...patchRemainNodes( - schema, - oldBeforeMatchChildren, - newBeforeMatchChildren - ) - ); - finalLeftChildren.push( - ...diffOldChildren.slice(oldStartIndex, oldEndIndex) - ); - - const oldAfterMatchChildren = diffOldChildren.slice(oldEndIndex); - const newAfterMatchChildren = diffNewChildren.slice(newEndIndex); - - finalRightChildren.unshift( - ...patchRemainNodes( - schema, - oldAfterMatchChildren, - newAfterMatchChildren - ) - ); - } else { - finalLeftChildren.push( - ...patchRemainNodes(schema, diffOldChildren, diffNewChildren) - ); - } - } else { - finalLeftChildren.push( - ...patchRemainNodes(schema, diffOldChildren, diffNewChildren) - ); - } - - return createNewNode(oldNode, [...finalLeftChildren, ...finalRightChildren]); -}; - -const matchNodes = (_schema, oldChildren, newChildren) => { - const matches = []; - for ( - let oldStartIndex = 0; - oldStartIndex < oldChildren.length; - oldStartIndex++ - ) { - const oldStartNode = oldChildren[oldStartIndex]; - const newStartIndex = findMatchNode(newChildren, oldStartNode); - - if (newStartIndex !== -1) { - let oldEndIndex = oldStartIndex + 1; - let newEndIndex = newStartIndex + 1; - for ( - ; - oldEndIndex < oldChildren.length && newEndIndex < newChildren.length; - oldEndIndex++, newEndIndex++ - ) { - const oldEndNode = oldChildren[oldEndIndex]; - if (!isNodeEqual(newChildren[newEndIndex], oldEndNode)) { - break; - } - } - matches.push({ - oldStartIndex, - newStartIndex, - oldEndIndex, - newEndIndex, - count: newEndIndex - newStartIndex, - }); - } - } - return matches; -}; - -const findMatchNode = (children, node, startIndex = 0) => { - for (let i = startIndex; i < children.length; i++) { - if (isNodeEqual(children[i], node)) { - return i; - } - } - return -1; -}; - -const patchRemainNodes = (schema, oldChildren, newChildren) => { - const finalLeftChildren = []; - const finalRightChildren = []; - const oldChildLen = oldChildren.length; - const newChildLen = newChildren.length; - let left = 0; - let right = 0; - while (oldChildLen - left - right > 0 && newChildLen - left - right > 0) { - const leftOldNode = oldChildren[left]; - const leftNewNode = newChildren[left]; - const rightOldNode = oldChildren[oldChildLen - right - 1]; - const rightNewNode = newChildren[newChildLen - right - 1]; - let updateLeft = - !isTextNode(leftOldNode) && matchNodeType(leftOldNode, leftNewNode); - let updateRight = - !isTextNode(rightOldNode) && matchNodeType(rightOldNode, rightNewNode); - if (Array.isArray(leftOldNode) && Array.isArray(leftNewNode)) { - finalLeftChildren.push( - ...patchTextNodes(schema, leftOldNode, leftNewNode) - ); - left += 1; - continue; - } - - if (updateLeft && updateRight) { - const equalityLeft = computeChildEqualityFactor(leftOldNode, leftNewNode); - const equalityRight = computeChildEqualityFactor( - rightOldNode, - rightNewNode - ); - if (equalityLeft < equalityRight) { - updateLeft = false; - } else { - updateRight = false; - } - } - if (updateLeft) { - finalLeftChildren.push( - patchDocumentNode(schema, leftOldNode, leftNewNode) - ); - left += 1; - } else if (updateRight) { - finalRightChildren.unshift( - patchDocumentNode(schema, rightOldNode, rightNewNode) - ); - right += 1; - } else { - // Delete and insert - finalLeftChildren.push( - createDiffNode(schema, leftOldNode, DiffType.Deleted) - ); - finalLeftChildren.push( - createDiffNode(schema, leftNewNode, DiffType.Inserted) - ); - left += 1; - } - } - - const deleteNodeLen = oldChildLen - left - right; - const insertNodeLen = newChildLen - left - right; - if (deleteNodeLen) { - finalLeftChildren.push( - ...oldChildren - .slice(left, left + deleteNodeLen) - .flat() - .map((node) => createDiffNode(schema, node, DiffType.Deleted)) - ); - } - - if (insertNodeLen) { - finalRightChildren.unshift( - ...newChildren - .slice(left, left + insertNodeLen) - .flat() - .map((node) => createDiffNode(schema, node, DiffType.Inserted)) - ); - } - - return [...finalLeftChildren, ...finalRightChildren]; -}; - -// Updated function to perform sentence-level diffs -export const patchTextNodes = (schema, oldNode, newNode) => { - const dmp = new diff_match_patch(); - - // Concatenate the text from the text nodes - const oldText = oldNode.map((n) => getNodeText(n)).join(""); - const newText = newNode.map((n) => getNodeText(n)).join(""); - - // Tokenize the text into sentences - const oldSentences = tokenizeSentences(oldText); - const newSentences = tokenizeSentences(newText); - - // Map sentences to unique characters - const { chars1, chars2, lineArray } = sentencesToChars( - oldSentences, - newSentences - ); - - // Perform the diff - let diffs = dmp.diff_main(chars1, chars2, false); - - // Convert back to sentences - diffs = diffs.map(([type, text]) => { - const sentences = text - .split("") - .map((char) => lineArray[char.charCodeAt(0)]); - return [type, sentences]; - }); - - // Map diffs to nodes - const res = diffs.flatMap(([type, sentences]) => { - return sentences.map((sentence) => { - const node = createTextNode( - schema, - sentence, - type !== DiffType.Unchanged ? [createDiffMark(schema, type)] : [] - ); - return node; - }); - }); - - return res; -}; - -// Function to tokenize text into sentences -const tokenizeSentences = (text) => { - return text.match(/[^.!?]+[.!?]*\s*/g) || []; -}; - -// Function to map sentences to unique characters -const sentencesToChars = (oldSentences, newSentences) => { - const lineArray = []; - const lineHash = {}; - let lineStart = 0; - - const chars1 = oldSentences - .map((sentence) => { - const line = sentence; - if (line in lineHash) { - return String.fromCharCode(lineHash[line]); - } - lineHash[line] = lineStart; - lineArray[lineStart] = line; - lineStart++; - return String.fromCharCode(lineHash[line]); - }) - .join(""); - - const chars2 = newSentences - .map((sentence) => { - const line = sentence; - if (line in lineHash) { - return String.fromCharCode(lineHash[line]); - } - lineHash[line] = lineStart; - lineArray[lineStart] = line; - lineStart++; - return String.fromCharCode(lineHash[line]); - }) - .join(""); - - return { chars1, chars2, lineArray }; -}; - -export const computeChildEqualityFactor = (_node1, _node2) => { - return 0; -}; - -export const assertNodeTypeEqual = (node1, node2) => { - if (getNodeProperty(node1, "type") !== getNodeProperty(node2, "type")) { - throw new Error(`node type not equal: ${node1.type} !== ${node2.type}`); - } -}; - -export const ensureArray = (value) => { - return Array.isArray(value) ? value : [value]; -}; - -export const isNodeEqual = (node1, node2) => { - const isNode1Array = Array.isArray(node1); - const isNode2Array = Array.isArray(node2); - if (isNode1Array !== isNode2Array) { - return false; - } - if (isNode1Array) { - return ( - node1.length === node2.length && - node1.every((node, index) => isNodeEqual(node, node2[index])) - ); - } - - const type1 = getNodeProperty(node1, "type"); - const type2 = getNodeProperty(node2, "type"); - if (type1 !== type2) { - return false; - } - if (isTextNode(node1)) { - const text1 = getNodeProperty(node1, "text"); - const text2 = getNodeProperty(node2, "text"); - if (text1 !== text2) { - return false; - } - } - const attrs1 = getNodeAttributes(node1); - const attrs2 = getNodeAttributes(node2); - const attrs = [...new Set([...Object.keys(attrs1), ...Object.keys(attrs2)])]; - for (const attr of attrs) { - if (attrs1[attr] !== attrs2[attr]) { - return false; - } - } - const marks1 = getNodeMarks(node1); - const marks2 = getNodeMarks(node2); - if (marks1.length !== marks2.length) { - return false; - } - for (let i = 0; i < marks1.length; i++) { - if (!isNodeEqual(marks1[i], marks2[i])) { - return false; - } - } - const children1 = getNodeChildren(node1); - const children2 = getNodeChildren(node2); - if (children1.length !== children2.length) { - return false; - } - for (let i = 0; i < children1.length; i++) { - if (!isNodeEqual(children1[i], children2[i])) { - return false; - } - } - return true; -}; - -export const normalizeNodeContent = (node) => { - const content = getNodeChildren(node) ?? []; - const res = []; - for (let i = 0; i < content.length; i++) { - const child = content[i]; - if (isTextNode(child)) { - const textNodes = []; - for ( - let textNode = content[i]; - i < content.length && isTextNode(textNode); - textNode = content[++i] - ) { - textNodes.push(textNode); - } - i--; - res.push(textNodes); - } else { - res.push(child); - } - } - return res; -}; - -export const getNodeProperty = (node, property) => { - if (property === "type") { - return node.type?.name; - } - return node[property]; -}; - -export const getNodeAttribute = (node, attribute) => - node.attrs ? node.attrs[attribute] : undefined; - -export const getNodeAttributes = (node) => (node.attrs ? node.attrs : {}); - -export const getNodeMarks = (node) => node.marks ?? []; - -export const getNodeChildren = (node) => node.content?.content ?? []; - -export const getNodeText = (node) => node.text; - -export const isTextNode = (node) => node.type?.name === "text"; - -export const matchNodeType = (node1, node2) => - node1.type?.name === node2.type?.name || - (Array.isArray(node1) && Array.isArray(node2)); - -export const createNewNode = (oldNode, children) => { - if (!oldNode.type) { - throw new Error("oldNode.type is undefined"); - } - return new Node( - oldNode.type, - oldNode.attrs, - Fragment.fromArray(children), - oldNode.marks - ); -}; - -export const createDiffNode = (schema, node, type) => { - return mapDocumentNode(node, (currentNode) => { - if (isTextNode(currentNode)) { - return createTextNode(schema, getNodeText(currentNode), [ - ...(currentNode.marks || []), - createDiffMark(schema, type), - ]); - } - return currentNode; - }); -}; - -function mapDocumentNode(node, mapper) { - const copy = node.copy( - Fragment.from( - node.content.content - .map((currentNode) => mapDocumentNode(currentNode, mapper)) - .filter((n) => n) - ) - ); - return mapper(copy) || copy; -} - -export const createDiffMark = (schema, type) => { - if (type === DiffType.Inserted) { - return schema.mark("diffMark", { type }); - } - if (type === DiffType.Deleted) { - return schema.mark("diffMark", { type }); - } - throw new Error("type is not valid"); -}; - -export const createTextNode = (schema, content, marks = []) => { - return schema.text(content, marks); -}; - -export const diffEditor = (schema, oldDoc, newDoc) => { - const oldNode = Node.fromJSON(schema, oldDoc); - const newNode = Node.fromJSON(schema, newDoc); - return patchDocumentNode(schema, oldNode, newNode); -}; diff --git a/demos/use_cases/vercel-ai-sdk/lib/editor/functions.tsx b/demos/use_cases/vercel-ai-sdk/lib/editor/functions.tsx deleted file mode 100644 index 3ff667bd..00000000 --- a/demos/use_cases/vercel-ai-sdk/lib/editor/functions.tsx +++ /dev/null @@ -1,62 +0,0 @@ -"use client"; - -import { defaultMarkdownSerializer } from "prosemirror-markdown"; -import { DOMParser, type Node } from "prosemirror-model"; -import { Decoration, DecorationSet, type EditorView } from "prosemirror-view"; -import { renderToString } from "react-dom/server"; - -import { Response } from "@/components/elements/response"; - -import { documentSchema } from "./config"; -import { createSuggestionWidget, type UISuggestion } from "./suggestions"; - -export const buildDocumentFromContent = (content: string) => { - const parser = DOMParser.fromSchema(documentSchema); - const stringFromMarkdown = renderToString({content}); - const tempContainer = document.createElement("div"); - tempContainer.innerHTML = stringFromMarkdown; - return parser.parse(tempContainer); -}; - -export const buildContentFromDocument = (document: Node) => { - return defaultMarkdownSerializer.serialize(document); -}; - -export const createDecorations = ( - suggestions: UISuggestion[], - view: EditorView -) => { - const decorations: Decoration[] = []; - - for (const suggestion of suggestions) { - decorations.push( - Decoration.inline( - suggestion.selectionStart, - suggestion.selectionEnd, - { - class: "suggestion-highlight", - }, - { - suggestionId: suggestion.id, - type: "highlight", - } - ) - ); - - decorations.push( - Decoration.widget( - suggestion.selectionStart, - (currentView) => { - const { dom } = createSuggestionWidget(suggestion, currentView); - return dom; - }, - { - suggestionId: suggestion.id, - type: "widget", - } - ) - ); - } - - return DecorationSet.create(view.state.doc, decorations); -}; diff --git a/demos/use_cases/vercel-ai-sdk/lib/editor/react-renderer.tsx b/demos/use_cases/vercel-ai-sdk/lib/editor/react-renderer.tsx deleted file mode 100644 index b44b165a..00000000 --- a/demos/use_cases/vercel-ai-sdk/lib/editor/react-renderer.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { createRoot } from "react-dom/client"; - -// biome-ignore lint/complexity/noStaticOnlyClass: "Needs to be static" -export class ReactRenderer { - static render(component: React.ReactElement, dom: HTMLElement) { - const root = createRoot(dom); - root.render(component); - - return { - destroy: () => root.unmount(), - }; - } -} diff --git a/demos/use_cases/vercel-ai-sdk/lib/editor/suggestions.tsx b/demos/use_cases/vercel-ai-sdk/lib/editor/suggestions.tsx deleted file mode 100644 index c8d0ece4..00000000 --- a/demos/use_cases/vercel-ai-sdk/lib/editor/suggestions.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import type { Node } from "prosemirror-model"; -import { Plugin, PluginKey } from "prosemirror-state"; -import { - type Decoration, - DecorationSet, - type EditorView, -} from "prosemirror-view"; -import { createRoot } from "react-dom/client"; -import type { ArtifactKind } from "@/components/artifact"; -import { Suggestion as PreviewSuggestion } from "@/components/suggestion"; -import type { Suggestion } from "@/lib/db/schema"; - -export interface UISuggestion extends Suggestion { - selectionStart: number; - selectionEnd: number; -} - -type Position = { - start: number; - end: number; -}; - -function findPositionsInDoc(doc: Node, searchText: string): Position | null { - let positions: { start: number; end: number } | null = null; - - doc.nodesBetween(0, doc.content.size, (node, pos) => { - if (node.isText && node.text) { - const index = node.text.indexOf(searchText); - - if (index !== -1) { - positions = { - start: pos + index, - end: pos + index + searchText.length, - }; - - return false; - } - } - - return true; - }); - - return positions; -} - -export function projectWithPositions( - doc: Node, - suggestions: Suggestion[] -): UISuggestion[] { - return suggestions.map((suggestion) => { - const positions = findPositionsInDoc(doc, suggestion.originalText); - - if (!positions) { - return { - ...suggestion, - selectionStart: 0, - selectionEnd: 0, - }; - } - - return { - ...suggestion, - selectionStart: positions.start, - selectionEnd: positions.end, - }; - }); -} - -export function createSuggestionWidget( - suggestion: UISuggestion, - view: EditorView, - artifactKind: ArtifactKind = "text" -): { dom: HTMLElement; destroy: () => void } { - const dom = document.createElement("span"); - const root = createRoot(dom); - - dom.addEventListener("mousedown", (event) => { - event.preventDefault(); - view.dom.blur(); - }); - - const onApply = () => { - const { state, dispatch } = view; - - const decorationTransaction = state.tr; - const currentState = suggestionsPluginKey.getState(state); - const currentDecorations = currentState?.decorations; - - if (currentDecorations) { - const newDecorations = DecorationSet.create( - state.doc, - currentDecorations.find().filter((decoration: Decoration) => { - return decoration.spec.suggestionId !== suggestion.id; - }) - ); - - decorationTransaction.setMeta(suggestionsPluginKey, { - decorations: newDecorations, - selected: null, - }); - dispatch(decorationTransaction); - } - - const textTransaction = view.state.tr.replaceWith( - suggestion.selectionStart, - suggestion.selectionEnd, - state.schema.text(suggestion.suggestedText) - ); - - textTransaction.setMeta("no-debounce", true); - - dispatch(textTransaction); - }; - - root.render( - - ); - - return { - dom, - destroy: () => { - // Wrapping unmount in setTimeout to avoid synchronous unmounting during render - setTimeout(() => { - root.unmount(); - }, 0); - }, - }; -} - -export const suggestionsPluginKey = new PluginKey("suggestions"); -export const suggestionsPlugin = new Plugin({ - key: suggestionsPluginKey, - state: { - init() { - return { decorations: DecorationSet.empty, selected: null }; - }, - apply(tr, state) { - const newDecorations = tr.getMeta(suggestionsPluginKey); - if (newDecorations) { - return newDecorations; - } - - return { - decorations: state.decorations.map(tr.mapping, tr.doc), - selected: state.selected, - }; - }, - }, - props: { - decorations(state) { - return this.getState(state)?.decorations ?? DecorationSet.empty; - }, - }, -}); diff --git a/demos/use_cases/vercel-ai-sdk/lib/errors.ts b/demos/use_cases/vercel-ai-sdk/lib/errors.ts index 09068221..1a1d2ae2 100644 --- a/demos/use_cases/vercel-ai-sdk/lib/errors.ts +++ b/demos/use_cases/vercel-ai-sdk/lib/errors.ts @@ -14,8 +14,6 @@ export type Surface = | "database" | "history" | "vote" - | "document" - | "suggestions" | "activate_gateway"; export type ErrorCode = `${ErrorType}:${Surface}`; @@ -30,8 +28,6 @@ export const visibilityBySurface: Record = { api: "response", history: "response", vote: "response", - document: "response", - suggestions: "response", activate_gateway: "response", }; @@ -103,15 +99,6 @@ export function getMessageByErrorCode(errorCode: ErrorCode): string { case "offline:chat": return "We're having trouble sending your message. Please check your internet connection and try again."; - case "not_found:document": - return "The requested document was not found. Please check the document ID and try again."; - case "forbidden:document": - return "This document belongs to another user. Please check the document ID and try again."; - case "unauthorized:document": - return "You need to sign in to view this document. Please sign in and try again."; - case "bad_request:document": - return "The request to create or update the document was invalid. Please check your input and try again."; - default: return "Something went wrong. Please try again later."; } diff --git a/demos/use_cases/vercel-ai-sdk/lib/types.ts b/demos/use_cases/vercel-ai-sdk/lib/types.ts index 8af9c9e6..b53774f1 100644 --- a/demos/use_cases/vercel-ai-sdk/lib/types.ts +++ b/demos/use_cases/vercel-ai-sdk/lib/types.ts @@ -1,9 +1,7 @@ import type { InferUITool, UIMessage } from "ai"; import { z } from "zod"; -import type { ArtifactKind } from "@/components/artifact"; import type { getWeather } from "./ai/tools/get-weather"; import type { getCurrencyExchange } from "./ai/tools/get-currency-exchange"; -import type { Suggestion } from "./db/schema"; export type DataPart = { type: "append-message"; message: string }; @@ -22,17 +20,7 @@ export type ChatTools = { }; export type CustomUIDataTypes = { - textDelta: string; - imageDelta: string; - sheetDelta: string; - codeDelta: string; - suggestion: Suggestion; appendMessage: string; - id: string; - title: string; - kind: ArtifactKind; - clear: null; - finish: null; "chat-title": string; }; diff --git a/demos/use_cases/vercel-ai-sdk/lib/utils.ts b/demos/use_cases/vercel-ai-sdk/lib/utils.ts index 7f0c2d5c..344bd765 100644 --- a/demos/use_cases/vercel-ai-sdk/lib/utils.ts +++ b/demos/use_cases/vercel-ai-sdk/lib/utils.ts @@ -7,7 +7,7 @@ import type { import { type ClassValue, clsx } from 'clsx'; import { formatISO } from 'date-fns'; import { twMerge } from 'tailwind-merge'; -import type { DBMessage, Document } from '@/lib/db/schema'; +import type { DBMessage } from '@/lib/db/schema'; import { ChatSDKError, type ErrorCode } from './errors'; import type { ChatMessage, ChatTools, CustomUIDataTypes } from './types'; @@ -71,16 +71,6 @@ export function getMostRecentUserMessage(messages: UIMessage[]) { return userMessages.at(-1); } -export function getDocumentTimestampByIndex( - documents: Document[], - index: number, -) { - if (!documents) { return new Date(); } - if (index > documents.length) { return new Date(); } - - return documents[index].createdAt; -} - export function getTrailingMessageId({ messages, }: { diff --git a/demos/use_cases/vercel-ai-sdk/playwright.config.ts b/demos/use_cases/vercel-ai-sdk/playwright.config.ts deleted file mode 100644 index 06e99822..00000000 --- a/demos/use_cases/vercel-ai-sdk/playwright.config.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { defineConfig, devices } from "@playwright/test"; - -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -import { config } from "dotenv"; - -config({ - path: ".env.local", -}); - -/* Use process.env.PORT by default and fallback to port 3000 */ -const PORT = process.env.PORT || 3000; - -/** - * Set webServer.url and use.baseURL with the location - * of the WebServer respecting the correct set port - */ -const baseURL = `http://localhost:${PORT}`; - -/** - * See https://playwright.dev/docs/test-configuration. - */ -export default defineConfig({ - testDir: "./tests", - /* Run tests in files in parallel */ - fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, - /* Retry on CI only */ - retries: 0, - /* Limit workers to prevent browser crashes */ - workers: process.env.CI ? 2 : 2, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: "html", - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ - use: { - /* Base URL to use in actions like `await page.goto('/')`. */ - baseURL, - - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: "retain-on-failure", - }, - - /* Configure global timeout for each test */ - timeout: 240 * 1000, // 120 seconds - expect: { - timeout: 240 * 1000, - }, - - /* Configure projects */ - projects: [ - { - name: "e2e", - testMatch: /e2e\/.*.test.ts/, - use: { - ...devices["Desktop Chrome"], - }, - }, - - // { - // name: 'firefox', - // use: { ...devices['Desktop Firefox'] }, - // }, - - // { - // name: 'webkit', - // use: { ...devices['Desktop Safari'] }, - // }, - - /* Test against mobile viewports. */ - // { - // name: 'Mobile Chrome', - // use: { ...devices['Pixel 5'] }, - // }, - // { - // name: 'Mobile Safari', - // use: { ...devices['iPhone 12'] }, - // }, - - /* Test against branded browsers. */ - // { - // name: 'Microsoft Edge', - // use: { ...devices['Desktop Edge'], channel: 'msedge' }, - // }, - // { - // name: 'Google Chrome', - // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, - // }, - ], - - /* Run your local dev server before starting the tests */ - webServer: { - command: "pnpm dev", - url: `${baseURL}/ping`, - timeout: 120 * 1000, - reuseExistingServer: !process.env.CI, - }, -}); diff --git a/demos/use_cases/vercel-ai-sdk/pnpm-lock.yaml b/demos/use_cases/vercel-ai-sdk/pnpm-lock.yaml deleted file mode 100644 index 07bcac3f..00000000 --- a/demos/use_cases/vercel-ai-sdk/pnpm-lock.yaml +++ /dev/null @@ -1,8951 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@ai-sdk/gateway': - specifier: 2.0.0-beta.85 - version: 2.0.0-beta.85(zod@3.25.76) - '@ai-sdk/provider': - specifier: 3.0.0-beta.27 - version: 3.0.0-beta.27 - '@ai-sdk/react': - specifier: 3.0.0-beta.162 - version: 3.0.0-beta.162(react@19.0.1)(zod@3.25.76) - '@codemirror/lang-javascript': - specifier: ^6.2.2 - version: 6.2.3 - '@codemirror/lang-python': - specifier: ^6.1.6 - version: 6.1.7 - '@codemirror/state': - specifier: ^6.5.0 - version: 6.5.2 - '@codemirror/theme-one-dark': - specifier: ^6.1.2 - version: 6.1.2 - '@codemirror/view': - specifier: ^6.35.3 - version: 6.36.4 - '@icons-pack/react-simple-icons': - specifier: ^13.7.0 - version: 13.8.0(react@19.0.1) - '@opentelemetry/api': - specifier: ^1.9.0 - version: 1.9.0 - '@opentelemetry/api-logs': - specifier: ^0.200.0 - version: 0.200.0 - '@radix-ui/react-collapsible': - specifier: ^1.1.12 - version: 1.1.12(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-dialog': - specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-dropdown-menu': - specifier: ^2.1.16 - version: 2.1.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-hover-card': - specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-icons': - specifier: ^1.3.0 - version: 1.3.2(react@19.0.1) - '@radix-ui/react-progress': - specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-scroll-area': - specifier: ^1.2.10 - version: 1.2.10(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-select': - specifier: ^2.2.6 - version: 2.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-separator': - specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-slot': - specifier: ^1.2.4 - version: 1.2.4(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-tooltip': - specifier: ^1.2.8 - version: 1.2.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': - specifier: ^1.2.2 - version: 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-visually-hidden': - specifier: ^1.1.0 - version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@vercel/analytics': - specifier: ^1.3.1 - version: 1.5.0(next@16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.1(react@19.0.1))(react@19.0.1))(react@19.0.1) - '@vercel/blob': - specifier: ^0.24.1 - version: 0.24.1 - '@vercel/functions': - specifier: ^2.0.0 - version: 2.2.13 - '@vercel/otel': - specifier: ^1.12.0 - version: 1.14.0(@opentelemetry/api-logs@0.200.0)(@opentelemetry/api@1.9.0)(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)) - '@xyflow/react': - specifier: ^12.10.0 - version: 12.10.0(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - ai: - specifier: 6.0.0-beta.159 - version: 6.0.0-beta.159(zod@3.25.76) - bcrypt-ts: - specifier: ^5.0.2 - version: 5.0.3 - class-variance-authority: - specifier: ^0.7.1 - version: 0.7.1 - classnames: - specifier: ^2.5.1 - version: 2.5.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - cmdk: - specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - codemirror: - specifier: ^6.0.1 - version: 6.0.1 - date-fns: - specifier: ^4.1.0 - version: 4.1.0 - diff-match-patch: - specifier: ^1.0.5 - version: 1.0.5 - dotenv: - specifier: ^16.4.5 - version: 16.4.7 - drizzle-orm: - specifier: ^0.34.0 - version: 0.34.1(@neondatabase/serverless@0.9.5)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@types/react@18.3.18)(@vercel/postgres@0.10.0)(postgres@3.4.5)(react@19.0.1) - embla-carousel-react: - specifier: ^8.6.0 - version: 8.6.0(react@19.0.1) - fast-deep-equal: - specifier: ^3.1.3 - version: 3.1.3 - framer-motion: - specifier: ^11.3.19 - version: 11.18.2(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - geist: - specifier: ^1.3.1 - version: 1.3.1(next@16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)) - katex: - specifier: ^0.16.25 - version: 0.16.25 - lucide-react: - specifier: ^0.446.0 - version: 0.446.0(react@19.0.1) - motion: - specifier: ^12.23.26 - version: 12.23.26(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - nanoid: - specifier: ^5.1.3 - version: 5.1.3 - next: - specifier: 16.0.10 - version: 16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - next-auth: - specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.1(react@19.0.1))(react@19.0.1))(react@19.0.1) - next-themes: - specifier: ^0.3.0 - version: 0.3.0(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - orderedmap: - specifier: ^2.1.1 - version: 2.1.1 - papaparse: - specifier: ^5.5.2 - version: 5.5.2 - postgres: - specifier: ^3.4.4 - version: 3.4.5 - prosemirror-example-setup: - specifier: ^1.2.3 - version: 1.2.3 - prosemirror-inputrules: - specifier: ^1.4.0 - version: 1.4.0 - prosemirror-markdown: - specifier: ^1.13.1 - version: 1.13.1 - prosemirror-model: - specifier: ^1.23.0 - version: 1.24.1 - prosemirror-schema-basic: - specifier: ^1.2.3 - version: 1.2.3 - prosemirror-schema-list: - specifier: ^1.4.1 - version: 1.5.1 - prosemirror-state: - specifier: ^1.4.3 - version: 1.4.3 - prosemirror-view: - specifier: ^1.34.3 - version: 1.38.1 - radix-ui: - specifier: ^1.4.3 - version: 1.4.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: - specifier: 19.0.1 - version: 19.0.1 - react-data-grid: - specifier: 7.0.0-beta.47 - version: 7.0.0-beta.47(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react-dom: - specifier: 19.0.1 - version: 19.0.1(react@19.0.1) - react-resizable-panels: - specifier: ^2.1.7 - version: 2.1.7(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react-syntax-highlighter: - specifier: ^15.6.6 - version: 15.6.6(react@19.0.1) - redis: - specifier: ^5.0.0 - version: 5.9.0 - resumable-stream: - specifier: ^2.0.0 - version: 2.2.8 - server-only: - specifier: ^0.0.1 - version: 0.0.1 - shiki: - specifier: ^3.14.0 - version: 3.14.0 - sonner: - specifier: ^1.5.0 - version: 1.7.4(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - streamdown: - specifier: ^1.4.0 - version: 1.4.0(@types/react@18.3.18)(react@19.0.1) - swr: - specifier: ^2.2.5 - version: 2.3.3(react@19.0.1) - tailwind-merge: - specifier: ^2.5.2 - version: 2.6.0 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@4.1.16) - use-stick-to-bottom: - specifier: ^1.1.1 - version: 1.1.1(react@19.0.1) - usehooks-ts: - specifier: ^3.1.0 - version: 3.1.1(react@19.0.1) - zod: - specifier: ^3.25.76 - version: 3.25.76 - devDependencies: - '@biomejs/biome': - specifier: 2.2.2 - version: 2.2.2 - '@playwright/test': - specifier: ^1.50.1 - version: 1.51.0 - '@tailwindcss/postcss': - specifier: ^4.1.13 - version: 4.1.16 - '@tailwindcss/typography': - specifier: ^0.5.15 - version: 0.5.16(tailwindcss@4.1.16) - '@types/d3-scale': - specifier: ^4.0.8 - version: 4.0.9 - '@types/node': - specifier: ^22.8.6 - version: 22.13.10 - '@types/papaparse': - specifier: ^5.3.15 - version: 5.3.15 - '@types/pdf-parse': - specifier: ^1.1.4 - version: 1.1.4 - '@types/react': - specifier: ^18 - version: 18.3.18 - '@types/react-dom': - specifier: ^18 - version: 18.3.5(@types/react@18.3.18) - '@types/react-syntax-highlighter': - specifier: ^15.5.13 - version: 15.5.13 - drizzle-kit: - specifier: ^0.25.0 - version: 0.25.0 - postcss: - specifier: ^8 - version: 8.5.3 - tailwindcss: - specifier: ^4.1.13 - version: 4.1.16 - tsx: - specifier: ^4.19.1 - version: 4.19.3 - typescript: - specifier: ^5.6.3 - version: 5.8.2 - ultracite: - specifier: 5.3.9 - version: 5.3.9(@types/debug@4.1.12)(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0) - -packages: - - '@ai-sdk/gateway@2.0.0-beta.85': - resolution: {integrity: sha512-1LFCTwweCe1KWyBR/v64zbvNJbAu4JPooa+0JVUclcb90RYQH2FDIQCbxN4H6J8is4yaTkHW5tbLNjHpOkxZuA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/provider-utils@4.0.0-beta.53': - resolution: {integrity: sha512-83/aNTnKfurb4jdaOSfh1KgxY27SuWZbecc3bUfiUxLMtAMBLusgWMaaSbfl2VHufAoGLXIuRYRq4lXlNCdXzw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/provider@3.0.0-beta.27': - resolution: {integrity: sha512-g/H1lyBQa5TAolD0t9uW552z0dwo2evMPxE9gu22zkEUvQSkOl8F1C0Jg31sUPTn9xmKnDK+hjWsAsZnOFE9mQ==} - engines: {node: '>=18'} - - '@ai-sdk/react@3.0.0-beta.162': - resolution: {integrity: sha512-vgJPUbHJ+y5Ebs1KmCnnjdebP7dsgW4uBEtPvmJJv/5JW7K4nizEFVOoxb2FF/mU7KbbE8qiprnM/XPRgC/znQ==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ~19.0.1 || ~19.1.2 || ^19.2.1 - - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - - '@antfu/install-pkg@1.1.0': - resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} - - '@antfu/utils@9.3.0': - resolution: {integrity: sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA==} - - '@auth/core@0.37.2': - resolution: {integrity: sha512-kUvzyvkcd6h1vpeMAojK2y7+PAV5H+0Cc9+ZlKYDFhDY31AlvsB+GW5vNO4qE3Y07KeQgvNO9U0QUx/fN62kBw==} - peerDependencies: - '@simplewebauthn/browser': ^9.0.1 - '@simplewebauthn/server': ^9.0.2 - nodemailer: ^6.8.0 - peerDependenciesMeta: - '@simplewebauthn/browser': - optional: true - '@simplewebauthn/server': - optional: true - nodemailer: - optional: true - - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} - engines: {node: '>=6.9.0'} - - '@biomejs/biome@2.2.2': - resolution: {integrity: sha512-j1omAiQWCkhuLgwpMKisNKnsM6W8Xtt1l0WZmqY/dFj8QPNkIoTvk4tSsi40FaAAkBE1PU0AFG2RWFBWenAn+w==} - engines: {node: '>=14.21.3'} - hasBin: true - - '@biomejs/cli-darwin-arm64@2.2.2': - resolution: {integrity: sha512-6ePfbCeCPryWu0CXlzsWNZgVz/kBEvHiPyNpmViSt6A2eoDf4kXs3YnwQPzGjy8oBgQulrHcLnJL0nkCh80mlQ==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [darwin] - - '@biomejs/cli-darwin-x64@2.2.2': - resolution: {integrity: sha512-Tn4JmVO+rXsbRslml7FvKaNrlgUeJot++FkvYIhl1OkslVCofAtS35MPlBMhXgKWF9RNr9cwHanrPTUUXcYGag==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [darwin] - - '@biomejs/cli-linux-arm64-musl@2.2.2': - resolution: {integrity: sha512-/MhYg+Bd6renn6i1ylGFL5snYUn/Ct7zoGVKhxnro3bwekiZYE8Kl39BSb0MeuqM+72sThkQv4TnNubU9njQRw==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-arm64@2.2.2': - resolution: {integrity: sha512-JfrK3gdmWWTh2J5tq/rcWCOsImVyzUnOS2fkjhiYKCQ+v8PqM+du5cfB7G1kXas+7KQeKSWALv18iQqdtIMvzw==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-x64-musl@2.2.2': - resolution: {integrity: sha512-ZCLXcZvjZKSiRY/cFANKg+z6Fhsf9MHOzj+NrDQcM+LbqYRT97LyCLWy2AS+W2vP+i89RyRM+kbGpUzbRTYWig==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-linux-x64@2.2.2': - resolution: {integrity: sha512-Ogb+77edO5LEP/xbNicACOWVLt8mgC+E1wmpUakr+O4nKwLt9vXe74YNuT3T1dUBxC/SnrVmlzZFC7kQJEfquQ==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-win32-arm64@2.2.2': - resolution: {integrity: sha512-wBe2wItayw1zvtXysmHJQoQqXlTzHSpQRyPpJKiNIR21HzH/CrZRDFic1C1jDdp+zAPtqhNExa0owKMbNwW9cQ==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [win32] - - '@biomejs/cli-win32-x64@2.2.2': - resolution: {integrity: sha512-DAuHhHekGfiGb6lCcsT4UyxQmVwQiBCBUMwVra/dcOSs9q8OhfaZgey51MlekT3p8UwRqtXQfFuEJBhJNdLZwg==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [win32] - - '@braintree/sanitize-url@7.1.1': - resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} - - '@chevrotain/cst-dts-gen@11.0.3': - resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} - - '@chevrotain/gast@11.0.3': - resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==} - - '@chevrotain/regexp-to-ast@11.0.3': - resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==} - - '@chevrotain/types@11.0.3': - resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==} - - '@chevrotain/utils@11.0.3': - resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} - - '@clack/core@0.5.0': - resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} - - '@clack/prompts@0.11.0': - resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} - - '@codemirror/autocomplete@6.18.6': - resolution: {integrity: sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==} - - '@codemirror/commands@6.8.0': - resolution: {integrity: sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==} - - '@codemirror/lang-javascript@6.2.3': - resolution: {integrity: sha512-8PR3vIWg7pSu7ur8A07pGiYHgy3hHj+mRYRCSG8q+mPIrl0F02rgpGv+DsQTHRTc30rydOsf5PZ7yjKFg2Ackw==} - - '@codemirror/lang-python@6.1.7': - resolution: {integrity: sha512-mZnFTsL4lW5p9ch8uKNKeRU3xGGxr1QpESLilfON2E3fQzOa/OygEMkaDvERvXDJWJA9U9oN/D4w0ZuUzNO4+g==} - - '@codemirror/language@6.11.0': - resolution: {integrity: sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==} - - '@codemirror/lint@6.8.4': - resolution: {integrity: sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==} - - '@codemirror/search@6.5.10': - resolution: {integrity: sha512-RMdPdmsrUf53pb2VwflKGHEe1XVM07hI7vV2ntgw1dmqhimpatSJKva4VA9h4TLUDOD4EIF02201oZurpnEFsg==} - - '@codemirror/state@6.5.2': - resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} - - '@codemirror/theme-one-dark@6.1.2': - resolution: {integrity: sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==} - - '@codemirror/view@6.36.4': - resolution: {integrity: sha512-ZQ0V5ovw/miKEXTvjgzRyjnrk9TwriUB1k4R5p7uNnHR9Hus+D1SXHGdJshijEzPFjU25xea/7nhIeSqYFKdbA==} - - '@drizzle-team/brocli@0.10.2': - resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - - '@emnapi/runtime@1.7.1': - resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} - - '@esbuild-kit/core-utils@3.3.2': - resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} - deprecated: 'Merged into tsx: https://tsx.is' - - '@esbuild-kit/esm-loader@2.6.5': - resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} - deprecated: 'Merged into tsx: https://tsx.is' - - '@esbuild/aix-ppc64@0.19.12': - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.25.1': - resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.19.12': - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.25.1': - resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.19.12': - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.25.1': - resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.19.12': - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.25.1': - resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.19.12': - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.25.1': - resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.19.12': - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.1': - resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.19.12': - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.25.1': - resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.19.12': - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.1': - resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.19.12': - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.25.1': - resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.19.12': - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.25.1': - resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.19.12': - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.25.1': - resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.19.12': - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.25.1': - resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.19.12': - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.25.1': - resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.19.12': - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.25.1': - resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.19.12': - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.1': - resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.19.12': - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.25.1': - resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.19.12': - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.25.1': - resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.1': - resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.19.12': - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.1': - resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.1': - resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.19.12': - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.1': - resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.19.12': - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.25.1': - resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.19.12': - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.25.1': - resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.19.12': - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.25.1': - resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.19.12': - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.25.1': - resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - - '@floating-ui/core@1.6.9': - resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - - '@floating-ui/dom@1.6.13': - resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} - - '@floating-ui/react-dom@2.1.2': - resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/utils@0.2.9': - resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - - '@iconify/types@2.0.0': - resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - - '@iconify/utils@3.0.2': - resolution: {integrity: sha512-EfJS0rLfVuRuJRn4psJHtK2A9TqVnkxPpHY6lYHiB9+8eSuudsxbwMiavocG45ujOo6FJ+CIRlRnlOGinzkaGQ==} - - '@icons-pack/react-simple-icons@13.8.0': - resolution: {integrity: sha512-iZrhL1fSklfCCVn68IYHaAoKfcby3RakUTn2tRPyHBkhr2tkYqeQbjJWf+NizIYBzKBn2IarDJXmTdXd6CuEfw==} - peerDependencies: - react: ^16.13 || ^17 || ^18 || ^19 - - '@img/colour@1.0.0': - resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} - engines: {node: '>=18'} - - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} - cpu: [arm] - os: [linux] - - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} - cpu: [ppc64] - os: [linux] - - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} - cpu: [riscv64] - os: [linux] - - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} - cpu: [s390x] - os: [linux] - - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} - cpu: [x64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} - cpu: [x64] - os: [linux] - - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ppc64] - os: [linux] - - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [riscv64] - os: [linux] - - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [win32] - - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@lezer/common@1.2.3': - resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} - - '@lezer/highlight@1.2.1': - resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} - - '@lezer/javascript@1.4.21': - resolution: {integrity: sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ==} - - '@lezer/lr@1.4.2': - resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} - - '@lezer/python@1.1.16': - resolution: {integrity: sha512-ievIWylIZA5rNgAyHgA06/Y76vMUISKaYL9WrtjU8rCTTEzyZYo2jz9ER2YBdnN6dxCyS7eaK4HJCzamoAMKZw==} - - '@marijn/find-cluster-break@1.0.2': - resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} - - '@mermaid-js/parser@0.6.3': - resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==} - - '@neondatabase/serverless@0.9.5': - resolution: {integrity: sha512-siFas6gItqv6wD/pZnvdu34wEqgG3nSE6zWZdq5j2DEsa+VvX8i/5HXJOo06qrw5axPXn+lGCxeR+NLaSPIXug==} - - '@next/env@16.0.10': - resolution: {integrity: sha512-8tuaQkyDVgeONQ1MeT9Mkk8pQmZapMKFh5B+OrFUlG3rVmYTXcXlBetBgTurKXGaIZvkoqRT9JL5K3phXcgang==} - - '@next/swc-darwin-arm64@16.0.10': - resolution: {integrity: sha512-4XgdKtdVsaflErz+B5XeG0T5PeXKDdruDf3CRpnhN+8UebNa5N2H58+3GDgpn/9GBurrQ1uWW768FfscwYkJRg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@next/swc-darwin-x64@16.0.10': - resolution: {integrity: sha512-spbEObMvRKkQ3CkYVOME+ocPDFo5UqHb8EMTS78/0mQ+O1nqE8toHJVioZo4TvebATxgA8XMTHHrScPrn68OGw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@next/swc-linux-arm64-gnu@16.0.10': - resolution: {integrity: sha512-uQtWE3X0iGB8apTIskOMi2w/MKONrPOUCi5yLO+v3O8Mb5c7K4Q5KD1jvTpTF5gJKa3VH/ijKjKUq9O9UhwOYw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@next/swc-linux-arm64-musl@16.0.10': - resolution: {integrity: sha512-llA+hiDTrYvyWI21Z0L1GiXwjQaanPVQQwru5peOgtooeJ8qx3tlqRV2P7uH2pKQaUfHxI/WVarvI5oYgGxaTw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@next/swc-linux-x64-gnu@16.0.10': - resolution: {integrity: sha512-AK2q5H0+a9nsXbeZ3FZdMtbtu9jxW4R/NgzZ6+lrTm3d6Zb7jYrWcgjcpM1k8uuqlSy4xIyPR2YiuUr+wXsavA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@next/swc-linux-x64-musl@16.0.10': - resolution: {integrity: sha512-1TDG9PDKivNw5550S111gsO4RGennLVl9cipPhtkXIFVwo31YZ73nEbLjNC8qG3SgTz/QZyYyaFYMeY4BKZR/g==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@next/swc-win32-arm64-msvc@16.0.10': - resolution: {integrity: sha512-aEZIS4Hh32xdJQbHz121pyuVZniSNoqDVx1yIr2hy+ZwJGipeqnMZBJHyMxv2tiuAXGx6/xpTcQJ6btIiBjgmg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@next/swc-win32-x64-msvc@16.0.10': - resolution: {integrity: sha512-E+njfCoFLb01RAFEnGZn6ERoOqhK1Gl3Lfz1Kjnj0Ulfu7oJbuMyvBKNj/bw8XZnenHDASlygTjZICQW+rYW1Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@opentelemetry/api-logs@0.200.0': - resolution: {integrity: sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/api-logs@0.57.2': - resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==} - engines: {node: '>=14'} - - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/core@1.30.1': - resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/instrumentation@0.57.2': - resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/resources@1.30.1': - resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/sdk-logs@0.57.2': - resolution: {integrity: sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.10.0' - - '@opentelemetry/sdk-metrics@1.30.1': - resolution: {integrity: sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - - '@opentelemetry/sdk-trace-base@1.30.1': - resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/semantic-conventions@1.28.0': - resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} - engines: {node: '>=14'} - - '@panva/hkdf@1.2.1': - resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==} - - '@playwright/test@1.51.0': - resolution: {integrity: sha512-dJ0dMbZeHhI+wb77+ljx/FeC8VBP6j/rj9OAojO08JI80wTZy6vRk9KvHKiDCUh4iMpEiseMgqRBIeW+eKX6RA==} - engines: {node: '>=18'} - hasBin: true - - '@radix-ui/number@1.1.1': - resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} - - '@radix-ui/primitive@1.1.3': - resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - - '@radix-ui/react-accessible-icon@1.1.7': - resolution: {integrity: sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==} - 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 - - '@radix-ui/react-accordion@1.2.12': - 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 - - '@radix-ui/react-alert-dialog@1.1.15': - 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 - - '@radix-ui/react-arrow@1.1.7': - 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 - - '@radix-ui/react-aspect-ratio@1.1.7': - resolution: {integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==} - 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 - - '@radix-ui/react-avatar@1.1.10': - resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==} - 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 - - '@radix-ui/react-checkbox@1.3.3': - 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 - - '@radix-ui/react-collapsible@1.1.12': - 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 - - '@radix-ui/react-collection@1.1.7': - 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 - - '@radix-ui/react-compose-refs@1.1.1': - resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-compose-refs@1.1.2': - 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 - - '@radix-ui/react-context-menu@2.2.16': - resolution: {integrity: sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==} - 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 - - '@radix-ui/react-context@1.1.2': - 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 - - '@radix-ui/react-context@1.1.3': - 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 - - '@radix-ui/react-dialog@1.1.15': - 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 - - '@radix-ui/react-direction@1.1.1': - 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 - - '@radix-ui/react-dismissable-layer@1.1.11': - 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 - - '@radix-ui/react-dropdown-menu@2.1.16': - 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 - - '@radix-ui/react-focus-guards@1.1.3': - 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 - - '@radix-ui/react-focus-scope@1.1.7': - 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 - - '@radix-ui/react-form@0.1.8': - resolution: {integrity: sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==} - 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 - - '@radix-ui/react-hover-card@1.1.15': - 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 - - '@radix-ui/react-icons@1.3.2': - resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} - peerDependencies: - react: ^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc - - '@radix-ui/react-id@1.1.1': - 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 - - '@radix-ui/react-label@2.1.7': - resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} - 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 - - '@radix-ui/react-menu@2.1.16': - 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 - - '@radix-ui/react-menubar@1.1.16': - resolution: {integrity: sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==} - 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 - - '@radix-ui/react-navigation-menu@1.2.14': - 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 - - '@radix-ui/react-one-time-password-field@0.1.8': - resolution: {integrity: sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==} - 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 - - '@radix-ui/react-password-toggle-field@0.1.3': - resolution: {integrity: sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==} - 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 - - '@radix-ui/react-popover@1.1.15': - 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 - - '@radix-ui/react-popper@1.2.8': - 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 - - '@radix-ui/react-portal@1.1.9': - 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 - - '@radix-ui/react-presence@1.1.5': - 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 - - '@radix-ui/react-primitive@2.0.2': - resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+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 - - '@radix-ui/react-primitive@2.1.3': - 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 - - '@radix-ui/react-primitive@2.1.4': - 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 - - '@radix-ui/react-progress@1.1.7': - resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==} - 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 - - '@radix-ui/react-progress@1.1.8': - 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 - - '@radix-ui/react-radio-group@1.3.8': - 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 - - '@radix-ui/react-roving-focus@1.1.11': - 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 - - '@radix-ui/react-scroll-area@1.2.10': - 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 - - '@radix-ui/react-select@2.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 - - '@radix-ui/react-separator@1.1.7': - resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} - 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 - - '@radix-ui/react-separator@1.1.8': - resolution: {integrity: sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==} - 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 - - '@radix-ui/react-slider@1.3.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 - - '@radix-ui/react-slot@1.1.2': - resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-slot@1.2.3': - 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 - - '@radix-ui/react-slot@1.2.4': - 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 - - '@radix-ui/react-switch@1.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 - - '@radix-ui/react-tabs@1.1.13': - 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 - - '@radix-ui/react-toast@1.2.15': - resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} - 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 - - '@radix-ui/react-toggle-group@1.1.11': - 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 - - '@radix-ui/react-toggle@1.1.10': - 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 - - '@radix-ui/react-toolbar@1.1.11': - resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==} - 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 - - '@radix-ui/react-tooltip@1.2.8': - 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 - - '@radix-ui/react-use-callback-ref@1.1.1': - 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 - - '@radix-ui/react-use-controllable-state@1.2.2': - 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 - - '@radix-ui/react-use-effect-event@0.0.2': - 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 - - '@radix-ui/react-use-escape-keydown@1.1.1': - 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 - - '@radix-ui/react-use-is-hydrated@0.1.0': - resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-layout-effect@1.1.1': - 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 - - '@radix-ui/react-use-previous@1.1.1': - 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 - - '@radix-ui/react-use-rect@1.1.1': - 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 - - '@radix-ui/react-use-size@1.1.1': - 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 - - '@radix-ui/react-visually-hidden@1.1.2': - resolution: {integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==} - 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 - - '@radix-ui/react-visually-hidden@1.2.3': - 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 - - '@radix-ui/rect@1.1.1': - resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - - '@redis/bloom@5.9.0': - resolution: {integrity: sha512-W9D8yfKTWl4tP8lkC3MRYkMz4OfbuzE/W8iObe0jFgoRmgMfkBV+Vj38gvIqZPImtY0WB34YZkX3amYuQebvRQ==} - engines: {node: '>= 18'} - peerDependencies: - '@redis/client': ^5.9.0 - - '@redis/client@5.9.0': - resolution: {integrity: sha512-EI0Ti5pojD2p7TmcS7RRa+AJVahdQvP/urpcSbK/K9Rlk6+dwMJTQ354pCNGCwfke8x4yKr5+iH85wcERSkwLQ==} - engines: {node: '>= 18'} - - '@redis/json@5.9.0': - resolution: {integrity: sha512-Bm2jjLYaXdUWPb9RaEywxnjmzw7dWKDZI4MS79mTWPV16R982jVWBj6lY2ZGelJbwxHtEVg4/FSVgYDkuO/MxA==} - engines: {node: '>= 18'} - peerDependencies: - '@redis/client': ^5.9.0 - - '@redis/search@5.9.0': - resolution: {integrity: sha512-jdk2csmJ29DlpvCIb2ySjix2co14/0iwIT3C0I+7ZaToXgPbgBMB+zfEilSuncI2F9JcVxHki0YtLA0xX3VdpA==} - engines: {node: '>= 18'} - peerDependencies: - '@redis/client': ^5.9.0 - - '@redis/time-series@5.9.0': - resolution: {integrity: sha512-W6ILxcyOqhnI7ELKjJXOktIg3w4+aBHugDbVpgVLPZ+YDjObis1M0v7ZzwlpXhlpwsfePfipeSK+KWNuymk52w==} - engines: {node: '>= 18'} - peerDependencies: - '@redis/client': ^5.9.0 - - '@rollup/rollup-android-arm-eabi@4.52.5': - resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.52.5': - resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.52.5': - resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.52.5': - resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.52.5': - resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.52.5': - resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.52.5': - resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.52.5': - resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.52.5': - resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.52.5': - resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loong64-gnu@4.52.5': - resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.52.5': - resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.52.5': - resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.52.5': - resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.52.5': - resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.52.5': - resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.52.5': - resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-openharmony-arm64@4.52.5': - resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.52.5': - resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.52.5': - resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.52.5': - resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.52.5': - resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} - cpu: [x64] - os: [win32] - - '@shikijs/core@3.14.0': - resolution: {integrity: sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw==} - - '@shikijs/engine-javascript@3.14.0': - resolution: {integrity: sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ==} - - '@shikijs/engine-oniguruma@3.14.0': - resolution: {integrity: sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==} - - '@shikijs/langs@3.14.0': - resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==} - - '@shikijs/themes@3.14.0': - resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==} - - '@shikijs/types@3.14.0': - resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==} - - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - - '@tailwindcss/node@4.1.16': - resolution: {integrity: sha512-BX5iaSsloNuvKNHRN3k2RcCuTEgASTo77mofW0vmeHkfrDWaoFAFvNHpEgtu0eqyypcyiBkDWzSMxJhp3AUVcw==} - - '@tailwindcss/oxide-android-arm64@4.1.16': - resolution: {integrity: sha512-8+ctzkjHgwDJ5caq9IqRSgsP70xhdhJvm+oueS/yhD5ixLhqTw9fSL1OurzMUhBwE5zK26FXLCz2f/RtkISqHA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.1.16': - resolution: {integrity: sha512-C3oZy5042v2FOALBZtY0JTDnGNdS6w7DxL/odvSny17ORUnaRKhyTse8xYi3yKGyfnTUOdavRCdmc8QqJYwFKA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.1.16': - resolution: {integrity: sha512-vjrl/1Ub9+JwU6BP0emgipGjowzYZMjbWCDqwA2Z4vCa+HBSpP4v6U2ddejcHsolsYxwL5r4bPNoamlV0xDdLg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.1.16': - resolution: {integrity: sha512-TSMpPYpQLm+aR1wW5rKuUuEruc/oOX3C7H0BTnPDn7W/eMw8W+MRMpiypKMkXZfwH8wqPIRKppuZoedTtNj2tg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.16': - resolution: {integrity: sha512-p0GGfRg/w0sdsFKBjMYvvKIiKy/LNWLWgV/plR4lUgrsxFAoQBFrXkZ4C0w8IOXfslB9vHK/JGASWD2IefIpvw==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.16': - resolution: {integrity: sha512-DoixyMmTNO19rwRPdqviTrG1rYzpxgyYJl8RgQvdAQUzxC1ToLRqtNJpU/ATURSKgIg6uerPw2feW0aS8SNr/w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-musl@4.1.16': - resolution: {integrity: sha512-H81UXMa9hJhWhaAUca6bU2wm5RRFpuHImrwXBUvPbYb+3jo32I9VIwpOX6hms0fPmA6f2pGVlybO6qU8pF4fzQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-gnu@4.1.16': - resolution: {integrity: sha512-ZGHQxDtFC2/ruo7t99Qo2TTIvOERULPl5l0K1g0oK6b5PGqjYMga+FcY1wIUnrUxY56h28FxybtDEla+ICOyew==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-musl@4.1.16': - resolution: {integrity: sha512-Oi1tAaa0rcKf1Og9MzKeINZzMLPbhxvm7rno5/zuP1WYmpiG0bEHq4AcRUiG2165/WUzvxkW4XDYCscZWbTLZw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-wasm32-wasi@4.1.16': - resolution: {integrity: sha512-B01u/b8LteGRwucIBmCQ07FVXLzImWESAIMcUU6nvFt/tYsQ6IHz8DmZ5KtvmwxD+iTYBtM1xwoGXswnlu9v0Q==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.16': - resolution: {integrity: sha512-zX+Q8sSkGj6HKRTMJXuPvOcP8XfYON24zJBRPlszcH1Np7xuHXhWn8qfFjIujVzvH3BHU+16jBXwgpl20i+v9A==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.1.16': - resolution: {integrity: sha512-m5dDFJUEejbFqP+UXVstd4W/wnxA4F61q8SoL+mqTypId2T2ZpuxosNSgowiCnLp2+Z+rivdU0AqpfgiD7yCBg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.1.16': - resolution: {integrity: sha512-2OSv52FRuhdlgyOQqgtQHuCgXnS8nFSYRp2tJ+4WZXKgTxqPy7SMSls8c3mPT5pkZ17SBToGM5LHEJBO7miEdg==} - engines: {node: '>= 10'} - - '@tailwindcss/postcss@4.1.16': - resolution: {integrity: sha512-Qn3SFGPXYQMKR/UtqS+dqvPrzEeBZHrFA92maT4zijCVggdsXnDBMsPFJo1eArX3J+O+Gi+8pV4PkqjLCNBk3A==} - - '@tailwindcss/typography@0.5.16': - resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - - '@trpc/server@11.7.1': - resolution: {integrity: sha512-N3U8LNLIP4g9C7LJ/sLkjuPHwqlvE3bnspzC4DEFVdvx2+usbn70P80E3wj5cjOTLhmhRiwJCSXhlB+MHfGeCw==} - peerDependencies: - typescript: '>=5.7.2' - - '@types/chai@5.2.3': - resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} - - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - - '@types/d3-array@3.2.2': - resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} - - '@types/d3-axis@3.0.6': - resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} - - '@types/d3-brush@3.0.6': - resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} - - '@types/d3-chord@3.0.6': - resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} - - '@types/d3-color@3.1.3': - resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} - - '@types/d3-contour@3.0.6': - resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} - - '@types/d3-delaunay@6.0.4': - resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} - - '@types/d3-dispatch@3.0.7': - resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} - - '@types/d3-drag@3.0.7': - resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} - - '@types/d3-dsv@3.0.7': - resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} - - '@types/d3-ease@3.0.2': - resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} - - '@types/d3-fetch@3.0.7': - resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} - - '@types/d3-force@3.0.10': - resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} - - '@types/d3-format@3.0.4': - resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} - - '@types/d3-geo@3.1.0': - resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} - - '@types/d3-hierarchy@3.1.7': - resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} - - '@types/d3-interpolate@3.0.4': - resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - - '@types/d3-path@3.1.1': - resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} - - '@types/d3-polygon@3.0.2': - resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} - - '@types/d3-quadtree@3.0.6': - resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} - - '@types/d3-random@3.0.3': - resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} - - '@types/d3-scale-chromatic@3.1.0': - resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} - - '@types/d3-scale@4.0.9': - resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} - - '@types/d3-selection@3.0.11': - resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} - - '@types/d3-shape@3.1.7': - resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==} - - '@types/d3-time-format@4.0.3': - resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} - - '@types/d3-time@3.0.4': - resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} - - '@types/d3-timer@3.0.2': - resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - - '@types/d3-transition@3.0.9': - resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} - - '@types/d3-zoom@3.0.8': - resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} - - '@types/d3@7.4.3': - resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/geojson@7946.0.16': - resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - - '@types/hast@2.3.10': - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/katex@0.16.7': - resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} - - '@types/linkify-it@5.0.0': - resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - - '@types/markdown-it@14.1.2': - resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/mdurl@2.0.0': - resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/node@22.13.10': - resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} - - '@types/omelette@0.4.5': - resolution: {integrity: sha512-zUCJpVRwfMcZfkxSCGp73mgd3/xesvPz5tQJIORlfP/zkYEyp9KUfF7IP3RRjyZR3DwxkPs96/IFf70GmYZYHQ==} - - '@types/papaparse@5.3.15': - resolution: {integrity: sha512-JHe6vF6x/8Z85nCX4yFdDslN11d+1pr12E526X8WAfhadOeaOTx5AuIkvDKIBopfvlzpzkdMx4YyvSKCM9oqtw==} - - '@types/pdf-parse@1.1.4': - resolution: {integrity: sha512-+gbBHbNCVGGYw1S9lAIIvrHW47UYOhMIFUsJcMkMrzy1Jf0vulBN3XQIjPgnoOXveMuHnF3b57fXROnY/Or7eg==} - - '@types/pg@8.11.6': - resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==} - - '@types/prop-types@15.7.14': - resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} - - '@types/react-dom@18.3.5': - resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} - peerDependencies: - '@types/react': ^18.0.0 - - '@types/react-syntax-highlighter@15.5.13': - resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} - - '@types/react@18.3.18': - resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} - - '@types/shimmer@1.2.0': - resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} - - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - - '@vercel/analytics@1.5.0': - resolution: {integrity: sha512-MYsBzfPki4gthY5HnYN7jgInhAZ7Ac1cYDoRWFomwGHWEX7odTEzbtg9kf/QSo7XEsEAqlQugA6gJ2WS2DEa3g==} - peerDependencies: - '@remix-run/react': ^2 - '@sveltejs/kit': ^1 || ^2 - next: '>= 13' - react: ^18 || ^19 || ^19.0.0-rc - svelte: '>= 4' - vue: ^3 - vue-router: ^4 - peerDependenciesMeta: - '@remix-run/react': - optional: true - '@sveltejs/kit': - optional: true - next: - optional: true - react: - optional: true - svelte: - optional: true - vue: - optional: true - vue-router: - optional: true - - '@vercel/blob@0.24.1': - resolution: {integrity: sha512-wHzgKzvAuF4tRDoXk3wGBYzQZ9z2fLr4oftiR1hOclPEdA1aj2/0mizvO2l5w91eZlTAaFth0S1DlqrrXqpntg==} - engines: {node: '>=16.14'} - - '@vercel/functions@2.2.13': - resolution: {integrity: sha512-14ArBSIIcOBx9nrEgaJb4Bw+en1gl6eSoJWh8qjifLl5G3E4dRXCFOT8HP+w66vb9Wqyd1lAQBrmRhRwOj9X9A==} - engines: {node: '>= 18'} - peerDependencies: - '@aws-sdk/credential-provider-web-identity': '*' - peerDependenciesMeta: - '@aws-sdk/credential-provider-web-identity': - optional: true - - '@vercel/oidc@2.0.2': - resolution: {integrity: sha512-59PBFx3T+k5hLTEWa3ggiMpGRz1OVvl9eN8SUai+A43IsqiOuAe7qPBf+cray/Fj6mkgnxm/D7IAtjc8zSHi7g==} - engines: {node: '>= 18'} - - '@vercel/oidc@3.0.5': - resolution: {integrity: sha512-fnYhv671l+eTTp48gB4zEsTW/YtRgRPnkI2nT7x6qw5rkI1Lq2hTmQIpHPgyThI0znLK+vX2n9XxKdXZ7BUbbw==} - engines: {node: '>= 20'} - - '@vercel/otel@1.14.0': - resolution: {integrity: sha512-4FXrYvjmHh3ia2v/TN/iiz0oVIw1xSnkW/MzRtsUGpu4jlcfu1qXJIfugQ1iAZnRolyTKn8FxhoWA6EhiAIZBg==} - engines: {node: '>=18'} - peerDependencies: - '@opentelemetry/api': '>=1.7.0 <2.0.0' - '@opentelemetry/api-logs': '>=0.46.0 <0.200.0' - '@opentelemetry/instrumentation': '>=0.46.0 <0.200.0' - '@opentelemetry/resources': '>=1.19.0 <2.0.0' - '@opentelemetry/sdk-logs': '>=0.46.0 <0.200.0' - '@opentelemetry/sdk-metrics': '>=1.19.0 <2.0.0' - '@opentelemetry/sdk-trace-base': '>=1.19.0 <2.0.0' - - '@vercel/postgres@0.10.0': - resolution: {integrity: sha512-fSD23DxGND40IzSkXjcFcxr53t3Tiym59Is0jSYIFpG4/0f0KO9SGtcp1sXiebvPaGe7N/tU05cH4yt2S6/IPg==} - engines: {node: '>=18.14'} - - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - - '@xyflow/react@12.10.0': - resolution: {integrity: sha512-eOtz3whDMWrB4KWVatIBrKuxECHqip6PfA8fTpaS2RUGVpiEAe+nqDKsLqkViVWxDGreq0lWX71Xth/SPAzXiw==} - peerDependencies: - react: '>=17' - react-dom: '>=17' - - '@xyflow/system@0.0.74': - resolution: {integrity: sha512-7v7B/PkiVrkdZzSbL+inGAo6tkR/WQHHG0/jhSvLQToCsfa8YubOGmBYd1s08tpKpihdHDZFwzQZeR69QSBb4Q==} - - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - ai@6.0.0-beta.159: - resolution: {integrity: sha512-iwyz0iycu0Tu1of9GLGwiXvNgW6dB+hnFE0dzWubTQFKz0C8nB8gjMwRTiNhNXO6HuN9+uokg9DO7HYM2CRExw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-hidden@1.2.4: - resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} - engines: {node: '>=10'} - - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - - async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - - bcrypt-ts@5.0.3: - resolution: {integrity: sha512-2FcgD12xPbwCoe5i9/HK0jJ1xA1m+QfC1e6htG9Bl/hNOnLyaFmQSlqLKcfe3QdnoMPKpKEGFCbESBTg+SJNOw==} - engines: {node: '>=18'} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - bufferutil@4.0.9: - resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} - engines: {node: '>=6.14.2'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - caniuse-lite@1.0.30001704: - resolution: {integrity: sha512-+L2IgBbV6gXB4ETf0keSvLr7JUrRVbIaB/lrQ1+z8mRcQiisG5k+lG6O4n6Y5q6f5EuNfaYXKgymucphlEXQew==} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} - engines: {node: '>=18'} - - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - - character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - - character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - - character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - - character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - - chevrotain-allstar@0.3.1: - resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==} - peerDependencies: - chevrotain: ^11.0.0 - - chevrotain@11.0.3: - resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} - - citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - - class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - - classcat@5.0.5: - resolution: {integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==} - - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - cluster-key-slot@1.1.2: - resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} - engines: {node: '>=0.10.0'} - - cmdk@1.1.1: - resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - react-dom: ^18 || ^19 || ^19.0.0-rc - - codemirror@6.0.1: - resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==} - - comma-separated-tokens@1.0.8: - resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} - - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - - commander@14.0.2: - resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} - engines: {node: '>=20'} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - - cose-base@1.0.3: - resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} - - cose-base@2.2.0: - resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} - - crelt@1.0.6: - resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - cytoscape-cose-bilkent@4.1.0: - resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} - peerDependencies: - cytoscape: ^3.2.0 - - cytoscape-fcose@2.2.0: - resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} - peerDependencies: - cytoscape: ^3.2.0 - - cytoscape@3.33.1: - resolution: {integrity: sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==} - engines: {node: '>=0.10'} - - d3-array@2.12.1: - resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} - - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-axis@3.0.0: - resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} - engines: {node: '>=12'} - - d3-brush@3.0.0: - resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} - engines: {node: '>=12'} - - d3-chord@3.0.1: - resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} - engines: {node: '>=12'} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-contour@4.0.2: - resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} - engines: {node: '>=12'} - - d3-delaunay@6.0.4: - resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} - engines: {node: '>=12'} - - d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} - - d3-drag@3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} - engines: {node: '>=12'} - - d3-dsv@3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} - engines: {node: '>=12'} - hasBin: true - - d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - - d3-fetch@3.0.1: - resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} - engines: {node: '>=12'} - - d3-force@3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} - engines: {node: '>=12'} - - d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - - d3-geo@3.1.1: - resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} - engines: {node: '>=12'} - - d3-hierarchy@3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-path@1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} - - d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} - - d3-polygon@3.0.1: - resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} - engines: {node: '>=12'} - - d3-quadtree@3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} - engines: {node: '>=12'} - - d3-random@3.0.1: - resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} - engines: {node: '>=12'} - - d3-sankey@0.12.3: - resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} - - d3-scale-chromatic@3.1.0: - resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} - engines: {node: '>=12'} - - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-selection@3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} - engines: {node: '>=12'} - - d3-shape@1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} - - d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - - d3-transition@3.0.1: - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} - engines: {node: '>=12'} - peerDependencies: - d3-selection: 2 - 3 - - d3-zoom@3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} - engines: {node: '>=12'} - - d3@7.9.0: - resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} - engines: {node: '>=12'} - - dagre-d3-es@7.0.13: - resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==} - - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - - dayjs@1.11.19: - resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} - - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decode-named-character-reference@1.1.0: - resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} - - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - delaunator@5.0.1: - resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - diff-match-patch@1.0.5: - resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} - - dompurify@3.3.0: - resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==} - - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} - - drizzle-kit@0.25.0: - resolution: {integrity: sha512-Rcf0nYCAKizwjWQCY+d3zytyuTbDb81NcaPor+8NebESlUz1+9W3uGl0+r9FhU4Qal5Zv9j/7neXCSCe7DHzjA==} - hasBin: true - - drizzle-orm@0.34.1: - resolution: {integrity: sha512-t+zCwyWWt8xTqtYV4doE/xYmT7hpv1L8pQ66zddEz+3VWyedBBtctjMAp22mAJPfyWurRQXUJ1nrTtqLq+DqNA==} - peerDependencies: - '@aws-sdk/client-rds-data': '>=3' - '@cloudflare/workers-types': '>=3' - '@electric-sql/pglite': '>=0.1.1' - '@libsql/client': '>=0.10.0' - '@neondatabase/serverless': '>=0.1' - '@op-engineering/op-sqlite': '>=2' - '@opentelemetry/api': ^1.4.1 - '@planetscale/database': '>=1' - '@prisma/client': '*' - '@tidbcloud/serverless': '*' - '@types/better-sqlite3': '*' - '@types/pg': '*' - '@types/react': '>=18' - '@types/sql.js': '*' - '@vercel/postgres': '>=0.8.0' - '@xata.io/client': '*' - better-sqlite3: '>=7' - bun-types: '*' - expo-sqlite: '>=13.2.0' - knex: '*' - kysely: '*' - mysql2: '>=2' - pg: '>=8' - postgres: '>=3' - prisma: '*' - react: '>=18' - sql.js: '>=1' - sqlite3: '>=5' - peerDependenciesMeta: - '@aws-sdk/client-rds-data': - optional: true - '@cloudflare/workers-types': - optional: true - '@electric-sql/pglite': - optional: true - '@libsql/client': - optional: true - '@neondatabase/serverless': - optional: true - '@op-engineering/op-sqlite': - optional: true - '@opentelemetry/api': - optional: true - '@planetscale/database': - optional: true - '@prisma/client': - optional: true - '@tidbcloud/serverless': - optional: true - '@types/better-sqlite3': - optional: true - '@types/pg': - optional: true - '@types/react': - optional: true - '@types/sql.js': - optional: true - '@vercel/postgres': - optional: true - '@xata.io/client': - optional: true - better-sqlite3: - optional: true - bun-types: - optional: true - expo-sqlite: - optional: true - knex: - optional: true - kysely: - optional: true - mysql2: - optional: true - pg: - optional: true - postgres: - optional: true - prisma: - optional: true - react: - optional: true - sql.js: - optional: true - sqlite3: - optional: true - - embla-carousel-react@8.6.0: - 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 - - embla-carousel-reactive-utils@8.6.0: - resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} - peerDependencies: - embla-carousel: 8.6.0 - - embla-carousel@8.6.0: - resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} - - enhanced-resolve@5.18.3: - resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} - engines: {node: '>=10.13.0'} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - - esbuild-register@3.6.0: - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} - peerDependencies: - esbuild: '>=0.12 <1' - - esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.25.1: - resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} - engines: {node: '>=18'} - hasBin: true - - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - - estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - eventsource-parser@3.0.6: - resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} - engines: {node: '>=18.0.0'} - - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} - engines: {node: '>=12.0.0'} - - exsolve@1.0.7: - resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fault@1.0.4: - resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - - framer-motion@11.18.2: - resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} - 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 - - framer-motion@12.23.26: - resolution: {integrity: sha512-cPcIhgR42xBn1Uj+PzOyheMtZ73H927+uWPDVhUMqxy8UHt6Okavb6xIz9J/phFUHUj0OncR6UvMfJTXoc/LKA==} - 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 - - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - geist@1.3.1: - resolution: {integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==} - peerDependencies: - next: '>=13.2.0' - - get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - - get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - - globals@15.15.0: - resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} - engines: {node: '>=18'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - hachure-fill@0.5.2: - resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hast-util-from-dom@5.0.1: - resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} - - hast-util-from-html-isomorphic@2.0.0: - resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} - - hast-util-from-html@2.0.3: - resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} - - hast-util-from-parse5@8.0.3: - resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} - - hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - - hast-util-parse-selector@2.2.5: - resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} - - hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - - hast-util-raw@9.1.0: - resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} - - hast-util-to-html@9.0.5: - resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} - - hast-util-to-jsx-runtime@2.3.6: - resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} - - hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} - - hast-util-to-text@4.0.2: - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - - hastscript@6.0.0: - resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} - - hastscript@9.0.1: - resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - - highlight.js@10.7.3: - resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - - highlightjs-vue@1.0.0: - resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} - - html-url-attributes@3.0.1: - resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} - - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - import-in-the-middle@1.15.0: - resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} - - inline-style-parser@0.2.4: - resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - - internmap@1.0.1: - resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - - is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - - jose@5.10.0: - resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} - - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - - jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - - katex@0.16.25: - resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==} - hasBin: true - - khroma@2.1.0: - resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} - - kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - - langium@3.3.1: - resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==} - engines: {node: '>=16.0.0'} - - layout-base@1.0.2: - resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} - - layout-base@2.0.1: - resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} - - lightningcss-android-arm64@1.30.2: - resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [android] - - lightningcss-darwin-arm64@1.30.2: - resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.30.2: - resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.30.2: - resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.30.2: - resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.30.2: - resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.30.2: - resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.30.2: - resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.30.2: - resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-arm64-msvc@1.30.2: - resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.30.2: - resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.30.2: - resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} - engines: {node: '>= 12.0.0'} - - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - - local-pkg@1.1.2: - resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} - engines: {node: '>=14'} - - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - - lodash.castarray@4.4.0: - resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - - lowlight@1.20.0: - resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} - - lucide-react@0.446.0: - resolution: {integrity: sha512-BU7gy8MfBMqvEdDPH79VhOXSEgyG8TSPOKWaExWGCQVqnGH7wGgDngPbofu+KdtVjPQBWbEmnfMTq90CTiiDRg==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc - - lucide-react@0.542.0: - resolution: {integrity: sha512-w3hD8/SQB7+lzU2r4VdFyzzOzKnUjTZIF/MQJGSSvni7Llewni4vuViRppfRAa2guOsY5k4jZyxw/i9DQHv+dw==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} - hasBin: true - - markdown-table@3.0.4: - resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - - marked@16.4.1: - resolution: {integrity: sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==} - engines: {node: '>= 20'} - hasBin: true - - mdast-util-find-and-replace@3.0.2: - resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - - mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} - - mdast-util-gfm-autolink-literal@2.0.1: - resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} - - mdast-util-gfm-footnote@2.1.0: - resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} - - mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} - - mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} - - mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} - - mdast-util-gfm@3.1.0: - resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} - - mdast-util-math@3.0.0: - resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} - - mdast-util-mdx-expression@2.0.1: - resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - - mdast-util-mdx-jsx@3.2.0: - resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} - - mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} - - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - - mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} - - mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} - - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - - mermaid@11.12.1: - resolution: {integrity: sha512-UlIZrRariB11TY1RtTgUWp65tphtBv4CSq7vyS2ZZ2TgoMjs2nloq+wFqxiwcxlhHUvs7DPGgMjs2aeQxz5h9g==} - - micromark-core-commonmark@2.0.3: - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - - micromark-extension-gfm-autolink-literal@2.1.0: - resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} - - micromark-extension-gfm-footnote@2.1.0: - resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} - - micromark-extension-gfm-strikethrough@2.1.0: - resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - - micromark-extension-gfm-table@2.1.1: - resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} - - micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} - - micromark-extension-gfm-task-list-item@2.1.0: - resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} - - micromark-extension-gfm@3.0.0: - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - - micromark-extension-math@3.1.0: - resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} - - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - - micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - - micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - - micromark@4.0.2: - resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - - mlly@1.8.0: - resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} - - module-details-from-path@1.0.4: - resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} - - motion-dom@11.18.1: - resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} - - motion-dom@12.23.23: - resolution: {integrity: sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==} - - motion-utils@11.18.1: - resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} - - motion-utils@12.23.6: - resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==} - - motion@12.23.26: - resolution: {integrity: sha512-Ll8XhVxY8LXMVYTCfme27WH2GjBrCIzY4+ndr5QKxsK+YwCtOi2B/oBi5jcIbik5doXuWT/4KKDOVAZJkeY5VQ==} - 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 - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - nanoid@3.3.9: - resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - nanoid@5.1.3: - resolution: {integrity: sha512-zAbEOEr7u2CbxwoMRlz/pNSpRP0FdAU4pRaYunCdEezWohXFs+a0Xw7RfkKaezMsmSM1vttcLthJtwRnVtOfHQ==} - engines: {node: ^18 || >=20} - hasBin: true - - next-auth@5.0.0-beta.25: - resolution: {integrity: sha512-2dJJw1sHQl2qxCrRk+KTQbeH+izFbGFPuJj5eGgBZFYyiYYtvlrBeUw1E/OJJxTRjuxbSYGnCTkUIRsIIW0bog==} - peerDependencies: - '@simplewebauthn/browser': ^9.0.1 - '@simplewebauthn/server': ^9.0.2 - next: ^14.0.0-0 || ^15.0.0-0 - nodemailer: ^6.6.5 - react: ^18.2.0 || ^19.0.0-0 - peerDependenciesMeta: - '@simplewebauthn/browser': - optional: true - '@simplewebauthn/server': - optional: true - nodemailer: - optional: true - - next-themes@0.3.0: - resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} - peerDependencies: - react: ^16.8 || ^17 || ^18 - react-dom: ^16.8 || ^17 || ^18 - - next@16.0.10: - resolution: {integrity: sha512-RtWh5PUgI+vxlV3HdR+IfWA1UUHu0+Ram/JBO4vWB54cVPentCD0e+lxyAYEsDTqGGMg7qpjhKh6dc6aW7W/sA==} - engines: {node: '>=20.9.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.51.1 - babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - babel-plugin-react-compiler: - optional: true - sass: - optional: true - - node-gyp-build@4.8.4: - resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} - hasBin: true - - nypm@0.6.2: - resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true - - oauth4webapi@3.3.1: - resolution: {integrity: sha512-ZwX7UqYrP3Lr+Glhca3a1/nF2jqf7VVyJfhGuW5JtrfDUxt0u+IoBPzFjZ2dd7PJGkdM6CFPVVYzuDYKHv101A==} - - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - - oniguruma-parser@0.12.1: - resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} - - oniguruma-to-es@4.3.3: - resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} - - orderedmap@2.1.1: - resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} - - package-manager-detector@1.5.0: - resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==} - - papaparse@5.5.2: - resolution: {integrity: sha512-PZXg8UuAc4PcVwLosEEDYjPyfWnTEhOrUfdv+3Bx+NuAb+5NhDmXzg5fHWmdCh1mP5p7JAZfFr3IMQfcntNAdA==} - - parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - - parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - - path-data-parser@0.1.0: - resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - - pg-int8@1.0.1: - resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} - engines: {node: '>=4.0.0'} - - pg-numeric@1.0.2: - resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} - engines: {node: '>=4'} - - pg-protocol@1.8.0: - resolution: {integrity: sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==} - - pg-types@4.0.2: - resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} - engines: {node: '>=10'} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - - pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - - playwright-core@1.51.0: - resolution: {integrity: sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==} - engines: {node: '>=18'} - hasBin: true - - playwright@1.51.0: - resolution: {integrity: sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA==} - engines: {node: '>=18'} - hasBin: true - - points-on-curve@0.2.0: - resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} - - points-on-path@0.2.1: - resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} - - postcss-selector-parser@6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} - - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - - postgres-array@3.0.4: - resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} - engines: {node: '>=12'} - - postgres-bytea@3.0.0: - resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} - engines: {node: '>= 6'} - - postgres-date@2.1.0: - resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} - engines: {node: '>=12'} - - postgres-interval@3.0.0: - resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} - engines: {node: '>=12'} - - postgres-range@1.1.4: - resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} - - postgres@3.4.5: - resolution: {integrity: sha512-cDWgoah1Gez9rN3H4165peY9qfpEo+SA61oQv65O3cRUE1pOEoJWwddwcqKE8XZYjbblOJlYDlLV4h67HrEVDg==} - engines: {node: '>=12'} - - preact-render-to-string@5.2.3: - resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==} - peerDependencies: - preact: '>=10' - - preact@10.11.3: - resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==} - - pretty-format@3.8.0: - resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} - - prismjs@1.27.0: - resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} - engines: {node: '>=6'} - - prismjs@1.30.0: - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} - engines: {node: '>=6'} - - property-information@5.6.0: - resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} - - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - - property-information@7.0.0: - resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} - - prosemirror-commands@1.7.0: - resolution: {integrity: sha512-6toodS4R/Aah5pdsrIwnTYPEjW70SlO5a66oo5Kk+CIrgJz3ukOoS+FYDGqvQlAX5PxoGWDX1oD++tn5X3pyRA==} - - prosemirror-dropcursor@1.8.1: - resolution: {integrity: sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==} - - prosemirror-example-setup@1.2.3: - resolution: {integrity: sha512-+hXZi8+xbFvYM465zZH3rdZ9w7EguVKmUYwYLZjIJIjPK+I0nPTwn8j0ByW2avchVczRwZmOJGNvehblyIerSQ==} - - prosemirror-gapcursor@1.3.2: - resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} - - prosemirror-history@1.4.1: - resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} - - prosemirror-inputrules@1.4.0: - resolution: {integrity: sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==} - - prosemirror-keymap@1.2.2: - resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==} - - prosemirror-markdown@1.13.1: - resolution: {integrity: sha512-Sl+oMfMtAjWtlcZoj/5L/Q39MpEnVZ840Xo330WJWUvgyhNmLBLN7MsHn07s53nG/KImevWHSE6fEj4q/GihHw==} - - prosemirror-menu@1.2.4: - resolution: {integrity: sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==} - - prosemirror-model@1.24.1: - resolution: {integrity: sha512-YM053N+vTThzlWJ/AtPtF1j0ebO36nvbmDy4U7qA2XQB8JVaQp1FmB9Jhrps8s+z+uxhhVTny4m20ptUvhk0Mg==} - - prosemirror-schema-basic@1.2.3: - resolution: {integrity: sha512-h+H0OQwZVqMon1PNn0AG9cTfx513zgIG2DY00eJ00Yvgb3UD+GQ/VlWW5rcaxacpCGT1Yx8nuhwXk4+QbXUfJA==} - - prosemirror-schema-list@1.5.1: - resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} - - prosemirror-state@1.4.3: - resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} - - prosemirror-transform@1.10.3: - resolution: {integrity: sha512-Nhh/+1kZGRINbEHmVu39oynhcap4hWTs/BlU7NnxWj3+l0qi8I1mu67v6mMdEe/ltD8hHvU4FV6PHiCw2VSpMw==} - - prosemirror-view@1.38.1: - resolution: {integrity: sha512-4FH/uM1A4PNyrxXbD+RAbAsf0d/mM0D/wAKSVVWK7o0A9Q/oOXJBrw786mBf2Vnrs/Edly6dH6Z2gsb7zWwaUw==} - - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - - quansync@0.2.11: - resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} - - radix-ui@1.4.3: - resolution: {integrity: sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==} - 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 - - react-data-grid@7.0.0-beta.47: - resolution: {integrity: sha512-28kjsmwQGD/9RXYC50zn5Zv/SQMhBBoSvG5seq0fM8XXi9TZ0zr9Z5T3YJqLwcEtoNzTOq3y0njkmdujGkIwQQ==} - peerDependencies: - react: ^18.0 || ^19.0 - react-dom: ^18.0 || ^19.0 - - react-dom@19.0.1: - resolution: {integrity: sha512-3TJg51HSbJiLVYCS6vWwWsyqoS36aGEOCmtLLHxROlSZZ5Bk10xpxHFbrCu4DdqgR85DDc9Vucxqhai3g2xjtA==} - peerDependencies: - react: ^19.0.1 - - react-markdown@10.1.0: - resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} - peerDependencies: - '@types/react': '>=18' - react: '>=18' - - react-remove-scroll-bar@2.3.8: - 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 - - react-remove-scroll@2.6.3: - resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} - 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 - - react-resizable-panels@2.1.7: - resolution: {integrity: sha512-JtT6gI+nURzhMYQYsx8DKkx6bSoOGFp7A3CwMrOb8y5jFHFyqwo9m68UhmXRw57fRVJksFn1TSlm3ywEQ9vMgA==} - peerDependencies: - react: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - react-style-singleton@2.2.3: - 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 - - react-syntax-highlighter@15.6.6: - resolution: {integrity: sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==} - peerDependencies: - react: '>= 0.14.0' - - react@19.0.1: - resolution: {integrity: sha512-nVRaZCuEyvu69sWrkdwjP6QY57C+lY+uMNNMyWUFJb9Z/JlaBOQus7mSMfGYsblv7R691u6SSJA/dX9IRnyyLQ==} - engines: {node: '>=0.10.0'} - - redis@5.9.0: - resolution: {integrity: sha512-E8dQVLSyH6UE/C9darFuwq4usOPrqfZ1864kI4RFbr5Oj9ioB9qPF0oJMwX7s8mf6sPYrz84x/Dx1PGF3/0EaQ==} - engines: {node: '>= 18'} - - refractor@3.6.0: - resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} - - regex-recursion@6.0.2: - resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} - - regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - - regex@6.0.1: - resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} - - rehype-harden@1.1.5: - resolution: {integrity: sha512-JrtBj5BVd/5vf3H3/blyJatXJbzQfRT9pJBmjafbTaPouQCAKxHwRyCc7dle9BXQKxv4z1OzZylz/tNamoiG3A==} - - rehype-katex@7.0.1: - resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} - - rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} - - remark-gfm@4.0.1: - resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} - - remark-math@6.0.0: - resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} - - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - - remark-rehype@11.1.1: - resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} - - remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - - require-in-the-middle@7.5.2: - resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} - engines: {node: '>=8.6.0'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - resumable-stream@2.2.8: - resolution: {integrity: sha512-F9+SLKw/a/p7hRjy2CNwzT66UIlY7aY4D3Sg9xwuZMA7nxVQrVPXCWU27qIGcO4jlauL0T3XkCN2218qi6ugTw==} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - robust-predicates@3.0.2: - resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - - rollup@4.52.5: - resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rope-sequence@1.3.4: - resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} - - roughjs@4.6.6: - resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} - - rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - scheduler@0.25.0: - resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - - server-only@0.0.1: - resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} - - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - shiki@3.14.0: - resolution: {integrity: sha512-J0yvpLI7LSig3Z3acIuDLouV5UCKQqu8qOArwMx+/yPVC3WRMgrP67beaG8F+j4xfEWE0eVC4GeBCIXeOPra1g==} - - shimmer@1.2.1: - resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} - - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - sonner@1.7.4: - resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - - streamdown@1.4.0: - resolution: {integrity: sha512-ylhDSQ4HpK5/nAH9v7OgIIdGJxlJB2HoYrYkJNGrO8lMpnWuKUcrz/A8xAMwA6eILA27469vIavcOTjmxctrKg==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 - - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - - strip-literal@3.1.0: - resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - - style-mod@4.1.2: - resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} - - style-to-js@1.1.16: - resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} - - style-to-object@1.0.8: - resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} - - styled-jsx@5.1.6: - resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - - stylis@4.3.6: - resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - swr@2.3.3: - resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==} - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - tailwind-merge@2.6.0: - resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} - - tailwind-merge@3.3.1: - resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} - - tailwindcss-animate@1.0.7: - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - - tailwindcss@4.1.16: - resolution: {integrity: sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - throttleit@2.1.0: - resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} - engines: {node: '>=18'} - - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - tinyexec@1.0.1: - resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - - tinyspy@4.0.4: - resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} - engines: {node: '>=14.0.0'} - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - - trpc-cli@0.10.2: - resolution: {integrity: sha512-zBkL88AeX0vQLXwEAcX6WUoT4Sopr97nFDFeD1zmW33wHQwBKbszylplNVk6BO/cuhgm/iq8/cG27NokqKA1mw==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@inquirer/prompts': '*' - omelette: '*' - peerDependenciesMeta: - '@inquirer/prompts': - optional: true - omelette: - optional: true - - ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tsx@4.19.3: - resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} - engines: {node: '>=18.0.0'} - hasBin: true - - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} - engines: {node: '>=14.17'} - hasBin: true - - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - - ultracite@5.3.9: - resolution: {integrity: sha512-85rzcGk+KKF3jhBGLYQj57JYAQ50Mun6PAifN4B6cCmCI8GNjgvUbp0f4DlpOfl92mq8CzouCzzcVxwcNNmTmw==} - hasBin: true - - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - - undici@5.28.5: - resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} - engines: {node: '>=14.0'} - - unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - - unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - - use-callback-ref@1.3.3: - 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 - - use-sidecar@1.1.3: - 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 - - use-stick-to-bottom@1.1.1: - resolution: {integrity: sha512-JkDp0b0tSmv7HQOOpL1hT7t7QaoUBXkq045WWWOFDTlLGRzgIIyW7vyzOIJzY7L2XVIG7j1yUxeDj2LHm9Vwng==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - use-sync-external-store@1.4.0: - resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - usehooks-ts@3.1.1: - resolution: {integrity: sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==} - engines: {node: '>=16.15.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - - vfile-location@5.0.3: - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} - - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - - vite@7.1.12: - resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - vscode-jsonrpc@8.2.0: - resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} - engines: {node: '>=14.0.0'} - - vscode-languageserver-protocol@3.17.5: - resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} - - vscode-languageserver-textdocument@1.0.12: - resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} - - vscode-languageserver-types@3.17.5: - resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} - - vscode-languageserver@9.0.1: - resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} - hasBin: true - - vscode-uri@3.0.8: - resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} - - w3c-keyname@2.2.8: - resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} - - web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true - - ws@8.18.1: - resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} - engines: {node: '>= 14'} - hasBin: true - - zod-to-json-schema@3.24.5: - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} - peerDependencies: - zod: ^3.24.1 - - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - - zod@4.1.12: - resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} - - zustand@4.5.7: - resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==} - engines: {node: '>=12.7.0'} - peerDependencies: - '@types/react': '>=16.8' - immer: '>=9.0.6' - react: '>=16.8' - peerDependenciesMeta: - '@types/react': - optional: true - immer: - optional: true - react: - optional: true - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - -snapshots: - - '@ai-sdk/gateway@2.0.0-beta.85(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 3.0.0-beta.27 - '@ai-sdk/provider-utils': 4.0.0-beta.53(zod@3.25.76) - '@vercel/oidc': 3.0.5 - zod: 3.25.76 - - '@ai-sdk/provider-utils@4.0.0-beta.53(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 3.0.0-beta.27 - '@standard-schema/spec': 1.1.0 - eventsource-parser: 3.0.6 - zod: 3.25.76 - - '@ai-sdk/provider@3.0.0-beta.27': - dependencies: - json-schema: 0.4.0 - - '@ai-sdk/react@3.0.0-beta.162(react@19.0.1)(zod@3.25.76)': - dependencies: - '@ai-sdk/provider-utils': 4.0.0-beta.53(zod@3.25.76) - ai: 6.0.0-beta.159(zod@3.25.76) - react: 19.0.1 - swr: 2.3.3(react@19.0.1) - throttleit: 2.1.0 - transitivePeerDependencies: - - zod - - '@alloc/quick-lru@5.2.0': {} - - '@antfu/install-pkg@1.1.0': - dependencies: - package-manager-detector: 1.5.0 - tinyexec: 1.0.1 - - '@antfu/utils@9.3.0': {} - - '@auth/core@0.37.2': - dependencies: - '@panva/hkdf': 1.2.1 - '@types/cookie': 0.6.0 - cookie: 0.7.1 - jose: 5.10.0 - oauth4webapi: 3.3.1 - preact: 10.11.3 - preact-render-to-string: 5.2.3(preact@10.11.3) - - '@babel/runtime@7.28.4': {} - - '@biomejs/biome@2.2.2': - optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.2.2 - '@biomejs/cli-darwin-x64': 2.2.2 - '@biomejs/cli-linux-arm64': 2.2.2 - '@biomejs/cli-linux-arm64-musl': 2.2.2 - '@biomejs/cli-linux-x64': 2.2.2 - '@biomejs/cli-linux-x64-musl': 2.2.2 - '@biomejs/cli-win32-arm64': 2.2.2 - '@biomejs/cli-win32-x64': 2.2.2 - - '@biomejs/cli-darwin-arm64@2.2.2': - optional: true - - '@biomejs/cli-darwin-x64@2.2.2': - optional: true - - '@biomejs/cli-linux-arm64-musl@2.2.2': - optional: true - - '@biomejs/cli-linux-arm64@2.2.2': - optional: true - - '@biomejs/cli-linux-x64-musl@2.2.2': - optional: true - - '@biomejs/cli-linux-x64@2.2.2': - optional: true - - '@biomejs/cli-win32-arm64@2.2.2': - optional: true - - '@biomejs/cli-win32-x64@2.2.2': - optional: true - - '@braintree/sanitize-url@7.1.1': {} - - '@chevrotain/cst-dts-gen@11.0.3': - dependencies: - '@chevrotain/gast': 11.0.3 - '@chevrotain/types': 11.0.3 - lodash-es: 4.17.21 - - '@chevrotain/gast@11.0.3': - dependencies: - '@chevrotain/types': 11.0.3 - lodash-es: 4.17.21 - - '@chevrotain/regexp-to-ast@11.0.3': {} - - '@chevrotain/types@11.0.3': {} - - '@chevrotain/utils@11.0.3': {} - - '@clack/core@0.5.0': - dependencies: - picocolors: 1.1.1 - sisteransi: 1.0.5 - - '@clack/prompts@0.11.0': - dependencies: - '@clack/core': 0.5.0 - picocolors: 1.1.1 - sisteransi: 1.0.5 - - '@codemirror/autocomplete@6.18.6': - dependencies: - '@codemirror/language': 6.11.0 - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.4 - '@lezer/common': 1.2.3 - - '@codemirror/commands@6.8.0': - dependencies: - '@codemirror/language': 6.11.0 - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.4 - '@lezer/common': 1.2.3 - - '@codemirror/lang-javascript@6.2.3': - dependencies: - '@codemirror/autocomplete': 6.18.6 - '@codemirror/language': 6.11.0 - '@codemirror/lint': 6.8.4 - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.4 - '@lezer/common': 1.2.3 - '@lezer/javascript': 1.4.21 - - '@codemirror/lang-python@6.1.7': - dependencies: - '@codemirror/autocomplete': 6.18.6 - '@codemirror/language': 6.11.0 - '@codemirror/state': 6.5.2 - '@lezer/common': 1.2.3 - '@lezer/python': 1.1.16 - - '@codemirror/language@6.11.0': - dependencies: - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.4 - '@lezer/common': 1.2.3 - '@lezer/highlight': 1.2.1 - '@lezer/lr': 1.4.2 - style-mod: 4.1.2 - - '@codemirror/lint@6.8.4': - dependencies: - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.4 - crelt: 1.0.6 - - '@codemirror/search@6.5.10': - dependencies: - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.4 - crelt: 1.0.6 - - '@codemirror/state@6.5.2': - dependencies: - '@marijn/find-cluster-break': 1.0.2 - - '@codemirror/theme-one-dark@6.1.2': - dependencies: - '@codemirror/language': 6.11.0 - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.4 - '@lezer/highlight': 1.2.1 - - '@codemirror/view@6.36.4': - dependencies: - '@codemirror/state': 6.5.2 - style-mod: 4.1.2 - w3c-keyname: 2.2.8 - - '@drizzle-team/brocli@0.10.2': {} - - '@emnapi/runtime@1.7.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@esbuild-kit/core-utils@3.3.2': - dependencies: - esbuild: 0.18.20 - source-map-support: 0.5.21 - - '@esbuild-kit/esm-loader@2.6.5': - dependencies: - '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.10.0 - - '@esbuild/aix-ppc64@0.19.12': - optional: true - - '@esbuild/aix-ppc64@0.25.1': - optional: true - - '@esbuild/android-arm64@0.18.20': - optional: true - - '@esbuild/android-arm64@0.19.12': - optional: true - - '@esbuild/android-arm64@0.25.1': - optional: true - - '@esbuild/android-arm@0.18.20': - optional: true - - '@esbuild/android-arm@0.19.12': - optional: true - - '@esbuild/android-arm@0.25.1': - optional: true - - '@esbuild/android-x64@0.18.20': - optional: true - - '@esbuild/android-x64@0.19.12': - optional: true - - '@esbuild/android-x64@0.25.1': - optional: true - - '@esbuild/darwin-arm64@0.18.20': - optional: true - - '@esbuild/darwin-arm64@0.19.12': - optional: true - - '@esbuild/darwin-arm64@0.25.1': - optional: true - - '@esbuild/darwin-x64@0.18.20': - optional: true - - '@esbuild/darwin-x64@0.19.12': - optional: true - - '@esbuild/darwin-x64@0.25.1': - optional: true - - '@esbuild/freebsd-arm64@0.18.20': - optional: true - - '@esbuild/freebsd-arm64@0.19.12': - optional: true - - '@esbuild/freebsd-arm64@0.25.1': - optional: true - - '@esbuild/freebsd-x64@0.18.20': - optional: true - - '@esbuild/freebsd-x64@0.19.12': - optional: true - - '@esbuild/freebsd-x64@0.25.1': - optional: true - - '@esbuild/linux-arm64@0.18.20': - optional: true - - '@esbuild/linux-arm64@0.19.12': - optional: true - - '@esbuild/linux-arm64@0.25.1': - optional: true - - '@esbuild/linux-arm@0.18.20': - optional: true - - '@esbuild/linux-arm@0.19.12': - optional: true - - '@esbuild/linux-arm@0.25.1': - optional: true - - '@esbuild/linux-ia32@0.18.20': - optional: true - - '@esbuild/linux-ia32@0.19.12': - optional: true - - '@esbuild/linux-ia32@0.25.1': - optional: true - - '@esbuild/linux-loong64@0.18.20': - optional: true - - '@esbuild/linux-loong64@0.19.12': - optional: true - - '@esbuild/linux-loong64@0.25.1': - optional: true - - '@esbuild/linux-mips64el@0.18.20': - optional: true - - '@esbuild/linux-mips64el@0.19.12': - optional: true - - '@esbuild/linux-mips64el@0.25.1': - optional: true - - '@esbuild/linux-ppc64@0.18.20': - optional: true - - '@esbuild/linux-ppc64@0.19.12': - optional: true - - '@esbuild/linux-ppc64@0.25.1': - optional: true - - '@esbuild/linux-riscv64@0.18.20': - optional: true - - '@esbuild/linux-riscv64@0.19.12': - optional: true - - '@esbuild/linux-riscv64@0.25.1': - optional: true - - '@esbuild/linux-s390x@0.18.20': - optional: true - - '@esbuild/linux-s390x@0.19.12': - optional: true - - '@esbuild/linux-s390x@0.25.1': - optional: true - - '@esbuild/linux-x64@0.18.20': - optional: true - - '@esbuild/linux-x64@0.19.12': - optional: true - - '@esbuild/linux-x64@0.25.1': - optional: true - - '@esbuild/netbsd-arm64@0.25.1': - optional: true - - '@esbuild/netbsd-x64@0.18.20': - optional: true - - '@esbuild/netbsd-x64@0.19.12': - optional: true - - '@esbuild/netbsd-x64@0.25.1': - optional: true - - '@esbuild/openbsd-arm64@0.25.1': - optional: true - - '@esbuild/openbsd-x64@0.18.20': - optional: true - - '@esbuild/openbsd-x64@0.19.12': - optional: true - - '@esbuild/openbsd-x64@0.25.1': - optional: true - - '@esbuild/sunos-x64@0.18.20': - optional: true - - '@esbuild/sunos-x64@0.19.12': - optional: true - - '@esbuild/sunos-x64@0.25.1': - optional: true - - '@esbuild/win32-arm64@0.18.20': - optional: true - - '@esbuild/win32-arm64@0.19.12': - optional: true - - '@esbuild/win32-arm64@0.25.1': - optional: true - - '@esbuild/win32-ia32@0.18.20': - optional: true - - '@esbuild/win32-ia32@0.19.12': - optional: true - - '@esbuild/win32-ia32@0.25.1': - optional: true - - '@esbuild/win32-x64@0.18.20': - optional: true - - '@esbuild/win32-x64@0.19.12': - optional: true - - '@esbuild/win32-x64@0.25.1': - optional: true - - '@fastify/busboy@2.1.1': {} - - '@floating-ui/core@1.6.9': - dependencies: - '@floating-ui/utils': 0.2.9 - - '@floating-ui/dom@1.6.13': - dependencies: - '@floating-ui/core': 1.6.9 - '@floating-ui/utils': 0.2.9 - - '@floating-ui/react-dom@2.1.2(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@floating-ui/dom': 1.6.13 - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - - '@floating-ui/utils@0.2.9': {} - - '@iconify/types@2.0.0': {} - - '@iconify/utils@3.0.2': - dependencies: - '@antfu/install-pkg': 1.1.0 - '@antfu/utils': 9.3.0 - '@iconify/types': 2.0.0 - debug: 4.4.3 - globals: 15.15.0 - kolorist: 1.8.0 - local-pkg: 1.1.2 - mlly: 1.8.0 - transitivePeerDependencies: - - supports-color - - '@icons-pack/react-simple-icons@13.8.0(react@19.0.1)': - dependencies: - react: 19.0.1 - - '@img/colour@1.0.0': - optional: true - - '@img/sharp-darwin-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 - optional: true - - '@img/sharp-darwin-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.2.4': - optional: true - - '@img/sharp-libvips-linux-ppc64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-riscv64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-s390x@1.2.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - optional: true - - '@img/sharp-linux-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 - optional: true - - '@img/sharp-linux-arm@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 - optional: true - - '@img/sharp-linux-ppc64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 - optional: true - - '@img/sharp-linux-riscv64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 - optional: true - - '@img/sharp-linux-s390x@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 - optional: true - - '@img/sharp-linux-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - optional: true - - '@img/sharp-wasm32@0.34.5': - dependencies: - '@emnapi/runtime': 1.7.1 - optional: true - - '@img/sharp-win32-arm64@0.34.5': - optional: true - - '@img/sharp-win32-ia32@0.34.5': - optional: true - - '@img/sharp-win32-x64@0.34.5': - optional: true - - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@lezer/common@1.2.3': {} - - '@lezer/highlight@1.2.1': - dependencies: - '@lezer/common': 1.2.3 - - '@lezer/javascript@1.4.21': - dependencies: - '@lezer/common': 1.2.3 - '@lezer/highlight': 1.2.1 - '@lezer/lr': 1.4.2 - - '@lezer/lr@1.4.2': - dependencies: - '@lezer/common': 1.2.3 - - '@lezer/python@1.1.16': - dependencies: - '@lezer/common': 1.2.3 - '@lezer/highlight': 1.2.1 - '@lezer/lr': 1.4.2 - - '@marijn/find-cluster-break@1.0.2': {} - - '@mermaid-js/parser@0.6.3': - dependencies: - langium: 3.3.1 - - '@neondatabase/serverless@0.9.5': - dependencies: - '@types/pg': 8.11.6 - optional: true - - '@next/env@16.0.10': {} - - '@next/swc-darwin-arm64@16.0.10': - optional: true - - '@next/swc-darwin-x64@16.0.10': - optional: true - - '@next/swc-linux-arm64-gnu@16.0.10': - optional: true - - '@next/swc-linux-arm64-musl@16.0.10': - optional: true - - '@next/swc-linux-x64-gnu@16.0.10': - optional: true - - '@next/swc-linux-x64-musl@16.0.10': - optional: true - - '@next/swc-win32-arm64-msvc@16.0.10': - optional: true - - '@next/swc-win32-x64-msvc@16.0.10': - optional: true - - '@opentelemetry/api-logs@0.200.0': - dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/api-logs@0.57.2': - dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/api@1.9.0': {} - - '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.28.0 - - '@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.57.2 - '@types/shimmer': 1.2.0 - import-in-the-middle: 1.15.0 - require-in-the-middle: 7.5.2 - semver: 7.7.3 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 - - '@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.57.2 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 - - '@opentelemetry/semantic-conventions@1.28.0': {} - - '@panva/hkdf@1.2.1': {} - - '@playwright/test@1.51.0': - dependencies: - playwright: 1.51.0 - - '@radix-ui/number@1.1.1': {} - - '@radix-ui/primitive@1.1.3': {} - - '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-accordion@1.2.12(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-arrow@1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-avatar@1.1.10(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.18)(react@19.0.1)': - dependencies: - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.18)(react@19.0.1)': - dependencies: - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-context-menu@2.2.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-context@1.1.2(@types/react@18.3.18)(react@19.0.1)': - dependencies: - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-context@1.1.3(@types/react@18.3.18)(react@19.0.1)': - dependencies: - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-dialog@1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - aria-hidden: 1.2.4 - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-direction@1.1.1(@types/react@18.3.18)(react@19.0.1)': - dependencies: - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.18)(react@19.0.1)': - dependencies: - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-form@0.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-label': 2.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-hover-card@1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-icons@1.3.2(react@19.0.1)': - dependencies: - react: 19.0.1 - - '@radix-ui/react-id@1.1.1(@types/react@18.3.18)(react@19.0.1)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-label@2.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-menu@2.1.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - aria-hidden: 1.2.4 - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-menubar@1.1.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-popover@1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - aria-hidden: 1.2.4 - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-popper@1.2.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-rect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/rect': 1.1.1 - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-presence@1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-primitive@2.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-slot': 1.2.4(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-progress@1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-progress@1.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-context': 1.1.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-select@2.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - aria-hidden: 1.2.4 - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-separator@1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-separator@1.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-slider@1.3.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-slot@1.1.2(@types/react@18.3.18)(react@19.0.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-slot@1.2.3(@types/react@18.3.18)(react@19.0.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-slot@1.2.4(@types/react@18.3.18)(react@19.0.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-switch@1.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-tabs@1.1.13(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-toast@1.2.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-toggle@1.1.10(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-toolbar@1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-separator': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.18)(react@19.0.1)': - dependencies: - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.18)(react@19.0.1)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.18)(react@19.0.1)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.18)(react@19.0.1)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@18.3.18)(react@19.0.1)': - dependencies: - react: 19.0.1 - use-sync-external-store: 1.6.0(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.18)(react@19.0.1)': - dependencies: - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-use-previous@1.1.1(@types/react@18.3.18)(react@19.0.1)': - dependencies: - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.18)(react@19.0.1)': - dependencies: - '@radix-ui/rect': 1.1.1 - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-use-size@1.1.1(@types/react@18.3.18)(react@19.0.1)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - react: 19.0.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/rect@1.1.1': {} - - '@redis/bloom@5.9.0(@redis/client@5.9.0)': - dependencies: - '@redis/client': 5.9.0 - - '@redis/client@5.9.0': - dependencies: - cluster-key-slot: 1.1.2 - - '@redis/json@5.9.0(@redis/client@5.9.0)': - dependencies: - '@redis/client': 5.9.0 - - '@redis/search@5.9.0(@redis/client@5.9.0)': - dependencies: - '@redis/client': 5.9.0 - - '@redis/time-series@5.9.0(@redis/client@5.9.0)': - dependencies: - '@redis/client': 5.9.0 - - '@rollup/rollup-android-arm-eabi@4.52.5': - optional: true - - '@rollup/rollup-android-arm64@4.52.5': - optional: true - - '@rollup/rollup-darwin-arm64@4.52.5': - optional: true - - '@rollup/rollup-darwin-x64@4.52.5': - optional: true - - '@rollup/rollup-freebsd-arm64@4.52.5': - optional: true - - '@rollup/rollup-freebsd-x64@4.52.5': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.52.5': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.52.5': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.52.5': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.52.5': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.52.5': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.52.5': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.52.5': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.52.5': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.52.5': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.52.5': - optional: true - - '@rollup/rollup-linux-x64-musl@4.52.5': - optional: true - - '@rollup/rollup-openharmony-arm64@4.52.5': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.52.5': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.52.5': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.52.5': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.52.5': - optional: true - - '@shikijs/core@3.14.0': - dependencies: - '@shikijs/types': 3.14.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - - '@shikijs/engine-javascript@3.14.0': - dependencies: - '@shikijs/types': 3.14.0 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.3 - - '@shikijs/engine-oniguruma@3.14.0': - dependencies: - '@shikijs/types': 3.14.0 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@3.14.0': - dependencies: - '@shikijs/types': 3.14.0 - - '@shikijs/themes@3.14.0': - dependencies: - '@shikijs/types': 3.14.0 - - '@shikijs/types@3.14.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@10.0.2': {} - - '@standard-schema/spec@1.1.0': {} - - '@swc/helpers@0.5.15': - dependencies: - tslib: 2.8.1 - - '@tailwindcss/node@4.1.16': - dependencies: - '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.18.3 - jiti: 2.6.1 - lightningcss: 1.30.2 - magic-string: 0.30.21 - source-map-js: 1.2.1 - tailwindcss: 4.1.16 - - '@tailwindcss/oxide-android-arm64@4.1.16': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.1.16': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.1.16': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.1.16': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.16': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.16': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.1.16': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.1.16': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.1.16': - optional: true - - '@tailwindcss/oxide-wasm32-wasi@4.1.16': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.16': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.1.16': - optional: true - - '@tailwindcss/oxide@4.1.16': - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.16 - '@tailwindcss/oxide-darwin-arm64': 4.1.16 - '@tailwindcss/oxide-darwin-x64': 4.1.16 - '@tailwindcss/oxide-freebsd-x64': 4.1.16 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.16 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.16 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.16 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.16 - '@tailwindcss/oxide-linux-x64-musl': 4.1.16 - '@tailwindcss/oxide-wasm32-wasi': 4.1.16 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.16 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.16 - - '@tailwindcss/postcss@4.1.16': - dependencies: - '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.16 - '@tailwindcss/oxide': 4.1.16 - postcss: 8.5.3 - tailwindcss: 4.1.16 - - '@tailwindcss/typography@0.5.16(tailwindcss@4.1.16)': - dependencies: - lodash.castarray: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - postcss-selector-parser: 6.0.10 - tailwindcss: 4.1.16 - - '@trpc/server@11.7.1(typescript@5.8.2)': - dependencies: - typescript: 5.8.2 - - '@types/chai@5.2.3': - dependencies: - '@types/deep-eql': 4.0.2 - assertion-error: 2.0.1 - - '@types/cookie@0.6.0': {} - - '@types/d3-array@3.2.2': {} - - '@types/d3-axis@3.0.6': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-brush@3.0.6': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-chord@3.0.6': {} - - '@types/d3-color@3.1.3': {} - - '@types/d3-contour@3.0.6': - dependencies: - '@types/d3-array': 3.2.2 - '@types/geojson': 7946.0.16 - - '@types/d3-delaunay@6.0.4': {} - - '@types/d3-dispatch@3.0.7': {} - - '@types/d3-drag@3.0.7': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-dsv@3.0.7': {} - - '@types/d3-ease@3.0.2': {} - - '@types/d3-fetch@3.0.7': - dependencies: - '@types/d3-dsv': 3.0.7 - - '@types/d3-force@3.0.10': {} - - '@types/d3-format@3.0.4': {} - - '@types/d3-geo@3.1.0': - dependencies: - '@types/geojson': 7946.0.16 - - '@types/d3-hierarchy@3.1.7': {} - - '@types/d3-interpolate@3.0.4': - dependencies: - '@types/d3-color': 3.1.3 - - '@types/d3-path@3.1.1': {} - - '@types/d3-polygon@3.0.2': {} - - '@types/d3-quadtree@3.0.6': {} - - '@types/d3-random@3.0.3': {} - - '@types/d3-scale-chromatic@3.1.0': {} - - '@types/d3-scale@4.0.9': - dependencies: - '@types/d3-time': 3.0.4 - - '@types/d3-selection@3.0.11': {} - - '@types/d3-shape@3.1.7': - dependencies: - '@types/d3-path': 3.1.1 - - '@types/d3-time-format@4.0.3': {} - - '@types/d3-time@3.0.4': {} - - '@types/d3-timer@3.0.2': {} - - '@types/d3-transition@3.0.9': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-zoom@3.0.8': - dependencies: - '@types/d3-interpolate': 3.0.4 - '@types/d3-selection': 3.0.11 - - '@types/d3@7.4.3': - dependencies: - '@types/d3-array': 3.2.2 - '@types/d3-axis': 3.0.6 - '@types/d3-brush': 3.0.6 - '@types/d3-chord': 3.0.6 - '@types/d3-color': 3.1.3 - '@types/d3-contour': 3.0.6 - '@types/d3-delaunay': 6.0.4 - '@types/d3-dispatch': 3.0.7 - '@types/d3-drag': 3.0.7 - '@types/d3-dsv': 3.0.7 - '@types/d3-ease': 3.0.2 - '@types/d3-fetch': 3.0.7 - '@types/d3-force': 3.0.10 - '@types/d3-format': 3.0.4 - '@types/d3-geo': 3.1.0 - '@types/d3-hierarchy': 3.1.7 - '@types/d3-interpolate': 3.0.4 - '@types/d3-path': 3.1.1 - '@types/d3-polygon': 3.0.2 - '@types/d3-quadtree': 3.0.6 - '@types/d3-random': 3.0.3 - '@types/d3-scale': 4.0.9 - '@types/d3-scale-chromatic': 3.1.0 - '@types/d3-selection': 3.0.11 - '@types/d3-shape': 3.1.7 - '@types/d3-time': 3.0.4 - '@types/d3-time-format': 4.0.3 - '@types/d3-timer': 3.0.2 - '@types/d3-transition': 3.0.9 - '@types/d3-zoom': 3.0.8 - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 - - '@types/deep-eql@4.0.2': {} - - '@types/estree-jsx@1.0.5': - dependencies: - '@types/estree': 1.0.6 - - '@types/estree@1.0.6': {} - - '@types/estree@1.0.8': {} - - '@types/geojson@7946.0.16': {} - - '@types/hast@2.3.10': - dependencies: - '@types/unist': 2.0.11 - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/katex@0.16.7': {} - - '@types/linkify-it@5.0.0': {} - - '@types/markdown-it@14.1.2': - dependencies: - '@types/linkify-it': 5.0.0 - '@types/mdurl': 2.0.0 - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/mdurl@2.0.0': {} - - '@types/ms@2.1.0': {} - - '@types/node@22.13.10': - dependencies: - undici-types: 6.20.0 - - '@types/omelette@0.4.5': {} - - '@types/papaparse@5.3.15': - dependencies: - '@types/node': 22.13.10 - - '@types/pdf-parse@1.1.4': {} - - '@types/pg@8.11.6': - dependencies: - '@types/node': 22.13.10 - pg-protocol: 1.8.0 - pg-types: 4.0.2 - optional: true - - '@types/prop-types@15.7.14': {} - - '@types/react-dom@18.3.5(@types/react@18.3.18)': - dependencies: - '@types/react': 18.3.18 - - '@types/react-syntax-highlighter@15.5.13': - dependencies: - '@types/react': 18.3.18 - - '@types/react@18.3.18': - dependencies: - '@types/prop-types': 15.7.14 - csstype: 3.1.3 - - '@types/shimmer@1.2.0': {} - - '@types/trusted-types@2.0.7': - optional: true - - '@types/unist@2.0.11': {} - - '@types/unist@3.0.3': {} - - '@ungap/structured-clone@1.3.0': {} - - '@vercel/analytics@1.5.0(next@16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.1(react@19.0.1))(react@19.0.1))(react@19.0.1)': - optionalDependencies: - next: 16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - - '@vercel/blob@0.24.1': - dependencies: - async-retry: 1.3.3 - bytes: 3.1.2 - is-buffer: 2.0.5 - undici: 5.28.5 - - '@vercel/functions@2.2.13': - dependencies: - '@vercel/oidc': 2.0.2 - - '@vercel/oidc@2.0.2': - dependencies: - '@types/ms': 2.1.0 - ms: 2.1.3 - - '@vercel/oidc@3.0.5': {} - - '@vercel/otel@1.14.0(@opentelemetry/api-logs@0.200.0)(@opentelemetry/api@1.9.0)(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.200.0 - '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.57.2(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) - - '@vercel/postgres@0.10.0': - dependencies: - '@neondatabase/serverless': 0.9.5 - bufferutil: 4.0.9 - ws: 8.18.1(bufferutil@4.0.9) - transitivePeerDependencies: - - utf-8-validate - optional: true - - '@vitest/expect@3.2.4': - dependencies: - '@types/chai': 5.2.3 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - tinyrainbow: 2.0.0 - - '@vitest/mocker@3.2.4(vite@7.1.12(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(yaml@2.7.0))': - dependencies: - '@vitest/spy': 3.2.4 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 7.1.12(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(yaml@2.7.0) - - '@vitest/pretty-format@3.2.4': - dependencies: - tinyrainbow: 2.0.0 - - '@vitest/runner@3.2.4': - dependencies: - '@vitest/utils': 3.2.4 - pathe: 2.0.3 - strip-literal: 3.1.0 - - '@vitest/snapshot@3.2.4': - dependencies: - '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.21 - pathe: 2.0.3 - - '@vitest/spy@3.2.4': - dependencies: - tinyspy: 4.0.4 - - '@vitest/utils@3.2.4': - dependencies: - '@vitest/pretty-format': 3.2.4 - loupe: 3.2.1 - tinyrainbow: 2.0.0 - - '@xyflow/react@12.10.0(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)': - dependencies: - '@xyflow/system': 0.0.74 - classcat: 5.0.5 - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - zustand: 4.5.7(@types/react@18.3.18)(react@19.0.1) - transitivePeerDependencies: - - '@types/react' - - immer - - '@xyflow/system@0.0.74': - dependencies: - '@types/d3-drag': 3.0.7 - '@types/d3-interpolate': 3.0.4 - '@types/d3-selection': 3.0.11 - '@types/d3-transition': 3.0.9 - '@types/d3-zoom': 3.0.8 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-zoom: 3.0.0 - - acorn-import-attributes@1.9.5(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - - acorn@8.15.0: {} - - ai@6.0.0-beta.159(zod@3.25.76): - dependencies: - '@ai-sdk/gateway': 2.0.0-beta.85(zod@3.25.76) - '@ai-sdk/provider': 3.0.0-beta.27 - '@ai-sdk/provider-utils': 4.0.0-beta.53(zod@3.25.76) - '@opentelemetry/api': 1.9.0 - zod: 3.25.76 - - argparse@2.0.1: {} - - aria-hidden@1.2.4: - dependencies: - tslib: 2.8.1 - - assertion-error@2.0.1: {} - - async-retry@1.3.3: - dependencies: - retry: 0.13.1 - - bail@2.0.2: {} - - bcrypt-ts@5.0.3: {} - - buffer-from@1.1.2: {} - - bufferutil@4.0.9: - dependencies: - node-gyp-build: 4.8.4 - optional: true - - bytes@3.1.2: {} - - cac@6.7.14: {} - - caniuse-lite@1.0.30001704: {} - - ccount@2.0.1: {} - - chai@5.3.3: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.2.1 - pathval: 2.0.1 - - character-entities-html4@2.1.0: {} - - character-entities-legacy@1.1.4: {} - - character-entities-legacy@3.0.0: {} - - character-entities@1.2.4: {} - - character-entities@2.0.2: {} - - character-reference-invalid@1.1.4: {} - - character-reference-invalid@2.0.1: {} - - check-error@2.1.1: {} - - chevrotain-allstar@0.3.1(chevrotain@11.0.3): - dependencies: - chevrotain: 11.0.3 - lodash-es: 4.17.21 - - chevrotain@11.0.3: - dependencies: - '@chevrotain/cst-dts-gen': 11.0.3 - '@chevrotain/gast': 11.0.3 - '@chevrotain/regexp-to-ast': 11.0.3 - '@chevrotain/types': 11.0.3 - '@chevrotain/utils': 11.0.3 - lodash-es: 4.17.21 - - citty@0.1.6: - dependencies: - consola: 3.4.2 - - cjs-module-lexer@1.4.3: {} - - class-variance-authority@0.7.1: - dependencies: - clsx: 2.1.1 - - classcat@5.0.5: {} - - classnames@2.5.1: {} - - client-only@0.0.1: {} - - clsx@2.1.1: {} - - cluster-key-slot@1.1.2: {} - - cmdk@1.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1): - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-id': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - codemirror@6.0.1: - dependencies: - '@codemirror/autocomplete': 6.18.6 - '@codemirror/commands': 6.8.0 - '@codemirror/language': 6.11.0 - '@codemirror/lint': 6.8.4 - '@codemirror/search': 6.5.10 - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.4 - - comma-separated-tokens@1.0.8: {} - - comma-separated-tokens@2.0.3: {} - - commander@14.0.2: {} - - commander@7.2.0: {} - - commander@8.3.0: {} - - confbox@0.1.8: {} - - confbox@0.2.2: {} - - consola@3.4.2: {} - - cookie@0.7.1: {} - - cose-base@1.0.3: - dependencies: - layout-base: 1.0.2 - - cose-base@2.2.0: - dependencies: - layout-base: 2.0.1 - - crelt@1.0.6: {} - - cssesc@3.0.0: {} - - csstype@3.1.3: {} - - cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1): - dependencies: - cose-base: 1.0.3 - cytoscape: 3.33.1 - - cytoscape-fcose@2.2.0(cytoscape@3.33.1): - dependencies: - cose-base: 2.2.0 - cytoscape: 3.33.1 - - cytoscape@3.33.1: {} - - d3-array@2.12.1: - dependencies: - internmap: 1.0.1 - - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-axis@3.0.0: {} - - d3-brush@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3-chord@3.0.1: - dependencies: - d3-path: 3.1.0 - - d3-color@3.1.0: {} - - d3-contour@4.0.2: - dependencies: - d3-array: 3.2.4 - - d3-delaunay@6.0.4: - dependencies: - delaunator: 5.0.1 - - d3-dispatch@3.0.1: {} - - d3-drag@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-selection: 3.0.0 - - d3-dsv@3.0.1: - dependencies: - commander: 7.2.0 - iconv-lite: 0.6.3 - rw: 1.3.3 - - d3-ease@3.0.1: {} - - d3-fetch@3.0.1: - dependencies: - d3-dsv: 3.0.1 - - d3-force@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-quadtree: 3.0.1 - d3-timer: 3.0.1 - - d3-format@3.1.0: {} - - d3-geo@3.1.1: - dependencies: - d3-array: 3.2.4 - - d3-hierarchy@3.1.2: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-path@1.0.9: {} - - d3-path@3.1.0: {} - - d3-polygon@3.0.1: {} - - d3-quadtree@3.0.1: {} - - d3-random@3.0.1: {} - - d3-sankey@0.12.3: - dependencies: - d3-array: 2.12.1 - d3-shape: 1.3.7 - - d3-scale-chromatic@3.1.0: - dependencies: - d3-color: 3.1.0 - d3-interpolate: 3.0.1 - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-selection@3.0.0: {} - - d3-shape@1.3.7: - dependencies: - d3-path: 1.0.9 - - d3-shape@3.2.0: - dependencies: - d3-path: 3.1.0 - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-timer@3.0.1: {} - - d3-transition@3.0.1(d3-selection@3.0.0): - dependencies: - d3-color: 3.1.0 - d3-dispatch: 3.0.1 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-timer: 3.0.1 - - d3-zoom@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3@7.9.0: - dependencies: - d3-array: 3.2.4 - d3-axis: 3.0.0 - d3-brush: 3.0.0 - d3-chord: 3.0.1 - d3-color: 3.1.0 - d3-contour: 4.0.2 - d3-delaunay: 6.0.4 - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-dsv: 3.0.1 - d3-ease: 3.0.1 - d3-fetch: 3.0.1 - d3-force: 3.0.0 - d3-format: 3.1.0 - d3-geo: 3.1.1 - d3-hierarchy: 3.1.2 - d3-interpolate: 3.0.1 - d3-path: 3.1.0 - d3-polygon: 3.0.1 - d3-quadtree: 3.0.1 - d3-random: 3.0.1 - d3-scale: 4.0.2 - d3-scale-chromatic: 3.1.0 - d3-selection: 3.0.0 - d3-shape: 3.2.0 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - d3-timer: 3.0.1 - d3-transition: 3.0.1(d3-selection@3.0.0) - d3-zoom: 3.0.0 - - dagre-d3-es@7.0.13: - dependencies: - d3: 7.9.0 - lodash-es: 4.17.21 - - date-fns@4.1.0: {} - - dayjs@1.11.19: {} - - debug@4.4.0: - dependencies: - ms: 2.1.3 - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - decode-named-character-reference@1.1.0: - dependencies: - character-entities: 2.0.2 - - deep-eql@5.0.2: {} - - deepmerge@4.3.1: {} - - delaunator@5.0.1: - dependencies: - robust-predicates: 3.0.2 - - dequal@2.0.3: {} - - detect-libc@2.1.2: {} - - detect-node-es@1.1.0: {} - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - diff-match-patch@1.0.5: {} - - dompurify@3.3.0: - optionalDependencies: - '@types/trusted-types': 2.0.7 - - dotenv@16.4.7: {} - - drizzle-kit@0.25.0: - dependencies: - '@drizzle-team/brocli': 0.10.2 - '@esbuild-kit/esm-loader': 2.6.5 - esbuild: 0.19.12 - esbuild-register: 3.6.0(esbuild@0.19.12) - transitivePeerDependencies: - - supports-color - - drizzle-orm@0.34.1(@neondatabase/serverless@0.9.5)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@types/react@18.3.18)(@vercel/postgres@0.10.0)(postgres@3.4.5)(react@19.0.1): - optionalDependencies: - '@neondatabase/serverless': 0.9.5 - '@opentelemetry/api': 1.9.0 - '@types/pg': 8.11.6 - '@types/react': 18.3.18 - '@vercel/postgres': 0.10.0 - postgres: 3.4.5 - react: 19.0.1 - - embla-carousel-react@8.6.0(react@19.0.1): - dependencies: - embla-carousel: 8.6.0 - embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) - react: 19.0.1 - - embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): - dependencies: - embla-carousel: 8.6.0 - - embla-carousel@8.6.0: {} - - enhanced-resolve@5.18.3: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - entities@4.5.0: {} - - entities@6.0.1: {} - - es-module-lexer@1.7.0: {} - - esbuild-register@3.6.0(esbuild@0.19.12): - dependencies: - debug: 4.4.0 - esbuild: 0.19.12 - transitivePeerDependencies: - - supports-color - - esbuild@0.18.20: - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - - esbuild@0.19.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - - esbuild@0.25.1: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.1 - '@esbuild/android-arm': 0.25.1 - '@esbuild/android-arm64': 0.25.1 - '@esbuild/android-x64': 0.25.1 - '@esbuild/darwin-arm64': 0.25.1 - '@esbuild/darwin-x64': 0.25.1 - '@esbuild/freebsd-arm64': 0.25.1 - '@esbuild/freebsd-x64': 0.25.1 - '@esbuild/linux-arm': 0.25.1 - '@esbuild/linux-arm64': 0.25.1 - '@esbuild/linux-ia32': 0.25.1 - '@esbuild/linux-loong64': 0.25.1 - '@esbuild/linux-mips64el': 0.25.1 - '@esbuild/linux-ppc64': 0.25.1 - '@esbuild/linux-riscv64': 0.25.1 - '@esbuild/linux-s390x': 0.25.1 - '@esbuild/linux-x64': 0.25.1 - '@esbuild/netbsd-arm64': 0.25.1 - '@esbuild/netbsd-x64': 0.25.1 - '@esbuild/openbsd-arm64': 0.25.1 - '@esbuild/openbsd-x64': 0.25.1 - '@esbuild/sunos-x64': 0.25.1 - '@esbuild/win32-arm64': 0.25.1 - '@esbuild/win32-ia32': 0.25.1 - '@esbuild/win32-x64': 0.25.1 - - escape-string-regexp@5.0.0: {} - - estree-util-is-identifier-name@3.0.0: {} - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.6 - - eventsource-parser@3.0.6: {} - - expect-type@1.2.2: {} - - exsolve@1.0.7: {} - - extend@3.0.2: {} - - fast-deep-equal@3.1.3: {} - - fault@1.0.4: - dependencies: - format: 0.2.2 - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - format@0.2.2: {} - - framer-motion@11.18.2(react-dom@19.0.1(react@19.0.1))(react@19.0.1): - dependencies: - motion-dom: 11.18.1 - motion-utils: 11.18.1 - tslib: 2.8.1 - optionalDependencies: - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - - framer-motion@12.23.26(react-dom@19.0.1(react@19.0.1))(react@19.0.1): - dependencies: - motion-dom: 12.23.23 - motion-utils: 12.23.6 - tslib: 2.8.1 - optionalDependencies: - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - - fsevents@2.3.2: - optional: true - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - geist@1.3.1(next@16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.1(react@19.0.1))(react@19.0.1)): - dependencies: - next: 16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - - get-nonce@1.0.1: {} - - get-tsconfig@4.10.0: - dependencies: - resolve-pkg-maps: 1.0.0 - - globals@15.15.0: {} - - graceful-fs@4.2.11: {} - - hachure-fill@0.5.2: {} - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hast-util-from-dom@5.0.1: - dependencies: - '@types/hast': 3.0.4 - hastscript: 9.0.1 - web-namespaces: 2.0.1 - - hast-util-from-html-isomorphic@2.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-from-dom: 5.0.1 - hast-util-from-html: 2.0.3 - unist-util-remove-position: 5.0.0 - - hast-util-from-html@2.0.3: - 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.2 - - hast-util-from-parse5@8.0.3: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - devlop: 1.1.0 - hastscript: 9.0.1 - property-information: 7.0.0 - vfile: 6.0.3 - vfile-location: 5.0.3 - web-namespaces: 2.0.1 - - hast-util-is-element@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-parse-selector@2.2.5: {} - - hast-util-parse-selector@4.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-raw@9.1.0: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.3.0 - hast-util-from-parse5: 8.0.3 - hast-util-to-parse5: 8.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - parse5: 7.3.0 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - - hast-util-to-html@9.0.5: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - property-information: 7.0.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-to-jsx-runtime@2.3.6: - dependencies: - '@types/estree': 1.0.6 - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.0.0 - space-separated-tokens: 2.0.2 - style-to-js: 1.1.16 - unist-util-position: 5.0.0 - vfile-message: 4.0.2 - transitivePeerDependencies: - - supports-color - - hast-util-to-parse5@8.0.0: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - - hast-util-to-text@4.0.2: - 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 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hastscript@6.0.0: - dependencies: - '@types/hast': 2.3.10 - comma-separated-tokens: 1.0.8 - hast-util-parse-selector: 2.2.5 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 - - hastscript@9.0.1: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 4.0.0 - property-information: 7.0.0 - space-separated-tokens: 2.0.2 - - highlight.js@10.7.3: {} - - highlightjs-vue@1.0.0: {} - - html-url-attributes@3.0.1: {} - - html-void-elements@3.0.0: {} - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - import-in-the-middle@1.15.0: - dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) - cjs-module-lexer: 1.4.3 - module-details-from-path: 1.0.4 - - inline-style-parser@0.2.4: {} - - internmap@1.0.1: {} - - internmap@2.0.3: {} - - is-alphabetical@1.0.4: {} - - is-alphabetical@2.0.1: {} - - is-alphanumerical@1.0.4: - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - - is-alphanumerical@2.0.1: - dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 - - is-buffer@2.0.5: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-decimal@1.0.4: {} - - is-decimal@2.0.1: {} - - is-hexadecimal@1.0.4: {} - - is-hexadecimal@2.0.1: {} - - is-plain-obj@4.1.0: {} - - jiti@2.6.1: {} - - jose@5.10.0: {} - - js-tokens@9.0.1: {} - - json-schema@0.4.0: {} - - jsonc-parser@3.3.1: {} - - katex@0.16.25: - dependencies: - commander: 8.3.0 - - khroma@2.1.0: {} - - kolorist@1.8.0: {} - - langium@3.3.1: - dependencies: - chevrotain: 11.0.3 - chevrotain-allstar: 0.3.1(chevrotain@11.0.3) - vscode-languageserver: 9.0.1 - vscode-languageserver-textdocument: 1.0.12 - vscode-uri: 3.0.8 - - layout-base@1.0.2: {} - - layout-base@2.0.1: {} - - lightningcss-android-arm64@1.30.2: - optional: true - - lightningcss-darwin-arm64@1.30.2: - optional: true - - lightningcss-darwin-x64@1.30.2: - optional: true - - lightningcss-freebsd-x64@1.30.2: - optional: true - - lightningcss-linux-arm-gnueabihf@1.30.2: - optional: true - - lightningcss-linux-arm64-gnu@1.30.2: - optional: true - - lightningcss-linux-arm64-musl@1.30.2: - optional: true - - lightningcss-linux-x64-gnu@1.30.2: - optional: true - - lightningcss-linux-x64-musl@1.30.2: - optional: true - - lightningcss-win32-arm64-msvc@1.30.2: - optional: true - - lightningcss-win32-x64-msvc@1.30.2: - optional: true - - lightningcss@1.30.2: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.30.2 - lightningcss-darwin-arm64: 1.30.2 - lightningcss-darwin-x64: 1.30.2 - lightningcss-freebsd-x64: 1.30.2 - lightningcss-linux-arm-gnueabihf: 1.30.2 - lightningcss-linux-arm64-gnu: 1.30.2 - lightningcss-linux-arm64-musl: 1.30.2 - lightningcss-linux-x64-gnu: 1.30.2 - lightningcss-linux-x64-musl: 1.30.2 - lightningcss-win32-arm64-msvc: 1.30.2 - lightningcss-win32-x64-msvc: 1.30.2 - - linkify-it@5.0.0: - dependencies: - uc.micro: 2.1.0 - - local-pkg@1.1.2: - dependencies: - mlly: 1.8.0 - pkg-types: 2.3.0 - quansync: 0.2.11 - - lodash-es@4.17.21: {} - - lodash.castarray@4.4.0: {} - - lodash.debounce@4.0.8: {} - - lodash.isplainobject@4.0.6: {} - - lodash.merge@4.6.2: {} - - longest-streak@3.1.0: {} - - loupe@3.2.1: {} - - lowlight@1.20.0: - dependencies: - fault: 1.0.4 - highlight.js: 10.7.3 - - lucide-react@0.446.0(react@19.0.1): - dependencies: - react: 19.0.1 - - lucide-react@0.542.0(react@19.0.1): - dependencies: - react: 19.0.1 - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - markdown-it@14.1.0: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.0 - mdurl: 2.0.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 - - markdown-table@3.0.4: {} - - marked@16.4.1: {} - - mdast-util-find-and-replace@3.0.2: - dependencies: - '@types/mdast': 4.0.4 - escape-string-regexp: 5.0.0 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - mdast-util-from-markdown@2.0.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.1.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 - - mdast-util-gfm-autolink-literal@2.0.1: - dependencies: - '@types/mdast': 4.0.4 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.2 - micromark-util-character: 2.1.1 - - mdast-util-gfm-footnote@2.1.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - micromark-util-normalize-identifier: 2.0.1 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-strikethrough@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-table@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-task-list-item@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm@3.1.0: - dependencies: - mdast-util-from-markdown: 2.0.2 - mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-math@3.0.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - longest-streak: 3.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - unist-util-remove-position: 5.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-expression@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-jsx@3.2.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 - stringify-entities: 4.0.4 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdxjs-esm@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-phrasing@4.1.0: - dependencies: - '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 - - mdast-util-to-hast@13.2.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - - mdast-util-to-markdown@2.1.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - longest-streak: 3.1.0 - mdast-util-phrasing: 4.1.0 - mdast-util-to-string: 4.0.0 - micromark-util-classify-character: 2.0.1 - micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.0.0 - zwitch: 2.0.4 - - mdast-util-to-string@4.0.0: - dependencies: - '@types/mdast': 4.0.4 - - mdurl@2.0.0: {} - - mermaid@11.12.1: - dependencies: - '@braintree/sanitize-url': 7.1.1 - '@iconify/utils': 3.0.2 - '@mermaid-js/parser': 0.6.3 - '@types/d3': 7.4.3 - cytoscape: 3.33.1 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.1) - cytoscape-fcose: 2.2.0(cytoscape@3.33.1) - d3: 7.9.0 - d3-sankey: 0.12.3 - dagre-d3-es: 7.0.13 - dayjs: 1.11.19 - dompurify: 3.3.0 - katex: 0.16.25 - khroma: 2.1.0 - lodash-es: 4.17.21 - marked: 16.4.1 - roughjs: 4.6.6 - stylis: 4.3.6 - ts-dedent: 2.2.0 - uuid: 11.1.0 - transitivePeerDependencies: - - supports-color - - micromark-core-commonmark@2.0.3: - dependencies: - decode-named-character-reference: 1.1.0 - devlop: 1.1.0 - micromark-factory-destination: 2.0.1 - micromark-factory-label: 2.0.1 - micromark-factory-space: 2.0.1 - micromark-factory-title: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-html-tag-name: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-autolink-literal@2.1.0: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-footnote@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-strikethrough@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-table@2.1.1: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-tagfilter@2.0.0: - dependencies: - micromark-util-types: 2.0.2 - - micromark-extension-gfm-task-list-item@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm@3.0.0: - dependencies: - micromark-extension-gfm-autolink-literal: 2.1.0 - micromark-extension-gfm-footnote: 2.1.0 - micromark-extension-gfm-strikethrough: 2.1.0 - micromark-extension-gfm-table: 2.1.1 - micromark-extension-gfm-tagfilter: 2.0.0 - micromark-extension-gfm-task-list-item: 2.1.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-math@3.1.0: - dependencies: - '@types/katex': 0.16.7 - devlop: 1.1.0 - katex: 0.16.25 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-destination@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-label@2.0.1: - dependencies: - devlop: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-space@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-types: 2.0.2 - - micromark-factory-title@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-whitespace@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-chunked@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-classify-character@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-combine-extensions@2.0.1: - dependencies: - micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-decode-numeric-character-reference@2.0.2: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-decode-string@2.0.1: - dependencies: - decode-named-character-reference: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-symbol: 2.0.1 - - micromark-util-encode@2.0.1: {} - - micromark-util-html-tag-name@2.0.1: {} - - micromark-util-normalize-identifier@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-resolve-all@2.0.1: - dependencies: - micromark-util-types: 2.0.2 - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-subtokenize@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.2: {} - - micromark@4.0.2: - dependencies: - '@types/debug': 4.1.12 - debug: 4.4.0 - decode-named-character-reference: 1.1.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 - - mlly@1.8.0: - dependencies: - acorn: 8.15.0 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.1 - - module-details-from-path@1.0.4: {} - - motion-dom@11.18.1: - dependencies: - motion-utils: 11.18.1 - - motion-dom@12.23.23: - dependencies: - motion-utils: 12.23.6 - - motion-utils@11.18.1: {} - - motion-utils@12.23.6: {} - - motion@12.23.26(react-dom@19.0.1(react@19.0.1))(react@19.0.1): - dependencies: - framer-motion: 12.23.26(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - tslib: 2.8.1 - optionalDependencies: - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - - ms@2.1.3: {} - - nanoid@3.3.11: {} - - nanoid@3.3.9: {} - - nanoid@5.1.3: {} - - next-auth@5.0.0-beta.25(next@16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.1(react@19.0.1))(react@19.0.1))(react@19.0.1): - dependencies: - '@auth/core': 0.37.2 - next: 16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - - next-themes@0.3.0(react-dom@19.0.1(react@19.0.1))(react@19.0.1): - dependencies: - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - - next@16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.1(react@19.0.1))(react@19.0.1): - dependencies: - '@next/env': 16.0.10 - '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001704 - postcss: 8.4.31 - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - styled-jsx: 5.1.6(react@19.0.1) - optionalDependencies: - '@next/swc-darwin-arm64': 16.0.10 - '@next/swc-darwin-x64': 16.0.10 - '@next/swc-linux-arm64-gnu': 16.0.10 - '@next/swc-linux-arm64-musl': 16.0.10 - '@next/swc-linux-x64-gnu': 16.0.10 - '@next/swc-linux-x64-musl': 16.0.10 - '@next/swc-win32-arm64-msvc': 16.0.10 - '@next/swc-win32-x64-msvc': 16.0.10 - '@opentelemetry/api': 1.9.0 - '@playwright/test': 1.51.0 - sharp: 0.34.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - - node-gyp-build@4.8.4: - optional: true - - nypm@0.6.2: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - pathe: 2.0.3 - pkg-types: 2.3.0 - tinyexec: 1.0.1 - - oauth4webapi@3.3.1: {} - - obuf@1.1.2: - optional: true - - oniguruma-parser@0.12.1: {} - - oniguruma-to-es@4.3.3: - dependencies: - oniguruma-parser: 0.12.1 - regex: 6.0.1 - regex-recursion: 6.0.2 - - orderedmap@2.1.1: {} - - package-manager-detector@1.5.0: {} - - papaparse@5.5.2: {} - - parse-entities@2.0.0: - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - - parse-entities@4.0.2: - dependencies: - '@types/unist': 2.0.11 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.1.0 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - - path-data-parser@0.1.0: {} - - path-parse@1.0.7: {} - - pathe@2.0.3: {} - - pathval@2.0.1: {} - - pg-int8@1.0.1: - optional: true - - pg-numeric@1.0.2: - optional: true - - pg-protocol@1.8.0: - optional: true - - pg-types@4.0.2: - dependencies: - pg-int8: 1.0.1 - pg-numeric: 1.0.2 - postgres-array: 3.0.4 - postgres-bytea: 3.0.0 - postgres-date: 2.1.0 - postgres-interval: 3.0.0 - postgres-range: 1.1.4 - optional: true - - picocolors@1.1.1: {} - - picomatch@4.0.2: {} - - picomatch@4.0.3: {} - - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.8.0 - pathe: 2.0.3 - - pkg-types@2.3.0: - dependencies: - confbox: 0.2.2 - exsolve: 1.0.7 - pathe: 2.0.3 - - playwright-core@1.51.0: {} - - playwright@1.51.0: - dependencies: - playwright-core: 1.51.0 - optionalDependencies: - fsevents: 2.3.2 - - points-on-curve@0.2.0: {} - - points-on-path@0.2.1: - dependencies: - path-data-parser: 0.1.0 - points-on-curve: 0.2.0 - - postcss-selector-parser@6.0.10: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss@8.4.31: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postcss@8.5.3: - dependencies: - nanoid: 3.3.9 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postgres-array@3.0.4: - optional: true - - postgres-bytea@3.0.0: - dependencies: - obuf: 1.1.2 - optional: true - - postgres-date@2.1.0: - optional: true - - postgres-interval@3.0.0: - optional: true - - postgres-range@1.1.4: - optional: true - - postgres@3.4.5: {} - - preact-render-to-string@5.2.3(preact@10.11.3): - dependencies: - preact: 10.11.3 - pretty-format: 3.8.0 - - preact@10.11.3: {} - - pretty-format@3.8.0: {} - - prismjs@1.27.0: {} - - prismjs@1.30.0: {} - - property-information@5.6.0: - dependencies: - xtend: 4.0.2 - - property-information@6.5.0: {} - - property-information@7.0.0: {} - - prosemirror-commands@1.7.0: - dependencies: - prosemirror-model: 1.24.1 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.3 - - prosemirror-dropcursor@1.8.1: - dependencies: - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.3 - prosemirror-view: 1.38.1 - - prosemirror-example-setup@1.2.3: - dependencies: - prosemirror-commands: 1.7.0 - prosemirror-dropcursor: 1.8.1 - prosemirror-gapcursor: 1.3.2 - prosemirror-history: 1.4.1 - prosemirror-inputrules: 1.4.0 - prosemirror-keymap: 1.2.2 - prosemirror-menu: 1.2.4 - prosemirror-schema-list: 1.5.1 - prosemirror-state: 1.4.3 - - prosemirror-gapcursor@1.3.2: - dependencies: - prosemirror-keymap: 1.2.2 - prosemirror-model: 1.24.1 - prosemirror-state: 1.4.3 - prosemirror-view: 1.38.1 - - prosemirror-history@1.4.1: - dependencies: - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.3 - prosemirror-view: 1.38.1 - rope-sequence: 1.3.4 - - prosemirror-inputrules@1.4.0: - dependencies: - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.3 - - prosemirror-keymap@1.2.2: - dependencies: - prosemirror-state: 1.4.3 - w3c-keyname: 2.2.8 - - prosemirror-markdown@1.13.1: - dependencies: - '@types/markdown-it': 14.1.2 - markdown-it: 14.1.0 - prosemirror-model: 1.24.1 - - prosemirror-menu@1.2.4: - dependencies: - crelt: 1.0.6 - prosemirror-commands: 1.7.0 - prosemirror-history: 1.4.1 - prosemirror-state: 1.4.3 - - prosemirror-model@1.24.1: - dependencies: - orderedmap: 2.1.1 - - prosemirror-schema-basic@1.2.3: - dependencies: - prosemirror-model: 1.24.1 - - prosemirror-schema-list@1.5.1: - dependencies: - prosemirror-model: 1.24.1 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.3 - - prosemirror-state@1.4.3: - dependencies: - prosemirror-model: 1.24.1 - prosemirror-transform: 1.10.3 - prosemirror-view: 1.38.1 - - prosemirror-transform@1.10.3: - dependencies: - prosemirror-model: 1.24.1 - - prosemirror-view@1.38.1: - dependencies: - prosemirror-model: 1.24.1 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.3 - - punycode.js@2.3.1: {} - - quansync@0.2.11: {} - - radix-ui@1.4.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1): - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-accordion': 1.2.12(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-avatar': 1.1.10(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-direction': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-form': 0.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-label': 2.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-menubar': 1.1.16(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-progress': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-select': 2.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-separator': 1.1.7(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-slider': 1.3.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-slot': 1.2.3(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-switch': 1.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-toast': 1.2.15(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.18)(react@19.0.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.1(react@19.0.1))(react@19.0.1) - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - react-data-grid@7.0.0-beta.47(react-dom@19.0.1(react@19.0.1))(react@19.0.1): - dependencies: - clsx: 2.1.1 - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - - react-dom@19.0.1(react@19.0.1): - dependencies: - react: 19.0.1 - scheduler: 0.25.0 - - react-markdown@10.1.0(@types/react@18.3.18)(react@19.0.1): - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/react': 18.3.18 - devlop: 1.1.0 - hast-util-to-jsx-runtime: 2.3.6 - html-url-attributes: 3.0.1 - mdast-util-to-hast: 13.2.0 - react: 19.0.1 - remark-parse: 11.0.0 - remark-rehype: 11.1.1 - unified: 11.0.5 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@19.0.1): - dependencies: - react: 19.0.1 - react-style-singleton: 2.2.3(@types/react@18.3.18)(react@19.0.1) - tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.18 - - react-remove-scroll@2.6.3(@types/react@18.3.18)(react@19.0.1): - dependencies: - react: 19.0.1 - react-remove-scroll-bar: 2.3.8(@types/react@18.3.18)(react@19.0.1) - react-style-singleton: 2.2.3(@types/react@18.3.18)(react@19.0.1) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.3.18)(react@19.0.1) - use-sidecar: 1.1.3(@types/react@18.3.18)(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - - react-resizable-panels@2.1.7(react-dom@19.0.1(react@19.0.1))(react@19.0.1): - dependencies: - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - - react-style-singleton@2.2.3(@types/react@18.3.18)(react@19.0.1): - dependencies: - get-nonce: 1.0.1 - react: 19.0.1 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.18 - - react-syntax-highlighter@15.6.6(react@19.0.1): - dependencies: - '@babel/runtime': 7.28.4 - highlight.js: 10.7.3 - highlightjs-vue: 1.0.0 - lowlight: 1.20.0 - prismjs: 1.30.0 - react: 19.0.1 - refractor: 3.6.0 - - react@19.0.1: {} - - redis@5.9.0: - dependencies: - '@redis/bloom': 5.9.0(@redis/client@5.9.0) - '@redis/client': 5.9.0 - '@redis/json': 5.9.0(@redis/client@5.9.0) - '@redis/search': 5.9.0(@redis/client@5.9.0) - '@redis/time-series': 5.9.0(@redis/client@5.9.0) - - refractor@3.6.0: - dependencies: - hastscript: 6.0.0 - parse-entities: 2.0.0 - prismjs: 1.27.0 - - regex-recursion@6.0.2: - dependencies: - regex-utilities: 2.3.0 - - regex-utilities@2.3.0: {} - - regex@6.0.1: - dependencies: - regex-utilities: 2.3.0 - - rehype-harden@1.1.5: {} - - rehype-katex@7.0.1: - dependencies: - '@types/hast': 3.0.4 - '@types/katex': 0.16.7 - hast-util-from-html-isomorphic: 2.0.0 - hast-util-to-text: 4.0.2 - katex: 0.16.25 - unist-util-visit-parents: 6.0.1 - vfile: 6.0.3 - - rehype-raw@7.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-raw: 9.1.0 - vfile: 6.0.3 - - remark-gfm@4.0.1: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 - micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-math@6.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-math: 3.0.0 - micromark-extension-math: 3.1.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-parse@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 - micromark-util-types: 2.0.2 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-rehype@11.1.1: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.0 - unified: 11.0.5 - vfile: 6.0.3 - - remark-stringify@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-to-markdown: 2.1.2 - unified: 11.0.5 - - require-in-the-middle@7.5.2: - dependencies: - debug: 4.4.3 - module-details-from-path: 1.0.4 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - resumable-stream@2.2.8: {} - - retry@0.13.1: {} - - robust-predicates@3.0.2: {} - - rollup@4.52.5: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.52.5 - '@rollup/rollup-android-arm64': 4.52.5 - '@rollup/rollup-darwin-arm64': 4.52.5 - '@rollup/rollup-darwin-x64': 4.52.5 - '@rollup/rollup-freebsd-arm64': 4.52.5 - '@rollup/rollup-freebsd-x64': 4.52.5 - '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 - '@rollup/rollup-linux-arm-musleabihf': 4.52.5 - '@rollup/rollup-linux-arm64-gnu': 4.52.5 - '@rollup/rollup-linux-arm64-musl': 4.52.5 - '@rollup/rollup-linux-loong64-gnu': 4.52.5 - '@rollup/rollup-linux-ppc64-gnu': 4.52.5 - '@rollup/rollup-linux-riscv64-gnu': 4.52.5 - '@rollup/rollup-linux-riscv64-musl': 4.52.5 - '@rollup/rollup-linux-s390x-gnu': 4.52.5 - '@rollup/rollup-linux-x64-gnu': 4.52.5 - '@rollup/rollup-linux-x64-musl': 4.52.5 - '@rollup/rollup-openharmony-arm64': 4.52.5 - '@rollup/rollup-win32-arm64-msvc': 4.52.5 - '@rollup/rollup-win32-ia32-msvc': 4.52.5 - '@rollup/rollup-win32-x64-gnu': 4.52.5 - '@rollup/rollup-win32-x64-msvc': 4.52.5 - fsevents: 2.3.3 - - rope-sequence@1.3.4: {} - - roughjs@4.6.6: - dependencies: - hachure-fill: 0.5.2 - path-data-parser: 0.1.0 - points-on-curve: 0.2.0 - points-on-path: 0.2.1 - - rw@1.3.3: {} - - safer-buffer@2.1.2: {} - - scheduler@0.25.0: {} - - semver@7.7.3: {} - - server-only@0.0.1: {} - - sharp@0.34.5: - dependencies: - '@img/colour': 1.0.0 - detect-libc: 2.1.2 - semver: 7.7.3 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 - optional: true - - shiki@3.14.0: - dependencies: - '@shikijs/core': 3.14.0 - '@shikijs/engine-javascript': 3.14.0 - '@shikijs/engine-oniguruma': 3.14.0 - '@shikijs/langs': 3.14.0 - '@shikijs/themes': 3.14.0 - '@shikijs/types': 3.14.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - shimmer@1.2.1: {} - - siginfo@2.0.0: {} - - sisteransi@1.0.5: {} - - sonner@1.7.4(react-dom@19.0.1(react@19.0.1))(react@19.0.1): - dependencies: - react: 19.0.1 - react-dom: 19.0.1(react@19.0.1) - - source-map-js@1.2.1: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - space-separated-tokens@1.1.5: {} - - space-separated-tokens@2.0.2: {} - - stackback@0.0.2: {} - - std-env@3.10.0: {} - - streamdown@1.4.0(@types/react@18.3.18)(react@19.0.1): - dependencies: - clsx: 2.1.1 - katex: 0.16.25 - lucide-react: 0.542.0(react@19.0.1) - marked: 16.4.1 - mermaid: 11.12.1 - react: 19.0.1 - react-markdown: 10.1.0(@types/react@18.3.18)(react@19.0.1) - rehype-harden: 1.1.5 - rehype-katex: 7.0.1 - rehype-raw: 7.0.0 - remark-gfm: 4.0.1 - remark-math: 6.0.0 - shiki: 3.14.0 - tailwind-merge: 3.3.1 - transitivePeerDependencies: - - '@types/react' - - supports-color - - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - - strip-literal@3.1.0: - dependencies: - js-tokens: 9.0.1 - - style-mod@4.1.2: {} - - style-to-js@1.1.16: - dependencies: - style-to-object: 1.0.8 - - style-to-object@1.0.8: - dependencies: - inline-style-parser: 0.2.4 - - styled-jsx@5.1.6(react@19.0.1): - dependencies: - client-only: 0.0.1 - react: 19.0.1 - - stylis@4.3.6: {} - - supports-preserve-symlinks-flag@1.0.0: {} - - swr@2.3.3(react@19.0.1): - dependencies: - dequal: 2.0.3 - react: 19.0.1 - use-sync-external-store: 1.4.0(react@19.0.1) - - tailwind-merge@2.6.0: {} - - tailwind-merge@3.3.1: {} - - tailwindcss-animate@1.0.7(tailwindcss@4.1.16): - dependencies: - tailwindcss: 4.1.16 - - tailwindcss@4.1.16: {} - - tapable@2.2.1: {} - - throttleit@2.1.0: {} - - tinybench@2.9.0: {} - - tinyexec@0.3.2: {} - - tinyexec@1.0.1: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tinypool@1.1.1: {} - - tinyrainbow@2.0.0: {} - - tinyspy@4.0.4: {} - - trim-lines@3.0.1: {} - - trough@2.2.0: {} - - trpc-cli@0.10.2(typescript@5.8.2): - dependencies: - '@trpc/server': 11.7.1(typescript@5.8.2) - '@types/omelette': 0.4.5 - commander: 14.0.2 - picocolors: 1.1.1 - zod: 3.25.76 - zod-to-json-schema: 3.24.5(zod@3.25.76) - transitivePeerDependencies: - - typescript - - ts-dedent@2.2.0: {} - - tslib@2.8.1: {} - - tsx@4.19.3: - dependencies: - esbuild: 0.25.1 - get-tsconfig: 4.10.0 - optionalDependencies: - fsevents: 2.3.3 - - typescript@5.8.2: {} - - uc.micro@2.1.0: {} - - ufo@1.6.1: {} - - ultracite@5.3.9(@types/debug@4.1.12)(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(typescript@5.8.2)(yaml@2.7.0): - dependencies: - '@clack/prompts': 0.11.0 - deepmerge: 4.3.1 - jsonc-parser: 3.3.1 - nypm: 0.6.2 - trpc-cli: 0.10.2(typescript@5.8.2) - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(yaml@2.7.0) - zod: 4.1.12 - transitivePeerDependencies: - - '@edge-runtime/vm' - - '@inquirer/prompts' - - '@types/debug' - - '@types/node' - - '@vitest/browser' - - '@vitest/ui' - - happy-dom - - jiti - - jsdom - - less - - lightningcss - - msw - - omelette - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - typescript - - yaml - - undici-types@6.20.0: {} - - undici@5.28.5: - dependencies: - '@fastify/busboy': 2.1.1 - - unified@11.0.5: - dependencies: - '@types/unist': 3.0.3 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.3 - - unist-util-find-after@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-remove-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-visit: 5.0.0 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-visit@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - use-callback-ref@1.3.3(@types/react@18.3.18)(react@19.0.1): - dependencies: - react: 19.0.1 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.18 - - use-sidecar@1.1.3(@types/react@18.3.18)(react@19.0.1): - dependencies: - detect-node-es: 1.1.0 - react: 19.0.1 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.18 - - use-stick-to-bottom@1.1.1(react@19.0.1): - dependencies: - react: 19.0.1 - - use-sync-external-store@1.4.0(react@19.0.1): - dependencies: - react: 19.0.1 - - use-sync-external-store@1.6.0(react@19.0.1): - dependencies: - react: 19.0.1 - - usehooks-ts@3.1.1(react@19.0.1): - dependencies: - lodash.debounce: 4.0.8 - react: 19.0.1 - - util-deprecate@1.0.2: {} - - uuid@11.1.0: {} - - vfile-location@5.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile: 6.0.3 - - vfile-message@4.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.2 - - vite-node@3.2.4(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(yaml@2.7.0): - dependencies: - cac: 6.7.14 - debug: 4.4.3 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.1.12(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(yaml@2.7.0) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite@7.1.12(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(yaml@2.7.0): - dependencies: - esbuild: 0.25.1 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.52.5 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 22.13.10 - fsevents: 2.3.3 - jiti: 2.6.1 - lightningcss: 1.30.2 - tsx: 4.19.3 - yaml: 2.7.0 - - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(yaml@2.7.0): - dependencies: - '@types/chai': 5.2.3 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(yaml@2.7.0)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - debug: 4.4.3 - expect-type: 1.2.2 - magic-string: 0.30.21 - pathe: 2.0.3 - picomatch: 4.0.2 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.15 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.1.12(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(yaml@2.7.0) - vite-node: 3.2.4(@types/node@22.13.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.3)(yaml@2.7.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 22.13.10 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vscode-jsonrpc@8.2.0: {} - - vscode-languageserver-protocol@3.17.5: - dependencies: - vscode-jsonrpc: 8.2.0 - vscode-languageserver-types: 3.17.5 - - vscode-languageserver-textdocument@1.0.12: {} - - vscode-languageserver-types@3.17.5: {} - - vscode-languageserver@9.0.1: - dependencies: - vscode-languageserver-protocol: 3.17.5 - - vscode-uri@3.0.8: {} - - w3c-keyname@2.2.8: {} - - web-namespaces@2.0.1: {} - - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - - ws@8.18.1(bufferutil@4.0.9): - optionalDependencies: - bufferutil: 4.0.9 - optional: true - - xtend@4.0.2: {} - - yaml@2.7.0: - optional: true - - zod-to-json-schema@3.24.5(zod@3.25.76): - dependencies: - zod: 3.25.76 - - zod@3.25.76: {} - - zod@4.1.12: {} - - zustand@4.5.7(@types/react@18.3.18)(react@19.0.1): - dependencies: - use-sync-external-store: 1.6.0(react@19.0.1) - optionalDependencies: - '@types/react': 18.3.18 - react: 19.0.1 - - zwitch@2.0.4: {} diff --git a/demos/use_cases/vercel-ai-sdk/public/images/demo-thumbnail.png b/demos/use_cases/vercel-ai-sdk/public/images/demo-thumbnail.png deleted file mode 100644 index 8c6f98ab2eae4d993ef01a06117d52d2bf63ea35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23198 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 diff --git a/demos/use_cases/vercel-ai-sdk/public/images/mouth of the seine, monet.jpg b/demos/use_cases/vercel-ai-sdk/public/images/mouth of the seine, monet.jpg deleted file mode 100644 index 62515e5655ef6ff24bd3af6673093796a6934837..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33497 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 z%0A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 diff --git a/demos/use_cases/vercel-ai-sdk/tests/e2e/api.test.ts b/demos/use_cases/vercel-ai-sdk/tests/e2e/api.test.ts deleted file mode 100644 index 9b787796..00000000 --- a/demos/use_cases/vercel-ai-sdk/tests/e2e/api.test.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { expect, test } from "@playwright/test"; - -const CHAT_URL_REGEX = /\/chat\/[\w-]+/; -const ERROR_TEXT_REGEX = /error|failed|trouble/i; - -test.describe("Chat API Integration", () => { - test("sends message and receives AI response", async ({ page }) => { - await page.goto("/"); - - const input = page.getByTestId("multimodal-input"); - await input.fill("Hello"); - await page.getByTestId("send-button").click(); - - // Wait for assistant response to appear - const assistantMessage = page.locator("[data-role='assistant']").first(); - await expect(assistantMessage).toBeVisible({ timeout: 30_000 }); - - // Verify it has some text content - const content = await assistantMessage.textContent(); - expect(content?.length).toBeGreaterThan(0); - }); - - test("redirects to /chat/:id after sending message", async ({ page }) => { - await page.goto("/"); - - const input = page.getByTestId("multimodal-input"); - await input.fill("Test redirect"); - await page.getByTestId("send-button").click(); - - // URL should change to /chat/:id format - await expect(page).toHaveURL(CHAT_URL_REGEX, { timeout: 10_000 }); - }); - - test("clears input after sending", async ({ page }) => { - await page.goto("/"); - - const input = page.getByTestId("multimodal-input"); - await input.fill("Test message"); - await page.getByTestId("send-button").click(); - - // Input should be cleared - await expect(input).toHaveValue(""); - }); - - test("shows stop button during generation", async ({ page }) => { - await page.goto("/"); - const input = page.getByTestId("multimodal-input"); - await input.fill("Test"); - await page.getByTestId("send-button").click(); - - // Stop button should appear during generation - const stopButton = page.getByTestId("stop-button"); - await expect(stopButton).toBeVisible({ timeout: 5000 }); - }); -}); - -test.describe("Chat Error Handling", () => { - test("handles API error gracefully", async ({ page }) => { - await page.route("**/api/chat", async (route) => { - await route.fulfill({ - status: 500, - contentType: "application/json", - body: JSON.stringify({ error: "Internal server error" }), - }); - }); - - await page.goto("/"); - const input = page.getByTestId("multimodal-input"); - await input.fill("Test error"); - await page.getByTestId("send-button").click(); - - // Should show error toast or message - await expect(page.getByText(ERROR_TEXT_REGEX).first()).toBeVisible({ - timeout: 5000, - }); - }); -}); - -test.describe("Suggested Actions", () => { - test("suggested actions are clickable", async ({ page }) => { - await page.goto("/"); - - const suggestions = page.locator( - "[data-testid='suggested-actions'] button" - ); - const count = await suggestions.count(); - - if (count > 0) { - await suggestions.first().click(); - - // Should redirect after clicking suggestion - await expect(page).toHaveURL(CHAT_URL_REGEX, { timeout: 10_000 }); - } - }); -}); diff --git a/demos/use_cases/vercel-ai-sdk/tests/e2e/auth.test.ts b/demos/use_cases/vercel-ai-sdk/tests/e2e/auth.test.ts deleted file mode 100644 index 5dfcbb0a..00000000 --- a/demos/use_cases/vercel-ai-sdk/tests/e2e/auth.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { expect, test } from "@playwright/test"; - -test.describe("Authentication Pages", () => { - test("login page renders correctly", async ({ page }) => { - await page.goto("/login"); - await expect(page.getByPlaceholder("user@acme.com")).toBeVisible(); - await expect(page.getByLabel("Password")).toBeVisible(); - await expect(page.getByRole("button", { name: "Sign In" })).toBeVisible(); - await expect(page.getByText("Don't have an account?")).toBeVisible(); - }); - - test("register page renders correctly", async ({ page }) => { - await page.goto("/register"); - await expect(page.getByPlaceholder("user@acme.com")).toBeVisible(); - await expect(page.getByLabel("Password")).toBeVisible(); - await expect(page.getByRole("button", { name: "Sign Up" })).toBeVisible(); - await expect(page.getByText("Already have an account?")).toBeVisible(); - }); - - test("can navigate from login to register", async ({ page }) => { - await page.goto("/login"); - await page.getByRole("link", { name: "Sign up" }).click(); - await expect(page).toHaveURL("/register"); - }); - - test("can navigate from register to login", async ({ page }) => { - await page.goto("/register"); - await page.getByRole("link", { name: "Sign in" }).click(); - await expect(page).toHaveURL("/login"); - }); -}); diff --git a/demos/use_cases/vercel-ai-sdk/tests/e2e/chat.test.ts b/demos/use_cases/vercel-ai-sdk/tests/e2e/chat.test.ts deleted file mode 100644 index 26cf7531..00000000 --- a/demos/use_cases/vercel-ai-sdk/tests/e2e/chat.test.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { expect, test } from "@playwright/test"; - -test.describe("Chat Page", () => { - test("home page loads with input field", async ({ page }) => { - await page.goto("/"); - await expect(page.getByTestId("multimodal-input")).toBeVisible(); - }); - - test("can type in the input field", async ({ page }) => { - await page.goto("/"); - const input = page.getByTestId("multimodal-input"); - await input.fill("Hello world"); - await expect(input).toHaveValue("Hello world"); - }); - - test("submit button is visible", async ({ page }) => { - await page.goto("/"); - await expect(page.getByTestId("send-button")).toBeVisible(); - }); - - test("suggested actions are visible on empty chat", async ({ page }) => { - await page.goto("/"); - const suggestions = page.locator("[data-testid='suggested-actions']"); - await expect(suggestions).toBeVisible(); - }); - - test("can stop generation with stop button", async ({ page }) => { - await page.goto("/"); - - // Type and send a message - await page.getByTestId("multimodal-input").fill("Hello"); - await page.getByTestId("send-button").click(); - - // Stop button should appear during generation - const stopButton = page.getByTestId("stop-button"); - // If generation starts, stop button appears - // This is a best-effort check since timing depends on API - await stopButton.click({ timeout: 5000 }).catch(() => { - // Generation may have finished before we could click - }); - }); -}); - -test.describe("Chat Input Features", () => { - test("input clears after sending", async ({ page }) => { - await page.goto("/"); - const input = page.getByTestId("multimodal-input"); - await input.fill("Test message"); - await page.getByTestId("send-button").click(); - - // Input should clear after sending - await expect(input).toHaveValue(""); - }); - - test("input supports multiline text", async ({ page }) => { - await page.goto("/"); - const input = page.getByTestId("multimodal-input"); - await input.fill("Line 1\nLine 2\nLine 3"); - await expect(input).toContainText("Line 1"); - }); -}); diff --git a/demos/use_cases/vercel-ai-sdk/tests/e2e/model-selector.test.ts b/demos/use_cases/vercel-ai-sdk/tests/e2e/model-selector.test.ts deleted file mode 100644 index 4943796b..00000000 --- a/demos/use_cases/vercel-ai-sdk/tests/e2e/model-selector.test.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { expect, test } from "@playwright/test"; - -const MODEL_BUTTON_REGEX = /Gemini|Claude|GPT|Grok/i; - -test.describe("Model Selector", () => { - test.beforeEach(async ({ page }) => { - await page.goto("/"); - }); - - test("displays a model button", async ({ page }) => { - // Look for any button with model-related content - const modelButton = page.locator("button").filter({ hasText: MODEL_BUTTON_REGEX }).first(); - await expect(modelButton).toBeVisible(); - }); - - test("opens model selector popover on click", async ({ page }) => { - const modelButton = page.locator("button").filter({ hasText: MODEL_BUTTON_REGEX }).first(); - await modelButton.click(); - - // Search input should be visible in the popover - await expect(page.getByPlaceholder("Search models...")).toBeVisible(); - }); - - test("can search for models", async ({ page }) => { - const modelButton = page.locator("button").filter({ hasText: MODEL_BUTTON_REGEX }).first(); - await modelButton.click(); - - const searchInput = page.getByPlaceholder("Search models..."); - await searchInput.fill("Claude"); - - // Should show at least one Claude model - await expect(page.getByText("Claude Haiku").first()).toBeVisible(); - }); - - test("can close model selector by clicking outside", async ({ page }) => { - const modelButton = page.locator("button").filter({ hasText: MODEL_BUTTON_REGEX }).first(); - await modelButton.click(); - - await expect(page.getByPlaceholder("Search models...")).toBeVisible(); - - // Click outside to close - await page.keyboard.press("Escape"); - - await expect(page.getByPlaceholder("Search models...")).not.toBeVisible(); - }); - - test("shows model provider groups", async ({ page }) => { - const modelButton = page.locator("button").filter({ hasText: MODEL_BUTTON_REGEX }).first(); - await modelButton.click(); - - // Should show provider group headers - await expect(page.getByText("Anthropic")).toBeVisible(); - await expect(page.getByText("Google")).toBeVisible(); - }); - - test("can select a different model", async ({ page }) => { - const modelButton = page.locator("button").filter({ hasText: MODEL_BUTTON_REGEX }).first(); - await modelButton.click(); - - // Select a specific model - await page.getByText("Claude Haiku").first().click(); - - // Popover should close - await expect(page.getByPlaceholder("Search models...")).not.toBeVisible(); - - // Model button should now show the selected model - await expect(page.locator("button").filter({ hasText: "Claude Haiku" }).first()).toBeVisible(); - }); -}); diff --git a/demos/use_cases/vercel-ai-sdk/tests/fixtures.ts b/demos/use_cases/vercel-ai-sdk/tests/fixtures.ts deleted file mode 100644 index c782fc0a..00000000 --- a/demos/use_cases/vercel-ai-sdk/tests/fixtures.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { expect as baseExpect, test as baseTest } from "@playwright/test"; -import { ChatPage } from "./pages/chat"; - -type Fixtures = { - chatPage: ChatPage; -}; - -export const test = baseTest.extend({ - chatPage: async ({ page }, use) => { - const chatPage = new ChatPage(page); - await use(chatPage); - }, -}); - -export const expect = baseExpect; diff --git a/demos/use_cases/vercel-ai-sdk/tests/helpers.ts b/demos/use_cases/vercel-ai-sdk/tests/helpers.ts deleted file mode 100644 index 6d492fac..00000000 --- a/demos/use_cases/vercel-ai-sdk/tests/helpers.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { generateId } from "ai"; -import { getUnixTime } from "date-fns"; - -export function generateRandomTestUser() { - const email = `test-${getUnixTime(new Date())}@playwright.com`; - const password = generateId(); - - return { - email, - password, - }; -} - -export function generateTestMessage() { - return `Test message ${Date.now()}`; -} diff --git a/demos/use_cases/vercel-ai-sdk/tests/pages/chat.ts b/demos/use_cases/vercel-ai-sdk/tests/pages/chat.ts deleted file mode 100644 index 22983fa2..00000000 --- a/demos/use_cases/vercel-ai-sdk/tests/pages/chat.ts +++ /dev/null @@ -1,71 +0,0 @@ -import type { Page } from "@playwright/test"; - -const MODEL_BUTTON_REGEX = /Gemini|Claude|GPT|Grok/i; - -export class ChatPage { - page: Page; - - constructor(page: Page) { - this.page = page; - } - - async goto() { - await this.page.goto("/"); - } - - async createNewChat() { - await this.page.goto("/"); - await this.page.waitForSelector("[data-testid='multimodal-input']"); - } - - getInput() { - return this.page.getByTestId("multimodal-input"); - } - - async typeMessage(message: string) { - const input = this.getInput(); - await input.fill(message); - } - - async sendMessage() { - await this.page.getByTestId("send-button").click(); - } - - async sendUserMessage(message: string) { - await this.typeMessage(message); - await this.sendMessage(); - } - - getSendButton() { - return this.page.getByTestId("send-button"); - } - - getStopButton() { - return this.page.getByTestId("stop-button"); - } - - async clickSuggestedAction(index = 0) { - const suggestions = this.page.locator( - "[data-testid='suggested-actions'] button" - ); - await suggestions.nth(index).click(); - } - - async openModelSelector() { - const modelButton = this.page - .locator("button") - .filter({ hasText: MODEL_BUTTON_REGEX }) - .first(); - await modelButton.click(); - } - - async selectModel(modelName: string) { - await this.openModelSelector(); - await this.page.getByText(modelName).first().click(); - } - - async searchModels(query: string) { - await this.openModelSelector(); - await this.page.getByPlaceholder("Search models...").fill(query); - } -} diff --git a/demos/use_cases/vercel-ai-sdk/tests/prompts/utils.ts b/demos/use_cases/vercel-ai-sdk/tests/prompts/utils.ts deleted file mode 100644 index 83ccf9da..00000000 --- a/demos/use_cases/vercel-ai-sdk/tests/prompts/utils.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { LanguageModelV3StreamPart } from "@ai-sdk/provider"; - -const mockUsage = { - inputTokens: { total: 10, noCache: 10, cacheRead: 0, cacheWrite: 0 }, - outputTokens: { total: 20, text: 20, reasoning: 0 }, -}; - -export function getResponseChunksByPrompt( - _prompt: unknown, - includeReasoning = false -): LanguageModelV3StreamPart[] { - const chunks: LanguageModelV3StreamPart[] = []; - - if (includeReasoning) { - chunks.push( - { type: "reasoning-start", id: "r1" }, - { type: "reasoning-delta", id: "r1", delta: "Let me think about this." }, - { type: "reasoning-end", id: "r1" } - ); - } - - chunks.push( - { type: "text-start", id: "t1" }, - { type: "text-delta", id: "t1", delta: "Hello, world!" }, - { type: "text-end", id: "t1" }, - { type: "finish", finishReason: "stop", usage: mockUsage } - ); - - return chunks; -} diff --git a/demos/use_cases/vercel-ai-sdk/vercel.json b/demos/use_cases/vercel-ai-sdk/vercel.json deleted file mode 100644 index f92a3f8a..00000000 --- a/demos/use_cases/vercel-ai-sdk/vercel.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "framework": "nextjs" -}