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 8c6f98ab..00000000 Binary files a/demos/use_cases/vercel-ai-sdk/public/images/demo-thumbnail.png and /dev/null differ 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 62515e56..00000000 Binary files a/demos/use_cases/vercel-ai-sdk/public/images/mouth of the seine, monet.jpg and /dev/null differ 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" -}