diff --git a/.env.example b/.env.example
index 098f3f6..bb0e42b 100644
--- a/.env.example
+++ b/.env.example
@@ -1,12 +1,16 @@
-# You must first activate a Billing Account here: https://platform.openai.com/account/billing/overview
-# Then get your OpenAI API Key here: https://platform.openai.com/account/api-keys
-OPENAI_API_KEY=XXXXXXXX
+# Get your OpenAI API Key here: https://platform.openai.com/account/api-keys
+OPENAI_API_KEY=****
# Generate a random secret: https://generate-secret.vercel.app/32 or `openssl rand -base64 32`
-AUTH_SECRET=XXXXXXXX
+AUTH_SECRET=****
-# Instructions to create kv database here: https://vercel.com/docs/storage/vercel-kv/quickstart and
-KV_URL=XXXXXXXX
-KV_REST_API_URL=XXXXXXXX
-KV_REST_API_TOKEN=XXXXXXXX
-KV_REST_API_READ_ONLY_TOKEN=XXXXXXXX
\ No newline at end of file
+/*
+ * The following keys below are automatically created and
+ * added to your environment when you deploy on vercel
+ */
+
+# Instructions to create kv database here: https://vercel.com/docs/storage/vercel-blob
+BLOB_READ_WRITE_TOKEN=****
+
+# Instructions to create a database here: https://vercel.com/docs/storage/vercel-postgres/quickstart
+POSTGRES_URL=****
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..5f4cbd8
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,41 @@
+{
+ "extends": [
+ "next/core-web-vitals",
+ "plugin:import/recommended",
+ "plugin:import/typescript",
+ "prettier",
+ "plugin:tailwindcss/recommended"
+ ],
+ "plugins": ["import", "tailwindcss"],
+ "rules": {
+ "tailwindcss/no-custom-classname": "off",
+ "tailwindcss/classnames-order": "off",
+ "import/order": [
+ "error",
+ {
+ "groups": [
+ "builtin",
+ "external",
+ "internal",
+ ["parent", "sibling"],
+ "index",
+ "object",
+ "type"
+ ],
+ "newlines-between": "always",
+ "alphabetize": {
+ "order": "asc",
+ "caseInsensitive": true
+ }
+ }
+ ]
+ },
+ "settings": {
+ "import/resolver": {
+ "typescript": {
+ "alwaysTryTypes": true
+ }
+ }
+ },
+ "ignorePatterns": ["**/components/ui/**"]
+}
diff --git a/README.md b/README.md
index 79a6701..d55369c 100644
--- a/README.md
+++ b/README.md
@@ -1,49 +1,47 @@
-
+
Next.js AI Chatbot
- An open-source AI chatbot app template built with Next.js, the Vercel AI SDK, OpenAI, and Vercel KV.
+ An Open-Source AI Chatbot Template Built With Next.js and the AI SDK by Vercel.
Features ·
Model Providers ·
Deploy Your Own ·
- Running locally ·
- Authors
+ Running locally
## Features
- [Next.js](https://nextjs.org) App Router
-- React Server Components (RSCs), Suspense, and Server Actions
-- [Vercel AI SDK](https://sdk.vercel.ai/docs) for streaming chat UI
-- Support for OpenAI (default), Anthropic, Cohere, Hugging Face, or custom AI chat models and/or LangChain
+ - Advanced routing for seamless navigation and performance
+ - React Server Components (RSCs) and Server Actions for server-side rendering and increased performance
+- [AI SDK](https://sdk.vercel.ai/docs)
+ - Unified API for generating text, structured objects, and tool calls with LLMs
+ - Hooks for building dynamic chat and generative user interfaces
+ - Supports OpenAI (default), Anthropic, Cohere, and other model providers
- [shadcn/ui](https://ui.shadcn.com)
- Styling with [Tailwind CSS](https://tailwindcss.com)
- - [Radix UI](https://radix-ui.com) for headless component primitives
- - Icons from [Phosphor Icons](https://phosphoricons.com)
-- Chat History, rate limiting, and session storage with [Vercel KV](https://vercel.com/storage/kv)
-- [NextAuth.js](https://github.com/nextauthjs/next-auth) for authentication
+ - Component primitives from [Radix UI](https://radix-ui.com) for accessibility and flexibility
+- Data Persistence
+ - [Vercel Postgres powered by Neon](https://vercel.com/storage/postgres) for saving chat history and user data
+ - [Vercel Blob](https://vercel.com/storage/blob) for efficient file storage
+- [NextAuth.js](https://github.com/nextauthjs/next-auth)
+ - Simple and secure authentication
## Model Providers
-This template ships with OpenAI `gpt-3.5-turbo` as the default. However, thanks to the [Vercel AI SDK](https://sdk.vercel.ai/docs), you can switch LLM providers to [Anthropic](https://anthropic.com), [Cohere](https://cohere.com/), [Hugging Face](https://huggingface.co), or using [LangChain](https://js.langchain.com) with just a few lines of code.
+This template ships with OpenAI `gpt-4o` as the default. However, with the [AI SDK](https://sdk.vercel.ai/docs), you can switch LLM providers to [OpenAI](https://openai.com), [Anthropic](https://anthropic.com), [Cohere](https://cohere.com/), and [many more](https://sdk.vercel.ai/providers/ai-sdk-providers) with just a few lines of code.
## Deploy Your Own
You can deploy your own version of the Next.js AI Chatbot to Vercel with one click:
-[](https://vercel.com/new/clone?demo-title=Next.js+Chat&demo-description=A+full-featured%2C+hackable+Next.js+AI+chatbot+built+by+Vercel+Labs&demo-url=https%3A%2F%2Fchat.vercel.ai%2F&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F4aVPvWuTmBvzM5cEdRdqeW%2F4234f9baf160f68ffb385a43c3527645%2FCleanShot_2023-06-16_at_17.09.21.png&project-name=Next.js+Chat&repository-name=nextjs-chat&repository-url=https%3A%2F%2Fgithub.com%2Fvercel-labs%2Fai-chatbot&from=templates&skippable-integrations=1&env=OPENAI_API_KEY%2CAUTH_SECRET&envDescription=How+to+get+these+env+vars&envLink=https%3A%2F%2Fgithub.com%2Fvercel-labs%2Fai-chatbot%2Fblob%2Fmain%2F.env.example&teamCreateStatus=hidden&stores=[{"type":"kv"}])
-
-## Creating a KV Database Instance
-
-Follow the steps outlined in the [quick start guide](https://vercel.com/docs/storage/vercel-kv/quickstart#create-a-kv-database) provided by Vercel. This guide will assist you in creating and configuring your KV database instance on Vercel, enabling your application to interact with it.
-
-Remember to update your environment variables (`KV_URL`, `KV_REST_API_URL`, `KV_REST_API_TOKEN`, `KV_REST_API_READ_ONLY_TOKEN`) in the `.env` file with the appropriate credentials provided during the KV database setup.
+[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fai-chatbot&env=AUTH_SECRET,OPENAI_API_KEY&envDescription=Learn%20more%20about%20how%20to%20get%20the%20API%20Keys%20for%20the%20application&envLink=https%3A%2F%2Fgithub.com%2Fvercel%2Fai-chatbot%2Fblob%2Fmain%2F.env.example&demo-title=AI%20Chatbot&demo-description=An%20Open-Source%20AI%20Chatbot%20Template%20Built%20With%20Next.js%20and%20the%20AI%20SDK%20by%20Vercel.&demo-url=https%3A%2F%2Fchat.vercel.ai&stores=[{%22type%22:%22postgres%22},{%22type%22:%22blob%22}])
## Running locally
@@ -61,11 +59,3 @@ pnpm dev
```
Your app template should now be running on [localhost:3000](http://localhost:3000/).
-
-## Authors
-
-This library is created by [Vercel](https://vercel.com) and [Next.js](https://nextjs.org) team members, with contributions from:
-
-- Jared Palmer ([@jaredpalmer](https://twitter.com/jaredpalmer)) - [Vercel](https://vercel.com)
-- Shu Ding ([@shuding\_](https://twitter.com/shuding_)) - [Vercel](https://vercel.com)
-- shadcn ([@shadcn](https://twitter.com/shadcn)) - [Vercel](https://vercel.com)
diff --git a/ai/custom-middleware.ts b/ai/custom-middleware.ts
new file mode 100644
index 0000000..ce3c43f
--- /dev/null
+++ b/ai/custom-middleware.ts
@@ -0,0 +1,3 @@
+import { Experimental_LanguageModelV1Middleware } from "ai";
+
+export const customMiddleware: Experimental_LanguageModelV1Middleware = {};
diff --git a/ai/index.ts b/ai/index.ts
new file mode 100644
index 0000000..0d84e4f
--- /dev/null
+++ b/ai/index.ts
@@ -0,0 +1,8 @@
+import { openai } from "@ai-sdk/openai";
+import { experimental_wrapLanguageModel as wrapLanguageModel } from "ai";
+import { customMiddleware } from "./custom-middleware";
+
+export const customModel = wrapLanguageModel({
+ model: openai("gpt-4o"),
+ middleware: customMiddleware,
+});
diff --git a/app/(auth)/actions.ts b/app/(auth)/actions.ts
new file mode 100644
index 0000000..d2e26bc
--- /dev/null
+++ b/app/(auth)/actions.ts
@@ -0,0 +1,85 @@
+"use server";
+
+import { z } from "zod";
+
+import { createUser, getUser } from "@/db/queries";
+
+import { signIn } from "./auth";
+
+const authFormSchema = z.object({
+ email: z.string().email(),
+ password: z.string().min(6),
+});
+
+export interface LoginActionState {
+ status: "idle" | "in_progress" | "success" | "failed" | "invalid_data";
+}
+
+export const login = async (
+ _: LoginActionState,
+ formData: FormData,
+): Promise => {
+ try {
+ const validatedData = authFormSchema.parse({
+ email: formData.get("email"),
+ password: formData.get("password"),
+ });
+
+ await signIn("credentials", {
+ email: validatedData.email,
+ password: validatedData.password,
+ redirect: false,
+ });
+
+ return { status: "success" };
+ } catch (error) {
+ if (error instanceof z.ZodError) {
+ return { status: "invalid_data" };
+ }
+
+ return { status: "failed" };
+ }
+};
+
+export interface RegisterActionState {
+ status:
+ | "idle"
+ | "in_progress"
+ | "success"
+ | "failed"
+ | "user_exists"
+ | "invalid_data";
+}
+
+export const register = async (
+ _: RegisterActionState,
+ formData: FormData,
+): Promise => {
+ try {
+ const validatedData = authFormSchema.parse({
+ email: formData.get("email"),
+ password: formData.get("password"),
+ });
+
+ let [user] = await getUser(validatedData.email);
+
+ if (user) {
+ return { status: "user_exists" } as RegisterActionState;
+ } else {
+ await createUser(validatedData.email, validatedData.password);
+ await signIn("credentials", {
+ email: validatedData.email,
+ password: validatedData.password,
+ redirect: false,
+ });
+
+ return { status: "success" };
+ }
+ } catch (error) {
+ if (error instanceof z.ZodError) {
+ return { status: "invalid_data" };
+ }
+
+ return { status: "failed" };
+ }
+};
diff --git a/app/(auth)/api/auth/[...nextauth]/route.ts b/app/(auth)/api/auth/[...nextauth]/route.ts
new file mode 100644
index 0000000..d104b65
--- /dev/null
+++ b/app/(auth)/api/auth/[...nextauth]/route.ts
@@ -0,0 +1 @@
+export { GET, POST } from "@/app/(auth)/auth";
diff --git a/app/(auth)/auth.config.ts b/app/(auth)/auth.config.ts
new file mode 100644
index 0000000..7e27788
--- /dev/null
+++ b/app/(auth)/auth.config.ts
@@ -0,0 +1,39 @@
+import { NextAuthConfig } from "next-auth";
+
+export const authConfig = {
+ pages: {
+ signIn: "/login",
+ newUser: "/",
+ },
+ providers: [
+ // added later in auth.ts since it requires bcrypt which is only compatible with Node.js
+ // while this file is also used in non-Node.js environments
+ ],
+ callbacks: {
+ authorized({ auth, request: { nextUrl } }) {
+ let isLoggedIn = !!auth?.user;
+ let isOnChat = nextUrl.pathname.startsWith("/");
+ let isOnRegister = nextUrl.pathname.startsWith("/register");
+ let isOnLogin = nextUrl.pathname.startsWith("/login");
+
+ if (isLoggedIn && (isOnLogin || isOnRegister)) {
+ return Response.redirect(new URL("/", nextUrl));
+ }
+
+ if (isOnRegister || isOnLogin) {
+ return true; // Always allow access to register and login pages
+ }
+
+ if (isOnChat) {
+ if (isLoggedIn) return true;
+ return false; // Redirect unauthenticated users to login page
+ }
+
+ if (isLoggedIn) {
+ return Response.redirect(new URL("/", nextUrl));
+ }
+
+ return true;
+ },
+ },
+} satisfies NextAuthConfig;
diff --git a/app/(auth)/auth.ts b/app/(auth)/auth.ts
new file mode 100644
index 0000000..e7a25e1
--- /dev/null
+++ b/app/(auth)/auth.ts
@@ -0,0 +1,53 @@
+import { compare } from "bcrypt-ts";
+import NextAuth, { User, Session } from "next-auth";
+import Credentials from "next-auth/providers/credentials";
+
+import { getUser } from "@/db/queries";
+
+import { authConfig } from "./auth.config";
+
+interface ExtendedSession extends Session {
+ user: User;
+}
+
+export const {
+ handlers: { GET, POST },
+ auth,
+ signIn,
+ signOut,
+} = NextAuth({
+ ...authConfig,
+ providers: [
+ Credentials({
+ credentials: {},
+ async authorize({ email, password }: any) {
+ let users = await getUser(email);
+ if (users.length === 0) return null;
+ let passwordsMatch = await compare(password, users[0].password!);
+ if (passwordsMatch) return users[0] as any;
+ },
+ }),
+ ],
+ callbacks: {
+ async jwt({ token, user }) {
+ if (user) {
+ token.id = user.id;
+ }
+
+ return token;
+ },
+ async session({
+ session,
+ token,
+ }: {
+ session: ExtendedSession;
+ token: any;
+ }) {
+ if (session.user) {
+ session.user.id = token.id as string;
+ }
+
+ return session;
+ },
+ },
+});
diff --git a/app/(auth)/login/page.tsx b/app/(auth)/login/page.tsx
new file mode 100644
index 0000000..f3a1cb4
--- /dev/null
+++ b/app/(auth)/login/page.tsx
@@ -0,0 +1,65 @@
+"use client";
+
+import Link from "next/link";
+import { useRouter } from "next/navigation";
+import { useActionState, useEffect, useState } from "react";
+import { toast } from "sonner";
+
+import { AuthForm } from "@/components/custom/auth-form";
+import { SubmitButton } from "@/components/custom/submit-button";
+
+import { login, LoginActionState } from "../actions";
+
+export default function Page() {
+ const router = useRouter();
+
+ const [email, setEmail] = useState("");
+
+ const [state, formAction] = useActionState(
+ login,
+ {
+ status: "idle",
+ },
+ );
+
+ useEffect(() => {
+ if (state.status === "failed") {
+ toast.error("Invalid credentials!");
+ } else if (state.status === "invalid_data") {
+ toast.error("Failed validating your submission!");
+ } else if (state.status === "success") {
+ router.refresh();
+ }
+ }, [state.status, router]);
+
+ const handleSubmit = (formData: FormData) => {
+ setEmail(formData.get("email") as string);
+ formAction(formData);
+ };
+
+ return (
+
+
+
+
Sign In
+
+ Use your email and password to sign in
+
+
+
+ Sign in
+
+ {"Don't have an account? "}
+
+ Sign up
+
+ {" for free."}
+
+
+
+
+ );
+}
diff --git a/app/(auth)/register/page.tsx b/app/(auth)/register/page.tsx
new file mode 100644
index 0000000..6ce4083
--- /dev/null
+++ b/app/(auth)/register/page.tsx
@@ -0,0 +1,67 @@
+"use client";
+
+import Link from "next/link";
+import { useRouter } from "next/navigation";
+import { useActionState, useEffect, useState } from "react";
+import { toast } from "sonner";
+
+import { AuthForm } from "@/components/custom/auth-form";
+import { SubmitButton } from "@/components/custom/submit-button";
+
+import { register, RegisterActionState } from "../actions";
+
+export default function Page() {
+ const router = useRouter();
+
+ const [email, setEmail] = useState("");
+ const [state, formAction] = useActionState(
+ register,
+ {
+ status: "idle",
+ },
+ );
+
+ useEffect(() => {
+ if (state.status === "user_exists") {
+ toast.error("Account already exists");
+ } else if (state.status === "failed") {
+ toast.error("Failed to create account");
+ } else if (state.status === "invalid_data") {
+ toast.error("Failed validating your submission!");
+ } else if (state.status === "success") {
+ toast.success("Account created successfully");
+ router.refresh();
+ }
+ }, [state, router]);
+
+ const handleSubmit = (formData: FormData) => {
+ setEmail(formData.get("email") as string);
+ formAction(formData);
+ };
+
+ return (
+
+
+
+
Sign Up
+
+ Create an account with your email and password
+
+
+
+ Sign Up
+
+ {"Already have an account? "}
+
+ Sign in
+
+ {" instead."}
+
+
+
+
+ );
+}
diff --git a/app/(chat)/api/chat/route.ts b/app/(chat)/api/chat/route.ts
new file mode 100644
index 0000000..4e2c088
--- /dev/null
+++ b/app/(chat)/api/chat/route.ts
@@ -0,0 +1,94 @@
+import { convertToCoreMessages, Message, streamText } from "ai";
+import { z } from "zod";
+
+import { customModel } from "@/ai";
+import { auth } from "@/app/(auth)/auth";
+import { deleteChatById, getChatById, saveChat } from "@/db/queries";
+
+export async function POST(request: Request) {
+ const { id, messages }: { id: string; messages: Array } =
+ await request.json();
+
+ const session = await auth();
+
+ if (!session) {
+ return new Response("Unauthorized", { status: 401 });
+ }
+
+ const coreMessages = convertToCoreMessages(messages);
+
+ const result = await streamText({
+ model: customModel,
+ system:
+ "you are a friendly assistant! keep your responses concise and helpful.",
+ messages: coreMessages,
+ maxSteps: 5,
+ tools: {
+ getWeather: {
+ description: "Get the current weather at a location",
+ parameters: z.object({
+ latitude: z.number(),
+ longitude: z.number(),
+ }),
+ execute: async ({ latitude, longitude }) => {
+ const response = await fetch(
+ `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m&hourly=temperature_2m&daily=sunrise,sunset&timezone=auto`,
+ );
+
+ const weatherData = await response.json();
+ return weatherData;
+ },
+ },
+ },
+ onFinish: async ({ responseMessages }) => {
+ if (session.user && session.user.id) {
+ try {
+ await saveChat({
+ id,
+ messages: [...coreMessages, ...responseMessages],
+ userId: session.user.id,
+ });
+ } catch (error) {
+ console.error("Failed to save chat");
+ }
+ }
+ },
+ experimental_telemetry: {
+ isEnabled: true,
+ functionId: "stream-text",
+ },
+ });
+
+ return result.toDataStreamResponse({});
+}
+
+export async function DELETE(request: Request) {
+ const { searchParams } = new URL(request.url);
+ const id = searchParams.get("id");
+
+ if (!id) {
+ return new Response("Not Found", { status: 404 });
+ }
+
+ const session = await auth();
+
+ if (!session || !session.user) {
+ return new Response("Unauthorized", { status: 401 });
+ }
+
+ try {
+ const chat = await getChatById({ id });
+
+ if (chat.userId !== session.user.id) {
+ return new Response("Unauthorized", { status: 401 });
+ }
+
+ await deleteChatById({ id });
+
+ return new Response("Chat deleted", { status: 200 });
+ } catch (error) {
+ return new Response("An error occurred while processing your request", {
+ status: 500,
+ });
+ }
+}
diff --git a/app/(chat)/api/files/upload/route.ts b/app/(chat)/api/files/upload/route.ts
new file mode 100644
index 0000000..868e448
--- /dev/null
+++ b/app/(chat)/api/files/upload/route.ts
@@ -0,0 +1,69 @@
+import { put } from "@vercel/blob";
+import { NextResponse } from "next/server";
+import { z } from "zod";
+
+import { auth } from "@/app/(auth)/auth";
+
+const FileSchema = z.object({
+ file: z
+ .instanceof(File)
+ .refine((file) => file.size <= 5 * 1024 * 1024, {
+ message: "File size should be less than 5MB",
+ })
+ .refine(
+ (file) =>
+ ["image/jpeg", "image/png", "application/pdf"].includes(file.type),
+ {
+ message: "File type should be JPEG, PNG, or PDF",
+ },
+ ),
+});
+
+export async function POST(request: Request) {
+ const session = await auth();
+
+ if (!session) {
+ return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
+ }
+
+ if (request.body === null) {
+ return new Response("Request body is empty", { status: 400 });
+ }
+
+ try {
+ const formData = await request.formData();
+ const file = formData.get("file") as File;
+
+ if (!file) {
+ return NextResponse.json({ error: "No file uploaded" }, { status: 400 });
+ }
+
+ const validatedFile = FileSchema.safeParse({ file });
+
+ if (!validatedFile.success) {
+ const errorMessage = validatedFile.error.errors
+ .map((error) => error.message)
+ .join(", ");
+
+ return NextResponse.json({ error: errorMessage }, { status: 400 });
+ }
+
+ const filename = file.name;
+ const fileBuffer = await file.arrayBuffer();
+
+ try {
+ const data = await put(`${filename}`, fileBuffer, {
+ access: "public",
+ });
+
+ return NextResponse.json(data);
+ } catch (error) {
+ return NextResponse.json({ error: "Upload failed" }, { status: 500 });
+ }
+ } catch (error) {
+ return NextResponse.json(
+ { error: "Failed to process request" },
+ { status: 500 },
+ );
+ }
+}
diff --git a/app/(chat)/api/history/route.ts b/app/(chat)/api/history/route.ts
new file mode 100644
index 0000000..e1b8e07
--- /dev/null
+++ b/app/(chat)/api/history/route.ts
@@ -0,0 +1,13 @@
+import { auth } from "@/app/(auth)/auth";
+import { getChatsByUserId } from "@/db/queries";
+
+export async function GET() {
+ const session = await auth();
+
+ if (!session || !session.user) {
+ return Response.json("Unauthorized!", { status: 401 });
+ }
+
+ const chats = await getChatsByUserId({ id: session.user.id! });
+ return Response.json(chats);
+}
diff --git a/app/(chat)/chat/[id]/page.tsx b/app/(chat)/chat/[id]/page.tsx
index bf8775c..bc8d6f6 100644
--- a/app/(chat)/chat/[id]/page.tsx
+++ b/app/(chat)/chat/[id]/page.tsx
@@ -1,65 +1,108 @@
-import { type Metadata } from 'next'
-import { notFound, redirect } from 'next/navigation'
+import { CoreMessage, CoreToolMessage, Message, ToolInvocation } from "ai";
+import { notFound } from "next/navigation";
-import { auth } from '@/auth'
-import { getChat, getMissingKeys } from '@/app/actions'
-import { Chat } from '@/components/chat'
-import { AI } from '@/lib/chat/actions'
-import { Session } from '@/lib/types'
+import { auth } from "@/app/(auth)/auth";
+import { Chat as PreviewChat } from "@/components/custom/chat";
+import { getChatById } from "@/db/queries";
+import { Chat } from "@/db/schema";
+import { generateUUID } from "@/lib/utils";
-export interface ChatPageProps {
- params: {
- id: string
- }
-}
+function addToolMessageToChat({
+ toolMessage,
+ messages,
+}: {
+ toolMessage: CoreToolMessage;
+ messages: Array;
+}): Array {
+ return messages.map((message) => {
+ if (message.toolInvocations) {
+ return {
+ ...message,
+ toolInvocations: message.toolInvocations.map((toolInvocation) => {
+ const toolResult = toolMessage.content.find(
+ (tool) => tool.toolCallId === toolInvocation.toolCallId,
+ );
-export async function generateMetadata({
- params
-}: ChatPageProps): Promise {
- const session = await auth()
+ if (toolResult) {
+ return {
+ ...toolInvocation,
+ state: "result",
+ result: toolResult.result,
+ };
+ }
- if (!session?.user) {
- return {}
- }
-
- const chat = await getChat(params.id, session.user.id)
-
- if (!chat || 'error' in chat) {
- redirect('/')
- } else {
- return {
- title: chat?.title.toString().slice(0, 50) ?? 'Chat'
- }
- }
-}
-
-export default async function ChatPage({ params }: ChatPageProps) {
- const session = (await auth()) as Session
- const missingKeys = await getMissingKeys()
-
- if (!session?.user) {
- redirect(`/login?next=/chat/${params.id}`)
- }
-
- const userId = session.user.id as string
- const chat = await getChat(params.id, userId)
-
- if (!chat || 'error' in chat) {
- redirect('/')
- } else {
- if (chat?.userId !== session?.user?.id) {
- notFound()
+ return toolInvocation;
+ }),
+ };
}
- return (
-
-
-
- )
- }
+ return message;
+ });
+}
+
+function convertToUIMessages(messages: Array): Array {
+ return messages.reduce((chatMessages: Array, message) => {
+ if (message.role === "tool") {
+ return addToolMessageToChat({
+ toolMessage: message as CoreToolMessage,
+ messages: chatMessages,
+ });
+ }
+
+ let textContent = "";
+ let toolInvocations: Array = [];
+
+ if (typeof message.content === "string") {
+ textContent = message.content;
+ } else if (Array.isArray(message.content)) {
+ for (const content of message.content) {
+ if (content.type === "text") {
+ textContent += content.text;
+ } else if (content.type === "tool-call") {
+ toolInvocations.push({
+ state: "call",
+ toolCallId: content.toolCallId,
+ toolName: content.toolName,
+ args: content.args,
+ });
+ }
+ }
+ }
+
+ chatMessages.push({
+ id: generateUUID(),
+ role: message.role,
+ content: textContent,
+ toolInvocations,
+ });
+
+ return chatMessages;
+ }, []);
+}
+
+export default async function Page({ params }: { params: any }) {
+ const { id } = params;
+ const chatFromDb = await getChatById({ id });
+
+ if (!chatFromDb) {
+ notFound();
+ }
+
+ // type casting
+ const chat: Chat = {
+ ...chatFromDb,
+ messages: convertToUIMessages(chatFromDb.messages as Array),
+ };
+
+ const session = await auth();
+
+ if (!session || !session.user) {
+ return notFound();
+ }
+
+ if (session.user.id !== chat.userId) {
+ return notFound();
+ }
+
+ return ;
}
diff --git a/app/(chat)/layout.tsx b/app/(chat)/layout.tsx
deleted file mode 100644
index 2825d59..0000000
--- a/app/(chat)/layout.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import { SidebarDesktop } from '@/components/sidebar-desktop'
-
-interface ChatLayoutProps {
- children: React.ReactNode
-}
-
-export default async function ChatLayout({ children }: ChatLayoutProps) {
- return (
-
-
- {children}
-
- )
-}
diff --git a/app/(chat)/opengraph-image.png b/app/(chat)/opengraph-image.png
new file mode 100644
index 0000000..79fbc0f
Binary files /dev/null and b/app/(chat)/opengraph-image.png differ
diff --git a/app/(chat)/page.tsx b/app/(chat)/page.tsx
index 21b79f9..c2af86b 100644
--- a/app/(chat)/page.tsx
+++ b/app/(chat)/page.tsx
@@ -1,22 +1,7 @@
-import { nanoid } from '@/lib/utils'
-import { Chat } from '@/components/chat'
-import { AI } from '@/lib/chat/actions'
-import { auth } from '@/auth'
-import { Session } from '@/lib/types'
-import { getMissingKeys } from '@/app/actions'
+import { Chat } from "@/components/custom/chat";
+import { generateUUID } from "@/lib/utils";
-export const metadata = {
- title: 'Next.js AI Chatbot'
-}
-
-export default async function IndexPage() {
- const id = nanoid()
- const session = (await auth()) as Session
- const missingKeys = await getMissingKeys()
-
- return (
-
-
-
- )
+export default async function Page() {
+ const id = generateUUID();
+ return ;
}
diff --git a/app/(chat)/twitter-image.png b/app/(chat)/twitter-image.png
new file mode 100644
index 0000000..79fbc0f
Binary files /dev/null and b/app/(chat)/twitter-image.png differ
diff --git a/app/actions.ts b/app/actions.ts
deleted file mode 100644
index 1398aca..0000000
--- a/app/actions.ts
+++ /dev/null
@@ -1,172 +0,0 @@
-'use server'
-
-import { revalidatePath } from 'next/cache'
-import { redirect } from 'next/navigation'
-import { kv } from '@vercel/kv'
-
-import { auth } from '@/auth'
-import { type Chat } from '@/lib/types'
-
-export async function getChats(userId?: string | null) {
- const session = await auth()
-
- if (!userId) {
- return []
- }
-
- if (userId !== session?.user?.id) {
- return {
- error: 'Unauthorized'
- }
- }
-
- try {
- const pipeline = kv.pipeline()
- const chats: string[] = await kv.zrange(`user:chat:${userId}`, 0, -1, {
- rev: true
- })
-
- for (const chat of chats) {
- pipeline.hgetall(chat)
- }
-
- const results = await pipeline.exec()
-
- return results as Chat[]
- } catch (error) {
- return []
- }
-}
-
-export async function getChat(id: string, userId: string) {
- const session = await auth()
-
- if (userId !== session?.user?.id) {
- return {
- error: 'Unauthorized'
- }
- }
-
- const chat = await kv.hgetall(`chat:${id}`)
-
- if (!chat || (userId && chat.userId !== userId)) {
- return null
- }
-
- return chat
-}
-
-export async function removeChat({ id, path }: { id: string; path: string }) {
- const session = await auth()
-
- if (!session) {
- return {
- error: 'Unauthorized'
- }
- }
-
- // Convert uid to string for consistent comparison with session.user.id
- const uid = String(await kv.hget(`chat:${id}`, 'userId'))
-
- if (uid !== session?.user?.id) {
- return {
- error: 'Unauthorized'
- }
- }
-
- await kv.del(`chat:${id}`)
- await kv.zrem(`user:chat:${session.user.id}`, `chat:${id}`)
-
- revalidatePath('/')
- return revalidatePath(path)
-}
-
-export async function clearChats() {
- const session = await auth()
-
- if (!session?.user?.id) {
- return {
- error: 'Unauthorized'
- }
- }
-
- const chats: string[] = await kv.zrange(`user:chat:${session.user.id}`, 0, -1)
- if (!chats.length) {
- return redirect('/')
- }
- const pipeline = kv.pipeline()
-
- for (const chat of chats) {
- pipeline.del(chat)
- pipeline.zrem(`user:chat:${session.user.id}`, chat)
- }
-
- await pipeline.exec()
-
- revalidatePath('/')
- return redirect('/')
-}
-
-export async function getSharedChat(id: string) {
- const chat = await kv.hgetall(`chat:${id}`)
-
- if (!chat || !chat.sharePath) {
- return null
- }
-
- return chat
-}
-
-export async function shareChat(id: string) {
- const session = await auth()
-
- if (!session?.user?.id) {
- return {
- error: 'Unauthorized'
- }
- }
-
- const chat = await kv.hgetall(`chat:${id}`)
-
- if (!chat || chat.userId !== session.user.id) {
- return {
- error: 'Something went wrong'
- }
- }
-
- const payload = {
- ...chat,
- sharePath: `/share/${chat.id}`
- }
-
- await kv.hmset(`chat:${chat.id}`, payload)
-
- return payload
-}
-
-export async function saveChat(chat: Chat) {
- const session = await auth()
-
- if (session && session.user) {
- const pipeline = kv.pipeline()
- pipeline.hmset(`chat:${chat.id}`, chat)
- pipeline.zadd(`user:chat:${chat.userId}`, {
- score: Date.now(),
- member: `chat:${chat.id}`
- })
- await pipeline.exec()
- } else {
- return
- }
-}
-
-export async function refreshHistory(path: string) {
- redirect(path)
-}
-
-export async function getMissingKeys() {
- const keysRequired = ['OPENAI_API_KEY']
- return keysRequired
- .map(key => (process.env[key] ? '' : key))
- .filter(key => key !== '')
-}
diff --git a/public/favicon.ico b/app/favicon.ico
similarity index 100%
rename from public/favicon.ico
rename to app/favicon.ico
diff --git a/app/globals.css b/app/globals.css
index 0b46ea1..dddbf22 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -1,76 +1,110 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
-
-@layer base {
- :root {
- --background: 0 0% 100%;
- --foreground: 240 10% 3.9%;
- --card: 0 0% 100%;
- --card-foreground: 240 10% 3.9%;
-
- --popover: 0 0% 100%;
- --popover-foreground: 240 10% 3.9%;
-
- --primary: 240 5.9% 10%;
- --primary-foreground: 0 0% 98%;
-
- --secondary: 240 4.8% 95.9%;
- --secondary-foreground: 240 5.9% 10%;
-
- --muted: 240 4.8% 95.9%;
- --muted-foreground: 240 3.8% 46.1%;
-
- --accent: 240 4.8% 95.9%;
- --accent-foreground: 240 5.9% 10%;
-
- --destructive: 0 84.2% 60.2%;
- --destructive-foreground: 0 0% 98%;
-
- --border: 240 5.9% 90%;
- --input: 240 5.9% 90%;
- --ring: 240 10% 3.9%;
-
- --radius: 0.5rem;
- }
-
- .dark {
- --background: 240 10% 3.9%;
- --foreground: 0 0% 98%;
-
- --card: 240 10% 3.9%;
- --card-foreground: 0 0% 98%;
-
- --popover: 240 10% 3.9%;
- --popover-foreground: 0 0% 98%;
-
- --primary: 0 0% 98%;
- --primary-foreground: 240 5.9% 10%;
-
- --secondary: 240 3.7% 15.9%;
- --secondary-foreground: 0 0% 98%;
-
- --muted: 240 3.7% 15.9%;
- --muted-foreground: 240 5% 64.9%;
-
- --accent: 240 3.7% 15.9%;
- --accent-foreground: 0 0% 98%;
-
- --destructive: 0 62.8% 30.6%;
- --destructive-foreground: 0 0% 98%;
-
- --border: 240 3.7% 15.9%;
- --input: 240 3.7% 15.9%;
- --ring: 240 4.9% 83.9%;
- }
+:root {
+ --foreground-rgb: 0, 0, 0;
+ --background-start-rgb: 214, 219, 220;
+ --background-end-rgb: 255, 255, 255;
}
-
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --foreground-rgb: 255, 255, 255;
+ --background-start-rgb: 0, 0, 0;
+ --background-end-rgb: 0, 0, 0;
+ }
+}
+
+@layer utilities {
+ .text-balance {
+ text-wrap: balance;
+ }
+}
+
@layer base {
- * {
- @apply border-border;
- }
- body {
- @apply bg-background text-foreground;
- }
-}
\ No newline at end of file
+ :root {
+ --background: 0 0% 100%;
+ --foreground: 240 10% 3.9%;
+ --card: 0 0% 100%;
+ --card-foreground: 240 10% 3.9%;
+ --popover: 0 0% 100%;
+ --popover-foreground: 240 10% 3.9%;
+ --primary: 240 5.9% 10%;
+ --primary-foreground: 0 0% 98%;
+ --secondary: 240 4.8% 95.9%;
+ --secondary-foreground: 240 5.9% 10%;
+ --muted: 240 4.8% 95.9%;
+ --muted-foreground: 240 3.8% 46.1%;
+ --accent: 240 4.8% 95.9%;
+ --accent-foreground: 240 5.9% 10%;
+ --destructive: 0 84.2% 60.2%;
+ --destructive-foreground: 0 0% 98%;
+ --border: 240 5.9% 90%;
+ --input: 240 5.9% 90%;
+ --ring: 240 10% 3.9%;
+ --chart-1: 12 76% 61%;
+ --chart-2: 173 58% 39%;
+ --chart-3: 197 37% 24%;
+ --chart-4: 43 74% 66%;
+ --chart-5: 27 87% 67%;
+ --radius: 0.5rem;
+ }
+ .dark {
+ --background: 240 10% 3.9%;
+ --foreground: 0 0% 98%;
+ --card: 240 10% 3.9%;
+ --card-foreground: 0 0% 98%;
+ --popover: 240 10% 3.9%;
+ --popover-foreground: 0 0% 98%;
+ --primary: 0 0% 98%;
+ --primary-foreground: 240 5.9% 10%;
+ --secondary: 240 3.7% 15.9%;
+ --secondary-foreground: 0 0% 98%;
+ --muted: 240 3.7% 15.9%;
+ --muted-foreground: 240 5% 64.9%;
+ --accent: 240 3.7% 15.9%;
+ --accent-foreground: 0 0% 98%;
+ --destructive: 0 62.8% 30.6%;
+ --destructive-foreground: 0 0% 98%;
+ --border: 240 3.7% 15.9%;
+ --input: 240 3.7% 15.9%;
+ --ring: 240 4.9% 83.9%;
+ --chart-1: 220 70% 50%;
+ --chart-2: 160 60% 45%;
+ --chart-3: 30 80% 55%;
+ --chart-4: 280 65% 60%;
+ --chart-5: 340 75% 55%;
+ }
+}
+
+@layer base {
+ * {
+ @apply border-border;
+ }
+
+ body {
+ @apply bg-background text-foreground;
+ }
+
+ @font-face {
+ font-family: "geist";
+ font-style: normal;
+ font-weight: 100 900;
+ src: url(/fonts/geist.woff2) format("woff2");
+ }
+
+ @font-face {
+ font-family: "geist-mono";
+ font-style: normal;
+ font-weight: 100 900;
+ src: url(/fonts/geist-mono.woff2) format("woff2");
+ }
+}
+
+.skeleton {
+ *[class^="text-"] {
+ color: transparent;
+ @apply rounded-md bg-foreground/20 select-none;
+ }
+}
diff --git a/app/layout.tsx b/app/layout.tsx
index a32b223..961c3f0 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -1,64 +1,36 @@
-import { GeistSans } from 'geist/font/sans'
-import { GeistMono } from 'geist/font/mono'
+import { Metadata } from "next";
+import { Toaster } from "sonner";
-import '@/app/globals.css'
-import { cn } from '@/lib/utils'
-import { TailwindIndicator } from '@/components/tailwind-indicator'
-import { Providers } from '@/components/providers'
-import { Header } from '@/components/header'
-import { Toaster } from '@/components/ui/sonner'
+import { Navbar } from "@/components/custom/navbar";
+import { ThemeProvider } from "@/components/custom/theme-provider";
-export const metadata = {
- metadataBase: process.env.VERCEL_URL
- ? new URL(`https://${process.env.VERCEL_URL}`)
- : undefined,
- title: {
- default: 'Next.js AI Chatbot',
- template: `%s - Next.js AI Chatbot`
- },
- description: 'An AI-powered chatbot template built with Next.js and Vercel.',
- icons: {
- icon: '/favicon.ico',
- shortcut: '/favicon-16x16.png',
- apple: '/apple-touch-icon.png'
- }
-}
+import "./globals.css";
-export const viewport = {
- themeColor: [
- { media: '(prefers-color-scheme: light)', color: 'white' },
- { media: '(prefers-color-scheme: dark)', color: 'black' }
- ]
-}
+export const metadata: Metadata = {
+ metadataBase: new URL("https://chat.vercel.ai"),
+ title: "Next.js Chatbot Template",
+ description: "Next.js chatbot template using the AI SDK.",
+};
-interface RootLayoutProps {
- children: React.ReactNode
-}
-
-export default function RootLayout({ children }: RootLayoutProps) {
+export default async function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
return (
-
-
-
-
+
+
-
-
- {children}
-
-
-
+
+
+ {children}
+
- )
+ );
}
diff --git a/app/login/actions.ts b/app/login/actions.ts
deleted file mode 100644
index f23e220..0000000
--- a/app/login/actions.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-'use server'
-
-import { signIn } from '@/auth'
-import { User } from '@/lib/types'
-import { AuthError } from 'next-auth'
-import { z } from 'zod'
-import { kv } from '@vercel/kv'
-import { ResultCode } from '@/lib/utils'
-
-export async function getUser(email: string) {
- const user = await kv.hgetall(`user:${email}`)
- return user
-}
-
-interface Result {
- type: string
- resultCode: ResultCode
-}
-
-export async function authenticate(
- _prevState: Result | undefined,
- formData: FormData
-): Promise {
- try {
- const email = formData.get('email')
- const password = formData.get('password')
-
- const parsedCredentials = z
- .object({
- email: z.string().email(),
- password: z.string().min(6)
- })
- .safeParse({
- email,
- password
- })
-
- if (parsedCredentials.success) {
- await signIn('credentials', {
- email,
- password,
- redirect: false
- })
-
- return {
- type: 'success',
- resultCode: ResultCode.UserLoggedIn
- }
- } else {
- return {
- type: 'error',
- resultCode: ResultCode.InvalidCredentials
- }
- }
- } catch (error) {
- if (error instanceof AuthError) {
- switch (error.type) {
- case 'CredentialsSignin':
- return {
- type: 'error',
- resultCode: ResultCode.InvalidCredentials
- }
- default:
- return {
- type: 'error',
- resultCode: ResultCode.UnknownError
- }
- }
- }
- }
-}
diff --git a/app/login/page.tsx b/app/login/page.tsx
deleted file mode 100644
index 1fba27b..0000000
--- a/app/login/page.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import { auth } from '@/auth'
-import LoginForm from '@/components/login-form'
-import { Session } from '@/lib/types'
-import { redirect } from 'next/navigation'
-
-export default async function LoginPage() {
- const session = (await auth()) as Session
-
- if (session) {
- redirect('/')
- }
-
- return (
-
-
-
- )
-}
diff --git a/app/new/page.tsx b/app/new/page.tsx
deleted file mode 100644
index d235894..0000000
--- a/app/new/page.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { redirect } from 'next/navigation'
-
-export default async function NewPage() {
- redirect('/')
-}
diff --git a/app/opengraph-image.png b/app/opengraph-image.png
deleted file mode 100644
index 278b197..0000000
Binary files a/app/opengraph-image.png and /dev/null differ
diff --git a/app/share/[id]/page.tsx b/app/share/[id]/page.tsx
deleted file mode 100644
index d80f0c8..0000000
--- a/app/share/[id]/page.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import { type Metadata } from 'next'
-import { notFound, redirect } from 'next/navigation'
-
-import { formatDate } from '@/lib/utils'
-import { getSharedChat } from '@/app/actions'
-import { ChatList } from '@/components/chat-list'
-import { FooterText } from '@/components/footer'
-import { AI, UIState, getUIStateFromAIState } from '@/lib/chat/actions'
-
-export const runtime = 'edge'
-export const preferredRegion = 'home'
-
-interface SharePageProps {
- params: {
- id: string
- }
-}
-
-export async function generateMetadata({
- params
-}: SharePageProps): Promise {
- const chat = await getSharedChat(params.id)
-
- return {
- title: chat?.title.slice(0, 50) ?? 'Chat'
- }
-}
-
-export default async function SharePage({ params }: SharePageProps) {
- const chat = await getSharedChat(params.id)
-
- if (!chat || !chat?.sharePath) {
- notFound()
- }
-
- const uiState: UIState = getUIStateFromAIState(chat)
-
- return (
- <>
-
-
-
-
-
{chat.title}
-
- {formatDate(chat.createdAt)} · {chat.messages.length} messages
-
-
-
-
-
-
-
-
-
- >
- )
-}
diff --git a/app/signup/actions.ts b/app/signup/actions.ts
deleted file mode 100644
index 492586a..0000000
--- a/app/signup/actions.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-'use server'
-
-import { signIn } from '@/auth'
-import { ResultCode, getStringFromBuffer } from '@/lib/utils'
-import { z } from 'zod'
-import { kv } from '@vercel/kv'
-import { getUser } from '../login/actions'
-import { AuthError } from 'next-auth'
-
-export async function createUser(
- email: string,
- hashedPassword: string,
- salt: string
-) {
- const existingUser = await getUser(email)
-
- if (existingUser) {
- return {
- type: 'error',
- resultCode: ResultCode.UserAlreadyExists
- }
- } else {
- const user = {
- id: crypto.randomUUID(),
- email,
- password: hashedPassword,
- salt
- }
-
- await kv.hmset(`user:${email}`, user)
-
- return {
- type: 'success',
- resultCode: ResultCode.UserCreated
- }
- }
-}
-
-interface Result {
- type: string
- resultCode: ResultCode
-}
-
-export async function signup(
- _prevState: Result | undefined,
- formData: FormData
-): Promise {
- const email = formData.get('email') as string
- const password = formData.get('password') as string
-
- const parsedCredentials = z
- .object({
- email: z.string().email(),
- password: z.string().min(6)
- })
- .safeParse({
- email,
- password
- })
-
- if (parsedCredentials.success) {
- const salt = crypto.randomUUID()
-
- const encoder = new TextEncoder()
- const saltedPassword = encoder.encode(password + salt)
- const hashedPasswordBuffer = await crypto.subtle.digest(
- 'SHA-256',
- saltedPassword
- )
- const hashedPassword = getStringFromBuffer(hashedPasswordBuffer)
-
- try {
- const result = await createUser(email, hashedPassword, salt)
-
- if (result.resultCode === ResultCode.UserCreated) {
- await signIn('credentials', {
- email,
- password,
- redirect: false
- })
- }
-
- return result
- } catch (error) {
- if (error instanceof AuthError) {
- switch (error.type) {
- case 'CredentialsSignin':
- return {
- type: 'error',
- resultCode: ResultCode.InvalidCredentials
- }
- default:
- return {
- type: 'error',
- resultCode: ResultCode.UnknownError
- }
- }
- } else {
- return {
- type: 'error',
- resultCode: ResultCode.UnknownError
- }
- }
- }
- } else {
- return {
- type: 'error',
- resultCode: ResultCode.InvalidCredentials
- }
- }
-}
diff --git a/app/signup/page.tsx b/app/signup/page.tsx
deleted file mode 100644
index dbac964..0000000
--- a/app/signup/page.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import { auth } from '@/auth'
-import SignupForm from '@/components/signup-form'
-import { Session } from '@/lib/types'
-import { redirect } from 'next/navigation'
-
-export default async function SignupPage() {
- const session = (await auth()) as Session
-
- if (session) {
- redirect('/')
- }
-
- return (
-
-
-
- )
-}
diff --git a/app/twitter-image.png b/app/twitter-image.png
deleted file mode 100644
index 278b197..0000000
Binary files a/app/twitter-image.png and /dev/null differ
diff --git a/auth.config.ts b/auth.config.ts
deleted file mode 100644
index 6e74c18..0000000
--- a/auth.config.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import type { NextAuthConfig } from 'next-auth'
-
-export const authConfig = {
- secret: process.env.AUTH_SECRET,
- pages: {
- signIn: '/login',
- newUser: '/signup'
- },
- callbacks: {
- async authorized({ auth, request: { nextUrl } }) {
- const isLoggedIn = !!auth?.user
- const isOnLoginPage = nextUrl.pathname.startsWith('/login')
- const isOnSignupPage = nextUrl.pathname.startsWith('/signup')
-
- if (isLoggedIn) {
- if (isOnLoginPage || isOnSignupPage) {
- return Response.redirect(new URL('/', nextUrl))
- }
- }
-
- return true
- },
- async jwt({ token, user }) {
- if (user) {
- token = { ...token, id: user.id }
- }
-
- return token
- },
- async session({ session, token }) {
- if (token) {
- const { id } = token as { id: string }
- const { user } = session
-
- session = { ...session, user: { ...user, id } }
- }
-
- return session
- }
- },
- providers: []
-} satisfies NextAuthConfig
diff --git a/auth.ts b/auth.ts
deleted file mode 100644
index 7542992..0000000
--- a/auth.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import NextAuth from 'next-auth'
-import Credentials from 'next-auth/providers/credentials'
-import { authConfig } from './auth.config'
-import { z } from 'zod'
-import { getStringFromBuffer } from './lib/utils'
-import { getUser } from './app/login/actions'
-
-export const { auth, signIn, signOut } = NextAuth({
- ...authConfig,
- providers: [
- Credentials({
- async authorize(credentials) {
- const parsedCredentials = z
- .object({
- email: z.string().email(),
- password: z.string().min(6)
- })
- .safeParse(credentials)
-
- if (parsedCredentials.success) {
- const { email, password } = parsedCredentials.data
- const user = await getUser(email)
-
- if (!user) return null
-
- const encoder = new TextEncoder()
- const saltedPassword = encoder.encode(password + user.salt)
- const hashedPasswordBuffer = await crypto.subtle.digest(
- 'SHA-256',
- saltedPassword
- )
- const hashedPassword = getStringFromBuffer(hashedPasswordBuffer)
-
- if (hashedPassword === user.password) {
- return user
- } else {
- return null
- }
- }
-
- return null
- }
- })
- ]
-})
diff --git a/components.json b/components.json
index 58b812d..1e961d3 100644
--- a/components.json
+++ b/components.json
@@ -12,6 +12,9 @@
},
"aliases": {
"components": "@/components",
- "utils": "@/lib/utils"
+ "utils": "@/lib/utils",
+ "ui": "@/components/ui",
+ "lib": "@/lib",
+ "hooks": "@/hooks"
}
}
\ No newline at end of file
diff --git a/components/button-scroll-to-bottom.tsx b/components/button-scroll-to-bottom.tsx
deleted file mode 100644
index 3988e73..0000000
--- a/components/button-scroll-to-bottom.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-'use client'
-
-import * as React from 'react'
-
-import { cn } from '@/lib/utils'
-import { Button, type ButtonProps } from '@/components/ui/button'
-import { IconArrowDown } from '@/components/ui/icons'
-
-interface ButtonScrollToBottomProps extends ButtonProps {
- isAtBottom: boolean
- scrollToBottom: () => void
-}
-
-export function ButtonScrollToBottom({
- className,
- isAtBottom,
- scrollToBottom,
- ...props
-}: ButtonScrollToBottomProps) {
- return (
- scrollToBottom()}
- {...props}
- >
-
- Scroll to bottom
-
- )
-}
diff --git a/components/chat-history.tsx b/components/chat-history.tsx
deleted file mode 100644
index 88b6ff4..0000000
--- a/components/chat-history.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import * as React from 'react'
-
-import Link from 'next/link'
-
-import { cn } from '@/lib/utils'
-import { SidebarList } from '@/components/sidebar-list'
-import { buttonVariants } from '@/components/ui/button'
-import { IconPlus } from '@/components/ui/icons'
-
-interface ChatHistoryProps {
- userId?: string
-}
-
-export async function ChatHistory({ userId }: ChatHistoryProps) {
- return (
-
-
-
Chat History
-
-
-
-
- New Chat
-
-
-
- {Array.from({ length: 10 }).map((_, i) => (
-
- ))}
-
- }
- >
- {/* @ts-ignore */}
-
-
-
- )
-}
diff --git a/components/chat-list.tsx b/components/chat-list.tsx
deleted file mode 100644
index 80821a1..0000000
--- a/components/chat-list.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { Separator } from '@/components/ui/separator'
-import { UIState } from '@/lib/chat/actions'
-import { Session } from '@/lib/types'
-import Link from 'next/link'
-import { ExclamationTriangleIcon } from '@radix-ui/react-icons'
-
-export interface ChatList {
- messages: UIState
- session?: Session
- isShared: boolean
-}
-
-export function ChatList({ messages, session, isShared }: ChatList) {
- if (!messages.length) {
- return null
- }
-
- return (
-
- {!isShared && !session ? (
- <>
-
-
-
-
-
-
- Please{' '}
-
- log in
- {' '}
- or{' '}
-
- sign up
- {' '}
- to save and revisit your chat history!
-
-
-
-
- >
- ) : null}
-
- {messages.map((message, index) => (
-
- {message.display}
- {index < messages.length - 1 && }
-
- ))}
-
- )
-}
diff --git a/components/chat-message-actions.tsx b/components/chat-message-actions.tsx
deleted file mode 100644
index d4e4b40..0000000
--- a/components/chat-message-actions.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-'use client'
-
-import { type Message } from 'ai'
-
-import { Button } from '@/components/ui/button'
-import { IconCheck, IconCopy } from '@/components/ui/icons'
-import { useCopyToClipboard } from '@/lib/hooks/use-copy-to-clipboard'
-import { cn } from '@/lib/utils'
-
-interface ChatMessageActionsProps extends React.ComponentProps<'div'> {
- message: Message
-}
-
-export function ChatMessageActions({
- message,
- className,
- ...props
-}: ChatMessageActionsProps) {
- const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2000 })
-
- const onCopy = () => {
- if (isCopied) return
- copyToClipboard(message.content)
- }
-
- return (
-
-
- {isCopied ? : }
- Copy message
-
-
- )
-}
diff --git a/components/chat-message.tsx b/components/chat-message.tsx
deleted file mode 100644
index 32ecd78..0000000
--- a/components/chat-message.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-// Inspired by Chatbot-UI and modified to fit the needs of this project
-// @see https://github.com/mckaywrigley/chatbot-ui/blob/main/components/Chat/ChatMessage.tsx
-
-import { Message } from 'ai'
-import remarkGfm from 'remark-gfm'
-import remarkMath from 'remark-math'
-
-import { cn } from '@/lib/utils'
-import { CodeBlock } from '@/components/ui/codeblock'
-import { MemoizedReactMarkdown } from '@/components/markdown'
-import { IconOpenAI, IconUser } from '@/components/ui/icons'
-import { ChatMessageActions } from '@/components/chat-message-actions'
-
-export interface ChatMessageProps {
- message: Message
-}
-
-export function ChatMessage({ message, ...props }: ChatMessageProps) {
- return (
-
-
- {message.role === 'user' ? : }
-
-
- {children}
- },
- code({ node, inline, className, children, ...props }) {
- if (children.length) {
- if (children[0] == '▍') {
- return (
- ▍
- )
- }
-
- children[0] = (children[0] as string).replace('`▍`', '▍')
- }
-
- const match = /language-(\w+)/.exec(className || '')
-
- if (inline) {
- return (
-
- {children}
-
- )
- }
-
- return (
-
- )
- }
- }}
- >
- {message.content}
-
-
-
-
- )
-}
diff --git a/components/chat-panel.tsx b/components/chat-panel.tsx
deleted file mode 100644
index 48df7a7..0000000
--- a/components/chat-panel.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-import * as React from 'react'
-
-import { shareChat } from '@/app/actions'
-import { Button } from '@/components/ui/button'
-import { PromptForm } from '@/components/prompt-form'
-import { ButtonScrollToBottom } from '@/components/button-scroll-to-bottom'
-import { IconShare } from '@/components/ui/icons'
-import { FooterText } from '@/components/footer'
-import { ChatShareDialog } from '@/components/chat-share-dialog'
-import { useAIState, useActions, useUIState } from 'ai/rsc'
-import type { AI } from '@/lib/chat/actions'
-import { nanoid } from 'nanoid'
-import { UserMessage } from './stocks/message'
-
-export interface ChatPanelProps {
- id?: string
- title?: string
- input: string
- setInput: (value: string) => void
- isAtBottom: boolean
- scrollToBottom: () => void
-}
-
-export function ChatPanel({
- id,
- title,
- input,
- setInput,
- isAtBottom,
- scrollToBottom
-}: ChatPanelProps) {
- const [aiState] = useAIState()
- const [messages, setMessages] = useUIState()
- const { submitUserMessage } = useActions()
- const [shareDialogOpen, setShareDialogOpen] = React.useState(false)
-
- const exampleMessages = [
- {
- heading: 'What are the',
- subheading: 'trending memecoins today?',
- message: `What are the trending memecoins today?`
- },
- {
- heading: 'What is the price of',
- subheading: '$DOGE right now?',
- message: 'What is the price of $DOGE right now?'
- },
- {
- heading: 'I would like to buy',
- subheading: '42 $DOGE',
- message: `I would like to buy 42 $DOGE`
- },
- {
- heading: 'What are some',
- subheading: `recent events about $DOGE?`,
- message: `What are some recent events about $DOGE?`
- }
- ]
-
- return (
-
-
-
-
-
- {messages.length === 0 &&
- exampleMessages.map((example, index) => (
-
1 && 'hidden md:block'
- }`}
- onClick={async () => {
- setMessages(currentMessages => [
- ...currentMessages,
- {
- id: nanoid(),
- display:
{example.message}
- }
- ])
-
- const responseMessage = await submitUserMessage(
- example.message
- )
-
- setMessages(currentMessages => [
- ...currentMessages,
- responseMessage
- ])
- }}
- >
-
{example.heading}
-
- {example.subheading}
-
-
- ))}
-
-
- {messages?.length >= 2 ? (
-
-
- {id && title ? (
- <>
- setShareDialogOpen(true)}
- >
-
- Share
-
- setShareDialogOpen(false)}
- shareChat={shareChat}
- chat={{
- id,
- title,
- messages: aiState.messages
- }}
- />
- >
- ) : null}
-
-
- ) : null}
-
-
-
-
- )
-}
diff --git a/components/chat-share-dialog.tsx b/components/chat-share-dialog.tsx
deleted file mode 100644
index 2e5f8e2..0000000
--- a/components/chat-share-dialog.tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { type DialogProps } from '@radix-ui/react-dialog'
-import { toast } from 'sonner'
-
-import { ServerActionResult, type Chat } from '@/lib/types'
-import { Button } from '@/components/ui/button'
-import {
- Dialog,
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle
-} from '@/components/ui/dialog'
-import { IconSpinner } from '@/components/ui/icons'
-import { useCopyToClipboard } from '@/lib/hooks/use-copy-to-clipboard'
-
-interface ChatShareDialogProps extends DialogProps {
- chat: Pick
- shareChat: (id: string) => ServerActionResult
- onCopy: () => void
-}
-
-export function ChatShareDialog({
- chat,
- shareChat,
- onCopy,
- ...props
-}: ChatShareDialogProps) {
- const { copyToClipboard } = useCopyToClipboard({ timeout: 1000 })
- const [isSharePending, startShareTransition] = React.useTransition()
-
- const copyShareLink = React.useCallback(
- async (chat: Chat) => {
- if (!chat.sharePath) {
- return toast.error('Could not copy share link to clipboard')
- }
-
- const url = new URL(window.location.href)
- url.pathname = chat.sharePath
- copyToClipboard(url.toString())
- onCopy()
- toast.success('Share link copied to clipboard')
- },
- [copyToClipboard, onCopy]
- )
-
- return (
-
-
-
- Share link to chat
-
- Anyone with the URL will be able to view the shared chat.
-
-
-
-
{chat.title}
-
- {chat.messages.length} messages
-
-
-
- {
- // @ts-ignore
- startShareTransition(async () => {
- const result = await shareChat(chat.id)
-
- if (result && 'error' in result) {
- toast.error(result.error)
- return
- }
-
- copyShareLink(result)
- })
- }}
- >
- {isSharePending ? (
- <>
-
- Copying...
- >
- ) : (
- <>Copy link>
- )}
-
-
-
-
- )
-}
diff --git a/components/chat.tsx b/components/chat.tsx
deleted file mode 100644
index c43d42a..0000000
--- a/components/chat.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-'use client'
-
-import { cn } from '@/lib/utils'
-import { ChatList } from '@/components/chat-list'
-import { ChatPanel } from '@/components/chat-panel'
-import { EmptyScreen } from '@/components/empty-screen'
-import { useLocalStorage } from '@/lib/hooks/use-local-storage'
-import { useEffect, useState } from 'react'
-import { useUIState, useAIState } from 'ai/rsc'
-import { Message, Session } from '@/lib/types'
-import { usePathname, useRouter } from 'next/navigation'
-import { useScrollAnchor } from '@/lib/hooks/use-scroll-anchor'
-import { toast } from 'sonner'
-
-export interface ChatProps extends React.ComponentProps<'div'> {
- initialMessages?: Message[]
- id?: string
- session?: Session
- missingKeys: string[]
-}
-
-export function Chat({ id, className, session, missingKeys }: ChatProps) {
- const router = useRouter()
- const path = usePathname()
- const [input, setInput] = useState('')
- const [messages] = useUIState()
- const [aiState] = useAIState()
-
- const [_, setNewChatId] = useLocalStorage('newChatId', id)
-
- useEffect(() => {
- if (session?.user) {
- if (!path.includes('chat') && messages.length === 1) {
- window.history.replaceState({}, '', `/chat/${id}`)
- }
- }
- }, [id, path, session?.user, messages])
-
- useEffect(() => {
- const messagesLength = aiState.messages?.length
- if (messagesLength === 2) {
- router.refresh()
- }
- }, [aiState.messages, router])
-
- useEffect(() => {
- setNewChatId(id)
- })
-
- useEffect(() => {
- missingKeys.map(key => {
- toast.error(`Missing ${key} environment variable!`)
- })
- }, [missingKeys])
-
- const { messagesRef, scrollRef, visibilityRef, isAtBottom, scrollToBottom } =
- useScrollAnchor()
-
- return (
-
-
- {messages.length ? (
-
- ) : (
-
- )}
-
-
-
-
- )
-}
diff --git a/components/clear-history.tsx b/components/clear-history.tsx
deleted file mode 100644
index 69cf70e..0000000
--- a/components/clear-history.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { useRouter } from 'next/navigation'
-import { toast } from 'sonner'
-
-import { ServerActionResult } from '@/lib/types'
-import { Button } from '@/components/ui/button'
-import {
- AlertDialog,
- AlertDialogAction,
- AlertDialogCancel,
- AlertDialogContent,
- AlertDialogDescription,
- AlertDialogFooter,
- AlertDialogHeader,
- AlertDialogTitle,
- AlertDialogTrigger
-} from '@/components/ui/alert-dialog'
-import { IconSpinner } from '@/components/ui/icons'
-
-interface ClearHistoryProps {
- isEnabled: boolean
- clearChats: () => ServerActionResult
-}
-
-export function ClearHistory({
- isEnabled = false,
- clearChats
-}: ClearHistoryProps) {
- const [open, setOpen] = React.useState(false)
- const [isPending, startTransition] = React.useTransition()
- const router = useRouter()
-
- return (
-
-
-
- {isPending && }
- Clear history
-
-
-
-
- Are you absolutely sure?
-
- This will permanently delete your chat history and remove your data
- from our servers.
-
-
-
- Cancel
- {
- event.preventDefault()
- startTransition(async () => {
- const result = await clearChats()
- if (result && 'error' in result) {
- toast.error(result.error)
- return
- }
-
- setOpen(false)
- })
- }}
- >
- {isPending && }
- Delete
-
-
-
-
- )
-}
diff --git a/components/custom/auth-form.tsx b/components/custom/auth-form.tsx
new file mode 100644
index 0000000..08610ff
--- /dev/null
+++ b/components/custom/auth-form.tsx
@@ -0,0 +1,53 @@
+import { Input } from "../ui/input";
+import { Label } from "../ui/label";
+
+export function AuthForm({
+ action,
+ children,
+ defaultEmail = "",
+}: {
+ action: any;
+ children: React.ReactNode;
+ defaultEmail?: string;
+}) {
+ return (
+
+ );
+}
diff --git a/components/custom/chat.tsx b/components/custom/chat.tsx
new file mode 100644
index 0000000..bdd8424
--- /dev/null
+++ b/components/custom/chat.tsx
@@ -0,0 +1,74 @@
+"use client";
+
+import { Attachment, Message } from "ai";
+import { useChat } from "ai/react";
+import { useState } from "react";
+
+import { Message as PreviewMessage } from "@/components/custom/message";
+import { useScrollToBottom } from "@/components/custom/use-scroll-to-bottom";
+
+import { MultimodalInput } from "./multimodal-input";
+import { Overview } from "./overview";
+
+export function Chat({
+ id,
+ initialMessages,
+}: {
+ id: string;
+ initialMessages: Array;
+}) {
+ const { messages, handleSubmit, input, setInput, append, isLoading, stop } =
+ useChat({
+ body: { id },
+ initialMessages,
+ onFinish: () => {
+ window.history.replaceState({}, "", `/chat/${id}`);
+ },
+ });
+
+ const [messagesContainerRef, messagesEndRef] =
+ useScrollToBottom();
+
+ const [attachments, setAttachments] = useState>([]);
+
+ return (
+
+
+
+ {messages.length === 0 &&
}
+
+ {messages.map((message, index) => (
+
+ ))}
+
+
+
+
+
+
+ );
+}
diff --git a/components/custom/history.tsx b/components/custom/history.tsx
new file mode 100644
index 0000000..a0845b6
--- /dev/null
+++ b/components/custom/history.tsx
@@ -0,0 +1,241 @@
+"use client";
+
+import * as VisuallyHidden from "@radix-ui/react-visually-hidden";
+import cx from "classnames";
+import Link from "next/link";
+import { useParams, usePathname } from "next/navigation";
+import { User } from "next-auth";
+import { useEffect, useState } from "react";
+import { toast } from "sonner";
+import useSWR from "swr";
+
+import { Chat } from "@/db/schema";
+import { fetcher } from "@/lib/utils";
+
+import {
+ InfoIcon,
+ MenuIcon,
+ MoreHorizontalIcon,
+ PencilEditIcon,
+ TrashIcon,
+} from "./icons";
+import {
+ AlertDialog,
+ AlertDialogAction,
+ AlertDialogCancel,
+ AlertDialogContent,
+ AlertDialogDescription,
+ AlertDialogFooter,
+ AlertDialogHeader,
+ AlertDialogTitle,
+} from "../ui/alert-dialog";
+import { Button } from "../ui/button";
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "../ui/dropdown-menu";
+import {
+ Sheet,
+ SheetContent,
+ SheetDescription,
+ SheetHeader,
+ SheetTitle,
+} from "../ui/sheet";
+
+export const History = ({ user }: { user: User | undefined }) => {
+ const { id } = useParams();
+ const pathname = usePathname();
+
+ const [isHistoryVisible, setIsHistoryVisible] = useState(false);
+ const {
+ data: history,
+ isLoading,
+ mutate,
+ } = useSWR>(user ? "/api/history" : null, fetcher, {
+ fallbackData: [],
+ });
+
+ useEffect(() => {
+ mutate();
+ }, [pathname, mutate]);
+
+ const [deleteId, setDeleteId] = useState(null);
+ const [showDeleteDialog, setShowDeleteDialog] = useState(false);
+
+ const handleDelete = async () => {
+ const deletePromise = fetch(`/api/chat?id=${deleteId}`, {
+ method: "DELETE",
+ });
+
+ toast.promise(deletePromise, {
+ loading: "Deleting chat...",
+ success: () => {
+ mutate((history) => {
+ if (history) {
+ return history.filter((h) => h.id !== id);
+ }
+ });
+ return "Chat deleted successfully";
+ },
+ error: "Failed to delete chat",
+ });
+
+ setShowDeleteDialog(false);
+ };
+
+ return (
+ <>
+ {
+ setIsHistoryVisible(true);
+ }}
+ >
+
+
+
+ {
+ setIsHistoryVisible(state);
+ }}
+ >
+
+
+
+ History
+
+ {history === undefined ? "loading" : history.length} chats
+
+
+
+
+
+
+
History
+
+
+ {history === undefined ? "loading" : history.length} chats
+
+
+
+
+
+ {user && (
+
+
+ Start a new chat
+
+
+
+ )}
+
+
+ {!user ? (
+
+
+
Login to save and revisit previous chats!
+
+ ) : null}
+
+ {!isLoading && history?.length === 0 && user ? (
+
+ ) : null}
+
+ {isLoading && user ? (
+
+ {[44, 32, 28, 52].map((item) => (
+
+ ))}
+
+ ) : null}
+
+ {history &&
+ history.map((chat) => (
+
+
+
+ {chat.messages[0].content as string}
+
+
+
+
+
+
+
+
+
+
+
+ {
+ setDeleteId(chat.id);
+ setShowDeleteDialog(true);
+ }}
+ >
+
+ Delete
+
+
+
+
+
+ ))}
+
+
+
+
+
+
+
+
+ Are you absolutely sure?
+
+ This action cannot be undone. This will permanently delete your
+ chat and remove it from our servers.
+
+
+
+ Cancel
+
+ Continue
+
+
+
+
+ >
+ );
+};
diff --git a/components/custom/icons.tsx b/components/custom/icons.tsx
new file mode 100644
index 0000000..c267c88
--- /dev/null
+++ b/components/custom/icons.tsx
@@ -0,0 +1,611 @@
+export const BotIcon = () => {
+ return (
+
+
+
+ );
+};
+
+export const UserIcon = () => {
+ return (
+
+
+
+ );
+};
+
+export const AttachmentIcon = () => {
+ return (
+
+
+
+ );
+};
+
+export const VercelIcon = ({ size = 17 }) => {
+ return (
+
+
+
+ );
+};
+
+export const GitIcon = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export const BoxIcon = ({ size = 16 }: { size: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const HomeIcon = ({ size = 16 }: { size: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const GPSIcon = ({ size = 16 }: { size: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const InvoiceIcon = ({ size = 16 }: { size: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const LogoOpenAI = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const LogoGoogle = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+
+
+
+ );
+};
+
+export const LogoAnthropic = () => {
+ return (
+
+
+
+ );
+};
+
+export const RouteIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const FileIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const LoaderIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export const UploadIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const MenuIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const PencilEditIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const CheckedSquare = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const UncheckedSquare = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const MoreIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const TrashIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const InfoIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const ArrowUpIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const StopIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const PaperclipIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const MoreHorizontalIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
+
+export const MessageIcon = ({ size = 16 }: { size?: number }) => {
+ return (
+
+
+
+ );
+};
diff --git a/components/custom/markdown.tsx b/components/custom/markdown.tsx
new file mode 100644
index 0000000..df7e194
--- /dev/null
+++ b/components/custom/markdown.tsx
@@ -0,0 +1,78 @@
+import Link from "next/link";
+import React, { memo } from "react";
+import ReactMarkdown from "react-markdown";
+import remarkGfm from "remark-gfm";
+
+const NonMemoizedMarkdown = ({ children }: { children: string }) => {
+ const components = {
+ code: ({ node, inline, className, children, ...props }: any) => {
+ const match = /language-(\w+)/.exec(className || "");
+ return !inline && match ? (
+
+ {children}
+
+ ) : (
+
+ {children}
+
+ );
+ },
+ ol: ({ node, children, ...props }: any) => {
+ return (
+
+ {children}
+
+ );
+ },
+ li: ({ node, children, ...props }: any) => {
+ return (
+
+ {children}
+
+ );
+ },
+ ul: ({ node, children, ...props }: any) => {
+ return (
+
+ );
+ },
+ strong: ({ node, children, ...props }: any) => {
+ return (
+
+ {children}
+
+ );
+ },
+ a: ({ node, children, ...props }: any) => {
+ return (
+
+ {children}
+
+ );
+ },
+ };
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const Markdown = memo(
+ NonMemoizedMarkdown,
+ (prevProps, nextProps) => prevProps.children === nextProps.children,
+);
diff --git a/components/custom/message.tsx b/components/custom/message.tsx
new file mode 100644
index 0000000..ae17659
--- /dev/null
+++ b/components/custom/message.tsx
@@ -0,0 +1,76 @@
+"use client";
+
+import { Attachment, ToolInvocation } from "ai";
+import { motion } from "framer-motion";
+import { ReactNode } from "react";
+
+import { BotIcon, UserIcon } from "./icons";
+import { Markdown } from "./markdown";
+import { PreviewAttachment } from "./preview-attachment";
+import { Weather } from "./weather";
+
+export const Message = ({
+ role,
+ content,
+ toolInvocations,
+ attachments,
+}: {
+ role: string;
+ content: string | ReactNode;
+ toolInvocations: Array | undefined;
+ attachments?: Array;
+}) => {
+ return (
+
+
+ {role === "assistant" ? : }
+
+
+
+ {content && (
+
+ {content as string}
+
+ )}
+
+ {toolInvocations && (
+
+ {toolInvocations.map((toolInvocation) => {
+ const { toolName, toolCallId, state } = toolInvocation;
+
+ if (state === "result") {
+ const { result } = toolInvocation;
+
+ return (
+
+ {toolName === "getWeather" ? (
+
+ ) : null}
+
+ );
+ } else {
+ return (
+
+ {toolName === "getWeather" ? : null}
+
+ );
+ }
+ })}
+
+ )}
+
+ {attachments && (
+
+ {attachments.map((attachment) => (
+
+ ))}
+
+ )}
+
+
+ );
+};
diff --git a/components/custom/multimodal-input.tsx b/components/custom/multimodal-input.tsx
new file mode 100644
index 0000000..1503968
--- /dev/null
+++ b/components/custom/multimodal-input.tsx
@@ -0,0 +1,266 @@
+"use client";
+
+import { Attachment, ChatRequestOptions, CreateMessage, Message } from "ai";
+import { motion } from "framer-motion";
+import React, {
+ useRef,
+ useEffect,
+ useState,
+ useCallback,
+ Dispatch,
+ SetStateAction,
+ ChangeEvent,
+} from "react";
+import { toast } from "sonner";
+
+import { ArrowUpIcon, PaperclipIcon, StopIcon } from "./icons";
+import { PreviewAttachment } from "./preview-attachment";
+import { Button } from "../ui/button";
+import { Textarea } from "../ui/textarea";
+
+const suggestedActions = [
+ {
+ title: "What is",
+ label: "the meaning of life?",
+ action: "what is the meaning of life?",
+ },
+ {
+ title: "Why do",
+ label: "developers use Next.js?",
+ action: "why do developers use Next.js?",
+ },
+];
+
+export function MultimodalInput({
+ input,
+ setInput,
+ isLoading,
+ stop,
+ attachments,
+ setAttachments,
+ messages,
+ append,
+ handleSubmit,
+}: {
+ input: string;
+ setInput: (value: string) => void;
+ isLoading: boolean;
+ stop: () => void;
+ attachments: Array;
+ setAttachments: Dispatch>>;
+ messages: Array;
+ append: (
+ message: Message | CreateMessage,
+ chatRequestOptions?: ChatRequestOptions,
+ ) => Promise;
+ handleSubmit: (
+ event?: {
+ preventDefault?: () => void;
+ },
+ chatRequestOptions?: ChatRequestOptions,
+ ) => void;
+}) {
+ const textareaRef = useRef(null);
+
+ useEffect(() => {
+ if (textareaRef.current) {
+ adjustHeight();
+ }
+ }, []);
+
+ const adjustHeight = () => {
+ if (textareaRef.current) {
+ textareaRef.current.style.height = "auto";
+ textareaRef.current.style.height = `${textareaRef.current.scrollHeight + 2}px`;
+ }
+ };
+
+ const handleInput = (event: React.ChangeEvent) => {
+ setInput(event.target.value);
+ adjustHeight();
+ };
+
+ const fileInputRef = useRef(null);
+ const [uploadQueue, setUploadQueue] = useState>([]);
+
+ const submitForm = useCallback(() => {
+ handleSubmit(undefined, {
+ experimental_attachments: attachments,
+ });
+
+ setAttachments([]);
+ }, [attachments, handleSubmit, setAttachments]);
+
+ const uploadFile = async (file: File) => {
+ const formData = new FormData();
+ formData.append("file", file);
+
+ try {
+ const response = await fetch(`/api/files/upload`, {
+ method: "POST",
+ body: formData,
+ });
+
+ if (response.ok) {
+ const data = await response.json();
+ const { url, pathname, contentType } = data;
+
+ return {
+ url,
+ name: pathname,
+ contentType: contentType,
+ };
+ } else {
+ const { error } = await response.json();
+ toast.error(error);
+ }
+ } catch (error) {
+ toast.error("Failed to upload file, please try again!");
+ }
+ };
+
+ const handleFileChange = useCallback(
+ async (event: ChangeEvent) => {
+ const files = Array.from(event.target.files || []);
+
+ setUploadQueue(files.map((file) => file.name));
+
+ try {
+ const uploadPromises = files.map((file) => uploadFile(file));
+ const uploadedAttachments = await Promise.all(uploadPromises);
+ const successfullyUploadedAttachments = uploadedAttachments.filter(
+ (attachment) => attachment !== undefined,
+ );
+
+ setAttachments((currentAttachments) => [
+ ...currentAttachments,
+ ...successfullyUploadedAttachments,
+ ]);
+ } catch (error) {
+ console.error("Error uploading files!", error);
+ } finally {
+ setUploadQueue([]);
+ }
+ },
+ [setAttachments],
+ );
+
+ return (
+
+ {messages.length === 0 &&
+ attachments.length === 0 &&
+ uploadQueue.length === 0 && (
+
+ {suggestedActions.map((suggestedAction, index) => (
+ 1 ? "hidden sm:block" : "block"}
+ >
+ {
+ append({
+ role: "user",
+ content: suggestedAction.action,
+ });
+ }}
+ className="w-full text-left border border-zinc-200 dark:border-zinc-800 text-zinc-800 dark:text-zinc-300 rounded-lg p-2 text-sm hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors flex flex-col"
+ >
+ {suggestedAction.title}
+
+ {suggestedAction.label}
+
+
+
+ ))}
+
+ )}
+
+
+
+ {(attachments.length > 0 || uploadQueue.length > 0) && (
+
+ {attachments.map((attachment) => (
+
+ ))}
+
+ {uploadQueue.map((filename) => (
+
+ ))}
+
+ )}
+
+
+ );
+}
diff --git a/components/custom/navbar.tsx b/components/custom/navbar.tsx
new file mode 100644
index 0000000..452a1ae
--- /dev/null
+++ b/components/custom/navbar.tsx
@@ -0,0 +1,71 @@
+import Link from "next/link";
+
+import { auth, signOut } from "@/app/(auth)/auth";
+
+import { History } from "./history";
+import { ThemeToggle } from "./theme-toggle";
+import { Button } from "../ui/button";
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "../ui/dropdown-menu";
+
+export const Navbar = async () => {
+ let session = await auth();
+
+ return (
+ <>
+
+
+
+ {session ? (
+
+
+
+ {session.user?.email}
+
+
+
+
+
+
+
+
+
+
+
+ ) : (
+
+ Login
+
+ )}
+
+ >
+ );
+};
diff --git a/components/custom/overview.tsx b/components/custom/overview.tsx
new file mode 100644
index 0000000..379655a
--- /dev/null
+++ b/components/custom/overview.tsx
@@ -0,0 +1,45 @@
+import { motion } from "framer-motion";
+import Link from "next/link";
+
+import { LogoOpenAI, MessageIcon, VercelIcon } from "./icons";
+
+export const Overview = () => {
+ return (
+
+
+
+
+ +
+
+
+
+ This is an open source Chatbot template built with Next.js and the AI
+ SDK by Vercel. It uses the{" "}
+ streamText{" "}
+ function in the server and the{" "}
+ useChat hook
+ on the client to create a seamless chat experience.
+
+
+ {" "}
+ You can learn more about the AI SDK by visiting the{" "}
+
+ Docs
+
+ .
+
+
+
+ );
+};
diff --git a/components/custom/preview-attachment.tsx b/components/custom/preview-attachment.tsx
new file mode 100644
index 0000000..1c57326
--- /dev/null
+++ b/components/custom/preview-attachment.tsx
@@ -0,0 +1,44 @@
+import { Attachment } from "ai";
+
+import { LoaderIcon } from "./icons";
+
+export const PreviewAttachment = ({
+ attachment,
+ isUploading = false,
+}: {
+ attachment: Attachment;
+ isUploading?: boolean;
+}) => {
+ const { name, url, contentType } = attachment;
+
+ return (
+
+
+ {contentType ? (
+ contentType.startsWith("image") ? (
+ // NOTE: it is recommended to use next/image for images
+ // eslint-disable-next-line @next/next/no-img-element
+
+ ) : (
+
+ )
+ ) : (
+
+ )}
+
+ {isUploading && (
+
+
+
+ )}
+
+
+
{name}
+
+ );
+};
diff --git a/components/custom/submit-button.tsx b/components/custom/submit-button.tsx
new file mode 100644
index 0000000..3ef300b
--- /dev/null
+++ b/components/custom/submit-button.tsx
@@ -0,0 +1,29 @@
+"use client";
+
+import { useFormStatus } from "react-dom";
+
+import { LoaderIcon } from "@/components/custom/icons";
+
+import { Button } from "../ui/button";
+
+export function SubmitButton({ children }: { children: React.ReactNode }) {
+ const { pending } = useFormStatus();
+
+ return (
+
+ {children}
+ {pending && (
+
+
+
+ )}
+
+ {pending ? "Loading" : "Submit form"}
+
+
+ );
+}
diff --git a/components/custom/theme-provider.tsx b/components/custom/theme-provider.tsx
new file mode 100644
index 0000000..08c7e51
--- /dev/null
+++ b/components/custom/theme-provider.tsx
@@ -0,0 +1,9 @@
+"use client";
+
+import { ThemeProvider as NextThemesProvider } from "next-themes";
+import { type ThemeProviderProps } from "next-themes/dist/types";
+import * as React from "react";
+
+export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
+ return {children} ;
+}
diff --git a/components/custom/theme-toggle.tsx b/components/custom/theme-toggle.tsx
new file mode 100644
index 0000000..ab1dfd8
--- /dev/null
+++ b/components/custom/theme-toggle.tsx
@@ -0,0 +1,28 @@
+"use client";
+
+import { useTheme } from "next-themes";
+import { useEffect, useState } from "react";
+
+export function ThemeToggle() {
+ const { setTheme, theme } = useTheme();
+ const [mounted, setMounted] = useState(false);
+
+ useEffect(() => {
+ setMounted(true);
+ }, []);
+
+ if (!mounted) {
+ return null;
+ }
+
+ return (
+ {
+ setTheme(theme === "dark" ? "light" : "dark");
+ }}
+ >
+ {`Toggle ${theme === "light" ? "dark" : "light"} mode`}
+
+ );
+}
diff --git a/components/custom/use-scroll-to-bottom.ts b/components/custom/use-scroll-to-bottom.ts
new file mode 100644
index 0000000..44889f2
--- /dev/null
+++ b/components/custom/use-scroll-to-bottom.ts
@@ -0,0 +1,29 @@
+import { useEffect, useRef, RefObject } from "react";
+
+export function useScrollToBottom(): [
+ RefObject,
+ RefObject,
+] {
+ const containerRef = useRef(null);
+ const endRef = useRef(null);
+
+ useEffect(() => {
+ const container = containerRef.current;
+ const end = endRef.current;
+
+ if (container && end) {
+ const observer = new MutationObserver(() => {
+ end.scrollIntoView({ behavior: "instant", block: "end" });
+ });
+
+ observer.observe(container, {
+ childList: true,
+ subtree: true,
+ });
+
+ return () => observer.disconnect();
+ }
+ }, []);
+
+ return [containerRef, endRef];
+}
diff --git a/components/custom/weather.tsx b/components/custom/weather.tsx
new file mode 100644
index 0000000..fe8cde1
--- /dev/null
+++ b/components/custom/weather.tsx
@@ -0,0 +1,307 @@
+"use client";
+
+import cx from "classnames";
+import { addHours, format, isWithinInterval } from "date-fns";
+import { useEffect, useState } from "react";
+
+interface WeatherAtLocation {
+ latitude: number;
+ longitude: number;
+ generationtime_ms: number;
+ utc_offset_seconds: number;
+ timezone: string;
+ timezone_abbreviation: string;
+ elevation: number;
+ current_units: {
+ time: string;
+ interval: string;
+ temperature_2m: string;
+ };
+ current: {
+ time: string;
+ interval: number;
+ temperature_2m: number;
+ };
+ hourly_units: {
+ time: string;
+ temperature_2m: string;
+ };
+ hourly: {
+ time: string[];
+ temperature_2m: number[];
+ };
+ daily_units: {
+ time: string;
+ sunrise: string;
+ sunset: string;
+ };
+ daily: {
+ time: string[];
+ sunrise: string[];
+ sunset: string[];
+ };
+}
+
+const SAMPLE = {
+ latitude: 37.763283,
+ longitude: -122.41286,
+ generationtime_ms: 0.027894973754882812,
+ utc_offset_seconds: 0,
+ timezone: "GMT",
+ timezone_abbreviation: "GMT",
+ elevation: 18,
+ current_units: { time: "iso8601", interval: "seconds", temperature_2m: "°C" },
+ current: { time: "2024-10-07T19:30", interval: 900, temperature_2m: 29.3 },
+ hourly_units: { time: "iso8601", temperature_2m: "°C" },
+ hourly: {
+ time: [
+ "2024-10-07T00:00",
+ "2024-10-07T01:00",
+ "2024-10-07T02:00",
+ "2024-10-07T03:00",
+ "2024-10-07T04:00",
+ "2024-10-07T05:00",
+ "2024-10-07T06:00",
+ "2024-10-07T07:00",
+ "2024-10-07T08:00",
+ "2024-10-07T09:00",
+ "2024-10-07T10:00",
+ "2024-10-07T11:00",
+ "2024-10-07T12:00",
+ "2024-10-07T13:00",
+ "2024-10-07T14:00",
+ "2024-10-07T15:00",
+ "2024-10-07T16:00",
+ "2024-10-07T17:00",
+ "2024-10-07T18:00",
+ "2024-10-07T19:00",
+ "2024-10-07T20:00",
+ "2024-10-07T21:00",
+ "2024-10-07T22:00",
+ "2024-10-07T23:00",
+ "2024-10-08T00:00",
+ "2024-10-08T01:00",
+ "2024-10-08T02:00",
+ "2024-10-08T03:00",
+ "2024-10-08T04:00",
+ "2024-10-08T05:00",
+ "2024-10-08T06:00",
+ "2024-10-08T07:00",
+ "2024-10-08T08:00",
+ "2024-10-08T09:00",
+ "2024-10-08T10:00",
+ "2024-10-08T11:00",
+ "2024-10-08T12:00",
+ "2024-10-08T13:00",
+ "2024-10-08T14:00",
+ "2024-10-08T15:00",
+ "2024-10-08T16:00",
+ "2024-10-08T17:00",
+ "2024-10-08T18:00",
+ "2024-10-08T19:00",
+ "2024-10-08T20:00",
+ "2024-10-08T21:00",
+ "2024-10-08T22:00",
+ "2024-10-08T23:00",
+ "2024-10-09T00:00",
+ "2024-10-09T01:00",
+ "2024-10-09T02:00",
+ "2024-10-09T03:00",
+ "2024-10-09T04:00",
+ "2024-10-09T05:00",
+ "2024-10-09T06:00",
+ "2024-10-09T07:00",
+ "2024-10-09T08:00",
+ "2024-10-09T09:00",
+ "2024-10-09T10:00",
+ "2024-10-09T11:00",
+ "2024-10-09T12:00",
+ "2024-10-09T13:00",
+ "2024-10-09T14:00",
+ "2024-10-09T15:00",
+ "2024-10-09T16:00",
+ "2024-10-09T17:00",
+ "2024-10-09T18:00",
+ "2024-10-09T19:00",
+ "2024-10-09T20:00",
+ "2024-10-09T21:00",
+ "2024-10-09T22:00",
+ "2024-10-09T23:00",
+ "2024-10-10T00:00",
+ "2024-10-10T01:00",
+ "2024-10-10T02:00",
+ "2024-10-10T03:00",
+ "2024-10-10T04:00",
+ "2024-10-10T05:00",
+ "2024-10-10T06:00",
+ "2024-10-10T07:00",
+ "2024-10-10T08:00",
+ "2024-10-10T09:00",
+ "2024-10-10T10:00",
+ "2024-10-10T11:00",
+ "2024-10-10T12:00",
+ "2024-10-10T13:00",
+ "2024-10-10T14:00",
+ "2024-10-10T15:00",
+ "2024-10-10T16:00",
+ "2024-10-10T17:00",
+ "2024-10-10T18:00",
+ "2024-10-10T19:00",
+ "2024-10-10T20:00",
+ "2024-10-10T21:00",
+ "2024-10-10T22:00",
+ "2024-10-10T23:00",
+ "2024-10-11T00:00",
+ "2024-10-11T01:00",
+ "2024-10-11T02:00",
+ "2024-10-11T03:00",
+ ],
+ temperature_2m: [
+ 36.6, 32.8, 29.5, 28.6, 29.2, 28.2, 27.5, 26.6, 26.5, 26, 25, 23.5, 23.9,
+ 24.2, 22.9, 21, 24, 28.1, 31.4, 33.9, 32.1, 28.9, 26.9, 25.2, 23, 21.1,
+ 19.6, 18.6, 17.7, 16.8, 16.2, 15.5, 14.9, 14.4, 14.2, 13.7, 13.3, 12.9,
+ 12.5, 13.5, 15.8, 17.7, 19.6, 21, 21.9, 22.3, 22, 20.7, 18.9, 17.9, 17.3,
+ 17, 16.7, 16.2, 15.6, 15.2, 15, 15, 15.1, 14.8, 14.8, 14.9, 14.7, 14.8,
+ 15.3, 16.2, 17.9, 19.6, 20.5, 21.6, 21, 20.7, 19.3, 18.7, 18.4, 17.9,
+ 17.3, 17, 17, 16.8, 16.4, 16.2, 16, 15.8, 15.7, 15.4, 15.4, 16.1, 16.7,
+ 17, 18.6, 19, 19.5, 19.4, 18.5, 17.9, 17.5, 16.7, 16.3, 16.1,
+ ],
+ },
+ daily_units: {
+ time: "iso8601",
+ sunrise: "iso8601",
+ sunset: "iso8601",
+ },
+ daily: {
+ time: [
+ "2024-10-07",
+ "2024-10-08",
+ "2024-10-09",
+ "2024-10-10",
+ "2024-10-11",
+ ],
+ sunrise: [
+ "2024-10-07T07:15",
+ "2024-10-08T07:16",
+ "2024-10-09T07:17",
+ "2024-10-10T07:18",
+ "2024-10-11T07:19",
+ ],
+ sunset: [
+ "2024-10-07T19:00",
+ "2024-10-08T18:58",
+ "2024-10-09T18:57",
+ "2024-10-10T18:55",
+ "2024-10-11T18:54",
+ ],
+ },
+};
+
+export function Weather({
+ weatherAtLocation = SAMPLE,
+}: {
+ weatherAtLocation?: WeatherAtLocation;
+}) {
+ const currentHigh = Math.max(
+ ...weatherAtLocation.hourly.temperature_2m.slice(0, 24),
+ );
+ const currentLow = Math.min(
+ ...weatherAtLocation.hourly.temperature_2m.slice(0, 24),
+ );
+
+ const isDay = isWithinInterval(new Date(weatherAtLocation.current.time), {
+ start: new Date(weatherAtLocation.daily.sunrise[0]),
+ end: new Date(weatherAtLocation.daily.sunset[0]),
+ });
+
+ const [isMobile, setIsMobile] = useState(false);
+
+ useEffect(() => {
+ const handleResize = () => {
+ setIsMobile(window.innerWidth < 768);
+ };
+
+ handleResize();
+ window.addEventListener("resize", handleResize);
+
+ return () => window.removeEventListener("resize", handleResize);
+ }, []);
+
+ const hoursToShow = isMobile ? 5 : 6;
+
+ // Find the index of the current time or the next closest time
+ const currentTimeIndex = weatherAtLocation.hourly.time.findIndex(
+ (time) => new Date(time) >= new Date(weatherAtLocation.current.time),
+ );
+
+ // Slice the arrays to get the desired number of items
+ const displayTimes = weatherAtLocation.hourly.time.slice(
+ currentTimeIndex,
+ currentTimeIndex + hoursToShow,
+ );
+ const displayTemperatures = weatherAtLocation.hourly.temperature_2m.slice(
+ currentTimeIndex,
+ currentTimeIndex + hoursToShow,
+ );
+
+ return (
+
+
+
+
+
+ {weatherAtLocation.current.temperature_2m}
+ {weatherAtLocation.current_units.temperature_2m}
+
+
+
+
{`H:${currentHigh}° L:${currentLow}°`}
+
+
+
+ {displayTimes.map((time, index) => (
+
+
+ {format(new Date(time), "ha")}
+
+
+
+ {displayTemperatures[index]}
+ {weatherAtLocation.hourly_units.temperature_2m}
+
+
+ ))}
+
+
+ );
+}
diff --git a/components/empty-screen.tsx b/components/empty-screen.tsx
deleted file mode 100644
index 1bdbd59..0000000
--- a/components/empty-screen.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import { UseChatHelpers } from 'ai/react'
-
-import { Button } from '@/components/ui/button'
-import { ExternalLink } from '@/components/external-link'
-import { IconArrowRight } from '@/components/ui/icons'
-
-export function EmptyScreen() {
- return (
-
-
-
- Welcome to Next.js AI Chatbot!
-
-
- This is an open source AI chatbot app template built with{' '}
- Next.js , the{' '}
-
- Vercel AI SDK
-
- , and{' '}
-
- Vercel KV
-
- .
-
-
- It uses{' '}
-
- React Server Components
- {' '}
- to combine text with generative UI as output of the LLM. The UI state
- is synced through the SDK so the model is aware of your interactions
- as they happen.
-
-
-
- )
-}
diff --git a/components/external-link.tsx b/components/external-link.tsx
deleted file mode 100644
index ba6cc01..0000000
--- a/components/external-link.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-export function ExternalLink({
- href,
- children
-}: {
- href: string
- children: React.ReactNode
-}) {
- return (
-
- {children}
-
-
-
-
- )
-}
diff --git a/components/footer.tsx b/components/footer.tsx
deleted file mode 100644
index 5ed2157..0000000
--- a/components/footer.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import React from 'react'
-
-import { cn } from '@/lib/utils'
-import { ExternalLink } from '@/components/external-link'
-
-export function FooterText({ className, ...props }: React.ComponentProps<'p'>) {
- return (
-
- Open source AI chatbot built with{' '}
- Next.js and{' '}
-
- Vercel AI SDK
-
- .
-
- )
-}
diff --git a/components/header.tsx b/components/header.tsx
deleted file mode 100644
index 3b41a04..0000000
--- a/components/header.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-import * as React from 'react'
-import Link from 'next/link'
-
-import { cn } from '@/lib/utils'
-import { auth } from '@/auth'
-import { Button, buttonVariants } from '@/components/ui/button'
-import {
- IconGitHub,
- IconNextChat,
- IconSeparator,
- IconVercel
-} from '@/components/ui/icons'
-import { UserMenu } from '@/components/user-menu'
-import { SidebarMobile } from './sidebar-mobile'
-import { SidebarToggle } from './sidebar-toggle'
-import { ChatHistory } from './chat-history'
-import { Session } from '@/lib/types'
-
-async function UserOrLogin() {
- const session = (await auth()) as Session
- return (
- <>
- {session?.user ? (
- <>
-
-
-
-
- >
- ) : (
-
-
-
-
- )}
-
-
- {session?.user ? (
-
- ) : (
-
- Login
-
- )}
-
- >
- )
-}
-
-export function Header() {
- return (
-
- )
-}
diff --git a/components/login-button.tsx b/components/login-button.tsx
deleted file mode 100644
index ae8f842..0000000
--- a/components/login-button.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { signIn } from 'next-auth/react'
-
-import { cn } from '@/lib/utils'
-import { Button, type ButtonProps } from '@/components/ui/button'
-import { IconGitHub, IconSpinner } from '@/components/ui/icons'
-
-interface LoginButtonProps extends ButtonProps {
- showGithubIcon?: boolean
- text?: string
-}
-
-export function LoginButton({
- text = 'Login with GitHub',
- showGithubIcon = true,
- className,
- ...props
-}: LoginButtonProps) {
- const [isLoading, setIsLoading] = React.useState(false)
- return (
- {
- setIsLoading(true)
- // next-auth signIn() function doesn't work yet at Edge Runtime due to usage of BroadcastChannel
- signIn('github', { callbackUrl: `/` })
- }}
- disabled={isLoading}
- className={cn(className)}
- {...props}
- >
- {isLoading ? (
-
- ) : showGithubIcon ? (
-
- ) : null}
- {text}
-
- )
-}
diff --git a/components/login-form.tsx b/components/login-form.tsx
deleted file mode 100644
index 0a6910d..0000000
--- a/components/login-form.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-'use client'
-
-import { useFormState, useFormStatus } from 'react-dom'
-import { authenticate } from '@/app/login/actions'
-import Link from 'next/link'
-import { useEffect } from 'react'
-import { toast } from 'sonner'
-import { IconSpinner } from './ui/icons'
-import { getMessageFromCode } from '@/lib/utils'
-import { useRouter } from 'next/navigation'
-
-export default function LoginForm() {
- const router = useRouter()
- const [result, dispatch] = useFormState(authenticate, undefined)
-
- useEffect(() => {
- if (result) {
- if (result.type === 'error') {
- toast.error(getMessageFromCode(result.resultCode))
- } else {
- toast.success(getMessageFromCode(result.resultCode))
- router.refresh()
- }
- }
- }, [result, router])
-
- return (
-
- )
-}
-
-function LoginButton() {
- const { pending } = useFormStatus()
-
- return (
-
- {pending ? : 'Log in'}
-
- )
-}
diff --git a/components/markdown.tsx b/components/markdown.tsx
deleted file mode 100644
index d449146..0000000
--- a/components/markdown.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import { FC, memo } from 'react'
-import ReactMarkdown, { Options } from 'react-markdown'
-
-export const MemoizedReactMarkdown: FC = memo(
- ReactMarkdown,
- (prevProps, nextProps) =>
- prevProps.children === nextProps.children &&
- prevProps.className === nextProps.className
-)
diff --git a/components/prompt-form.tsx b/components/prompt-form.tsx
deleted file mode 100644
index 2271edb..0000000
--- a/components/prompt-form.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import Textarea from 'react-textarea-autosize'
-
-import { useActions, useUIState } from 'ai/rsc'
-
-import { UserMessage } from './stocks/message'
-import { type AI } from '@/lib/chat/actions'
-import { Button } from '@/components/ui/button'
-import { IconArrowElbow, IconPlus } from '@/components/ui/icons'
-import {
- Tooltip,
- TooltipContent,
- TooltipTrigger
-} from '@/components/ui/tooltip'
-import { useEnterSubmit } from '@/lib/hooks/use-enter-submit'
-import { nanoid } from 'nanoid'
-import { useRouter } from 'next/navigation'
-
-export function PromptForm({
- input,
- setInput
-}: {
- input: string
- setInput: (value: string) => void
-}) {
- const router = useRouter()
- const { formRef, onKeyDown } = useEnterSubmit()
- const inputRef = React.useRef(null)
- const { submitUserMessage } = useActions()
- const [_, setMessages] = useUIState()
-
- React.useEffect(() => {
- if (inputRef.current) {
- inputRef.current.focus()
- }
- }, [])
-
- return (
-
- )
-}
diff --git a/components/providers.tsx b/components/providers.tsx
deleted file mode 100644
index 0a8de4a..0000000
--- a/components/providers.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { ThemeProvider as NextThemesProvider } from 'next-themes'
-import { ThemeProviderProps } from 'next-themes/dist/types'
-import { SidebarProvider } from '@/lib/hooks/use-sidebar'
-import { TooltipProvider } from '@/components/ui/tooltip'
-
-export function Providers({ children, ...props }: ThemeProviderProps) {
- return (
-
-
- {children}
-
-
- )
-}
diff --git a/components/sidebar-actions.tsx b/components/sidebar-actions.tsx
deleted file mode 100644
index 4f90f2d..0000000
--- a/components/sidebar-actions.tsx
+++ /dev/null
@@ -1,125 +0,0 @@
-'use client'
-
-import { useRouter } from 'next/navigation'
-import * as React from 'react'
-import { toast } from 'sonner'
-
-import { ServerActionResult, type Chat } from '@/lib/types'
-import {
- AlertDialog,
- AlertDialogAction,
- AlertDialogCancel,
- AlertDialogContent,
- AlertDialogDescription,
- AlertDialogFooter,
- AlertDialogHeader,
- AlertDialogTitle
-} from '@/components/ui/alert-dialog'
-import { Button } from '@/components/ui/button'
-import { IconShare, IconSpinner, IconTrash } from '@/components/ui/icons'
-import { ChatShareDialog } from '@/components/chat-share-dialog'
-import {
- Tooltip,
- TooltipContent,
- TooltipTrigger
-} from '@/components/ui/tooltip'
-
-interface SidebarActionsProps {
- chat: Chat
- removeChat: (args: { id: string; path: string }) => ServerActionResult
- shareChat: (id: string) => ServerActionResult
-}
-
-export function SidebarActions({
- chat,
- removeChat,
- shareChat
-}: SidebarActionsProps) {
- const router = useRouter()
- const [deleteDialogOpen, setDeleteDialogOpen] = React.useState(false)
- const [shareDialogOpen, setShareDialogOpen] = React.useState(false)
- const [isRemovePending, startRemoveTransition] = React.useTransition()
-
- return (
- <>
-
-
-
- setShareDialogOpen(true)}
- >
-
- Share
-
-
- Share chat
-
-
-
- setDeleteDialogOpen(true)}
- >
-
- Delete
-
-
- Delete chat
-
-
- setShareDialogOpen(false)}
- />
-
-
-
- Are you absolutely sure?
-
- This will permanently delete your chat message and remove your
- data from our servers.
-
-
-
-
- Cancel
-
- {
- event.preventDefault()
- // @ts-ignore
- startRemoveTransition(async () => {
- const result = await removeChat({
- id: chat.id,
- path: chat.path
- })
-
- if (result && 'error' in result) {
- toast.error(result.error)
- return
- }
-
- setDeleteDialogOpen(false)
- router.refresh()
- router.push('/')
- toast.success('Chat deleted')
- })
- }}
- >
- {isRemovePending && }
- Delete
-
-
-
-
- >
- )
-}
diff --git a/components/sidebar-desktop.tsx b/components/sidebar-desktop.tsx
deleted file mode 100644
index 7bc0e19..0000000
--- a/components/sidebar-desktop.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Sidebar } from '@/components/sidebar'
-
-import { auth } from '@/auth'
-import { ChatHistory } from '@/components/chat-history'
-
-export async function SidebarDesktop() {
- const session = await auth()
-
- if (!session?.user?.id) {
- return null
- }
-
- return (
-
- {/* @ts-ignore */}
-
-
- )
-}
diff --git a/components/sidebar-footer.tsx b/components/sidebar-footer.tsx
deleted file mode 100644
index a2e18ea..0000000
--- a/components/sidebar-footer.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { cn } from '@/lib/utils'
-
-export function SidebarFooter({
- children,
- className,
- ...props
-}: React.ComponentProps<'div'>) {
- return (
-
- {children}
-
- )
-}
diff --git a/components/sidebar-item.tsx b/components/sidebar-item.tsx
deleted file mode 100644
index fc7020b..0000000
--- a/components/sidebar-item.tsx
+++ /dev/null
@@ -1,124 +0,0 @@
-'use client'
-
-import * as React from 'react'
-
-import Link from 'next/link'
-import { usePathname } from 'next/navigation'
-
-import { motion } from 'framer-motion'
-
-import { buttonVariants } from '@/components/ui/button'
-import { IconMessage, IconUsers } from '@/components/ui/icons'
-import {
- Tooltip,
- TooltipContent,
- TooltipTrigger
-} from '@/components/ui/tooltip'
-import { useLocalStorage } from '@/lib/hooks/use-local-storage'
-import { type Chat } from '@/lib/types'
-import { cn } from '@/lib/utils'
-
-interface SidebarItemProps {
- index: number
- chat: Chat
- children: React.ReactNode
-}
-
-export function SidebarItem({ index, chat, children }: SidebarItemProps) {
- const pathname = usePathname()
-
- const isActive = pathname === chat.path
- const [newChatId, setNewChatId] = useLocalStorage('newChatId', null)
- const shouldAnimate = index === 0 && isActive && newChatId
-
- if (!chat?.id) return null
-
- return (
-
-
- {chat.sharePath ? (
-
-
-
-
- This is a shared chat.
-
- ) : (
-
- )}
-
-
-
-
- {shouldAnimate ? (
- chat.title.split('').map((character, index) => (
- {
- if (index === chat.title.length - 1) {
- setNewChatId(null)
- }
- }}
- >
- {character}
-
- ))
- ) : (
- {chat.title}
- )}
-
-
-
- {isActive && {children}
}
-
- )
-}
diff --git a/components/sidebar-items.tsx b/components/sidebar-items.tsx
deleted file mode 100644
index 11cc7fc..0000000
--- a/components/sidebar-items.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-'use client'
-
-import { Chat } from '@/lib/types'
-import { AnimatePresence, motion } from 'framer-motion'
-
-import { removeChat, shareChat } from '@/app/actions'
-
-import { SidebarActions } from '@/components/sidebar-actions'
-import { SidebarItem } from '@/components/sidebar-item'
-
-interface SidebarItemsProps {
- chats?: Chat[]
-}
-
-export function SidebarItems({ chats }: SidebarItemsProps) {
- if (!chats?.length) return null
-
- return (
-
- {chats.map(
- (chat, index) =>
- chat && (
-
-
-
-
-
- )
- )}
-
- )
-}
diff --git a/components/sidebar-list.tsx b/components/sidebar-list.tsx
deleted file mode 100644
index 45c2f4a..0000000
--- a/components/sidebar-list.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import { clearChats, getChats } from '@/app/actions'
-import { ClearHistory } from '@/components/clear-history'
-import { SidebarItems } from '@/components/sidebar-items'
-import { ThemeToggle } from '@/components/theme-toggle'
-import { redirect } from 'next/navigation'
-import { cache } from 'react'
-
-interface SidebarListProps {
- userId?: string
- children?: React.ReactNode
-}
-
-const loadChats = cache(async (userId?: string) => {
- return await getChats(userId)
-})
-
-export async function SidebarList({ userId }: SidebarListProps) {
- const chats = await loadChats(userId)
-
- if (!chats || 'error' in chats) {
- redirect('/')
- } else {
- return (
-
-
- {chats?.length ? (
-
-
-
- ) : (
-
- )}
-
-
-
- 0} />
-
-
- )
- }
-}
diff --git a/components/sidebar-mobile.tsx b/components/sidebar-mobile.tsx
deleted file mode 100644
index 82f0aa5..0000000
--- a/components/sidebar-mobile.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-'use client'
-
-import { Sheet, SheetContent, SheetTrigger } from '@/components/ui/sheet'
-
-import { Sidebar } from '@/components/sidebar'
-import { Button } from '@/components/ui/button'
-
-import { IconSidebar } from '@/components/ui/icons'
-
-interface SidebarMobileProps {
- children: React.ReactNode
-}
-
-export function SidebarMobile({ children }: SidebarMobileProps) {
- return (
-
-
-
-
- Toggle Sidebar
-
-
-
- {children}
-
-
- )
-}
diff --git a/components/sidebar-toggle.tsx b/components/sidebar-toggle.tsx
deleted file mode 100644
index 6c75009..0000000
--- a/components/sidebar-toggle.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-'use client'
-
-import * as React from 'react'
-
-import { useSidebar } from '@/lib/hooks/use-sidebar'
-import { Button } from '@/components/ui/button'
-import { IconSidebar } from '@/components/ui/icons'
-
-export function SidebarToggle() {
- const { toggleSidebar } = useSidebar()
-
- return (
- {
- toggleSidebar()
- }}
- >
-
- Toggle Sidebar
-
- )
-}
diff --git a/components/sidebar.tsx b/components/sidebar.tsx
deleted file mode 100644
index 52dc5bd..0000000
--- a/components/sidebar.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-'use client'
-
-import * as React from 'react'
-
-import { useSidebar } from '@/lib/hooks/use-sidebar'
-import { cn } from '@/lib/utils'
-
-export interface SidebarProps extends React.ComponentProps<'div'> {}
-
-export function Sidebar({ className, children }: SidebarProps) {
- const { isSidebarOpen, isLoading } = useSidebar()
-
- return (
-
- {children}
-
- )
-}
diff --git a/components/signup-form.tsx b/components/signup-form.tsx
deleted file mode 100644
index f5b78a9..0000000
--- a/components/signup-form.tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-'use client'
-
-import { useFormState, useFormStatus } from 'react-dom'
-import { signup } from '@/app/signup/actions'
-import Link from 'next/link'
-import { useEffect } from 'react'
-import { toast } from 'sonner'
-import { IconSpinner } from './ui/icons'
-import { getMessageFromCode } from '@/lib/utils'
-import { useRouter } from 'next/navigation'
-
-export default function SignupForm() {
- const router = useRouter()
- const [result, dispatch] = useFormState(signup, undefined)
-
- useEffect(() => {
- if (result) {
- if (result.type === 'error') {
- toast.error(getMessageFromCode(result.resultCode))
- } else {
- toast.success(getMessageFromCode(result.resultCode))
- router.refresh()
- }
- }
- }, [result, router])
-
- return (
-
-
-
Sign up for an account!
-
-
-
-
-
- Already have an account?
- Log in
-
-
- )
-}
-
-function LoginButton() {
- const { pending } = useFormStatus()
-
- return (
-
- {pending ? : 'Create account'}
-
- )
-}
diff --git a/components/stocks/events-skeleton.tsx b/components/stocks/events-skeleton.tsx
deleted file mode 100644
index 74515cb..0000000
--- a/components/stocks/events-skeleton.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-const placeholderEvents = [
- {
- date: '2022-10-01',
- headline: 'NVIDIA releases new AI-powered graphics card',
- description:
- 'NVIDIA unveils the latest graphics card infused with AI capabilities, revolutionizing gaming and rendering experiences.'
- }
-]
-
-export const EventsSkeleton = () => {
- return (
-
- {placeholderEvents.map(event => (
-
-
- {event.date}
-
-
- {event.headline}
-
-
- {event.description.slice(0, 70)}...
-
-
- ))}
-
- )
-}
diff --git a/components/stocks/events.tsx b/components/stocks/events.tsx
deleted file mode 100644
index eebf763..0000000
--- a/components/stocks/events.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { format, parseISO } from 'lib/utils'
-
-interface Event {
- date: string
- headline: string
- description: string
-}
-
-export function Events({ props: events }: { props: Event[] }) {
- return (
-
- {events.map(event => (
-
-
- {format(parseISO(event.date), 'dd LLL, yyyy')}
-
-
- {event.headline}
-
-
- {event.description.slice(0, 70)}...
-
-
- ))}
-
- )
-}
diff --git a/components/stocks/index.tsx b/components/stocks/index.tsx
deleted file mode 100644
index 13dedbe..0000000
--- a/components/stocks/index.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-'use client'
-
-import dynamic from 'next/dynamic'
-import { StockSkeleton } from './stock-skeleton'
-import { StocksSkeleton } from './stocks-skeleton'
-import { EventsSkeleton } from './events-skeleton'
-
-export { spinner } from './spinner'
-export { BotCard, BotMessage, SystemMessage } from './message'
-
-const Stock = dynamic(() => import('./stock').then(mod => mod.Stock), {
- ssr: false,
- loading: () =>
-})
-
-const Purchase = dynamic(
- () => import('./stock-purchase').then(mod => mod.Purchase),
- {
- ssr: false,
- loading: () => (
-
- )
- }
-)
-
-const Stocks = dynamic(() => import('./stocks').then(mod => mod.Stocks), {
- ssr: false,
- loading: () =>
-})
-
-const Events = dynamic(() => import('./events').then(mod => mod.Events), {
- ssr: false,
- loading: () =>
-})
-
-export { Stock, Purchase, Stocks, Events }
diff --git a/components/stocks/message.tsx b/components/stocks/message.tsx
deleted file mode 100644
index 5c7e7ca..0000000
--- a/components/stocks/message.tsx
+++ /dev/null
@@ -1,134 +0,0 @@
-'use client'
-
-import { IconOpenAI, IconUser } from '@/components/ui/icons'
-import { cn } from '@/lib/utils'
-import { spinner } from './spinner'
-import { CodeBlock } from '../ui/codeblock'
-import { MemoizedReactMarkdown } from '../markdown'
-import remarkGfm from 'remark-gfm'
-import remarkMath from 'remark-math'
-import { StreamableValue } from 'ai/rsc'
-import { useStreamableText } from '@/lib/hooks/use-streamable-text'
-
-// Different types of message bubbles.
-
-export function UserMessage({ children }: { children: React.ReactNode }) {
- return (
-
- )
-}
-
-export function BotMessage({
- content,
- className
-}: {
- content: string | StreamableValue
- className?: string
-}) {
- const text = useStreamableText(content)
-
- return (
-
-
-
-
-
- {children}
- },
- code({ node, inline, className, children, ...props }) {
- if (children.length) {
- if (children[0] == '▍') {
- return (
- ▍
- )
- }
-
- children[0] = (children[0] as string).replace('`▍`', '▍')
- }
-
- const match = /language-(\w+)/.exec(className || '')
-
- if (inline) {
- return (
-
- {children}
-
- )
- }
-
- return (
-
- )
- }
- }}
- >
- {text}
-
-
-
- )
-}
-
-export function BotCard({
- children,
- showAvatar = true
-}: {
- children: React.ReactNode
- showAvatar?: boolean
-}) {
- return (
-
- )
-}
-
-export function SystemMessage({ children }: { children: React.ReactNode }) {
- return (
-
- )
-}
-
-export function SpinnerMessage() {
- return (
-
- )
-}
diff --git a/components/stocks/spinner.tsx b/components/stocks/spinner.tsx
deleted file mode 100644
index 8eab1d3..0000000
--- a/components/stocks/spinner.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-'use client'
-
-export const spinner = (
-
-
-
-)
diff --git a/components/stocks/stock-purchase.tsx b/components/stocks/stock-purchase.tsx
deleted file mode 100644
index 0bf922e..0000000
--- a/components/stocks/stock-purchase.tsx
+++ /dev/null
@@ -1,146 +0,0 @@
-'use client'
-
-import { useId, useState } from 'react'
-import { useActions, useAIState, useUIState } from 'ai/rsc'
-import { formatNumber } from '@/lib/utils'
-
-import type { AI } from '@/lib/chat/actions'
-
-interface Purchase {
- numberOfShares?: number
- symbol: string
- price: number
- status: 'requires_action' | 'completed' | 'expired'
-}
-
-export function Purchase({
- props: { numberOfShares, symbol, price, status = 'expired' }
-}: {
- props: Purchase
-}) {
- const [value, setValue] = useState(numberOfShares || 100)
- const [purchasingUI, setPurchasingUI] = useState(null)
- const [aiState, setAIState] = useAIState()
- const [, setMessages] = useUIState()
- const { confirmPurchase } = useActions()
-
- // Unique identifier for this UI component.
- const id = useId()
-
- // Whenever the slider changes, we need to update the local value state and the history
- // so LLM also knows what's going on.
- function onSliderChange(e: React.ChangeEvent) {
- const newValue = Number(e.target.value)
- setValue(newValue)
-
- // Insert a hidden history info to the list.
- const message = {
- role: 'system' as const,
- content: `[User has changed to purchase ${newValue} shares of ${name}. Total cost: $${(
- newValue * price
- ).toFixed(2)}]`,
-
- // Identifier of this UI component, so we don't insert it many times.
- id
- }
-
- // If last history state is already this info, update it. This is to avoid
- // adding every slider change to the history.
- if (aiState.messages[aiState.messages.length - 1]?.id === id) {
- setAIState({
- ...aiState,
- messages: [...aiState.messages.slice(0, -1), message]
- })
-
- return
- }
-
- // If it doesn't exist, append it to history.
- setAIState({ ...aiState, messages: [...aiState.messages, message] })
- }
-
- return (
-
-
- +1.23% ↑
-
-
{symbol}
-
${price}
- {purchasingUI ? (
-
{purchasingUI}
- ) : status === 'requires_action' ? (
- <>
-
-
Shares to purchase
-
-
- 10
-
-
- 100
-
-
- 500
-
-
- 1000
-
-
-
-
-
Total cost
-
-
- {value}
-
- shares
-
-
-
×
-
- ${price}
-
- per share
-
-
-
- = {formatNumber(value * price)}
-
-
-
-
-
{
- const response = await confirmPurchase(symbol, price, value)
- setPurchasingUI(response.purchasingUI)
-
- // Insert a new system message to the UI.
- setMessages((currentMessages: any) => [
- ...currentMessages,
- response.newMessage
- ])
- }}
- >
- Purchase
-
- >
- ) : status === 'completed' ? (
-
- You have successfully purchased {value} ${symbol}. Total cost:{' '}
- {formatNumber(value * price)}
-
- ) : status === 'expired' ? (
-
Your checkout session has expired!
- ) : null}
-
- )
-}
diff --git a/components/stocks/stock-skeleton.tsx b/components/stocks/stock-skeleton.tsx
deleted file mode 100644
index e7b7a93..0000000
--- a/components/stocks/stock-skeleton.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-export const StockSkeleton = () => {
- return (
-
-
- xxxxxxx
-
-
- xxxx
-
-
- xxxx
-
-
- xxxxxx xxx xx xxxx xx xxx
-
-
-
-
- )
-}
diff --git a/components/stocks/stock.tsx b/components/stocks/stock.tsx
deleted file mode 100644
index e895357..0000000
--- a/components/stocks/stock.tsx
+++ /dev/null
@@ -1,243 +0,0 @@
-'use client'
-
-import { useState, useRef, useEffect, useId } from 'react'
-import { subMonths, format } from 'lib/utils'
-import { useAIState } from 'ai/rsc'
-
-interface Stock {
- symbol: string
- price: number
- delta: number
-}
-
-function scaleLinear(domain: [number, number], range: [number, number]) {
- const [d0, d1] = domain
- const [r0, r1] = range
-
- return function scale(value: number): number {
- return r0 + ((value - d0) / (d1 - d0)) * (r1 - r0)
- }
-}
-
-function useResizeObserver(
- ref: React.RefObject
-) {
- const [size, setSize] = useState({ width: 0, height: 0 })
-
- useEffect(() => {
- if (!ref.current) return
-
- const observer = new ResizeObserver(([entry]) => {
- if (entry.borderBoxSize && entry.borderBoxSize.length > 0) {
- setSize({
- width: entry.borderBoxSize[0].inlineSize,
- height: entry.borderBoxSize[0].blockSize
- })
- } else {
- // Fallback for browsers that don't support borderBoxSize
- const { width, height } = entry.target.getBoundingClientRect()
- setSize({ width, height })
- }
- })
-
- observer.observe(ref.current)
- return () => observer.disconnect()
- }, [ref])
-
- return size
-}
-
-export function Stock({ props: { symbol, price, delta } }: { props: Stock }) {
- const [aiState, setAIState] = useAIState()
- const id = useId()
-
- const [priceAtTime, setPriceAtTime] = useState({
- time: '00:00',
- value: price.toFixed(2),
- x: 0
- })
-
- const [startHighlight, setStartHighlight] = useState(0)
- const [endHighlight, setEndHighlight] = useState(0)
-
- const chartRef = useRef(null)
- const { width = 0 } = useResizeObserver(chartRef)
-
- const xToDate = scaleLinear(
- [0, width],
- [subMonths(new Date(), 6).getTime(), new Date().getTime()]
- )
-
- const xToValue = scaleLinear(
- [0, width],
- [price - price / 2, price + price / 2]
- )
-
- useEffect(() => {
- if (startHighlight && endHighlight) {
- const message = {
- id,
- role: 'system' as const,
- content: `[User has highlighted dates between between ${format(
- new Date(xToDate(startHighlight)),
- 'd LLL'
- )} and ${format(new Date(xToDate(endHighlight)), 'd LLL, yyyy')}`
- }
-
- if (aiState.messages[aiState.messages.length - 1]?.id === id) {
- setAIState({
- ...aiState,
- messages: [...aiState.messages.slice(0, -1), message]
- })
- } else {
- setAIState({
- ...aiState,
- messages: [...aiState.messages, message]
- })
- }
- }
- }, [startHighlight, endHighlight])
-
- return (
-
-
- {`${delta > 0 ? '+' : ''}${((delta / price) * 100).toFixed(2)}% ${
- delta > 0 ? '↑' : '↓'
- }`}
-
-
{symbol}
-
${price}
-
- Closed: Feb 27, 4:59 PM EST
-
-
-
{
- if (chartRef.current) {
- const { clientX } = event
- const { left } = chartRef.current.getBoundingClientRect()
-
- setStartHighlight(clientX - left)
- setEndHighlight(0)
-
- setPriceAtTime({
- time: format(new Date(xToDate(clientX)), 'dd LLL yy'),
- value: xToValue(clientX).toFixed(2),
- x: clientX - left
- })
- }
- }}
- onPointerUp={event => {
- if (chartRef.current) {
- const { clientX } = event
- const { left } = chartRef.current.getBoundingClientRect()
-
- setEndHighlight(clientX - left)
- }
- }}
- onPointerMove={event => {
- if (chartRef.current) {
- const { clientX } = event
- const { left } = chartRef.current.getBoundingClientRect()
-
- setPriceAtTime({
- time: format(new Date(xToDate(clientX)), 'dd LLL yy'),
- value: xToValue(clientX).toFixed(2),
- x: clientX - left
- })
- }
- }}
- onPointerLeave={() => {
- setPriceAtTime({
- time: '00:00',
- value: price.toFixed(2),
- x: 0
- })
- }}
- ref={chartRef}
- >
- {priceAtTime.x > 0 ? (
-
-
${priceAtTime.value}
-
- {priceAtTime.time}
-
-
- ) : null}
-
- {startHighlight ? (
-
- ) : null}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )
-}
diff --git a/components/stocks/stocks-skeleton.tsx b/components/stocks/stocks-skeleton.tsx
deleted file mode 100644
index d19ed69..0000000
--- a/components/stocks/stocks-skeleton.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-export const StocksSkeleton = () => {
- return (
-
- )
-}
diff --git a/components/stocks/stocks.tsx b/components/stocks/stocks.tsx
deleted file mode 100644
index a5f7826..0000000
--- a/components/stocks/stocks.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-'use client'
-
-import { useActions, useUIState } from 'ai/rsc'
-
-import type { AI } from '@/lib/chat/actions'
-
-interface Stock {
- symbol: string
- price: number
- delta: number
-}
-
-export function Stocks({ props: stocks }: { props: Stock[] }) {
- const [, setMessages] = useUIState()
- const { submitUserMessage } = useActions()
-
- return (
-
-
- {stocks.map(stock => (
-
{
- const response = await submitUserMessage(`View ${stock.symbol}`)
- setMessages(currentMessages => [...currentMessages, response])
- }}
- >
- 0 ? 'text-green-600' : 'text-red-600'
- } flex w-11 flex-row justify-center rounded-md bg-white/10 p-2`}
- >
- {stock.delta > 0 ? '↑' : '↓'}
-
-
-
{stock.symbol}
-
- ${stock.price.toExponential(1)}
-
-
-
-
0 ? 'text-green-600' : 'text-red-600'
- } bold text-right uppercase`}
- >
- {` ${((stock.delta / stock.price) * 100).toExponential(1)}%`}
-
-
0 ? 'text-green-700' : 'text-red-700'
- } text-right text-base`}
- >
- {stock.delta.toExponential(1)}
-
-
-
- ))}
-
-
- Note: Data and latency are simulated for illustrative purposes and
- should not be considered as financial advice.
-
-
- )
-}
diff --git a/components/tailwind-indicator.tsx b/components/tailwind-indicator.tsx
deleted file mode 100644
index 846faa9..0000000
--- a/components/tailwind-indicator.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-export function TailwindIndicator() {
- if (process.env.NODE_ENV === 'production') return null
-
- return (
-
-
xs
-
sm
-
md
-
lg
-
xl
-
2xl
-
- )
-}
diff --git a/components/theme-toggle.tsx b/components/theme-toggle.tsx
deleted file mode 100644
index 67d3f1a..0000000
--- a/components/theme-toggle.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { useTheme } from 'next-themes'
-
-import { Button } from '@/components/ui/button'
-import { IconMoon, IconSun } from '@/components/ui/icons'
-
-export function ThemeToggle() {
- const { setTheme, theme } = useTheme()
- const [_, startTransition] = React.useTransition()
-
- return (
- {
- startTransition(() => {
- setTheme(theme === 'light' ? 'dark' : 'light')
- })
- }}
- >
- {!theme ? null : theme === 'dark' ? (
-
- ) : (
-
- )}
- Toggle theme
-
- )
-}
diff --git a/components/ui/alert-dialog.tsx b/components/ui/alert-dialog.tsx
index 57760f2..91df250 100644
--- a/components/ui/alert-dialog.tsx
+++ b/components/ui/alert-dialog.tsx
@@ -1,16 +1,16 @@
-"use client"
+"use client";
-import * as React from "react"
-import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"
+import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
+import * as React from "react";
-import { cn } from "@/lib/utils"
-import { buttonVariants } from "@/components/ui/button"
+import { buttonVariants } from "@/components/ui/button";
+import { cn } from "@/lib/utils";
-const AlertDialog = AlertDialogPrimitive.Root
+const AlertDialog = AlertDialogPrimitive.Root;
-const AlertDialogTrigger = AlertDialogPrimitive.Trigger
+const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
-const AlertDialogPortal = AlertDialogPrimitive.Portal
+const AlertDialogPortal = AlertDialogPrimitive.Portal;
const AlertDialogOverlay = React.forwardRef<
React.ElementRef,
@@ -19,13 +19,13 @@ const AlertDialogOverlay = React.forwardRef<
-))
-AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName
+));
+AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
const AlertDialogContent = React.forwardRef<
React.ElementRef,
@@ -37,13 +37,13 @@ const AlertDialogContent = React.forwardRef<
ref={ref}
className={cn(
"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
- className
+ className,
)}
{...props}
/>
-))
-AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName
+));
+AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
const AlertDialogHeader = ({
className,
@@ -52,12 +52,12 @@ const AlertDialogHeader = ({
-)
-AlertDialogHeader.displayName = "AlertDialogHeader"
+);
+AlertDialogHeader.displayName = "AlertDialogHeader";
const AlertDialogFooter = ({
className,
@@ -66,12 +66,12 @@ const AlertDialogFooter = ({
-)
-AlertDialogFooter.displayName = "AlertDialogFooter"
+);
+AlertDialogFooter.displayName = "AlertDialogFooter";
const AlertDialogTitle = React.forwardRef<
React.ElementRef,
@@ -82,8 +82,8 @@ const AlertDialogTitle = React.forwardRef<
className={cn("text-lg font-semibold", className)}
{...props}
/>
-))
-AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName
+));
+AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
const AlertDialogDescription = React.forwardRef<
React.ElementRef,
@@ -94,9 +94,9 @@ const AlertDialogDescription = React.forwardRef<
className={cn("text-sm text-muted-foreground", className)}
{...props}
/>
-))
+));
AlertDialogDescription.displayName =
- AlertDialogPrimitive.Description.displayName
+ AlertDialogPrimitive.Description.displayName;
const AlertDialogAction = React.forwardRef<
React.ElementRef,
@@ -107,8 +107,8 @@ const AlertDialogAction = React.forwardRef<
className={cn(buttonVariants(), className)}
{...props}
/>
-))
-AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName
+));
+AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
const AlertDialogCancel = React.forwardRef<
React.ElementRef,
@@ -119,12 +119,12 @@ const AlertDialogCancel = React.forwardRef<
className={cn(
buttonVariants({ variant: "outline" }),
"mt-2 sm:mt-0",
- className
+ className,
)}
{...props}
/>
-))
-AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName
+));
+AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
export {
AlertDialog,
@@ -138,4 +138,4 @@ export {
AlertDialogDescription,
AlertDialogAction,
AlertDialogCancel,
-}
+};
diff --git a/components/ui/badge.tsx b/components/ui/badge.tsx
deleted file mode 100644
index e87d62b..0000000
--- a/components/ui/badge.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import * as React from "react"
-import { cva, type VariantProps } from "class-variance-authority"
-
-import { cn } from "@/lib/utils"
-
-const badgeVariants = cva(
- "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
- {
- variants: {
- variant: {
- default:
- "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",
- secondary:
- "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
- destructive:
- "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",
- outline: "text-foreground",
- },
- },
- defaultVariants: {
- variant: "default",
- },
- }
-)
-
-export interface BadgeProps
- extends React.HTMLAttributes,
- VariantProps {}
-
-function Badge({ className, variant, ...props }: BadgeProps) {
- return (
-
- )
-}
-
-export { Badge, badgeVariants }
diff --git a/components/ui/button.tsx b/components/ui/button.tsx
index 547ae6e..0270f64 100644
--- a/components/ui/button.tsx
+++ b/components/ui/button.tsx
@@ -1,36 +1,36 @@
-import * as React from 'react'
-import { Slot } from '@radix-ui/react-slot'
-import { cva, type VariantProps } from 'class-variance-authority'
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { cva, type VariantProps } from "class-variance-authority"
-import { cn } from '@/lib/utils'
+import { cn } from "@/lib/utils"
const buttonVariants = cva(
- 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
{
variants: {
variant: {
default:
- 'bg-primary text-primary-foreground shadow hover:bg-primary/90',
+ "bg-primary text-primary-foreground shadow hover:bg-primary/90",
destructive:
- 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',
+ "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
outline:
- 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',
+ "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
secondary:
- 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',
- ghost: 'hover:bg-accent hover:text-accent-foreground',
- link: 'text-primary underline-offset-4 hover:underline'
+ "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
+ ghost: "hover:bg-accent hover:text-accent-foreground",
+ link: "text-primary underline-offset-4 hover:underline",
},
size: {
- default: 'h-9 px-4 py-2',
- sm: 'h-8 rounded-md px-3 text-xs',
- lg: 'h-10 rounded-md px-8',
- icon: 'size-9'
- }
+ default: "h-9 px-4 py-2",
+ sm: "h-8 rounded-md px-3 text-xs",
+ lg: "h-10 rounded-md px-8",
+ icon: "h-9 w-9",
+ },
},
defaultVariants: {
- variant: 'default',
- size: 'default'
- }
+ variant: "default",
+ size: "default",
+ },
}
)
@@ -42,7 +42,7 @@ export interface ButtonProps
const Button = React.forwardRef(
({ className, variant, size, asChild = false, ...props }, ref) => {
- const Comp = asChild ? Slot : 'button'
+ const Comp = asChild ? Slot : "button"
return (
(
)
}
)
-Button.displayName = 'Button'
+Button.displayName = "Button"
export { Button, buttonVariants }
diff --git a/components/ui/codeblock.tsx b/components/ui/codeblock.tsx
deleted file mode 100644
index 1bde5ac..0000000
--- a/components/ui/codeblock.tsx
+++ /dev/null
@@ -1,148 +0,0 @@
-// Inspired by Chatbot-UI and modified to fit the needs of this project
-// @see https://github.com/mckaywrigley/chatbot-ui/blob/main/components/Markdown/CodeBlock.tsx
-
-'use client'
-
-import { FC, memo } from 'react'
-import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'
-import { coldarkDark } from 'react-syntax-highlighter/dist/cjs/styles/prism'
-
-import { useCopyToClipboard } from '@/lib/hooks/use-copy-to-clipboard'
-import { IconCheck, IconCopy, IconDownload } from '@/components/ui/icons'
-import { Button } from '@/components/ui/button'
-
-interface Props {
- language: string
- value: string
-}
-
-interface languageMap {
- [key: string]: string | undefined
-}
-
-export const programmingLanguages: languageMap = {
- javascript: '.js',
- python: '.py',
- java: '.java',
- c: '.c',
- cpp: '.cpp',
- 'c++': '.cpp',
- 'c#': '.cs',
- ruby: '.rb',
- php: '.php',
- swift: '.swift',
- 'objective-c': '.m',
- kotlin: '.kt',
- typescript: '.ts',
- go: '.go',
- perl: '.pl',
- rust: '.rs',
- scala: '.scala',
- haskell: '.hs',
- lua: '.lua',
- shell: '.sh',
- sql: '.sql',
- html: '.html',
- css: '.css'
- // add more file extensions here, make sure the key is same as language prop in CodeBlock.tsx component
-}
-
-export const generateRandomString = (length: number, lowercase = false) => {
- const chars = 'ABCDEFGHJKLMNPQRSTUVWXY3456789' // excluding similar looking characters like Z, 2, I, 1, O, 0
- let result = ''
- for (let i = 0; i < length; i++) {
- result += chars.charAt(Math.floor(Math.random() * chars.length))
- }
- return lowercase ? result.toLowerCase() : result
-}
-
-const CodeBlock: FC = memo(({ language, value }) => {
- const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2000 })
-
- const downloadAsFile = () => {
- if (typeof window === 'undefined') {
- return
- }
- const fileExtension = programmingLanguages[language] || '.file'
- const suggestedFileName = `file-${generateRandomString(
- 3,
- true
- )}${fileExtension}`
- const fileName = window.prompt('Enter file name' || '', suggestedFileName)
-
- if (!fileName) {
- // User pressed cancel on prompt.
- return
- }
-
- const blob = new Blob([value], { type: 'text/plain' })
- const url = URL.createObjectURL(blob)
- const link = document.createElement('a')
- link.download = fileName
- link.href = url
- link.style.display = 'none'
- document.body.appendChild(link)
- link.click()
- document.body.removeChild(link)
- URL.revokeObjectURL(url)
- }
-
- const onCopy = () => {
- if (isCopied) return
- copyToClipboard(value)
- }
-
- return (
-
-
-
{language}
-
-
-
- Download
-
-
- {isCopied ? : }
- Copy code
-
-
-
-
- {value}
-
-
- )
-})
-CodeBlock.displayName = 'CodeBlock'
-
-export { CodeBlock }
diff --git a/components/ui/dialog.tsx b/components/ui/dialog.tsx
deleted file mode 100644
index 5ad11c8..0000000
--- a/components/ui/dialog.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-"use client"
-
-import * as React from "react"
-import * as DialogPrimitive from "@radix-ui/react-dialog"
-import { Cross2Icon } from "@radix-ui/react-icons"
-
-import { cn } from "@/lib/utils"
-
-const Dialog = DialogPrimitive.Root
-
-const DialogTrigger = DialogPrimitive.Trigger
-
-const DialogPortal = DialogPrimitive.Portal
-
-const DialogClose = DialogPrimitive.Close
-
-const DialogOverlay = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
-
-const DialogContent = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, ...props }, ref) => (
-
-
-
- {children}
-
-
- Close
-
-
-
-))
-DialogContent.displayName = DialogPrimitive.Content.displayName
-
-const DialogHeader = ({
- className,
- ...props
-}: React.HTMLAttributes) => (
-
-)
-DialogHeader.displayName = "DialogHeader"
-
-const DialogFooter = ({
- className,
- ...props
-}: React.HTMLAttributes) => (
-
-)
-DialogFooter.displayName = "DialogFooter"
-
-const DialogTitle = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-DialogTitle.displayName = DialogPrimitive.Title.displayName
-
-const DialogDescription = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-DialogDescription.displayName = DialogPrimitive.Description.displayName
-
-export {
- Dialog,
- DialogPortal,
- DialogOverlay,
- DialogTrigger,
- DialogClose,
- DialogContent,
- DialogHeader,
- DialogFooter,
- DialogTitle,
- DialogDescription,
-}
diff --git a/components/ui/dropdown-menu.tsx b/components/ui/dropdown-menu.tsx
index 1ff35de..242b07a 100644
--- a/components/ui/dropdown-menu.tsx
+++ b/components/ui/dropdown-menu.tsx
@@ -38,7 +38,7 @@ const DropdownMenuSubTrigger = React.forwardRef<
{...props}
>
{children}
-
+
))
DropdownMenuSubTrigger.displayName =
@@ -110,9 +110,9 @@ const DropdownMenuCheckboxItem = React.forwardRef<
checked={checked}
{...props}
>
-
+
-
+
{children}
@@ -133,9 +133,9 @@ const DropdownMenuRadioItem = React.forwardRef<
)}
{...props}
>
-
+
-
+
{children}
diff --git a/components/ui/icons.tsx b/components/ui/icons.tsx
deleted file mode 100644
index 9d5e679..0000000
--- a/components/ui/icons.tsx
+++ /dev/null
@@ -1,507 +0,0 @@
-'use client'
-
-import * as React from 'react'
-
-import { cn } from '@/lib/utils'
-
-function IconNextChat({
- className,
- inverted,
- ...props
-}: React.ComponentProps<'svg'> & { inverted?: boolean }) {
- const id = React.useId()
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-function IconOpenAI({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
- OpenAI icon
-
-
- )
-}
-
-function IconVercel({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconGitHub({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
- GitHub
-
-
- )
-}
-
-function IconSeparator({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconArrowDown({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconArrowRight({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconUser({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconPlus({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconArrowElbow({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconSpinner({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconMessage({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconTrash({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconRefresh({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconStop({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconSidebar({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconMoon({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconSun({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconCopy({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconCheck({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconDownload({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconClose({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconEdit({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconShare({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconUsers({ className, ...props }: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconExternalLink({
- className,
- ...props
-}: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-function IconChevronUpDown({
- className,
- ...props
-}: React.ComponentProps<'svg'>) {
- return (
-
-
-
- )
-}
-
-export {
- IconEdit,
- IconNextChat,
- IconOpenAI,
- IconVercel,
- IconGitHub,
- IconSeparator,
- IconArrowDown,
- IconArrowRight,
- IconUser,
- IconPlus,
- IconArrowElbow,
- IconSpinner,
- IconMessage,
- IconTrash,
- IconRefresh,
- IconStop,
- IconSidebar,
- IconMoon,
- IconSun,
- IconCopy,
- IconCheck,
- IconDownload,
- IconClose,
- IconShare,
- IconUsers,
- IconExternalLink,
- IconChevronUpDown
-}
diff --git a/components/ui/input.tsx b/components/ui/input.tsx
index a92b8e0..5af26b2 100644
--- a/components/ui/input.tsx
+++ b/components/ui/input.tsx
@@ -11,7 +11,7 @@ const Input = React.forwardRef(
,
- React.ComponentPropsWithoutRef
->(({ className, children, ...props }, ref) => (
- span]:line-clamp-1",
- className
- )}
- {...props}
- >
- {children}
-
-
-
-
-))
-SelectTrigger.displayName = SelectPrimitive.Trigger.displayName
-
-const SelectScrollUpButton = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-
-
-))
-SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName
-
-const SelectScrollDownButton = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-
-
-))
-SelectScrollDownButton.displayName =
- SelectPrimitive.ScrollDownButton.displayName
-
-const SelectContent = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, position = "popper", ...props }, ref) => (
-
-
-
-
- {children}
-
-
-
-
-))
-SelectContent.displayName = SelectPrimitive.Content.displayName
-
-const SelectLabel = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-SelectLabel.displayName = SelectPrimitive.Label.displayName
-
-const SelectItem = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, ...props }, ref) => (
-
-
-
-
-
-
- {children}
-
-))
-SelectItem.displayName = SelectPrimitive.Item.displayName
-
-const SelectSeparator = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-))
-SelectSeparator.displayName = SelectPrimitive.Separator.displayName
-
-export {
- Select,
- SelectGroup,
- SelectValue,
- SelectTrigger,
- SelectContent,
- SelectLabel,
- SelectItem,
- SelectSeparator,
- SelectScrollUpButton,
- SelectScrollDownButton,
-}
diff --git a/components/ui/separator.tsx b/components/ui/separator.tsx
deleted file mode 100644
index 12d81c4..0000000
--- a/components/ui/separator.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-"use client"
-
-import * as React from "react"
-import * as SeparatorPrimitive from "@radix-ui/react-separator"
-
-import { cn } from "@/lib/utils"
-
-const Separator = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(
- (
- { className, orientation = "horizontal", decorative = true, ...props },
- ref
- ) => (
-
- )
-)
-Separator.displayName = SeparatorPrimitive.Root.displayName
-
-export { Separator }
diff --git a/components/ui/sheet.tsx b/components/ui/sheet.tsx
index a16275c..417e7e1 100644
--- a/components/ui/sheet.tsx
+++ b/components/ui/sheet.tsx
@@ -31,7 +31,7 @@ const SheetOverlay = React.forwardRef<
SheetOverlay.displayName = SheetPrimitive.Overlay.displayName
const sheetVariants = cva(
- "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
+ "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out",
{
variants: {
side: {
@@ -64,11 +64,11 @@ const SheetContent = React.forwardRef<
className={cn(sheetVariants({ side }), className)}
{...props}
>
- {children}
-
+
Close
+ {children}
))
diff --git a/components/ui/sonner.tsx b/components/ui/sonner.tsx
deleted file mode 100644
index 452f4d9..0000000
--- a/components/ui/sonner.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-"use client"
-
-import { useTheme } from "next-themes"
-import { Toaster as Sonner } from "sonner"
-
-type ToasterProps = React.ComponentProps
-
-const Toaster = ({ ...props }: ToasterProps) => {
- const { theme = "system" } = useTheme()
-
- return (
-
- )
-}
-
-export { Toaster }
diff --git a/components/ui/switch.tsx b/components/ui/switch.tsx
deleted file mode 100644
index 37d61e4..0000000
--- a/components/ui/switch.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-"use client"
-
-import * as React from "react"
-import * as SwitchPrimitives from "@radix-ui/react-switch"
-
-import { cn } from "@/lib/utils"
-
-const Switch = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-
-
-))
-Switch.displayName = SwitchPrimitives.Root.displayName
-
-export { Switch }
diff --git a/components/ui/tooltip.tsx b/components/ui/tooltip.tsx
deleted file mode 100644
index 9e74821..0000000
--- a/components/ui/tooltip.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-"use client"
-
-import * as React from "react"
-import * as TooltipPrimitive from "@radix-ui/react-tooltip"
-
-import { cn } from "@/lib/utils"
-
-const TooltipProvider = TooltipPrimitive.Provider
-
-const Tooltip = TooltipPrimitive.Root
-
-const TooltipTrigger = TooltipPrimitive.Trigger
-
-const TooltipContent = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, sideOffset = 4, ...props }, ref) => (
-
-))
-TooltipContent.displayName = TooltipPrimitive.Content.displayName
-
-export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
diff --git a/components/user-menu.tsx b/components/user-menu.tsx
deleted file mode 100644
index 3ad28f0..0000000
--- a/components/user-menu.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import { type Session } from '@/lib/types'
-
-import { Button } from '@/components/ui/button'
-import {
- DropdownMenu,
- DropdownMenuContent,
- DropdownMenuItem,
- DropdownMenuSeparator,
- DropdownMenuTrigger
-} from '@/components/ui/dropdown-menu'
-import { signOut } from '@/auth'
-
-export interface UserMenuProps {
- user: Session['user']
-}
-
-function getUserInitials(name: string) {
- const [firstName, lastName] = name.split(' ')
- return lastName ? `${firstName[0]}${lastName[0]}` : firstName.slice(0, 2)
-}
-
-export function UserMenu({ user }: UserMenuProps) {
- return (
-
-
-
-
-
- {getUserInitials(user.email)}
-
- {user.email}
-
-
-
-
- {user.email}
-
-
- {
- 'use server'
- await signOut()
- }}
- >
-
- Sign Out
-
-
-
-
-
- )
-}
diff --git a/db/migrate.ts b/db/migrate.ts
new file mode 100644
index 0000000..de88d3d
--- /dev/null
+++ b/db/migrate.ts
@@ -0,0 +1,32 @@
+import { config } from "dotenv";
+import { drizzle } from "drizzle-orm/postgres-js";
+import { migrate } from "drizzle-orm/postgres-js/migrator";
+import postgres from "postgres";
+
+config({
+ path: ".env.local",
+});
+
+const runMigrate = async () => {
+ if (!process.env.POSTGRES_URL) {
+ throw new Error("POSTGRES_URL is not defined");
+ }
+
+ const connection = postgres(process.env.POSTGRES_URL, { max: 1 });
+ const db = drizzle(connection);
+
+ console.log("⏳ Running migrations...");
+
+ const start = Date.now();
+ await migrate(db, { migrationsFolder: "./lib/drizzle" });
+ const end = Date.now();
+
+ console.log("✅ Migrations completed in", end - start, "ms");
+ process.exit(0);
+};
+
+runMigrate().catch((err) => {
+ console.error("❌ Migration failed");
+ console.error(err);
+ process.exit(1);
+});
diff --git a/db/queries.ts b/db/queries.ts
new file mode 100644
index 0000000..67f5516
--- /dev/null
+++ b/db/queries.ts
@@ -0,0 +1,100 @@
+"server-only";
+
+import { genSaltSync, hashSync } from "bcrypt-ts";
+import { desc, eq } from "drizzle-orm";
+import { drizzle } from "drizzle-orm/postgres-js";
+import postgres from "postgres";
+
+import { user, chat, User } from "./schema";
+
+// Optionally, if not using email/pass login, you can
+// use the Drizzle adapter for Auth.js / NextAuth
+// https://authjs.dev/reference/adapter/drizzle
+let client = postgres(`${process.env.POSTGRES_URL!}?sslmode=require`);
+let db = drizzle(client);
+
+export async function getUser(email: string): Promise> {
+ try {
+ return await db.select().from(user).where(eq(user.email, email));
+ } catch (error) {
+ console.error("Failed to get user from database");
+ throw error;
+ }
+}
+
+export async function createUser(email: string, password: string) {
+ let salt = genSaltSync(10);
+ let hash = hashSync(password, salt);
+
+ try {
+ return await db.insert(user).values({ email, password: hash });
+ } catch (error) {
+ console.error("Failed to create user in database");
+ throw error;
+ }
+}
+
+export async function saveChat({
+ id,
+ messages,
+ userId,
+}: {
+ id: string;
+ messages: any;
+ userId: string;
+}) {
+ try {
+ const selectedChats = await db.select().from(chat).where(eq(chat.id, id));
+
+ if (selectedChats.length > 0) {
+ return await db
+ .update(chat)
+ .set({
+ messages: JSON.stringify(messages),
+ })
+ .where(eq(chat.id, id));
+ }
+
+ return await db.insert(chat).values({
+ id,
+ createdAt: new Date(),
+ messages: JSON.stringify(messages),
+ userId,
+ });
+ } catch (error) {
+ console.error("Failed to save chat in database");
+ throw error;
+ }
+}
+
+export async function deleteChatById({ id }: { id: string }) {
+ try {
+ return await db.delete(chat).where(eq(chat.id, id));
+ } catch (error) {
+ console.error("Failed to delete chat by id from database");
+ throw error;
+ }
+}
+
+export async function getChatsByUserId({ id }: { id: string }) {
+ try {
+ return await db
+ .select()
+ .from(chat)
+ .where(eq(chat.userId, id))
+ .orderBy(desc(chat.createdAt));
+ } catch (error) {
+ console.error("Failed to get chats by user from database");
+ throw error;
+ }
+}
+
+export async function getChatById({ id }: { id: string }) {
+ try {
+ const [selectedChat] = await db.select().from(chat).where(eq(chat.id, id));
+ return selectedChat;
+ } catch (error) {
+ console.error("Failed to get chat by id from database");
+ throw error;
+ }
+}
diff --git a/db/schema.ts b/db/schema.ts
new file mode 100644
index 0000000..92d3195
--- /dev/null
+++ b/db/schema.ts
@@ -0,0 +1,24 @@
+import { Message } from "ai";
+import { InferSelectModel } from "drizzle-orm";
+import { pgTable, varchar, timestamp, json, uuid } from "drizzle-orm/pg-core";
+
+export const user = pgTable("User", {
+ id: uuid("id").primaryKey().notNull().defaultRandom(),
+ email: varchar("email", { length: 64 }).notNull(),
+ password: varchar("password", { length: 64 }),
+});
+
+export type User = InferSelectModel;
+
+export const chat = pgTable("Chat", {
+ id: uuid("id").primaryKey().notNull().defaultRandom(),
+ createdAt: timestamp("createdAt").notNull(),
+ messages: json("messages").notNull(),
+ userId: uuid("userId")
+ .notNull()
+ .references(() => user.id),
+});
+
+export type Chat = Omit, "messages"> & {
+ messages: Array;
+};
diff --git a/drizzle.config.ts b/drizzle.config.ts
new file mode 100644
index 0000000..336f0fb
--- /dev/null
+++ b/drizzle.config.ts
@@ -0,0 +1,15 @@
+import { config } from "dotenv";
+import { defineConfig } from "drizzle-kit";
+
+config({
+ path: ".env.local",
+});
+
+export default defineConfig({
+ schema: "./db/schema.ts",
+ out: "./lib/drizzle",
+ dialect: "postgresql",
+ dbCredentials: {
+ url: process.env.POSTGRES_URL!,
+ },
+});
diff --git a/lib/chat/actions.tsx b/lib/chat/actions.tsx
deleted file mode 100644
index 0aa4313..0000000
--- a/lib/chat/actions.tsx
+++ /dev/null
@@ -1,588 +0,0 @@
-import 'server-only'
-
-import {
- createAI,
- createStreamableUI,
- getMutableAIState,
- getAIState,
- streamUI,
- createStreamableValue
-} from 'ai/rsc'
-import { openai } from '@ai-sdk/openai'
-
-import {
- spinner,
- BotCard,
- BotMessage,
- SystemMessage,
- Stock,
- Purchase
-} from '@/components/stocks'
-
-import { z } from 'zod'
-import { EventsSkeleton } from '@/components/stocks/events-skeleton'
-import { Events } from '@/components/stocks/events'
-import { StocksSkeleton } from '@/components/stocks/stocks-skeleton'
-import { Stocks } from '@/components/stocks/stocks'
-import { StockSkeleton } from '@/components/stocks/stock-skeleton'
-import {
- formatNumber,
- runAsyncFnWithoutBlocking,
- sleep,
- nanoid
-} from '@/lib/utils'
-import { saveChat } from '@/app/actions'
-import { SpinnerMessage, UserMessage } from '@/components/stocks/message'
-import { Chat, Message } from '@/lib/types'
-import { auth } from '@/auth'
-
-async function confirmPurchase(symbol: string, price: number, amount: number) {
- 'use server'
-
- const aiState = getMutableAIState()
-
- const purchasing = createStreamableUI(
-
- {spinner}
-
- Purchasing {amount} ${symbol}...
-
-
- )
-
- const systemMessage = createStreamableUI(null)
-
- runAsyncFnWithoutBlocking(async () => {
- await sleep(1000)
-
- purchasing.update(
-
- {spinner}
-
- Purchasing {amount} ${symbol}... working on it...
-
-
- )
-
- await sleep(1000)
-
- purchasing.done(
-
-
- You have successfully purchased {amount} ${symbol}. Total cost:{' '}
- {formatNumber(amount * price)}
-
-
- )
-
- systemMessage.done(
-
- You have purchased {amount} shares of {symbol} at ${price}. Total cost ={' '}
- {formatNumber(amount * price)}.
-
- )
-
- aiState.done({
- ...aiState.get(),
- messages: [
- ...aiState.get().messages,
- {
- id: nanoid(),
- role: 'system',
- content: `[User has purchased ${amount} shares of ${symbol} at ${price}. Total cost = ${
- amount * price
- }]`
- }
- ]
- })
- })
-
- return {
- purchasingUI: purchasing.value,
- newMessage: {
- id: nanoid(),
- display: systemMessage.value
- }
- }
-}
-
-async function submitUserMessage(content: string) {
- 'use server'
-
- const aiState = getMutableAIState()
-
- aiState.update({
- ...aiState.get(),
- messages: [
- ...aiState.get().messages,
- {
- id: nanoid(),
- role: 'user',
- content
- }
- ]
- })
-
- let textStream: undefined | ReturnType>
- let textNode: undefined | React.ReactNode
-
- const result = await streamUI({
- model: openai('gpt-3.5-turbo'),
- initial: ,
- system: `\
- You are a stock trading conversation bot and you can help users buy stocks, step by step.
- You and the user can discuss stock prices and the user can adjust the amount of stocks they want to buy, or place an order, in the UI.
-
- Messages inside [] means that it's a UI element or a user event. For example:
- - "[Price of AAPL = 100]" means that an interface of the stock price of AAPL is shown to the user.
- - "[User has changed the amount of AAPL to 10]" means that the user has changed the amount of AAPL to 10 in the UI.
-
- If the user requests purchasing a stock, call \`show_stock_purchase_ui\` to show the purchase UI.
- If the user just wants the price, call \`show_stock_price\` to show the price.
- If you want to show trending stocks, call \`list_stocks\`.
- If you want to show events, call \`get_events\`.
- If the user wants to sell stock, or complete another impossible task, respond that you are a demo and cannot do that.
-
- Besides that, you can also chat with users and do some calculations if needed.`,
- messages: [
- ...aiState.get().messages.map((message: any) => ({
- role: message.role,
- content: message.content,
- name: message.name
- }))
- ],
- text: ({ content, done, delta }) => {
- if (!textStream) {
- textStream = createStreamableValue('')
- textNode =
- }
-
- if (done) {
- textStream.done()
- aiState.done({
- ...aiState.get(),
- messages: [
- ...aiState.get().messages,
- {
- id: nanoid(),
- role: 'assistant',
- content
- }
- ]
- })
- } else {
- textStream.update(delta)
- }
-
- return textNode
- },
- tools: {
- listStocks: {
- description: 'List three imaginary stocks that are trending.',
- parameters: z.object({
- stocks: z.array(
- z.object({
- symbol: z.string().describe('The symbol of the stock'),
- price: z.number().describe('The price of the stock'),
- delta: z.number().describe('The change in price of the stock')
- })
- )
- }),
- generate: async function* ({ stocks }) {
- yield (
-
-
-
- )
-
- await sleep(1000)
-
- const toolCallId = nanoid()
-
- aiState.done({
- ...aiState.get(),
- messages: [
- ...aiState.get().messages,
- {
- id: nanoid(),
- role: 'assistant',
- content: [
- {
- type: 'tool-call',
- toolName: 'listStocks',
- toolCallId,
- args: { stocks }
- }
- ]
- },
- {
- id: nanoid(),
- role: 'tool',
- content: [
- {
- type: 'tool-result',
- toolName: 'listStocks',
- toolCallId,
- result: stocks
- }
- ]
- }
- ]
- })
-
- return (
-
-
-
- )
- }
- },
- showStockPrice: {
- description:
- 'Get the current stock price of a given stock or currency. Use this to show the price to the user.',
- parameters: z.object({
- symbol: z
- .string()
- .describe(
- 'The name or symbol of the stock or currency. e.g. DOGE/AAPL/USD.'
- ),
- price: z.number().describe('The price of the stock.'),
- delta: z.number().describe('The change in price of the stock')
- }),
- generate: async function* ({ symbol, price, delta }) {
- yield (
-
-
-
- )
-
- await sleep(1000)
-
- const toolCallId = nanoid()
-
- aiState.done({
- ...aiState.get(),
- messages: [
- ...aiState.get().messages,
- {
- id: nanoid(),
- role: 'assistant',
- content: [
- {
- type: 'tool-call',
- toolName: 'showStockPrice',
- toolCallId,
- args: { symbol, price, delta }
- }
- ]
- },
- {
- id: nanoid(),
- role: 'tool',
- content: [
- {
- type: 'tool-result',
- toolName: 'showStockPrice',
- toolCallId,
- result: { symbol, price, delta }
- }
- ]
- }
- ]
- })
-
- return (
-
-
-
- )
- }
- },
- showStockPurchase: {
- description:
- 'Show price and the UI to purchase a stock or currency. Use this if the user wants to purchase a stock or currency.',
- parameters: z.object({
- symbol: z
- .string()
- .describe(
- 'The name or symbol of the stock or currency. e.g. DOGE/AAPL/USD.'
- ),
- price: z.number().describe('The price of the stock.'),
- numberOfShares: z
- .number()
- .optional()
- .describe(
- 'The **number of shares** for a stock or currency to purchase. Can be optional if the user did not specify it.'
- )
- }),
- generate: async function* ({ symbol, price, numberOfShares = 100 }) {
- const toolCallId = nanoid()
-
- if (numberOfShares <= 0 || numberOfShares > 1000) {
- aiState.done({
- ...aiState.get(),
- messages: [
- ...aiState.get().messages,
- {
- id: nanoid(),
- role: 'assistant',
- content: [
- {
- type: 'tool-call',
- toolName: 'showStockPurchase',
- toolCallId,
- args: { symbol, price, numberOfShares }
- }
- ]
- },
- {
- id: nanoid(),
- role: 'tool',
- content: [
- {
- type: 'tool-result',
- toolName: 'showStockPurchase',
- toolCallId,
- result: {
- symbol,
- price,
- numberOfShares,
- status: 'expired'
- }
- }
- ]
- },
- {
- id: nanoid(),
- role: 'system',
- content: `[User has selected an invalid amount]`
- }
- ]
- })
-
- return
- } else {
- aiState.done({
- ...aiState.get(),
- messages: [
- ...aiState.get().messages,
- {
- id: nanoid(),
- role: 'assistant',
- content: [
- {
- type: 'tool-call',
- toolName: 'showStockPurchase',
- toolCallId,
- args: { symbol, price, numberOfShares }
- }
- ]
- },
- {
- id: nanoid(),
- role: 'tool',
- content: [
- {
- type: 'tool-result',
- toolName: 'showStockPurchase',
- toolCallId,
- result: {
- symbol,
- price,
- numberOfShares
- }
- }
- ]
- }
- ]
- })
-
- return (
-
-
-
- )
- }
- }
- },
- getEvents: {
- description:
- 'List funny imaginary events between user highlighted dates that describe stock activity.',
- parameters: z.object({
- events: z.array(
- z.object({
- date: z
- .string()
- .describe('The date of the event, in ISO-8601 format'),
- headline: z.string().describe('The headline of the event'),
- description: z.string().describe('The description of the event')
- })
- )
- }),
- generate: async function* ({ events }) {
- yield (
-
-
-
- )
-
- await sleep(1000)
-
- const toolCallId = nanoid()
-
- aiState.done({
- ...aiState.get(),
- messages: [
- ...aiState.get().messages,
- {
- id: nanoid(),
- role: 'assistant',
- content: [
- {
- type: 'tool-call',
- toolName: 'getEvents',
- toolCallId,
- args: { events }
- }
- ]
- },
- {
- id: nanoid(),
- role: 'tool',
- content: [
- {
- type: 'tool-result',
- toolName: 'getEvents',
- toolCallId,
- result: events
- }
- ]
- }
- ]
- })
-
- return (
-
-
-
- )
- }
- }
- }
- })
-
- return {
- id: nanoid(),
- display: result.value
- }
-}
-
-export type AIState = {
- chatId: string
- messages: Message[]
-}
-
-export type UIState = {
- id: string
- display: React.ReactNode
-}[]
-
-export const AI = createAI({
- actions: {
- submitUserMessage,
- confirmPurchase
- },
- initialUIState: [],
- initialAIState: { chatId: nanoid(), messages: [] },
- onGetUIState: async () => {
- 'use server'
-
- const session = await auth()
-
- if (session && session.user) {
- const aiState = getAIState() as Chat
-
- if (aiState) {
- const uiState = getUIStateFromAIState(aiState)
- return uiState
- }
- } else {
- return
- }
- },
- onSetAIState: async ({ state, done }) => {
- 'use server'
-
- if (!done) return
-
- const session = await auth()
- if (!session || !session.user) return
-
- const { chatId, messages } = state
-
- const createdAt = new Date()
- const userId = session.user.id as string
- const path = `/chat/${chatId}`
-
- const firstMessageContent = messages[0].content as string
- const title = firstMessageContent.substring(0, 100)
-
- const chat: Chat = {
- id: chatId,
- title,
- userId,
- createdAt,
- messages,
- path
- }
-
- await saveChat(chat)
- }
-})
-
-export const getUIStateFromAIState = (aiState: Chat) => {
- return aiState.messages
- .filter(message => message.role !== 'system')
- .map((message, index) => ({
- id: `${aiState.chatId}-${index}`,
- display:
- message.role === 'tool' ? (
- message.content.map(tool => {
- return tool.toolName === 'listStocks' ? (
-
- {/* TODO: Infer types based on the tool result*/}
- {/* @ts-expect-error */}
-
-
- ) : tool.toolName === 'showStockPrice' ? (
-
- {/* @ts-expect-error */}
-
-
- ) : tool.toolName === 'showStockPurchase' ? (
-
- {/* @ts-expect-error */}
-
-
- ) : tool.toolName === 'getEvents' ? (
-
- {/* @ts-expect-error */}
-
-
- ) : null
- })
- ) : message.role === 'user' ? (
- {message.content as string}
- ) : message.role === 'assistant' &&
- typeof message.content === 'string' ? (
-
- ) : null
- }))
-}
diff --git a/lib/drizzle/0000_keen_devos.sql b/lib/drizzle/0000_keen_devos.sql
new file mode 100644
index 0000000..5e821af
--- /dev/null
+++ b/lib/drizzle/0000_keen_devos.sql
@@ -0,0 +1,18 @@
+CREATE TABLE IF NOT EXISTS "Chat" (
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
+ "createdAt" timestamp NOT NULL,
+ "messages" json NOT NULL,
+ "userId" uuid NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE IF NOT EXISTS "User" (
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
+ "email" varchar(64) NOT NULL,
+ "password" varchar(64)
+);
+--> statement-breakpoint
+DO $$ BEGIN
+ ALTER TABLE "Chat" ADD CONSTRAINT "Chat_userId_User_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE no action ON UPDATE no action;
+EXCEPTION
+ WHEN duplicate_object THEN null;
+END $$;
diff --git a/lib/drizzle/meta/0000_snapshot.json b/lib/drizzle/meta/0000_snapshot.json
new file mode 100644
index 0000000..4ac8f9e
--- /dev/null
+++ b/lib/drizzle/meta/0000_snapshot.json
@@ -0,0 +1,94 @@
+{
+ "id": "715ec9ec-6715-4d0f-9f6c-9b5c7f09827c",
+ "prevId": "00000000-0000-0000-0000-000000000000",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.Chat": {
+ "name": "Chat",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "createdAt": {
+ "name": "createdAt",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "messages": {
+ "name": "messages",
+ "type": "json",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "userId": {
+ "name": "userId",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "Chat_userId_User_id_fk": {
+ "name": "Chat_userId_User_id_fk",
+ "tableFrom": "Chat",
+ "tableTo": "User",
+ "columnsFrom": [
+ "userId"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "public.User": {
+ "name": "User",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "email": {
+ "name": "email",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "password": {
+ "name": "password",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/lib/drizzle/meta/_journal.json b/lib/drizzle/meta/_journal.json
new file mode 100644
index 0000000..f6fbe20
--- /dev/null
+++ b/lib/drizzle/meta/_journal.json
@@ -0,0 +1,13 @@
+{
+ "version": "7",
+ "dialect": "postgresql",
+ "entries": [
+ {
+ "idx": 0,
+ "version": "7",
+ "when": 1728598022383,
+ "tag": "0000_keen_devos",
+ "breakpoints": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/lib/hooks/use-copy-to-clipboard.tsx b/lib/hooks/use-copy-to-clipboard.tsx
deleted file mode 100644
index 62f7156..0000000
--- a/lib/hooks/use-copy-to-clipboard.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-'use client'
-
-import * as React from 'react'
-
-export interface useCopyToClipboardProps {
- timeout?: number
-}
-
-export function useCopyToClipboard({
- timeout = 2000
-}: useCopyToClipboardProps) {
- const [isCopied, setIsCopied] = React.useState(false)
-
- const copyToClipboard = (value: string) => {
- if (typeof window === 'undefined' || !navigator.clipboard?.writeText) {
- return
- }
-
- if (!value) {
- return
- }
-
- navigator.clipboard.writeText(value).then(() => {
- setIsCopied(true)
-
- setTimeout(() => {
- setIsCopied(false)
- }, timeout)
- })
- }
-
- return { isCopied, copyToClipboard }
-}
diff --git a/lib/hooks/use-enter-submit.tsx b/lib/hooks/use-enter-submit.tsx
deleted file mode 100644
index d66b2d3..0000000
--- a/lib/hooks/use-enter-submit.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { useRef, type RefObject } from 'react'
-
-export function useEnterSubmit(): {
- formRef: RefObject
- onKeyDown: (event: React.KeyboardEvent) => void
-} {
- const formRef = useRef(null)
-
- const handleKeyDown = (
- event: React.KeyboardEvent
- ): void => {
- if (
- event.key === 'Enter' &&
- !event.shiftKey &&
- !event.nativeEvent.isComposing
- ) {
- formRef.current?.requestSubmit()
- event.preventDefault()
- }
- }
-
- return { formRef, onKeyDown: handleKeyDown }
-}
diff --git a/lib/hooks/use-local-storage.ts b/lib/hooks/use-local-storage.ts
deleted file mode 100644
index 19f6b7e..0000000
--- a/lib/hooks/use-local-storage.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { useEffect, useState } from 'react'
-
-export const useLocalStorage = (
- key: string,
- initialValue: T
-): [T, (value: T) => void] => {
- const [storedValue, setStoredValue] = useState(initialValue)
-
- useEffect(() => {
- // Retrieve from localStorage
- const item = window.localStorage.getItem(key)
- if (item) {
- setStoredValue(JSON.parse(item))
- }
- }, [key])
-
- const setValue = (value: T) => {
- // Save state
- setStoredValue(value)
- // Save to localStorage
- window.localStorage.setItem(key, JSON.stringify(value))
- }
- return [storedValue, setValue]
-}
diff --git a/lib/hooks/use-scroll-anchor.tsx b/lib/hooks/use-scroll-anchor.tsx
deleted file mode 100644
index a524027..0000000
--- a/lib/hooks/use-scroll-anchor.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-import { useCallback, useEffect, useRef, useState } from 'react'
-
-export const useScrollAnchor = () => {
- const messagesRef = useRef(null)
- const scrollRef = useRef(null)
- const visibilityRef = useRef(null)
-
- const [isAtBottom, setIsAtBottom] = useState(true)
- const [isVisible, setIsVisible] = useState(false)
-
- const scrollToBottom = useCallback(() => {
- if (messagesRef.current) {
- messagesRef.current.scrollIntoView({
- block: 'end',
- behavior: 'smooth'
- })
- }
- }, [])
-
- useEffect(() => {
- if (messagesRef.current) {
- if (isAtBottom && !isVisible) {
- messagesRef.current.scrollIntoView({
- block: 'end'
- })
- }
- }
- }, [isAtBottom, isVisible])
-
- useEffect(() => {
- const { current } = scrollRef
-
- if (current) {
- const handleScroll = (event: Event) => {
- const target = event.target as HTMLDivElement
- const offset = 25
- const isAtBottom =
- target.scrollTop + target.clientHeight >= target.scrollHeight - offset
-
- setIsAtBottom(isAtBottom)
- }
-
- current.addEventListener('scroll', handleScroll, {
- passive: true
- })
-
- return () => {
- current.removeEventListener('scroll', handleScroll)
- }
- }
- }, [])
-
- useEffect(() => {
- if (visibilityRef.current) {
- let observer = new IntersectionObserver(
- entries => {
- entries.forEach(entry => {
- if (entry.isIntersecting) {
- setIsVisible(true)
- } else {
- setIsVisible(false)
- }
- })
- },
- {
- rootMargin: '0px 0px -150px 0px'
- }
- )
-
- observer.observe(visibilityRef.current)
-
- return () => {
- observer.disconnect()
- }
- }
- })
-
- return {
- messagesRef,
- scrollRef,
- visibilityRef,
- scrollToBottom,
- isAtBottom,
- isVisible
- }
-}
diff --git a/lib/hooks/use-sidebar.tsx b/lib/hooks/use-sidebar.tsx
deleted file mode 100644
index 4a52baf..0000000
--- a/lib/hooks/use-sidebar.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-'use client'
-
-import * as React from 'react'
-
-const LOCAL_STORAGE_KEY = 'sidebar'
-
-interface SidebarContext {
- isSidebarOpen: boolean
- toggleSidebar: () => void
- isLoading: boolean
-}
-
-const SidebarContext = React.createContext(
- undefined
-)
-
-export function useSidebar() {
- const context = React.useContext(SidebarContext)
- if (!context) {
- throw new Error('useSidebarContext must be used within a SidebarProvider')
- }
- return context
-}
-
-interface SidebarProviderProps {
- children: React.ReactNode
-}
-
-export function SidebarProvider({ children }: SidebarProviderProps) {
- const [isSidebarOpen, setSidebarOpen] = React.useState(true)
- const [isLoading, setLoading] = React.useState(true)
-
- React.useEffect(() => {
- const value = localStorage.getItem(LOCAL_STORAGE_KEY)
- if (value) {
- setSidebarOpen(JSON.parse(value))
- }
- setLoading(false)
- }, [])
-
- const toggleSidebar = () => {
- setSidebarOpen(value => {
- const newState = !value
- localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(newState))
- return newState
- })
- }
-
- if (isLoading) {
- return null
- }
-
- return (
-
- {children}
-
- )
-}
diff --git a/lib/hooks/use-streamable-text.ts b/lib/hooks/use-streamable-text.ts
deleted file mode 100644
index 1b301a3..0000000
--- a/lib/hooks/use-streamable-text.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { StreamableValue, readStreamableValue } from 'ai/rsc'
-import { useEffect, useState } from 'react'
-
-export const useStreamableText = (
- content: string | StreamableValue
-) => {
- const [rawContent, setRawContent] = useState(
- typeof content === 'string' ? content : ''
- )
-
- useEffect(() => {
- ;(async () => {
- if (typeof content === 'object') {
- let value = ''
- for await (const delta of readStreamableValue(content)) {
- if (typeof delta === 'string') {
- setRawContent((value = value + delta))
- }
- }
- }
- })()
- }, [content])
-
- return rawContent
-}
diff --git a/lib/types.ts b/lib/types.ts
deleted file mode 100644
index d892a0c..0000000
--- a/lib/types.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { CoreMessage } from 'ai'
-
-export type Message = CoreMessage & {
- id: string
-}
-
-export interface Chat extends Record {
- id: string
- title: string
- createdAt: Date
- userId: string
- path: string
- messages: Message[]
- sharePath?: string
-}
-
-export type ServerActionResult = Promise<
- | Result
- | {
- error: string
- }
->
-
-export interface Session {
- user: {
- id: string
- email: string
- }
-}
-
-export interface AuthResult {
- type: string
- message: string
-}
-
-export interface User extends Record {
- id: string
- email: string
- password: string
- salt: string
-}
diff --git a/lib/utils.ts b/lib/utils.ts
index 1117934..7e94004 100644
--- a/lib/utils.ts
+++ b/lib/utils.ts
@@ -1,134 +1,43 @@
-import { clsx, type ClassValue } from 'clsx'
-import { customAlphabet } from 'nanoid'
-import { twMerge } from 'tailwind-merge'
+import { clsx, type ClassValue } from "clsx";
+import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) {
- return twMerge(clsx(inputs))
+ return twMerge(clsx(inputs));
}
-export const nanoid = customAlphabet(
- '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
- 7
-) // 7-character random string
+interface ApplicationError extends Error {
+ info: string;
+ status: number;
+}
-export async function fetcher(
- input: RequestInfo,
- init?: RequestInit
-): Promise {
- const res = await fetch(input, init)
+export const fetcher = async (url: string) => {
+ const res = await fetch(url);
if (!res.ok) {
- const json = await res.json()
- if (json.error) {
- const error = new Error(json.error) as Error & {
- status: number
- }
- error.status = res.status
- throw error
- } else {
- throw new Error('An unexpected error occurred')
- }
+ const error = new Error(
+ "An error occurred while fetching the data.",
+ ) as ApplicationError;
+
+ error.info = await res.json();
+ error.status = res.status;
+
+ throw error;
}
- return res.json()
-}
+ return res.json();
+};
-export function formatDate(input: string | number | Date): string {
- const date = new Date(input)
- return date.toLocaleDateString('en-US', {
- month: 'long',
- day: 'numeric',
- year: 'numeric'
- })
-}
-
-export const formatNumber = (value: number) =>
- new Intl.NumberFormat('en-US', {
- style: 'currency',
- currency: 'USD'
- }).format(value)
-
-export const runAsyncFnWithoutBlocking = (
- fn: (...args: any) => Promise
-) => {
- fn()
-}
-
-export const sleep = (ms: number) =>
- new Promise(resolve => setTimeout(resolve, ms))
-
-export const getStringFromBuffer = (buffer: ArrayBuffer) =>
- Array.from(new Uint8Array(buffer))
- .map(b => b.toString(16).padStart(2, '0'))
- .join('')
-
-export enum ResultCode {
- InvalidCredentials = 'INVALID_CREDENTIALS',
- InvalidSubmission = 'INVALID_SUBMISSION',
- UserAlreadyExists = 'USER_ALREADY_EXISTS',
- UnknownError = 'UNKNOWN_ERROR',
- UserCreated = 'USER_CREATED',
- UserLoggedIn = 'USER_LOGGED_IN'
-}
-
-export const getMessageFromCode = (resultCode: string) => {
- switch (resultCode) {
- case ResultCode.InvalidCredentials:
- return 'Invalid credentials!'
- case ResultCode.InvalidSubmission:
- return 'Invalid submission, please try again!'
- case ResultCode.UserAlreadyExists:
- return 'User already exists, please log in!'
- case ResultCode.UserCreated:
- return 'User created, welcome!'
- case ResultCode.UnknownError:
- return 'Something went wrong, please try again!'
- case ResultCode.UserLoggedIn:
- return 'Logged in!'
+export function getLocalStorage(key: string) {
+ if (typeof window !== "undefined") {
+ return JSON.parse(localStorage.getItem(key) || "[]");
}
+ return [];
}
-export function format(date: Date, formatString: string) {
- const year = date.getFullYear()
- const month = date.getMonth()
- const day = date.getDate()
- const hours = String(date.getHours()).padStart(2, '0')
- const minutes = String(date.getMinutes()).padStart(2, '0')
- const seconds = String(date.getSeconds()).padStart(2, '0')
-
- const monthNames = [
- 'Jan',
- 'Feb',
- 'Mar',
- 'Apr',
- 'May',
- 'Jun',
- 'Jul',
- 'Aug',
- 'Sep',
- 'Oct',
- 'Nov',
- 'Dec'
- ]
-
- return formatString
- .replace('yyyy', year.toString())
- .replace('yy', String(year).slice(-2))
- .replace('LLL', monthNames[month])
- .replace('MM', String(month + 1).padStart(2, '0'))
- .replace('dd', String(day).padStart(2, '0'))
- .replace('d', day.toString())
- .replace('HH', hours)
- .replace('mm', minutes)
- .replace('ss', seconds)
-}
-
-export function parseISO(dateString: string) {
- return new Date(dateString)
-}
-
-export function subMonths(date: Date, amount: number) {
- const newDate: Date = new Date(date)
- newDate.setMonth(newDate.getMonth() - amount)
- return newDate
+export function generateUUID(): string {
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
+ const r = (Math.random() * 16) | 0;
+ const v = c === "x" ? r : (r & 0x3) | 0x8;
+ return v.toString(16);
+ });
}
diff --git a/middleware.ts b/middleware.ts
index e663a31..d247db8 100644
--- a/middleware.ts
+++ b/middleware.ts
@@ -1,8 +1,9 @@
-import NextAuth from 'next-auth'
-import { authConfig } from './auth.config'
+import NextAuth from "next-auth";
-export default NextAuth(authConfig).auth
+import { authConfig } from "@/app/(auth)/auth.config";
+
+export default NextAuth(authConfig).auth;
export const config = {
- matcher: ['/((?!api|_next/static|_next/image|.*\\.png$).*)']
-}
+ matcher: ["/", "/:id", "/api/:path*", "/login", "/register"],
+};
diff --git a/next-env.d.ts b/next-env.d.ts
index 4f11a03..40c3d68 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -2,4 +2,4 @@
///
// NOTE: This file should not be edited
-// see https://nextjs.org/docs/basic-features/typescript for more information.
+// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
diff --git a/next.config.js b/next.config.js
deleted file mode 100644
index 9b7d60b..0000000
--- a/next.config.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/** @type {import('next').NextConfig} */
-module.exports = {
- images: {
- remotePatterns: [
- {
- protocol: 'https',
- hostname: 'avatars.githubusercontent.com',
- port: '',
- pathname: '**'
- }
- ]
- }
-}
diff --git a/next.config.mjs b/next.config.mjs
new file mode 100644
index 0000000..ca017d7
--- /dev/null
+++ b/next.config.mjs
@@ -0,0 +1,9 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ experimental: {},
+ images: {
+ remotePatterns: [],
+ },
+};
+
+export default nextConfig;
diff --git a/package.json b/package.json
index 9f9fab6..a54cfcc 100644
--- a/package.json
+++ b/package.json
@@ -1,61 +1,70 @@
{
+ "name": "ai-chatbot",
+ "version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev --turbo",
- "build": "next build",
+ "build": "tsx db/migrate && next build",
"start": "next start",
- "type-check": "tsc --noEmit",
- "format:write": "prettier --write \"{app,lib,components}/**/*.{ts,tsx,mdx}\" --cache",
- "format:check": "prettier --check \"{app,lib,components}**/*.{ts,tsx,mdx}\" --cache"
+ "lint": "next lint"
},
"dependencies": {
- "@ai-sdk/openai": "^0.0.53",
- "@radix-ui/react-alert-dialog": "^1.1.1",
- "@radix-ui/react-dialog": "^1.1.1",
+ "@ai-sdk/openai": "^0.0.60",
+ "@radix-ui/react-alert-dialog": "^1.1.2",
+ "@radix-ui/react-dialog": "^1.1.2",
"@radix-ui/react-dropdown-menu": "^2.1.1",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-label": "^2.1.0",
- "@radix-ui/react-select": "^2.1.1",
- "@radix-ui/react-separator": "^1.1.0",
"@radix-ui/react-slot": "^1.1.0",
- "@radix-ui/react-switch": "^1.1.0",
"@radix-ui/react-tooltip": "^1.1.2",
+ "@radix-ui/react-visually-hidden": "^1.1.0",
"@vercel/analytics": "^1.3.1",
- "@vercel/kv": "^2.0.0",
- "ai": "^3.3.17",
+ "@vercel/blob": "^0.24.1",
+ "@vercel/postgres": "^0.10.0",
+ "ai": "3.4.9",
+ "bcrypt-ts": "^5.0.2",
"class-variance-authority": "^0.7.0",
+ "classnames": "^2.5.1",
"clsx": "^2.1.1",
- "framer-motion": "^11.3.30",
+ "date-fns": "^4.1.0",
+ "dotenv": "^16.4.5",
+ "drizzle-orm": "^0.34.0",
+ "framer-motion": "^11.3.19",
"geist": "^1.3.1",
- "nanoid": "^5.0.7",
- "next": "14.2.6",
- "next-auth": "5.0.0-beta.4",
+ "lucide-react": "^0.446.0",
+ "next": "15.0.0-canary.152",
+ "next-auth": "5.0.0-beta.22",
"next-themes": "^0.3.0",
- "openai": "^4.56.0",
- "react": "^18.3.1",
- "react-dom": "^18.3.1",
- "react-intersection-observer": "^9.10.3",
- "react-markdown": "^8.0.7",
- "react-syntax-highlighter": "^15.5.0",
- "react-textarea-autosize": "^8.5.3",
- "remark-gfm": "^3.0.1",
- "remark-math": "^5.1.1",
+ "postgres": "^3.4.4",
+ "react": "19.0.0-rc-7771d3a7-20240827",
+ "react-dom": "19.0.0-rc-7771d3a7-20240827",
+ "react-markdown": "^9.0.1",
+ "remark-gfm": "^4.0.0",
+ "server-only": "^0.0.1",
"sonner": "^1.5.0",
+ "swr": "^2.2.5",
+ "tailwind-merge": "^2.5.2",
+ "tailwindcss-animate": "^1.0.7",
+ "usehooks-ts": "^3.1.0",
"zod": "^3.23.8"
},
"devDependencies": {
- "@tailwindcss/typography": "^0.5.14",
- "@types/node": "^22.5.0",
- "@types/react": "^18.3.4",
- "@types/react-dom": "^18.3.0",
- "@types/react-syntax-highlighter": "^15.5.13",
- "autoprefixer": "^10.4.20",
- "postcss": "^8.4.41",
+ "@types/d3-scale": "^4.0.8",
+ "@types/node": "^20",
+ "@types/pdf-parse": "^1.1.4",
+ "@types/react": "^18",
+ "@types/react-dom": "^18",
+ "drizzle-kit": "^0.25.0",
+ "eslint": "^8.57.0",
+ "eslint-config-next": "14.2.5",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-import-resolver-typescript": "^3.6.3",
+ "eslint-plugin-import": "^2.31.0",
+ "eslint-plugin-tailwindcss": "^3.17.5",
+ "postcss": "^8",
"prettier": "^3.3.3",
- "tailwind-merge": "^2.5.2",
- "tailwindcss": "^3.4.10",
- "tailwindcss-animate": "^1.0.7",
- "typescript": "^5.5.4"
- },
- "packageManager": "pnpm@8.6.3"
+ "tailwindcss": "^3.4.1",
+ "tsx": "^4.19.1",
+ "typescript": "^5"
+ }
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 94e78e2..7107713 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,173 +1,239 @@
-lockfileVersion: '9.0'
+lockfileVersion: '6.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
-importers:
+dependencies:
+ '@ai-sdk/openai':
+ specifier: ^0.0.60
+ version: 0.0.60(zod@3.23.8)
+ '@radix-ui/react-alert-dialog':
+ specifier: ^1.1.2
+ version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-dialog':
+ specifier: ^1.1.2
+ version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-dropdown-menu':
+ specifier: ^2.1.1
+ version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-icons':
+ specifier: ^1.3.0
+ version: 1.3.0(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-label':
+ specifier: ^2.1.0
+ version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-slot':
+ specifier: ^1.1.0
+ version: 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-tooltip':
+ specifier: ^1.1.2
+ version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-visually-hidden':
+ specifier: ^1.1.0
+ version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@vercel/analytics':
+ specifier: ^1.3.1
+ version: 1.3.1(next@15.0.0-canary.152)(react@19.0.0-rc-7771d3a7-20240827)
+ '@vercel/blob':
+ specifier: ^0.24.1
+ version: 0.24.1
+ '@vercel/postgres':
+ specifier: ^0.10.0
+ version: 0.10.0
+ ai:
+ specifier: 3.4.9
+ version: 3.4.9(react@19.0.0-rc-7771d3a7-20240827)(svelte@4.2.18)(vue@3.4.35)(zod@3.23.8)
+ bcrypt-ts:
+ specifier: ^5.0.2
+ version: 5.0.2
+ class-variance-authority:
+ specifier: ^0.7.0
+ version: 0.7.0
+ classnames:
+ specifier: ^2.5.1
+ version: 2.5.1
+ clsx:
+ specifier: ^2.1.1
+ version: 2.1.1
+ date-fns:
+ specifier: ^4.1.0
+ version: 4.1.0
+ dotenv:
+ specifier: ^16.4.5
+ version: 16.4.5
+ drizzle-orm:
+ specifier: ^0.34.0
+ version: 0.34.0(@types/react@18.3.3)(@vercel/postgres@0.10.0)(postgres@3.4.4)(react@19.0.0-rc-7771d3a7-20240827)
+ framer-motion:
+ specifier: ^11.3.19
+ version: 11.3.19(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ geist:
+ specifier: ^1.3.1
+ version: 1.3.1(next@15.0.0-canary.152)
+ lucide-react:
+ specifier: ^0.446.0
+ version: 0.446.0(react@19.0.0-rc-7771d3a7-20240827)
+ next:
+ specifier: 15.0.0-canary.152
+ version: 15.0.0-canary.152(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ next-auth:
+ specifier: 5.0.0-beta.22
+ version: 5.0.0-beta.22(next@15.0.0-canary.152)(react@19.0.0-rc-7771d3a7-20240827)
+ next-themes:
+ specifier: ^0.3.0
+ version: 0.3.0(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ postgres:
+ specifier: ^3.4.4
+ version: 3.4.4
+ react:
+ specifier: 19.0.0-rc-7771d3a7-20240827
+ version: 19.0.0-rc-7771d3a7-20240827
+ react-dom:
+ specifier: 19.0.0-rc-7771d3a7-20240827
+ version: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ react-markdown:
+ specifier: ^9.0.1
+ version: 9.0.1(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ remark-gfm:
+ specifier: ^4.0.0
+ version: 4.0.0
+ server-only:
+ specifier: ^0.0.1
+ version: 0.0.1
+ sonner:
+ specifier: ^1.5.0
+ version: 1.5.0(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ swr:
+ specifier: ^2.2.5
+ version: 2.2.5(react@19.0.0-rc-7771d3a7-20240827)
+ tailwind-merge:
+ specifier: ^2.5.2
+ version: 2.5.2
+ tailwindcss-animate:
+ specifier: ^1.0.7
+ version: 1.0.7(tailwindcss@3.4.7)
+ usehooks-ts:
+ specifier: ^3.1.0
+ version: 3.1.0(react@19.0.0-rc-7771d3a7-20240827)
+ zod:
+ specifier: ^3.23.8
+ version: 3.23.8
- .:
- dependencies:
- '@ai-sdk/openai':
- specifier: ^0.0.53
- version: 0.0.53(zod@3.23.8)
- '@radix-ui/react-alert-dialog':
- specifier: ^1.1.1
- version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-dialog':
- specifier: ^1.1.1
- version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-dropdown-menu':
- specifier: ^2.1.1
- version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-icons':
- specifier: ^1.3.0
- version: 1.3.0(react@18.3.1)
- '@radix-ui/react-label':
- specifier: ^2.1.0
- version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-select':
- specifier: ^2.1.1
- version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-separator':
- specifier: ^1.1.0
- version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-slot':
- specifier: ^1.1.0
- version: 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-switch':
- specifier: ^1.1.0
- version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-tooltip':
- specifier: ^1.1.2
- version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@vercel/analytics':
- specifier: ^1.3.1
- version: 1.3.1(next@14.2.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
- '@vercel/kv':
- specifier: ^2.0.0
- version: 2.0.0
- ai:
- specifier: ^3.3.17
- version: 3.3.17(openai@4.56.0(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.4.38(typescript@5.5.4))(zod@3.23.8)
- class-variance-authority:
- specifier: ^0.7.0
- version: 0.7.0
- clsx:
- specifier: ^2.1.1
- version: 2.1.1
- framer-motion:
- specifier: ^11.3.30
- version: 11.3.30(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- geist:
- specifier: ^1.3.1
- version: 1.3.1(next@14.2.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
- nanoid:
- specifier: ^5.0.7
- version: 5.0.7
- next:
- specifier: 14.2.6
- version: 14.2.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- next-auth:
- specifier: 5.0.0-beta.4
- version: 5.0.0-beta.4(next@14.2.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
- next-themes:
- specifier: ^0.3.0
- version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- openai:
- specifier: ^4.56.0
- version: 4.56.0(zod@3.23.8)
- react:
- specifier: ^18.3.1
- version: 18.3.1
- react-dom:
- specifier: ^18.3.1
- version: 18.3.1(react@18.3.1)
- react-intersection-observer:
- specifier: ^9.10.3
- version: 9.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react-markdown:
- specifier: ^8.0.7
- version: 8.0.7(@types/react@18.3.4)(react@18.3.1)
- react-syntax-highlighter:
- specifier: ^15.5.0
- version: 15.5.0(react@18.3.1)
- react-textarea-autosize:
- specifier: ^8.5.3
- version: 8.5.3(@types/react@18.3.4)(react@18.3.1)
- remark-gfm:
- specifier: ^3.0.1
- version: 3.0.1
- remark-math:
- specifier: ^5.1.1
- version: 5.1.1
- sonner:
- specifier: ^1.5.0
- version: 1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- zod:
- specifier: ^3.23.8
- version: 3.23.8
- devDependencies:
- '@tailwindcss/typography':
- specifier: ^0.5.14
- version: 0.5.14(tailwindcss@3.4.10)
- '@types/node':
- specifier: ^22.5.0
- version: 22.5.0
- '@types/react':
- specifier: ^18.3.4
- version: 18.3.4
- '@types/react-dom':
- specifier: ^18.3.0
- version: 18.3.0
- '@types/react-syntax-highlighter':
- specifier: ^15.5.13
- version: 15.5.13
- autoprefixer:
- specifier: ^10.4.20
- version: 10.4.20(postcss@8.4.41)
- postcss:
- specifier: ^8.4.41
- version: 8.4.41
- prettier:
- specifier: ^3.3.3
- version: 3.3.3
- tailwind-merge:
- specifier: ^2.5.2
- version: 2.5.2
- tailwindcss:
- specifier: ^3.4.10
- version: 3.4.10
- tailwindcss-animate:
- specifier: ^1.0.7
- version: 1.0.7(tailwindcss@3.4.10)
- typescript:
- specifier: ^5.5.4
- version: 5.5.4
+devDependencies:
+ '@types/d3-scale':
+ specifier: ^4.0.8
+ version: 4.0.8
+ '@types/node':
+ specifier: ^20
+ version: 20.14.13
+ '@types/pdf-parse':
+ specifier: ^1.1.4
+ version: 1.1.4
+ '@types/react':
+ specifier: ^18
+ version: 18.3.3
+ '@types/react-dom':
+ specifier: ^18
+ version: 18.3.0
+ drizzle-kit:
+ specifier: ^0.25.0
+ version: 0.25.0
+ eslint:
+ specifier: ^8.57.0
+ version: 8.57.0
+ eslint-config-next:
+ specifier: 14.2.5
+ version: 14.2.5(eslint@8.57.0)(typescript@5.5.4)
+ eslint-config-prettier:
+ specifier: ^9.1.0
+ version: 9.1.0(eslint@8.57.0)
+ eslint-import-resolver-typescript:
+ specifier: ^3.6.3
+ version: 3.6.3(eslint-plugin-import@2.31.0)(eslint@8.57.0)
+ eslint-plugin-import:
+ specifier: ^2.31.0
+ version: 2.31.0(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ eslint-plugin-tailwindcss:
+ specifier: ^3.17.5
+ version: 3.17.5(tailwindcss@3.4.7)
+ postcss:
+ specifier: ^8
+ version: 8.4.40
+ prettier:
+ specifier: ^3.3.3
+ version: 3.3.3
+ tailwindcss:
+ specifier: ^3.4.1
+ version: 3.4.7
+ tsx:
+ specifier: ^4.19.1
+ version: 4.19.1
+ typescript:
+ specifier: ^5
+ version: 5.5.4
packages:
- '@ai-sdk/openai@0.0.53':
- resolution: {integrity: sha512-Wm4+EYG2Zl5WmhvZJrLhrBY+C46FEQmDjQ9ZB5h2DvRoJZNKtNiVNFMEQuyBK7QwivvlCSMJkPRBfFcbJgNLMQ==}
+ /@ai-sdk/openai@0.0.60(zod@3.23.8):
+ resolution: {integrity: sha512-NEdDdv3o76jT6UeWHxP6I/lMYcjFQhQGQi/U2gVqW1PEU4Pjaud7tAVSy27IPbiRakg6GOzWrltI2JhZgAI1wg==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
+ dependencies:
+ '@ai-sdk/provider': 0.0.23
+ '@ai-sdk/provider-utils': 1.0.19(zod@3.23.8)
+ zod: 3.23.8
+ dev: false
- '@ai-sdk/provider-utils@1.0.16':
- resolution: {integrity: sha512-8Nd8vIkGTIthhfgJEdP9KyMlykehBNP/1J47eMC3vQqYgJV6r5Bgvl3LFVfWi9KzamiD8tp9nU2NJKTeo4MH/A==}
+ /@ai-sdk/provider-utils@1.0.19(zod@3.23.8):
+ resolution: {integrity: sha512-p02Fq5Mnc8T6nwRBN1Iaou8YXvN1sDS6hbmJaD5UaRbXjizbh+8rpFS/o7jqAHTwf3uHCDitP3pnODyHdc/CDQ==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
peerDependenciesMeta:
zod:
optional: true
+ dependencies:
+ '@ai-sdk/provider': 0.0.23
+ eventsource-parser: 1.1.2
+ nanoid: 3.3.6
+ secure-json-parse: 2.7.0
+ zod: 3.23.8
+ dev: false
- '@ai-sdk/provider@0.0.21':
- resolution: {integrity: sha512-9j95uaPRxwYkzQdkl4XO/MmWWW5c5vcVSXtqvALpD9SMB9fzH46dO3UN4VbOJR2J3Z84CZAqgZu5tNlkptT9qQ==}
+ /@ai-sdk/provider-utils@1.0.20(zod@3.23.8):
+ resolution: {integrity: sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow==}
engines: {node: '>=18'}
+ peerDependencies:
+ zod: ^3.0.0
+ peerDependenciesMeta:
+ zod:
+ optional: true
+ dependencies:
+ '@ai-sdk/provider': 0.0.24
+ eventsource-parser: 1.1.2
+ nanoid: 3.3.6
+ secure-json-parse: 2.7.0
+ zod: 3.23.8
+ dev: false
- '@ai-sdk/react@0.0.51':
- resolution: {integrity: sha512-Hq5splFSB6OVovHamXvpnd1S7jfIz/CXWjaLo9sr90jd/W370NA8GhBd6oSLfqMeKrPosV4qRBH5S8lv2bauqA==}
+ /@ai-sdk/provider@0.0.23:
+ resolution: {integrity: sha512-oAc49O5+xypVrKM7EUU5P/Y4DUL4JZUWVxhejoAVOTOl3WZUEWsMbP3QZR+TrimQIsS0WR/n9UuF6U0jPdp0tQ==}
+ engines: {node: '>=18'}
+ dependencies:
+ json-schema: 0.4.0
+ dev: false
+
+ /@ai-sdk/provider@0.0.24:
+ resolution: {integrity: sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==}
+ engines: {node: '>=18'}
+ dependencies:
+ json-schema: 0.4.0
+ dev: false
+
+ /@ai-sdk/react@0.0.62(react@19.0.0-rc-7771d3a7-20240827)(zod@3.23.8):
+ resolution: {integrity: sha512-1asDpxgmeHWL0/EZPCLENxfOHT+0jce0z/zasRhascodm2S6f6/KZn5doLG9jdmarcb+GjMjFmmwyOVXz3W1xg==}
engines: {node: '>=18'}
peerDependencies:
react: ^18 || ^19
@@ -177,205 +243,1240 @@ packages:
optional: true
zod:
optional: true
+ dependencies:
+ '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8)
+ '@ai-sdk/ui-utils': 0.0.46(zod@3.23.8)
+ react: 19.0.0-rc-7771d3a7-20240827
+ swr: 2.2.5(react@19.0.0-rc-7771d3a7-20240827)
+ zod: 3.23.8
+ dev: false
- '@ai-sdk/solid@0.0.41':
- resolution: {integrity: sha512-w4vSkd2388FJMnKPALP8SL4p3XAR70FAPj0qrd5AoYyQMMjX/E6zQGc8YAhAAnGSwiQwq/DZaE4y0lorwFVyOw==}
+ /@ai-sdk/solid@0.0.49(zod@3.23.8):
+ resolution: {integrity: sha512-KnfWTt640cS1hM2fFIba8KHSPLpOIWXtEm28pNCHTvqasVKlh2y/zMQANTwE18pF2nuXL9P9F5/dKWaPsaEzQw==}
engines: {node: '>=18'}
peerDependencies:
solid-js: ^1.7.7
peerDependenciesMeta:
solid-js:
optional: true
+ dependencies:
+ '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8)
+ '@ai-sdk/ui-utils': 0.0.46(zod@3.23.8)
+ transitivePeerDependencies:
+ - zod
+ dev: false
- '@ai-sdk/svelte@0.0.43':
- resolution: {integrity: sha512-lUve6AGc3dtue14LLGiZs7J7L/3jEHh6SGXwuG/nDygeicKPzmG9drWZlhTdpNHN9wKtBgrCdJxQ96HKswLDNA==}
+ /@ai-sdk/svelte@0.0.51(svelte@4.2.18)(zod@3.23.8):
+ resolution: {integrity: sha512-aIZJaIds+KpCt19yUDCRDWebzF/17GCY7gN9KkcA2QM6IKRO5UmMcqEYja0ZmwFQPm1kBZkF2njhr8VXis2mAw==}
engines: {node: '>=18'}
peerDependencies:
svelte: ^3.0.0 || ^4.0.0
peerDependenciesMeta:
svelte:
optional: true
+ dependencies:
+ '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8)
+ '@ai-sdk/ui-utils': 0.0.46(zod@3.23.8)
+ sswr: 2.1.0(svelte@4.2.18)
+ svelte: 4.2.18
+ transitivePeerDependencies:
+ - zod
+ dev: false
- '@ai-sdk/ui-utils@0.0.38':
- resolution: {integrity: sha512-SyyfqBu7xnsfUuq3kSxzP+fxGCTMqaSL5WYGiBJpr/yLWySjBJCg/k7WueO440AqVpZBzCd3nWoCpPmjfMK8Yg==}
+ /@ai-sdk/ui-utils@0.0.46(zod@3.23.8):
+ resolution: {integrity: sha512-ZG/wneyJG+6w5Nm/hy1AKMuRgjPQToAxBsTk61c9sVPUTaxo+NNjM2MhXQMtmsja2N5evs8NmHie+ExEgpL3cA==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
peerDependenciesMeta:
zod:
optional: true
+ dependencies:
+ '@ai-sdk/provider': 0.0.24
+ '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8)
+ json-schema: 0.4.0
+ secure-json-parse: 2.7.0
+ zod: 3.23.8
+ zod-to-json-schema: 3.23.2(zod@3.23.8)
+ dev: false
- '@ai-sdk/vue@0.0.43':
- resolution: {integrity: sha512-bJB7muMpmP/wPKbDU8GCmDpI1HSkuTWz9DsQ4ZlBaCk5wqRLKxRtzM9NxfeQ15RojSLxYhKf/lDwW10RPtjcaw==}
+ /@ai-sdk/vue@0.0.54(vue@3.4.35)(zod@3.23.8):
+ resolution: {integrity: sha512-Ltu6gbuii8Qlp3gg7zdwdnHdS4M8nqKDij2VVO1223VOtIFwORFJzKqpfx44U11FW8z2TPVBYN+FjkyVIcN2hg==}
engines: {node: '>=18'}
peerDependencies:
vue: ^3.3.4
peerDependenciesMeta:
vue:
optional: true
+ dependencies:
+ '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8)
+ '@ai-sdk/ui-utils': 0.0.46(zod@3.23.8)
+ swrv: 1.0.4(vue@3.4.35)
+ vue: 3.4.35(typescript@5.5.4)
+ transitivePeerDependencies:
+ - zod
+ dev: false
- '@alloc/quick-lru@5.2.0':
+ /@alloc/quick-lru@5.2.0:
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
- '@ampproject/remapping@2.3.0':
+ /@ampproject/remapping@2.3.0:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+ dev: false
- '@auth/core@0.18.4':
- resolution: {integrity: sha512-GsNhsP1xE/3FoNS3dVkPjqRljLNJ4iyL2OLv3klQGNvw3bMpROFcK4lqhx7+pPHiamnVaYt2vg1xbB+lsNaevg==}
+ /@auth/core@0.35.3:
+ resolution: {integrity: sha512-g6qfiqU4OtyvIEZ8J7UoIwAxEnNnLJV0/f/DW41U+4G5nhBlaCrnKhawJIJpU0D3uavXLeDT3B0BkjtiimvMDA==}
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
+ dependencies:
+ '@panva/hkdf': 1.2.1
+ '@types/cookie': 0.6.0
+ cookie: 0.6.0
+ jose: 5.9.3
+ oauth4webapi: 2.17.0
+ preact: 10.11.3
+ preact-render-to-string: 5.2.3(preact@10.11.3)
+ dev: false
- '@babel/helper-string-parser@7.24.8':
+ /@babel/helper-string-parser@7.24.8:
resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==}
engines: {node: '>=6.9.0'}
+ dev: false
- '@babel/helper-validator-identifier@7.24.7':
+ /@babel/helper-validator-identifier@7.24.7:
resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
engines: {node: '>=6.9.0'}
+ dev: false
- '@babel/parser@7.25.4':
- resolution: {integrity: sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==}
+ /@babel/parser@7.25.3:
+ resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==}
engines: {node: '>=6.0.0'}
hasBin: true
+ dependencies:
+ '@babel/types': 7.25.2
+ dev: false
- '@babel/runtime@7.25.4':
- resolution: {integrity: sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==}
+ /@babel/types@7.25.2:
+ resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==}
engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.24.8
+ '@babel/helper-validator-identifier': 7.24.7
+ to-fast-properties: 2.0.0
+ dev: false
- '@babel/types@7.25.4':
- resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==}
- engines: {node: '>=6.9.0'}
+ /@drizzle-team/brocli@0.10.1:
+ resolution: {integrity: sha512-AHy0vjc+n/4w/8Mif+w86qpppHuF3AyXbcWW+R/W7GNA3F5/p2nuhlkCJaTXSLZheB4l1rtHzOfr9A7NwoR/Zg==}
+ dev: true
- '@floating-ui/core@1.6.7':
- resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==}
+ /@emnapi/runtime@1.2.0:
+ resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==}
+ requiresBuild: true
+ dependencies:
+ tslib: 2.6.3
+ dev: false
+ optional: true
- '@floating-ui/dom@1.6.10':
- resolution: {integrity: sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==}
+ /@esbuild-kit/core-utils@3.3.2:
+ resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
+ deprecated: 'Merged into tsx: https://tsx.is'
+ dependencies:
+ esbuild: 0.18.20
+ source-map-support: 0.5.21
+ dev: true
- '@floating-ui/react-dom@2.1.1':
- resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==}
+ /@esbuild-kit/esm-loader@2.6.5:
+ resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
+ deprecated: 'Merged into tsx: https://tsx.is'
+ dependencies:
+ '@esbuild-kit/core-utils': 3.3.2
+ get-tsconfig: 4.7.6
+ dev: true
+
+ /@esbuild/aix-ppc64@0.19.12:
+ resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/aix-ppc64@0.23.1:
+ resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm64@0.18.20:
+ resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm64@0.19.12:
+ resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm64@0.23.1:
+ resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm@0.18.20:
+ resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm@0.19.12:
+ resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm@0.23.1:
+ resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-x64@0.18.20:
+ resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-x64@0.19.12:
+ resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-x64@0.23.1:
+ resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-arm64@0.18.20:
+ resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-arm64@0.19.12:
+ resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-arm64@0.23.1:
+ resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-x64@0.18.20:
+ resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-x64@0.19.12:
+ resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-x64@0.23.1:
+ resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-arm64@0.18.20:
+ resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-arm64@0.19.12:
+ resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-arm64@0.23.1:
+ resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-x64@0.18.20:
+ resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-x64@0.19.12:
+ resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-x64@0.23.1:
+ resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm64@0.18.20:
+ resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm64@0.19.12:
+ resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm64@0.23.1:
+ resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm@0.18.20:
+ resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm@0.19.12:
+ resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm@0.23.1:
+ resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ia32@0.18.20:
+ resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ia32@0.19.12:
+ resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ia32@0.23.1:
+ resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64@0.18.20:
+ resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64@0.19.12:
+ resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64@0.23.1:
+ resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-mips64el@0.18.20:
+ resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-mips64el@0.19.12:
+ resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-mips64el@0.23.1:
+ resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ppc64@0.18.20:
+ resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ppc64@0.19.12:
+ resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ppc64@0.23.1:
+ resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-riscv64@0.18.20:
+ resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-riscv64@0.19.12:
+ resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-riscv64@0.23.1:
+ resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-s390x@0.18.20:
+ resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-s390x@0.19.12:
+ resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-s390x@0.23.1:
+ resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-x64@0.18.20:
+ resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-x64@0.19.12:
+ resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-x64@0.23.1:
+ resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/netbsd-x64@0.18.20:
+ resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/netbsd-x64@0.19.12:
+ resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/netbsd-x64@0.23.1:
+ resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-arm64@0.23.1:
+ resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-x64@0.18.20:
+ resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-x64@0.19.12:
+ resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-x64@0.23.1:
+ resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/sunos-x64@0.18.20:
+ resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/sunos-x64@0.19.12:
+ resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/sunos-x64@0.23.1:
+ resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-arm64@0.18.20:
+ resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-arm64@0.19.12:
+ resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-arm64@0.23.1:
+ resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-ia32@0.18.20:
+ resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-ia32@0.19.12:
+ resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-ia32@0.23.1:
+ resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-x64@0.18.20:
+ resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-x64@0.19.12:
+ resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-x64@0.23.1:
+ resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0):
+ resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ dependencies:
+ eslint: 8.57.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@eslint-community/regexpp@4.11.0:
+ resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ dev: true
+
+ /@eslint/eslintrc@2.1.4:
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.6
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.1
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@eslint/js@8.57.0:
+ resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /@fastify/busboy@2.1.1:
+ resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
+ engines: {node: '>=14'}
+ dev: false
+
+ /@floating-ui/core@1.6.8:
+ resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==}
+ dependencies:
+ '@floating-ui/utils': 0.2.8
+ dev: false
+
+ /@floating-ui/dom@1.6.11:
+ resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==}
+ dependencies:
+ '@floating-ui/core': 1.6.8
+ '@floating-ui/utils': 0.2.8
+ dev: false
+
+ /@floating-ui/react-dom@2.1.2(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==}
peerDependencies:
react: '>=16.8.0'
react-dom: '>=16.8.0'
+ dependencies:
+ '@floating-ui/dom': 1.6.11
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@floating-ui/utils@0.2.7':
- resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==}
+ /@floating-ui/utils@0.2.8:
+ resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
+ dev: false
- '@isaacs/cliui@8.0.2':
+ /@humanwhocodes/config-array@0.11.14:
+ resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
+ engines: {node: '>=10.10.0'}
+ deprecated: Use @eslint/config-array instead
+ dependencies:
+ '@humanwhocodes/object-schema': 2.0.3
+ debug: 4.3.6
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@humanwhocodes/module-importer@1.0.1:
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+ dev: true
+
+ /@humanwhocodes/object-schema@2.0.3:
+ resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
+ deprecated: Use @eslint/object-schema instead
+ dev: true
+
+ /@img/sharp-darwin-arm64@0.33.5:
+ resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.0.4
+ dev: false
+ optional: true
+
+ /@img/sharp-darwin-x64@0.33.5:
+ resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.0.4
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-darwin-arm64@1.0.4:
+ resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-darwin-x64@1.0.4:
+ resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-arm64@1.0.4:
+ resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-arm@1.0.5:
+ resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-s390x@1.0.4:
+ resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-x64@1.0.4:
+ resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linuxmusl-arm64@1.0.4:
+ resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linuxmusl-x64@1.0.4:
+ resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-arm64@0.33.5:
+ resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.0.4
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-arm@0.33.5:
+ resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.0.5
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-s390x@0.33.5:
+ resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.0.4
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-x64@0.33.5:
+ resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.0.4
+ dev: false
+ optional: true
+
+ /@img/sharp-linuxmusl-arm64@0.33.5:
+ resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+ dev: false
+ optional: true
+
+ /@img/sharp-linuxmusl-x64@0.33.5:
+ resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+ dev: false
+ optional: true
+
+ /@img/sharp-wasm32@0.33.5:
+ resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [wasm32]
+ requiresBuild: true
+ dependencies:
+ '@emnapi/runtime': 1.2.0
+ dev: false
+ optional: true
+
+ /@img/sharp-win32-ia32@0.33.5:
+ resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-win32-x64@0.33.5:
+ resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@isaacs/cliui@8.0.2:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: /string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: /strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: /wrap-ansi@7.0.0
- '@jridgewell/gen-mapping@0.3.5':
+ /@jridgewell/gen-mapping@0.3.5:
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
- '@jridgewell/resolve-uri@3.1.2':
+ /@jridgewell/resolve-uri@3.1.2:
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
- '@jridgewell/set-array@1.2.1':
+ /@jridgewell/set-array@1.2.1:
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
- '@jridgewell/sourcemap-codec@1.5.0':
+ /@jridgewell/sourcemap-codec@1.5.0:
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
- '@jridgewell/trace-mapping@0.3.25':
+ /@jridgewell/trace-mapping@0.3.25:
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
- '@next/env@14.2.6':
- resolution: {integrity: sha512-bs5DFKV+08EjWrl8EB+KKqev1ZTNONH1vFCaHh911aaB362NnP32UDTbE9VQhyiAgbFqJsfDkSxFERNDDb3j0g==}
+ /@neondatabase/serverless@0.9.5:
+ resolution: {integrity: sha512-siFas6gItqv6wD/pZnvdu34wEqgG3nSE6zWZdq5j2DEsa+VvX8i/5HXJOo06qrw5axPXn+lGCxeR+NLaSPIXug==}
+ dependencies:
+ '@types/pg': 8.11.6
+ dev: false
- '@next/swc-darwin-arm64@14.2.6':
- resolution: {integrity: sha512-BtJZb+hYXGaVJJivpnDoi3JFVn80SHKCiiRUW3kk1SY6UCUy5dWFFSbh+tGi5lHAughzeduMyxbLt3pspvXNSg==}
+ /@next/env@15.0.0-canary.152:
+ resolution: {integrity: sha512-Vq+BvhYvLREoHguMwBBtsOrRNRWRW+Yz0SQuiaVBjKNt3Vup7I0Bt8D8ysVNTPuPJl4XXvohy/tWcP4C9B+QTw==}
+ dev: false
+
+ /@next/eslint-plugin-next@14.2.5:
+ resolution: {integrity: sha512-LY3btOpPh+OTIpviNojDpUdIbHW9j0JBYBjsIp8IxtDFfYFyORvw3yNq6N231FVqQA7n7lwaf7xHbVJlA1ED7g==}
+ dependencies:
+ glob: 10.3.10
+ dev: true
+
+ /@next/swc-darwin-arm64@15.0.0-canary.152:
+ resolution: {integrity: sha512-esqeyXNI0Gx/8+95NBWHpk6u03bsZZhJV+o5mLQ8pKDoKLlqMUhuT4yjdXq8stxQ+0TKPrsdrPmC85QfCgKK1g==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
- '@next/swc-darwin-x64@14.2.6':
- resolution: {integrity: sha512-ZHRbGpH6KHarzm6qEeXKSElSXh8dS2DtDPjQt3IMwY8QVk7GbdDYjvV4NgSnDA9huGpGgnyy3tH8i5yHCqVkiQ==}
+ /@next/swc-darwin-x64@15.0.0-canary.152:
+ resolution: {integrity: sha512-HnNxvjXSF+fLlIHqfvQfr699wdlxHl7hOv/wObzJQdh0h75M3+joobkwZmvt+SaQQePst8OJD4wAZXmNt0WwCQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
- '@next/swc-linux-arm64-gnu@14.2.6':
- resolution: {integrity: sha512-O4HqUEe3ZvKshXHcDUXn1OybN4cSZg7ZdwHJMGCXSUEVUqGTJVsOh17smqilIjooP/sIJksgl+1kcf2IWMZWHg==}
+ /@next/swc-linux-arm64-gnu@15.0.0-canary.152:
+ resolution: {integrity: sha512-J9EyhurCzkt5kQ719C1nu3rGDSgaMtiuIsDMI0Qux9UTepEgUL/ZOP5YYthj3Fp3o6KJvGlPfBO8x/d8P1rzvQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
- '@next/swc-linux-arm64-musl@14.2.6':
- resolution: {integrity: sha512-xUcdhr2hfalG8RDDGSFxQ75yOG894UlmFS4K2M0jLrUhauRBGOtUOxoDVwiIIuZQwZ3Y5hDsazNjdYGB0cQ9yQ==}
+ /@next/swc-linux-arm64-musl@15.0.0-canary.152:
+ resolution: {integrity: sha512-JkIck9Vno6D5wA5zm2p4l+OEBpiXq3keBMftTnczc7Fhw/FE1K0FezYNfVo17eo6tLauywhgqqjWe8UpWtVGxw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
- '@next/swc-linux-x64-gnu@14.2.6':
- resolution: {integrity: sha512-InosKxw8UMcA/wEib5n2QttwHSKHZHNSbGcMepBM0CTcNwpxWzX32KETmwbhKod3zrS8n1vJ+DuJKbL9ZAB0Ag==}
+ /@next/swc-linux-x64-gnu@15.0.0-canary.152:
+ resolution: {integrity: sha512-BeIQ7aZbjNnRrlSKrG0R656SaSeJVWPVIMW/PPhJHydyf+3TEulmQN6DOcSDI0q6ujLwB1yRe6HhSuuYj6knFw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
- '@next/swc-linux-x64-musl@14.2.6':
- resolution: {integrity: sha512-d4QXfJmt5pGJ7cG8qwxKSBnO5AXuKAFYxV7qyDRHnUNvY/dgDh+oX292gATpB2AAHgjdHd5ks1wXxIEj6muLUQ==}
+ /@next/swc-linux-x64-musl@15.0.0-canary.152:
+ resolution: {integrity: sha512-pAcCr+maKUnIIbuHgdMUIU4dQlu81vpZPrfUN2l7teYB+wHt0H1rp6BT+Js48cNGosvvh/UCua+xUKWfHba1QA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
- '@next/swc-win32-arm64-msvc@14.2.6':
- resolution: {integrity: sha512-AlgIhk4/G+PzOG1qdF1b05uKTMsuRatFlFzAi5G8RZ9h67CVSSuZSbqGHbJDlcV1tZPxq/d4G0q6qcHDKWf4aQ==}
+ /@next/swc-win32-arm64-msvc@15.0.0-canary.152:
+ resolution: {integrity: sha512-QNxQ3+S8qrh+c5SnZxqdp5hm5lW4+No9fnGijSn+sbg2zd8EB7pZm0F9SNUggACmi6KPdGgeGBlbJuFODR0AwA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
- '@next/swc-win32-ia32-msvc@14.2.6':
- resolution: {integrity: sha512-hNukAxq7hu4o5/UjPp5jqoBEtrpCbOmnUqZSKNJG8GrUVzfq0ucdhQFVrHcLRMvQcwqqDh1a5AJN9ORnNDpgBQ==}
+ /@next/swc-win32-ia32-msvc@15.0.0-canary.152:
+ resolution: {integrity: sha512-ceRX9lrSzPpvWjxBnA/FKLZDeIX0Z2R3AN5N+Xu3IkAdZF3Qb22mapTAicc5ruo24YPWF8zkkYfI6zCTnCJG5Q==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
- '@next/swc-win32-x64-msvc@14.2.6':
- resolution: {integrity: sha512-NANtw+ead1rSDK1jxmzq3TYkl03UNK2KHqUYf1nIhNci6NkeqBD4s1njSzYGIlSHxCK+wSaL8RXZm4v+NF/pMw==}
+ /@next/swc-win32-x64-msvc@15.0.0-canary.152:
+ resolution: {integrity: sha512-AgtpZ8RyeRTcXxsQXPOQRUt/oSRQSLlxnt85rkvX/Jy1BuTzR2Ryyf5/ixgczxceq6RJzr2y96kagjU+r0cdiA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
- '@nodelib/fs.scandir@2.1.5':
+ /@nodelib/fs.scandir@2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
- '@nodelib/fs.stat@2.0.5':
+ /@nodelib/fs.stat@2.0.5:
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines: {node: '>= 8'}
- '@nodelib/fs.walk@1.2.8':
+ /@nodelib/fs.walk@1.2.8:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.17.1
- '@opentelemetry/api@1.9.0':
+ /@nolyfill/is-core-module@1.0.39:
+ resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
+ engines: {node: '>=12.4.0'}
+ dev: true
+
+ /@opentelemetry/api@1.9.0:
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
+ dev: false
- '@panva/hkdf@1.2.1':
+ /@panva/hkdf@1.2.1:
resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==}
+ dev: false
- '@pkgjs/parseargs@0.11.0':
+ /@pkgjs/parseargs@0.11.0:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
+ requiresBuild: true
+ optional: true
- '@radix-ui/number@1.1.0':
- resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==}
-
- '@radix-ui/primitive@1.1.0':
+ /@radix-ui/primitive@1.1.0:
resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==}
+ dev: false
- '@radix-ui/react-alert-dialog@1.1.1':
- resolution: {integrity: sha512-wmCoJwj7byuVuiLKqDLlX7ClSUU0vd9sdCeM+2Ls+uf13+cpSJoMgwysHq1SGVVkJj5Xn0XWi1NoRCdkMpr6Mw==}
+ /@radix-ui/react-alert-dialog@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-eGSlLzPhKO+TErxkiGcCZGuvbVMnLA1MTnyBksGOeGRGkxHiiJUujsjmNTdWTm4iHVSRaUao9/4Ur671auMghQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -386,8 +1487,20 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-arrow@1.1.0':
+ /@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==}
peerDependencies:
'@types/react': '*'
@@ -399,8 +1512,15 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-collection@1.1.0':
+ /@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==}
peerDependencies:
'@types/react': '*'
@@ -412,8 +1532,18 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-compose-refs@1.1.0':
+ /@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==}
peerDependencies:
'@types/react': '*'
@@ -421,8 +1551,12 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-context@1.1.0':
+ /@radix-ui/react-context@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==}
peerDependencies:
'@types/react': '*'
@@ -430,9 +1564,26 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-dialog@1.1.1':
- resolution: {integrity: sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==}
+ /@radix-ui/react-context@1.1.1(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
+
+ /@radix-ui/react-dialog@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -443,8 +1594,28 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-context': 1.1.1(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ aria-hidden: 1.2.4
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ react-remove-scroll: 2.6.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-direction@1.1.0':
+ /@radix-ui/react-direction@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==}
peerDependencies:
'@types/react': '*'
@@ -452,8 +1623,12 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-dismissable-layer@1.1.0':
+ /@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==}
peerDependencies:
'@types/react': '*'
@@ -465,8 +1640,43 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-dropdown-menu@2.1.1':
+ /@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
+
+ /@radix-ui/react-dropdown-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ==}
peerDependencies:
'@types/react': '*'
@@ -478,8 +1688,21 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-focus-guards@1.1.0':
+ /@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==}
peerDependencies:
'@types/react': '*'
@@ -487,8 +1710,25 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-focus-scope@1.1.0':
+ /@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
+
+ /@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==}
peerDependencies:
'@types/react': '*'
@@ -500,13 +1740,25 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-icons@1.3.0':
+ /@radix-ui/react-icons@1.3.0(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==}
peerDependencies:
react: ^16.x || ^17.x || ^18.x
+ dependencies:
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-id@1.1.0':
+ /@radix-ui/react-id@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
peerDependencies:
'@types/react': '*'
@@ -514,8 +1766,13 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-label@2.1.0':
+ /@radix-ui/react-label@2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==}
peerDependencies:
'@types/react': '*'
@@ -527,8 +1784,15 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-menu@2.1.1':
+ /@radix-ui/react-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ==}
peerDependencies:
'@types/react': '*'
@@ -540,8 +1804,32 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ aria-hidden: 1.2.4
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ react-remove-scroll: 2.5.7(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-popper@1.2.0':
+ /@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==}
peerDependencies:
'@types/react': '*'
@@ -553,8 +1841,24 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/rect': 1.1.0
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-portal@1.1.1':
+ /@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==}
peerDependencies:
'@types/react': '*'
@@ -566,8 +1870,37 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-presence@1.1.0':
+ /@radix-ui/react-portal@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+ dependencies:
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
+
+ /@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==}
peerDependencies:
'@types/react': '*'
@@ -579,8 +1912,37 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-primitive@2.0.0':
+ /@radix-ui/react-presence@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
+
+ /@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==}
peerDependencies:
'@types/react': '*'
@@ -592,8 +1954,15 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-roving-focus@1.1.0':
+ /@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==}
peerDependencies:
'@types/react': '*'
@@ -605,34 +1974,23 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-select@2.1.1':
- resolution: {integrity: sha512-8iRDfyLtzxlprOo9IicnzvpsO1wNCkuwzzCM+Z5Rb5tNOpCdMvcc2AkzX0Fz+Tz9v6NJ5B/7EEgyZveo4FBRfQ==}
- 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.0':
- resolution: {integrity: sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==}
- 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.0':
+ /@radix-ui/react-slot@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==}
peerDependencies:
'@types/react': '*'
@@ -640,21 +1998,13 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-switch@1.1.0':
- resolution: {integrity: sha512-OBzy5WAj641k0AOSpKQtreDMe+isX0MQJ1IVyF03ucdF3DunOnROVrjWs8zsXUxC3zfZ6JL9HFVCUlMghz9dJw==}
- 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.1.2':
+ /@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-9XRsLwe6Yb9B/tlnYCPVUd/TFS4J7HuOZW345DCeC6vKIxQGMZdx21RK4VoZauPD5frgkXTYVS5y90L+3YBn4w==}
peerDependencies:
'@types/react': '*'
@@ -666,8 +2016,26 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/primitive': 1.1.0
+ '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/react-use-callback-ref@1.1.0':
+ /@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
peerDependencies:
'@types/react': '*'
@@ -675,8 +2043,12 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-use-controllable-state@1.1.0':
+ /@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
peerDependencies:
'@types/react': '*'
@@ -684,8 +2056,13 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-use-escape-keydown@1.1.0':
+ /@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
peerDependencies:
'@types/react': '*'
@@ -693,8 +2070,13 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-use-layout-effect@1.1.0':
+ /@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
peerDependencies:
'@types/react': '*'
@@ -702,17 +2084,12 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-use-previous@1.1.0':
- resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==}
- 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.0':
+ /@radix-ui/react-use-rect@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==}
peerDependencies:
'@types/react': '*'
@@ -720,8 +2097,13 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@radix-ui/rect': 1.1.0
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-use-size@1.1.0':
+ /@radix-ui/react-use-size@1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==}
peerDependencies:
'@types/react': '*'
@@ -729,8 +2111,13 @@ packages:
peerDependenciesMeta:
'@types/react':
optional: true
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- '@radix-ui/react-visually-hidden@1.1.0':
+ /@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==}
peerDependencies:
'@types/react': '*'
@@ -742,70 +2129,197 @@ packages:
optional: true
'@types/react-dom':
optional: true
+ dependencies:
+ '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ '@types/react': 18.3.3
+ '@types/react-dom': 18.3.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- '@radix-ui/rect@1.1.0':
+ /@radix-ui/rect@1.1.0:
resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==}
+ dev: false
- '@swc/counter@0.1.3':
+ /@rtsao/scc@1.1.0:
+ resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
+ dev: true
+
+ /@rushstack/eslint-patch@1.10.4:
+ resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==}
+ dev: true
+
+ /@swc/counter@0.1.3:
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
+ dev: false
- '@swc/helpers@0.5.5':
- resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==}
+ /@swc/helpers@0.5.13:
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
+ dependencies:
+ tslib: 2.6.3
+ dev: false
- '@tailwindcss/typography@0.5.14':
- resolution: {integrity: sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==}
- peerDependencies:
- tailwindcss: '>=3.0.0 || insiders'
+ /@types/cookie@0.6.0:
+ resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
+ dev: false
- '@types/debug@4.1.12':
+ /@types/d3-scale@4.0.8:
+ resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==}
+ dependencies:
+ '@types/d3-time': 3.0.3
+ dev: true
+
+ /@types/d3-time@3.0.3:
+ resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==}
+ dev: true
+
+ /@types/debug@4.1.12:
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+ dependencies:
+ '@types/ms': 0.7.34
+ dev: false
- '@types/diff-match-patch@1.0.36':
+ /@types/diff-match-patch@1.0.36:
resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==}
+ dev: false
- '@types/estree@1.0.5':
+ /@types/estree-jsx@1.0.5:
+ resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
+ dependencies:
+ '@types/estree': 1.0.5
+ dev: false
+
+ /@types/estree@1.0.5:
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+ dev: false
- '@types/hast@2.3.10':
- resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
+ /@types/hast@3.0.4:
+ resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
- '@types/katex@0.16.7':
- resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
+ /@types/json5@0.0.29:
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ dev: true
- '@types/mdast@3.0.15':
- resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
+ /@types/mdast@4.0.4:
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
- '@types/ms@0.7.34':
+ /@types/ms@0.7.34:
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
+ dev: false
- '@types/node-fetch@2.6.11':
- resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==}
+ /@types/node@20.14.13:
+ resolution: {integrity: sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==}
+ dependencies:
+ undici-types: 5.26.5
- '@types/node@18.19.45':
- resolution: {integrity: sha512-VZxPKNNhjKmaC1SUYowuXSRSMGyQGmQjvvA1xE4QZ0xce2kLtEhPDS+kqpCPBZYgqblCLQ2DAjSzmgCM5auvhA==}
+ /@types/pdf-parse@1.1.4:
+ resolution: {integrity: sha512-+gbBHbNCVGGYw1S9lAIIvrHW47UYOhMIFUsJcMkMrzy1Jf0vulBN3XQIjPgnoOXveMuHnF3b57fXROnY/Or7eg==}
+ dev: true
- '@types/node@22.5.0':
- resolution: {integrity: sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==}
+ /@types/pg@8.11.6:
+ resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==}
+ dependencies:
+ '@types/node': 20.14.13
+ pg-protocol: 1.7.0
+ pg-types: 4.0.2
+ dev: false
- '@types/prop-types@15.7.12':
+ /@types/prop-types@15.7.12:
resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
- '@types/react-dom@18.3.0':
+ /@types/react-dom@18.3.0:
resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==}
+ dependencies:
+ '@types/react': 18.3.3
- '@types/react-syntax-highlighter@15.5.13':
- resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==}
+ /@types/react@18.3.3:
+ resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==}
+ dependencies:
+ '@types/prop-types': 15.7.12
+ csstype: 3.1.3
- '@types/react@18.3.4':
- resolution: {integrity: sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==}
+ /@types/unist@2.0.10:
+ resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==}
+ dev: false
- '@types/unist@2.0.11':
- resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
+ /@types/unist@3.0.2:
+ resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
+ dev: false
- '@upstash/redis@1.34.0':
- resolution: {integrity: sha512-TrXNoJLkysIl8SBc4u9bNnyoFYoILpCcFJcLyWCccb/QSUmaVKdvY0m5diZqc3btExsapcMbaw/s/wh9Sf1pJw==}
+ /@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4):
+ resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/scope-manager': 7.2.0
+ '@typescript-eslint/types': 7.2.0
+ '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.4)
+ '@typescript-eslint/visitor-keys': 7.2.0
+ debug: 4.3.6
+ eslint: 8.57.0
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
- '@vercel/analytics@1.3.1':
+ /@typescript-eslint/scope-manager@7.2.0:
+ resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dependencies:
+ '@typescript-eslint/types': 7.2.0
+ '@typescript-eslint/visitor-keys': 7.2.0
+ dev: true
+
+ /@typescript-eslint/types@7.2.0:
+ resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dev: true
+
+ /@typescript-eslint/typescript-estree@7.2.0(typescript@5.5.4):
+ resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/types': 7.2.0
+ '@typescript-eslint/visitor-keys': 7.2.0
+ debug: 4.3.6
+ globby: 11.1.0
+ is-glob: 4.0.3
+ minimatch: 9.0.3
+ semver: 7.6.3
+ ts-api-utils: 1.3.0(typescript@5.5.4)
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/visitor-keys@7.2.0:
+ resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dependencies:
+ '@typescript-eslint/types': 7.2.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@ungap/structured-clone@1.2.0:
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+
+ /@vercel/analytics@1.3.1(next@15.0.0-canary.152)(react@19.0.0-rc-7771d3a7-20240827):
resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==}
peerDependencies:
next: '>= 13'
@@ -815,55 +2329,122 @@ packages:
optional: true
react:
optional: true
+ dependencies:
+ next: 15.0.0-canary.152(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ react: 19.0.0-rc-7771d3a7-20240827
+ server-only: 0.0.1
+ dev: false
- '@vercel/kv@2.0.0':
- resolution: {integrity: sha512-zdVrhbzZBYo5d1Hfn4bKtqCeKf0FuzW8rSHauzQVMUgv1+1JOwof2mWcBuI+YMJy8s0G0oqAUfQ7HgUDzb8EbA==}
- engines: {node: '>=14.6'}
+ /@vercel/blob@0.24.1:
+ resolution: {integrity: sha512-wHzgKzvAuF4tRDoXk3wGBYzQZ9z2fLr4oftiR1hOclPEdA1aj2/0mizvO2l5w91eZlTAaFth0S1DlqrrXqpntg==}
+ engines: {node: '>=16.14'}
+ dependencies:
+ async-retry: 1.3.3
+ bytes: 3.1.2
+ is-buffer: 2.0.5
+ undici: 5.28.4
+ dev: false
- '@vue/compiler-core@3.4.38':
- resolution: {integrity: sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==}
+ /@vercel/postgres@0.10.0:
+ resolution: {integrity: sha512-fSD23DxGND40IzSkXjcFcxr53t3Tiym59Is0jSYIFpG4/0f0KO9SGtcp1sXiebvPaGe7N/tU05cH4yt2S6/IPg==}
+ engines: {node: '>=18.14'}
+ dependencies:
+ '@neondatabase/serverless': 0.9.5
+ bufferutil: 4.0.8
+ ws: 8.18.0(bufferutil@4.0.8)
+ transitivePeerDependencies:
+ - utf-8-validate
+ dev: false
- '@vue/compiler-dom@3.4.38':
- resolution: {integrity: sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==}
+ /@vue/compiler-core@3.4.35:
+ resolution: {integrity: sha512-gKp0zGoLnMYtw4uS/SJRRO7rsVggLjvot3mcctlMXunYNsX+aRJDqqw/lV5/gHK91nvaAAlWFgdVl020AW1Prg==}
+ dependencies:
+ '@babel/parser': 7.25.3
+ '@vue/shared': 3.4.35
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.0
+ dev: false
- '@vue/compiler-sfc@3.4.38':
- resolution: {integrity: sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==}
+ /@vue/compiler-dom@3.4.35:
+ resolution: {integrity: sha512-pWIZRL76/oE/VMhdv/ovZfmuooEni6JPG1BFe7oLk5DZRo/ImydXijoZl/4kh2406boRQ7lxTYzbZEEXEhj9NQ==}
+ dependencies:
+ '@vue/compiler-core': 3.4.35
+ '@vue/shared': 3.4.35
+ dev: false
- '@vue/compiler-ssr@3.4.38':
- resolution: {integrity: sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==}
+ /@vue/compiler-sfc@3.4.35:
+ resolution: {integrity: sha512-xacnRS/h/FCsjsMfxBkzjoNxyxEyKyZfBch/P4vkLRvYJwe5ChXmZZrj8Dsed/752H2Q3JE8kYu9Uyha9J6PgA==}
+ dependencies:
+ '@babel/parser': 7.25.3
+ '@vue/compiler-core': 3.4.35
+ '@vue/compiler-dom': 3.4.35
+ '@vue/compiler-ssr': 3.4.35
+ '@vue/shared': 3.4.35
+ estree-walker: 2.0.2
+ magic-string: 0.30.11
+ postcss: 8.4.40
+ source-map-js: 1.2.0
+ dev: false
- '@vue/reactivity@3.4.38':
- resolution: {integrity: sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==}
+ /@vue/compiler-ssr@3.4.35:
+ resolution: {integrity: sha512-7iynB+0KB1AAJKk/biENTV5cRGHRdbdaD7Mx3nWcm1W8bVD6QmnH3B4AHhQQ1qZHhqFwzEzMwiytXm3PX1e60A==}
+ dependencies:
+ '@vue/compiler-dom': 3.4.35
+ '@vue/shared': 3.4.35
+ dev: false
- '@vue/runtime-core@3.4.38':
- resolution: {integrity: sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==}
+ /@vue/reactivity@3.4.35:
+ resolution: {integrity: sha512-Ggtz7ZZHakriKioveJtPlStYardwQH6VCs9V13/4qjHSQb/teE30LVJNrbBVs4+aoYGtTQKJbTe4CWGxVZrvEw==}
+ dependencies:
+ '@vue/shared': 3.4.35
+ dev: false
- '@vue/runtime-dom@3.4.38':
- resolution: {integrity: sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==}
+ /@vue/runtime-core@3.4.35:
+ resolution: {integrity: sha512-D+BAjFoWwT5wtITpSxwqfWZiBClhBbR+bm0VQlWYFOadUUXFo+5wbe9ErXhLvwguPiLZdEF13QAWi2vP3ZD5tA==}
+ dependencies:
+ '@vue/reactivity': 3.4.35
+ '@vue/shared': 3.4.35
+ dev: false
- '@vue/server-renderer@3.4.38':
- resolution: {integrity: sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==}
+ /@vue/runtime-dom@3.4.35:
+ resolution: {integrity: sha512-yGOlbos+MVhlS5NWBF2HDNgblG8e2MY3+GigHEyR/dREAluvI5tuUUgie3/9XeqhPE4LF0i2wjlduh5thnfOqw==}
+ dependencies:
+ '@vue/reactivity': 3.4.35
+ '@vue/runtime-core': 3.4.35
+ '@vue/shared': 3.4.35
+ csstype: 3.1.3
+ dev: false
+
+ /@vue/server-renderer@3.4.35(vue@3.4.35):
+ resolution: {integrity: sha512-iZ0e/u9mRE4T8tNhlo0tbA+gzVkgv8r5BX6s1kRbOZqfpq14qoIvCZ5gIgraOmYkMYrSEZgkkojFPr+Nyq/Mnw==}
peerDependencies:
- vue: 3.4.38
+ vue: 3.4.35
+ dependencies:
+ '@vue/compiler-ssr': 3.4.35
+ '@vue/shared': 3.4.35
+ vue: 3.4.35(typescript@5.5.4)
+ dev: false
- '@vue/shared@3.4.38':
- resolution: {integrity: sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==}
+ /@vue/shared@3.4.35:
+ resolution: {integrity: sha512-hvuhBYYDe+b1G8KHxsQ0diDqDMA8D9laxWZhNAjE83VZb5UDaXl9Xnz7cGdDSyiHM90qqI/CyGMcpBpiDy6VVQ==}
+ dev: false
- abort-controller@3.0.0:
- resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
- engines: {node: '>=6.5'}
+ /acorn-jsx@5.3.2(acorn@8.12.1):
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: 8.12.1
+ dev: true
- acorn@8.12.1:
+ /acorn@8.12.1:
resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
engines: {node: '>=0.4.0'}
hasBin: true
- agentkeepalive@4.5.0:
- resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
- engines: {node: '>= 8.0.0'}
-
- ai@3.3.17:
- resolution: {integrity: sha512-Z3cPRImctE8GMZV0e15ZlO+bqfLlVWqO+JiShJT20l3iYlZYwsQMQXjt5hiF3m7+VvbzIq+ORdp1Ai11GxzBVQ==}
+ /ai@3.4.9(react@19.0.0-rc-7771d3a7-20240827)(svelte@4.2.18)(vue@3.4.35)(zod@3.23.8):
+ resolution: {integrity: sha512-wmVzpIHNGjCEjIJ/3945a/DIkz+gwObjC767ZRgO8AmtIZMO5KqvqNr7n2KF+gQrCPCMC8fM1ICQFXSvBZnBlA==}
engines: {node: '>=18'}
peerDependencies:
openai: ^4.42.0
@@ -882,2087 +2463,337 @@ packages:
optional: true
zod:
optional: true
-
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
-
- ansi-regex@6.0.1:
- resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
- engines: {node: '>=12'}
-
- ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
-
- ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
- engines: {node: '>=12'}
-
- any-promise@1.3.0:
- resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
-
- anymatch@3.1.3:
- resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
- engines: {node: '>= 8'}
-
- arg@5.0.2:
- resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
-
- aria-hidden@1.2.4:
- resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
- engines: {node: '>=10'}
-
- aria-query@5.3.0:
- resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
-
- asynckit@0.4.0:
- resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
-
- autoprefixer@10.4.20:
- resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
- engines: {node: ^10 || ^12 || >=14}
- hasBin: true
- peerDependencies:
- postcss: ^8.1.0
-
- axobject-query@4.1.0:
- resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
- engines: {node: '>= 0.4'}
-
- bail@2.0.2:
- resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
-
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
- binary-extensions@2.3.0:
- resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
- engines: {node: '>=8'}
-
- brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
-
- braces@3.0.3:
- resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
- engines: {node: '>=8'}
-
- browserslist@4.23.3:
- resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
-
- busboy@1.6.0:
- resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
- engines: {node: '>=10.16.0'}
-
- camelcase-css@2.0.1:
- resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
- engines: {node: '>= 6'}
-
- caniuse-lite@1.0.30001651:
- resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==}
-
- ccount@2.0.1:
- resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
-
- chalk@5.3.0:
- resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
- engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
-
- character-entities-legacy@1.1.4:
- resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
-
- 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==}
-
- chokidar@3.6.0:
- resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
- engines: {node: '>= 8.10.0'}
-
- class-variance-authority@0.7.0:
- resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==}
-
- client-only@0.0.1:
- resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
-
- clsx@2.0.0:
- resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
- engines: {node: '>=6'}
-
- clsx@2.1.1:
- resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
- engines: {node: '>=6'}
-
- code-red@1.0.4:
- resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
-
- color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
-
- color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
- combined-stream@1.0.8:
- resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
- engines: {node: '>= 0.8'}
-
- comma-separated-tokens@1.0.8:
- resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==}
-
- comma-separated-tokens@2.0.3:
- resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
-
- commander@4.1.1:
- resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
- engines: {node: '>= 6'}
-
- commander@8.3.0:
- resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
- engines: {node: '>= 12'}
-
- cookie@0.6.0:
- resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
- engines: {node: '>= 0.6'}
-
- cross-spawn@7.0.3:
- resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
- engines: {node: '>= 8'}
-
- crypto-js@4.2.0:
- resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
-
- css-tree@2.3.1:
- resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
- engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
-
- 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==}
-
- debug@4.3.6:
- resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- decode-named-character-reference@1.0.2:
- resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
-
- delayed-stream@1.0.0:
- resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
- engines: {node: '>=0.4.0'}
-
- dequal@2.0.3:
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
- engines: {node: '>=6'}
-
- detect-node-es@1.1.0:
- resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
-
- didyoumean@1.2.2:
- resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
-
- diff-match-patch@1.0.5:
- resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
-
- diff@5.2.0:
- resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
- engines: {node: '>=0.3.1'}
-
- dlv@1.1.3:
- resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
-
- eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
- electron-to-chromium@1.5.13:
- resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==}
-
- emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
- emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-
- entities@4.5.0:
- resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
- engines: {node: '>=0.12'}
-
- escalade@3.1.2:
- resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
- engines: {node: '>=6'}
-
- escape-string-regexp@5.0.0:
- resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
- engines: {node: '>=12'}
-
- estree-walker@2.0.2:
- resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
-
- estree-walker@3.0.3:
- resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
-
- event-target-shim@5.0.1:
- resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
- engines: {node: '>=6'}
-
- eventsource-parser@1.1.2:
- resolution: {integrity: sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==}
- engines: {node: '>=14.18'}
-
- extend@3.0.2:
- resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
-
- fast-glob@3.3.2:
- resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
- engines: {node: '>=8.6.0'}
-
- fastq@1.17.1:
- resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
-
- fault@1.0.4:
- resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
-
- fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
- engines: {node: '>=8'}
-
- foreground-child@3.3.0:
- resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
- engines: {node: '>=14'}
-
- form-data-encoder@1.7.2:
- resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==}
-
- form-data@4.0.0:
- resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
- engines: {node: '>= 6'}
-
- format@0.2.2:
- resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
- engines: {node: '>=0.4.x'}
-
- formdata-node@4.4.1:
- resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==}
- engines: {node: '>= 12.20'}
-
- fraction.js@4.3.7:
- resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
-
- framer-motion@11.3.30:
- resolution: {integrity: sha512-9VmqGe9OIjfMoCcs+ZsKXlv6JaG5QagKX2F1uSbkG3Z33wgjnz60Kw+CngC1M49rDYau+Y9aL+8jGagAwrbVyw==}
- peerDependencies:
- '@emotion/is-prop-valid': '*'
- react: ^18.0.0
- react-dom: ^18.0.0
- peerDependenciesMeta:
- '@emotion/is-prop-valid':
- optional: true
- react:
- optional: true
- react-dom:
- optional: true
-
- 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'}
-
- glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
-
- glob-parent@6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
-
- glob@10.4.5:
- resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
- hasBin: true
-
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
- hasown@2.0.2:
- resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
- engines: {node: '>= 0.4'}
-
- hast-util-parse-selector@2.2.5:
- resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==}
-
- hast-util-whitespace@2.0.1:
- resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
-
- hastscript@6.0.0:
- resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==}
-
- highlight.js@10.7.3:
- resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
-
- humanize-ms@1.2.1:
- resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
-
- inline-style-parser@0.1.1:
- resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
-
- invariant@2.2.4:
- resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
-
- is-alphabetical@1.0.4:
- resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
-
- is-alphanumerical@1.0.4:
- resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
-
- is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
-
- is-buffer@2.0.5:
- resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
- engines: {node: '>=4'}
-
- is-core-module@2.15.1:
- resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
- engines: {node: '>= 0.4'}
-
- is-decimal@1.0.4:
- resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
-
- is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
-
- is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
-
- is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
-
- is-hexadecimal@1.0.4:
- resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
-
- is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
-
- is-plain-obj@4.1.0:
- resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
- engines: {node: '>=12'}
-
- is-reference@3.0.2:
- resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==}
-
- isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
- jackspeak@3.4.3:
- resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
-
- jiti@1.21.6:
- resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
- hasBin: true
-
- jose@5.7.0:
- resolution: {integrity: sha512-3P9qfTYDVnNn642LCAqIKbTGb9a1TBxZ9ti5zEVEr48aDdflgRjhspWFb6WM4PzAfFbGMJYC4+803v8riCRAKw==}
-
- js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
- json-schema@0.4.0:
- resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
-
- jsondiffpatch@0.6.0:
- resolution: {integrity: sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==}
- engines: {node: ^18.0.0 || >=20.0.0}
- hasBin: true
-
- katex@0.16.11:
- resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==}
- hasBin: true
-
- kleur@4.1.5:
- resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
- engines: {node: '>=6'}
-
- lilconfig@2.1.0:
- resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
- engines: {node: '>=10'}
-
- lilconfig@3.1.2:
- resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
- engines: {node: '>=14'}
-
- lines-and-columns@1.2.4:
- resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
-
- locate-character@3.0.0:
- resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
-
- lodash.castarray@4.4.0:
- resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
-
- 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==}
-
- loose-envify@1.4.0:
- resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
- hasBin: true
-
- lowlight@1.20.0:
- resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
-
- lru-cache@10.4.3:
- resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
-
- magic-string@0.30.11:
- resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
-
- markdown-table@3.0.3:
- resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
-
- mdast-util-definitions@5.1.2:
- resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
-
- mdast-util-find-and-replace@2.2.2:
- resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==}
-
- mdast-util-from-markdown@1.3.1:
- resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
-
- mdast-util-gfm-autolink-literal@1.0.3:
- resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==}
-
- mdast-util-gfm-footnote@1.0.2:
- resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==}
-
- mdast-util-gfm-strikethrough@1.0.3:
- resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==}
-
- mdast-util-gfm-table@1.0.7:
- resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==}
-
- mdast-util-gfm-task-list-item@1.0.2:
- resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==}
-
- mdast-util-gfm@2.0.2:
- resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==}
-
- mdast-util-math@2.0.2:
- resolution: {integrity: sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==}
-
- mdast-util-phrasing@3.0.1:
- resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==}
-
- mdast-util-to-hast@12.3.0:
- resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
-
- mdast-util-to-markdown@1.5.0:
- resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
-
- mdast-util-to-string@3.2.0:
- resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
-
- mdn-data@2.0.30:
- resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
-
- merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
-
- micromark-core-commonmark@1.1.0:
- resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
-
- micromark-extension-gfm-autolink-literal@1.0.5:
- resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==}
-
- micromark-extension-gfm-footnote@1.1.2:
- resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==}
-
- micromark-extension-gfm-strikethrough@1.0.7:
- resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==}
-
- micromark-extension-gfm-table@1.0.7:
- resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==}
-
- micromark-extension-gfm-tagfilter@1.0.2:
- resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==}
-
- micromark-extension-gfm-task-list-item@1.0.5:
- resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==}
-
- micromark-extension-gfm@2.0.3:
- resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==}
-
- micromark-extension-math@2.1.2:
- resolution: {integrity: sha512-es0CcOV89VNS9wFmyn+wyFTKweXGW4CEvdaAca6SWRWPyYCbBisnjaHLjWO4Nszuiud84jCpkHsqAJoa768Pvg==}
-
- micromark-factory-destination@1.1.0:
- resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
-
- micromark-factory-label@1.1.0:
- resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
-
- micromark-factory-space@1.1.0:
- resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
-
- micromark-factory-title@1.1.0:
- resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
-
- micromark-factory-whitespace@1.1.0:
- resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
-
- micromark-util-character@1.2.0:
- resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
-
- micromark-util-chunked@1.1.0:
- resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
-
- micromark-util-classify-character@1.1.0:
- resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
-
- micromark-util-combine-extensions@1.1.0:
- resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
-
- micromark-util-decode-numeric-character-reference@1.1.0:
- resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
-
- micromark-util-decode-string@1.1.0:
- resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
-
- micromark-util-encode@1.1.0:
- resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
-
- micromark-util-html-tag-name@1.2.0:
- resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
-
- micromark-util-normalize-identifier@1.1.0:
- resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
-
- micromark-util-resolve-all@1.1.0:
- resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
-
- micromark-util-sanitize-uri@1.2.0:
- resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
-
- micromark-util-subtokenize@1.1.0:
- resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
-
- micromark-util-symbol@1.1.0:
- resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
-
- micromark-util-types@1.1.0:
- resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
-
- micromark@3.2.0:
- resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
-
- micromatch@4.0.8:
- resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
- engines: {node: '>=8.6'}
-
- mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
-
- mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
-
- minimatch@9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- mri@1.2.0:
- resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
- engines: {node: '>=4'}
-
- ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
-
- ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
- mz@2.7.0:
- resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
-
- nanoid@3.3.6:
- resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
- nanoid@3.3.7:
- resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
- nanoid@5.0.7:
- resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==}
- engines: {node: ^18 || >=20}
- hasBin: true
-
- next-auth@5.0.0-beta.4:
- resolution: {integrity: sha512-vgocjvwPA8gxd/zrIP/vr9lJ/HeNe+C56lPP1D3sdyenHt8KncQV6ro7q0xCsDp1fcOKx7WAWVZH5o8aMxDzgw==}
- peerDependencies:
- next: ^14
- nodemailer: ^6.6.5
- react: ^18.2.0
- peerDependenciesMeta:
- 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@14.2.6:
- resolution: {integrity: sha512-57Su7RqXs5CBKKKOagt8gPhMM3CpjgbeQhrtei2KLAA1vTNm7jfKS+uDARkSW8ZETUflDCBIsUKGSyQdRs4U4g==}
- engines: {node: '>=18.17.0'}
- hasBin: true
- peerDependencies:
- '@opentelemetry/api': ^1.1.0
- '@playwright/test': ^1.41.2
- react: ^18.2.0
- react-dom: ^18.2.0
- sass: ^1.3.0
- peerDependenciesMeta:
- '@opentelemetry/api':
- optional: true
- '@playwright/test':
- optional: true
- sass:
- optional: true
-
- node-domexception@1.0.0:
- resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
- engines: {node: '>=10.5.0'}
-
- node-fetch@2.7.0:
- resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
- engines: {node: 4.x || >=6.0.0}
- peerDependencies:
- encoding: ^0.1.0
- peerDependenciesMeta:
- encoding:
- optional: true
-
- node-releases@2.0.18:
- resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
-
- normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
-
- normalize-range@0.1.2:
- resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
- engines: {node: '>=0.10.0'}
-
- oauth4webapi@2.12.0:
- resolution: {integrity: sha512-WFmcHzhFtq2Ar91crpGQZUD8DS0SG7Zti1AgbansUAfdpIsoRXE+hcMNi8MW6bGNNObWis0x8BZRl6K+FR4oQg==}
-
- object-assign@4.1.1:
- resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
- engines: {node: '>=0.10.0'}
-
- object-hash@3.0.0:
- resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
- engines: {node: '>= 6'}
-
- openai@4.56.0:
- resolution: {integrity: sha512-zcag97+3bG890MNNa0DQD9dGmmTWL8unJdNkulZzWRXrl+QeD+YkBI4H58rJcwErxqGK6a0jVPZ4ReJjhDGcmw==}
- hasBin: true
- peerDependencies:
- zod: ^3.23.8
- peerDependenciesMeta:
- zod:
- optional: true
-
- package-json-from-dist@1.0.0:
- resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
-
- parse-entities@2.0.0:
- resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
-
- path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
-
- path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-
- path-scurry@1.11.1:
- resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
- engines: {node: '>=16 || 14 >=14.18'}
-
- periscopic@3.1.0:
- resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
-
- picocolors@1.0.1:
- resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
-
- picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
-
- pify@2.3.0:
- resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
- engines: {node: '>=0.10.0'}
-
- pirates@4.0.6:
- resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
- engines: {node: '>= 6'}
-
- postcss-import@15.1.0:
- resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- postcss: ^8.0.0
-
- postcss-js@4.0.1:
- resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
- engines: {node: ^12 || ^14 || >= 16}
- peerDependencies:
- postcss: ^8.4.21
-
- postcss-load-config@4.0.2:
- resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
- engines: {node: '>= 14'}
- peerDependencies:
- postcss: '>=8.0.9'
- ts-node: '>=9.0.0'
- peerDependenciesMeta:
- postcss:
- optional: true
- ts-node:
- optional: true
-
- postcss-nested@6.2.0:
- resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
- engines: {node: '>=12.0'}
- peerDependencies:
- postcss: ^8.2.14
-
- postcss-selector-parser@6.0.10:
- resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
- engines: {node: '>=4'}
-
- postcss-selector-parser@6.1.2:
- resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
- engines: {node: '>=4'}
-
- postcss-value-parser@4.2.0:
- resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
-
- postcss@8.4.31:
- resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
- engines: {node: ^10 || ^12 || >=14}
-
- postcss@8.4.41:
- resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==}
- engines: {node: ^10 || ^12 || >=14}
-
- 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==}
-
- prettier@3.3.3:
- resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
- engines: {node: '>=14'}
- hasBin: true
-
- 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.29.0:
- resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
- engines: {node: '>=6'}
-
- prop-types@15.8.1:
- resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
-
- property-information@5.6.0:
- resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
-
- property-information@6.5.0:
- resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
-
- queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
- react-dom@18.3.1:
- resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
- peerDependencies:
- react: ^18.3.1
-
- react-intersection-observer@9.13.0:
- resolution: {integrity: sha512-y0UvBfjDiXqC8h0EWccyaj4dVBWMxgEx0t5RGNzQsvkfvZwugnKwxpu70StY4ivzYuMajavwUDjH4LJyIki9Lw==}
- peerDependencies:
- react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- peerDependenciesMeta:
- react-dom:
- optional: true
-
- react-is@16.13.1:
- resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
-
- react-is@18.3.1:
- resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
-
- react-markdown@8.0.7:
- resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==}
- peerDependencies:
- '@types/react': '>=16'
- react: '>=16'
-
- react-remove-scroll-bar@2.3.6:
- resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==}
- engines: {node: '>=10'}
- peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- react-remove-scroll@2.5.7:
- resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==}
- engines: {node: '>=10'}
- peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- react-style-singleton@2.2.1:
- resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
- engines: {node: '>=10'}
- peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- react-syntax-highlighter@15.5.0:
- resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==}
- peerDependencies:
- react: '>= 0.14.0'
-
- react-textarea-autosize@8.5.3:
- resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==}
- engines: {node: '>=10'}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
-
- react@18.3.1:
- resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
- engines: {node: '>=0.10.0'}
-
- read-cache@1.0.0:
- resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
-
- readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
-
- refractor@3.6.0:
- resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==}
-
- regenerator-runtime@0.14.1:
- resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
-
- remark-gfm@3.0.1:
- resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
-
- remark-math@5.1.1:
- resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==}
-
- remark-parse@10.0.2:
- resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==}
-
- remark-rehype@10.1.0:
- resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
-
- resolve@1.22.8:
- resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
- hasBin: true
-
- reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
- run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
- sade@1.8.1:
- resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
- engines: {node: '>=6'}
-
- scheduler@0.23.2:
- resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
-
- secure-json-parse@2.7.0:
- resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
-
- server-only@0.0.1:
- resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
-
- shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
-
- shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
-
- signal-exit@4.1.0:
- resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
- engines: {node: '>=14'}
-
- sonner@1.5.0:
- resolution: {integrity: sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==}
- peerDependencies:
- react: ^18.0.0
- react-dom: ^18.0.0
-
- source-map-js@1.2.0:
- resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
- 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==}
-
- sswr@2.1.0:
- resolution: {integrity: sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==}
- peerDependencies:
- svelte: ^4.0.0 || ^5.0.0-next.0
-
- streamsearch@1.1.0:
- resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
- engines: {node: '>=10.0.0'}
-
- string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
-
- string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
-
- strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
-
- strip-ansi@7.1.0:
- resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
- engines: {node: '>=12'}
-
- style-to-object@0.4.4:
- resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==}
-
- styled-jsx@5.1.1:
- resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
- engines: {node: '>= 12.0.0'}
- peerDependencies:
- '@babel/core': '*'
- babel-plugin-macros: '*'
- react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
- peerDependenciesMeta:
- '@babel/core':
- optional: true
- babel-plugin-macros:
- optional: true
-
- sucrase@3.35.0:
- resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
- engines: {node: '>=16 || 14 >=14.17'}
- hasBin: true
-
- supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
-
- svelte@4.2.19:
- resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==}
- engines: {node: '>=16'}
-
- swr@2.2.5:
- resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==}
- peerDependencies:
- react: ^16.11.0 || ^17.0.0 || ^18.0.0
-
- swrev@4.0.0:
- resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==}
-
- swrv@1.0.4:
- resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==}
- peerDependencies:
- vue: '>=3.2.26 < 4'
-
- tailwind-merge@2.5.2:
- resolution: {integrity: sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==}
-
- tailwindcss-animate@1.0.7:
- resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==}
- peerDependencies:
- tailwindcss: '>=3.0.0 || insiders'
-
- tailwindcss@3.4.10:
- resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==}
- engines: {node: '>=14.0.0'}
- hasBin: true
-
- thenify-all@1.6.0:
- resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
- engines: {node: '>=0.8'}
-
- thenify@3.3.1:
- resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
-
- to-fast-properties@2.0.0:
- resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
- engines: {node: '>=4'}
-
- to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
-
- tr46@0.0.3:
- resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
-
- trim-lines@3.0.1:
- resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
-
- trough@2.2.0:
- resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
-
- ts-interface-checker@0.1.13:
- resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
-
- tslib@2.7.0:
- resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
-
- typescript@5.5.4:
- resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
- engines: {node: '>=14.17'}
- hasBin: true
-
- undici-types@5.26.5:
- resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
-
- undici-types@6.19.8:
- resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
-
- unified@10.1.2:
- resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
-
- unist-util-generated@2.0.1:
- resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
-
- unist-util-is@5.2.1:
- resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
-
- unist-util-position@4.0.4:
- resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
-
- unist-util-stringify-position@3.0.3:
- resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
-
- unist-util-visit-parents@5.1.3:
- resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
-
- unist-util-visit@4.1.2:
- resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
-
- update-browserslist-db@1.1.0:
- resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
-
- use-callback-ref@1.3.2:
- resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==}
- engines: {node: '>=10'}
- peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- use-composed-ref@1.3.0:
- resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
-
- use-isomorphic-layout-effect@1.1.2:
- resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==}
- peerDependencies:
- '@types/react': '*'
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- use-latest@1.2.1:
- resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==}
- peerDependencies:
- '@types/react': '*'
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- use-sidecar@1.1.2:
- resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
- engines: {node: '>=10'}
- peerDependencies:
- '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- use-sync-external-store@1.2.2:
- resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
-
- util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
- uvu@0.5.6:
- resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
- engines: {node: '>=8'}
- hasBin: true
-
- vfile-message@3.1.4:
- resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
-
- vfile@5.3.7:
- resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
-
- vue@3.4.38:
- resolution: {integrity: sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- web-streams-polyfill@4.0.0-beta.3:
- resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==}
- engines: {node: '>= 14'}
-
- webidl-conversions@3.0.1:
- resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
-
- whatwg-url@5.0.0:
- resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
-
- which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
-
- wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
-
- wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
-
- xtend@4.0.2:
- resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
- engines: {node: '>=0.4'}
-
- yaml@2.5.0:
- resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==}
- engines: {node: '>= 14'}
- hasBin: true
-
- zod-to-json-schema@3.23.2:
- resolution: {integrity: sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw==}
- peerDependencies:
- zod: ^3.23.3
-
- zod@3.23.8:
- resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
-
- zwitch@2.0.4:
- resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
-
-snapshots:
-
- '@ai-sdk/openai@0.0.53(zod@3.23.8)':
dependencies:
- '@ai-sdk/provider': 0.0.21
- '@ai-sdk/provider-utils': 1.0.16(zod@3.23.8)
- zod: 3.23.8
-
- '@ai-sdk/provider-utils@1.0.16(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider': 0.0.21
- eventsource-parser: 1.1.2
- nanoid: 3.3.6
- secure-json-parse: 2.7.0
- optionalDependencies:
- zod: 3.23.8
-
- '@ai-sdk/provider@0.0.21':
- dependencies:
- json-schema: 0.4.0
-
- '@ai-sdk/react@0.0.51(react@18.3.1)(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider-utils': 1.0.16(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.38(zod@3.23.8)
- swr: 2.2.5(react@18.3.1)
- optionalDependencies:
- react: 18.3.1
- zod: 3.23.8
-
- '@ai-sdk/solid@0.0.41(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider-utils': 1.0.16(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.38(zod@3.23.8)
- transitivePeerDependencies:
- - zod
-
- '@ai-sdk/svelte@0.0.43(svelte@4.2.19)(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider-utils': 1.0.16(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.38(zod@3.23.8)
- sswr: 2.1.0(svelte@4.2.19)
- optionalDependencies:
- svelte: 4.2.19
- transitivePeerDependencies:
- - zod
-
- '@ai-sdk/ui-utils@0.0.38(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider': 0.0.21
- '@ai-sdk/provider-utils': 1.0.16(zod@3.23.8)
- json-schema: 0.4.0
- secure-json-parse: 2.7.0
- zod-to-json-schema: 3.23.2(zod@3.23.8)
- optionalDependencies:
- zod: 3.23.8
-
- '@ai-sdk/vue@0.0.43(vue@3.4.38(typescript@5.5.4))(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider-utils': 1.0.16(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.38(zod@3.23.8)
- swrv: 1.0.4(vue@3.4.38(typescript@5.5.4))
- optionalDependencies:
- vue: 3.4.38(typescript@5.5.4)
- transitivePeerDependencies:
- - zod
-
- '@alloc/quick-lru@5.2.0': {}
-
- '@ampproject/remapping@2.3.0':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
-
- '@auth/core@0.18.4':
- dependencies:
- '@panva/hkdf': 1.2.1
- cookie: 0.6.0
- jose: 5.7.0
- oauth4webapi: 2.12.0
- preact: 10.11.3
- preact-render-to-string: 5.2.3(preact@10.11.3)
-
- '@babel/helper-string-parser@7.24.8': {}
-
- '@babel/helper-validator-identifier@7.24.7': {}
-
- '@babel/parser@7.25.4':
- dependencies:
- '@babel/types': 7.25.4
-
- '@babel/runtime@7.25.4':
- dependencies:
- regenerator-runtime: 0.14.1
-
- '@babel/types@7.25.4':
- dependencies:
- '@babel/helper-string-parser': 7.24.8
- '@babel/helper-validator-identifier': 7.24.7
- to-fast-properties: 2.0.0
-
- '@floating-ui/core@1.6.7':
- dependencies:
- '@floating-ui/utils': 0.2.7
-
- '@floating-ui/dom@1.6.10':
- dependencies:
- '@floating-ui/core': 1.6.7
- '@floating-ui/utils': 0.2.7
-
- '@floating-ui/react-dom@2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@floating-ui/dom': 1.6.10
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
- '@floating-ui/utils@0.2.7': {}
-
- '@isaacs/cliui@8.0.2':
- dependencies:
- string-width: 5.1.2
- string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.0
- strip-ansi-cjs: strip-ansi@6.0.1
- wrap-ansi: 8.1.0
- wrap-ansi-cjs: wrap-ansi@7.0.0
-
- '@jridgewell/gen-mapping@0.3.5':
- dependencies:
- '@jridgewell/set-array': 1.2.1
- '@jridgewell/sourcemap-codec': 1.5.0
- '@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/trace-mapping@0.3.25':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.0
-
- '@next/env@14.2.6': {}
-
- '@next/swc-darwin-arm64@14.2.6':
- optional: true
-
- '@next/swc-darwin-x64@14.2.6':
- optional: true
-
- '@next/swc-linux-arm64-gnu@14.2.6':
- optional: true
-
- '@next/swc-linux-arm64-musl@14.2.6':
- optional: true
-
- '@next/swc-linux-x64-gnu@14.2.6':
- optional: true
-
- '@next/swc-linux-x64-musl@14.2.6':
- optional: true
-
- '@next/swc-win32-arm64-msvc@14.2.6':
- optional: true
-
- '@next/swc-win32-ia32-msvc@14.2.6':
- optional: true
-
- '@next/swc-win32-x64-msvc@14.2.6':
- optional: true
-
- '@nodelib/fs.scandir@2.1.5':
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
-
- '@nodelib/fs.stat@2.0.5': {}
-
- '@nodelib/fs.walk@1.2.8':
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.17.1
-
- '@opentelemetry/api@1.9.0': {}
-
- '@panva/hkdf@1.2.1': {}
-
- '@pkgjs/parseargs@0.11.0':
- optional: true
-
- '@radix-ui/number@1.1.0': {}
-
- '@radix-ui/primitive@1.1.0': {}
-
- '@radix-ui/react-alert-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/primitive': 1.1.0
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-dialog': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-slot': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-slot': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-context@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/primitive': 1.1.0
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-id': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-slot': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- aria-hidden: 1.2.4
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- react-remove-scroll: 2.5.7(@types/react@18.3.4)(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-direction@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/primitive': 1.1.0
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-dropdown-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/primitive': 1.1.0
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-id': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-icons@1.3.0(react@18.3.1)':
- dependencies:
- react: 18.3.1
-
- '@radix-ui/react-id@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-label@2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/primitive': 1.1.0
- '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-direction': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-id': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-slot': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- aria-hidden: 1.2.4
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- react-remove-scroll: 2.5.7(@types/react@18.3.4)(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/rect': 1.1.0
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/react-slot': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/primitive': 1.1.0
- '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-direction': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-id': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-select@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/number': 1.1.0
- '@radix-ui/primitive': 1.1.0
- '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-direction': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-id': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-slot': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- aria-hidden: 1.2.4
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- react-remove-scroll: 2.5.7(@types/react@18.3.4)(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-separator@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-slot@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-switch@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/primitive': 1.1.0
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/primitive': 1.1.0
- '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-id': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-slot': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- '@radix-ui/rect': 1.1.0
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-use-size@1.1.0(@types/react@18.3.4)(react@18.3.1)':
- dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.4)(react@18.3.1)
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
- '@types/react-dom': 18.3.0
-
- '@radix-ui/rect@1.1.0': {}
-
- '@swc/counter@0.1.3': {}
-
- '@swc/helpers@0.5.5':
- dependencies:
- '@swc/counter': 0.1.3
- tslib: 2.7.0
-
- '@tailwindcss/typography@0.5.14(tailwindcss@3.4.10)':
- dependencies:
- lodash.castarray: 4.4.0
- lodash.isplainobject: 4.0.6
- lodash.merge: 4.6.2
- postcss-selector-parser: 6.0.10
- tailwindcss: 3.4.10
-
- '@types/debug@4.1.12':
- dependencies:
- '@types/ms': 0.7.34
-
- '@types/diff-match-patch@1.0.36': {}
-
- '@types/estree@1.0.5': {}
-
- '@types/hast@2.3.10':
- dependencies:
- '@types/unist': 2.0.11
-
- '@types/katex@0.16.7': {}
-
- '@types/mdast@3.0.15':
- dependencies:
- '@types/unist': 2.0.11
-
- '@types/ms@0.7.34': {}
-
- '@types/node-fetch@2.6.11':
- dependencies:
- '@types/node': 22.5.0
- form-data: 4.0.0
-
- '@types/node@18.19.45':
- dependencies:
- undici-types: 5.26.5
-
- '@types/node@22.5.0':
- dependencies:
- undici-types: 6.19.8
-
- '@types/prop-types@15.7.12': {}
-
- '@types/react-dom@18.3.0':
- dependencies:
- '@types/react': 18.3.4
-
- '@types/react-syntax-highlighter@15.5.13':
- dependencies:
- '@types/react': 18.3.4
-
- '@types/react@18.3.4':
- dependencies:
- '@types/prop-types': 15.7.12
- csstype: 3.1.3
-
- '@types/unist@2.0.11': {}
-
- '@upstash/redis@1.34.0':
- dependencies:
- crypto-js: 4.2.0
-
- '@vercel/analytics@1.3.1(next@14.2.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
- dependencies:
- server-only: 0.0.1
- optionalDependencies:
- next: 14.2.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react: 18.3.1
-
- '@vercel/kv@2.0.0':
- dependencies:
- '@upstash/redis': 1.34.0
-
- '@vue/compiler-core@3.4.38':
- dependencies:
- '@babel/parser': 7.25.4
- '@vue/shared': 3.4.38
- entities: 4.5.0
- estree-walker: 2.0.2
- source-map-js: 1.2.0
-
- '@vue/compiler-dom@3.4.38':
- dependencies:
- '@vue/compiler-core': 3.4.38
- '@vue/shared': 3.4.38
-
- '@vue/compiler-sfc@3.4.38':
- dependencies:
- '@babel/parser': 7.25.4
- '@vue/compiler-core': 3.4.38
- '@vue/compiler-dom': 3.4.38
- '@vue/compiler-ssr': 3.4.38
- '@vue/shared': 3.4.38
- estree-walker: 2.0.2
- magic-string: 0.30.11
- postcss: 8.4.41
- source-map-js: 1.2.0
-
- '@vue/compiler-ssr@3.4.38':
- dependencies:
- '@vue/compiler-dom': 3.4.38
- '@vue/shared': 3.4.38
-
- '@vue/reactivity@3.4.38':
- dependencies:
- '@vue/shared': 3.4.38
-
- '@vue/runtime-core@3.4.38':
- dependencies:
- '@vue/reactivity': 3.4.38
- '@vue/shared': 3.4.38
-
- '@vue/runtime-dom@3.4.38':
- dependencies:
- '@vue/reactivity': 3.4.38
- '@vue/runtime-core': 3.4.38
- '@vue/shared': 3.4.38
- csstype: 3.1.3
-
- '@vue/server-renderer@3.4.38(vue@3.4.38(typescript@5.5.4))':
- dependencies:
- '@vue/compiler-ssr': 3.4.38
- '@vue/shared': 3.4.38
- vue: 3.4.38(typescript@5.5.4)
-
- '@vue/shared@3.4.38': {}
-
- abort-controller@3.0.0:
- dependencies:
- event-target-shim: 5.0.1
-
- acorn@8.12.1: {}
-
- agentkeepalive@4.5.0:
- dependencies:
- humanize-ms: 1.2.1
-
- ai@3.3.17(openai@4.56.0(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.4.38(typescript@5.5.4))(zod@3.23.8):
- dependencies:
- '@ai-sdk/provider': 0.0.21
- '@ai-sdk/provider-utils': 1.0.16(zod@3.23.8)
- '@ai-sdk/react': 0.0.51(react@18.3.1)(zod@3.23.8)
- '@ai-sdk/solid': 0.0.41(zod@3.23.8)
- '@ai-sdk/svelte': 0.0.43(svelte@4.2.19)(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.38(zod@3.23.8)
- '@ai-sdk/vue': 0.0.43(vue@3.4.38(typescript@5.5.4))(zod@3.23.8)
+ '@ai-sdk/provider': 0.0.24
+ '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8)
+ '@ai-sdk/react': 0.0.62(react@19.0.0-rc-7771d3a7-20240827)(zod@3.23.8)
+ '@ai-sdk/solid': 0.0.49(zod@3.23.8)
+ '@ai-sdk/svelte': 0.0.51(svelte@4.2.18)(zod@3.23.8)
+ '@ai-sdk/ui-utils': 0.0.46(zod@3.23.8)
+ '@ai-sdk/vue': 0.0.54(vue@3.4.35)(zod@3.23.8)
'@opentelemetry/api': 1.9.0
eventsource-parser: 1.1.2
json-schema: 0.4.0
jsondiffpatch: 0.6.0
nanoid: 3.3.6
+ react: 19.0.0-rc-7771d3a7-20240827
secure-json-parse: 2.7.0
- zod-to-json-schema: 3.23.2(zod@3.23.8)
- optionalDependencies:
- openai: 4.56.0(zod@3.23.8)
- react: 18.3.1
- sswr: 2.1.0(svelte@4.2.19)
- svelte: 4.2.19
+ svelte: 4.2.18
zod: 3.23.8
+ zod-to-json-schema: 3.23.2(zod@3.23.8)
transitivePeerDependencies:
- solid-js
- vue
+ dev: false
- ansi-regex@5.0.1: {}
+ /ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+ dev: true
- ansi-regex@6.0.1: {}
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
- ansi-styles@4.3.0:
+ /ansi-regex@6.0.1:
+ resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
+ engines: {node: '>=12'}
+
+ /ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
dependencies:
color-convert: 2.0.1
- ansi-styles@6.2.1: {}
+ /ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
- any-promise@1.3.0: {}
+ /any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
- anymatch@3.1.3:
+ /anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
- arg@5.0.2: {}
+ /arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
- aria-hidden@1.2.4:
+ /argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ dev: true
+
+ /aria-hidden@1.2.4:
+ resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
+ engines: {node: '>=10'}
dependencies:
- tslib: 2.7.0
+ tslib: 2.6.3
+ dev: false
- aria-query@5.3.0:
+ /aria-query@5.1.3:
+ resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
+ dependencies:
+ deep-equal: 2.2.3
+ dev: true
+
+ /aria-query@5.3.0:
+ resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
dependencies:
dequal: 2.0.3
+ dev: false
- asynckit@0.4.0: {}
-
- autoprefixer@10.4.20(postcss@8.4.41):
+ /array-buffer-byte-length@1.0.1:
+ resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
+ engines: {node: '>= 0.4'}
dependencies:
- browserslist: 4.23.3
- caniuse-lite: 1.0.30001651
- fraction.js: 4.3.7
- normalize-range: 0.1.2
- picocolors: 1.0.1
- postcss: 8.4.41
- postcss-value-parser: 4.2.0
+ call-bind: 1.0.7
+ is-array-buffer: 3.0.4
+ dev: true
- axobject-query@4.1.0: {}
+ /array-includes@3.1.8:
+ resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
+ get-intrinsic: 1.2.4
+ is-string: 1.0.7
+ dev: true
- bail@2.0.2: {}
+ /array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+ dev: true
- balanced-match@1.0.2: {}
+ /array.prototype.findlast@1.2.5:
+ resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ es-shim-unscopables: 1.0.2
+ dev: true
- binary-extensions@2.3.0: {}
+ /array.prototype.findlastindex@1.2.5:
+ resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ es-shim-unscopables: 1.0.2
+ dev: true
- brace-expansion@2.0.1:
+ /array.prototype.flat@1.3.2:
+ resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-shim-unscopables: 1.0.2
+ dev: true
+
+ /array.prototype.flatmap@1.3.2:
+ resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-shim-unscopables: 1.0.2
+ dev: true
+
+ /array.prototype.tosorted@1.1.4:
+ resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ es-shim-unscopables: 1.0.2
+ dev: true
+
+ /arraybuffer.prototype.slice@1.0.3:
+ resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ is-array-buffer: 3.0.4
+ is-shared-array-buffer: 1.0.3
+ dev: true
+
+ /ast-types-flow@0.0.8:
+ resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
+ dev: true
+
+ /async-retry@1.3.3:
+ resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
+ dependencies:
+ retry: 0.13.1
+ dev: false
+
+ /available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ possible-typed-array-names: 1.0.0
+ dev: true
+
+ /axe-core@4.10.0:
+ resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /axobject-query@3.1.1:
+ resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==}
+ dependencies:
+ deep-equal: 2.2.3
+ dev: true
+
+ /axobject-query@4.1.0:
+ resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
+ engines: {node: '>= 0.4'}
+ dev: false
+
+ /bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+ dev: false
+
+ /balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ /bcrypt-ts@5.0.2:
+ resolution: {integrity: sha512-gDwQ5784AkkfhHACh3jGcg1hUubyZyeq9AtVd5gXkcyHGVOC+mORjRIHSj+fHfqwY5vxwyBLXQpcfk8MpK0ROg==}
+ engines: {node: '>=18'}
+ dev: false
+
+ /binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ /brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+ dev: true
+
+ /brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
dependencies:
balanced-match: 1.0.2
- braces@3.0.3:
+ /braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
dependencies:
fill-range: 7.1.1
- browserslist@4.23.3:
- dependencies:
- caniuse-lite: 1.0.30001651
- electron-to-chromium: 1.5.13
- node-releases: 2.0.18
- update-browserslist-db: 1.1.0(browserslist@4.23.3)
+ /buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+ dev: true
- busboy@1.6.0:
+ /bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+ requiresBuild: true
+ dependencies:
+ node-gyp-build: 4.8.2
+ dev: false
+
+ /busboy@1.6.0:
+ resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
+ engines: {node: '>=10.16.0'}
dependencies:
streamsearch: 1.1.0
+ dev: false
- camelcase-css@2.0.1: {}
+ /bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+ dev: false
- caniuse-lite@1.0.30001651: {}
+ /call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+ dev: true
- ccount@2.0.1: {}
+ /callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+ dev: true
- chalk@5.3.0: {}
+ /camelcase-css@2.0.1:
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+ engines: {node: '>= 6'}
- character-entities-legacy@1.1.4: {}
+ /caniuse-lite@1.0.30001645:
+ resolution: {integrity: sha512-GFtY2+qt91kzyMk6j48dJcwJVq5uTkk71XxE3RtScx7XWRLsO7bU44LOFkOZYR8w9YMS0UhPSYpN/6rAMImmLw==}
+ dev: false
- character-entities@1.2.4: {}
+ /ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+ dev: false
- character-entities@2.0.2: {}
+ /chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
- character-reference-invalid@1.1.4: {}
+ /chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ dev: false
- chokidar@3.6.0:
+ /character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+ dev: false
+
+ /character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+ dev: false
+
+ /character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+ dev: false
+
+ /character-reference-invalid@2.0.1:
+ resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+ dev: false
+
+ /chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
dependencies:
anymatch: 3.1.3
braces: 3.0.3
@@ -2974,1060 +2805,3419 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
- class-variance-authority@0.7.0:
+ /class-variance-authority@0.7.0:
+ resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==}
dependencies:
clsx: 2.0.0
+ dev: false
- client-only@0.0.1: {}
+ /classnames@2.5.1:
+ resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
+ dev: false
- clsx@2.0.0: {}
+ /client-only@0.0.1:
+ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+ dev: false
- clsx@2.1.1: {}
+ /clsx@2.0.0:
+ resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
+ engines: {node: '>=6'}
+ dev: false
- code-red@1.0.4:
+ /clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /code-red@1.0.4:
+ resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
'@types/estree': 1.0.5
acorn: 8.12.1
estree-walker: 3.0.3
periscopic: 3.1.0
+ dev: false
- color-convert@2.0.1:
+ /color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
dependencies:
color-name: 1.1.4
- color-name@1.1.4: {}
+ /color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- combined-stream@1.0.8:
+ /color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+ requiresBuild: true
dependencies:
- delayed-stream: 1.0.0
+ color-name: 1.1.4
+ simple-swizzle: 0.2.2
+ dev: false
+ optional: true
- comma-separated-tokens@1.0.8: {}
+ /color@4.2.3:
+ resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
+ engines: {node: '>=12.5.0'}
+ requiresBuild: true
+ dependencies:
+ color-convert: 2.0.1
+ color-string: 1.9.1
+ dev: false
+ optional: true
- comma-separated-tokens@2.0.3: {}
+ /comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+ dev: false
- commander@4.1.1: {}
+ /commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
- commander@8.3.0: {}
+ /concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ dev: true
- cookie@0.6.0: {}
+ /cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
+ engines: {node: '>= 0.6'}
+ dev: false
- cross-spawn@7.0.3:
+ /cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
- crypto-js@4.2.0: {}
-
- css-tree@2.3.1:
+ /css-tree@2.3.1:
+ resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
dependencies:
mdn-data: 2.0.30
source-map-js: 1.2.0
+ dev: false
- cssesc@3.0.0: {}
+ /cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
- csstype@3.1.3: {}
+ /csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
- debug@4.3.6:
+ /damerau-levenshtein@1.0.8:
+ resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
+ dev: true
+
+ /data-view-buffer@1.0.1:
+ resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+ dev: true
+
+ /data-view-byte-length@1.0.1:
+ resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+ dev: true
+
+ /data-view-byte-offset@1.0.0:
+ resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+ dev: true
+
+ /date-fns@4.1.0:
+ resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
+ dev: false
+
+ /debug@3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.3
+ dev: true
+
+ /debug@4.3.6:
+ resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
dependencies:
ms: 2.1.2
- decode-named-character-reference@1.0.2:
+ /decode-named-character-reference@1.0.2:
+ resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
dependencies:
character-entities: 2.0.2
+ dev: false
- delayed-stream@1.0.0: {}
+ /deep-equal@2.2.3:
+ resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ call-bind: 1.0.7
+ es-get-iterator: 1.1.3
+ get-intrinsic: 1.2.4
+ is-arguments: 1.1.1
+ is-array-buffer: 3.0.4
+ is-date-object: 1.0.5
+ is-regex: 1.1.4
+ is-shared-array-buffer: 1.0.3
+ isarray: 2.0.5
+ object-is: 1.1.6
+ object-keys: 1.1.1
+ object.assign: 4.1.5
+ regexp.prototype.flags: 1.5.2
+ side-channel: 1.0.6
+ which-boxed-primitive: 1.0.2
+ which-collection: 1.0.2
+ which-typed-array: 1.1.15
+ dev: true
- dequal@2.0.3: {}
+ /deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ dev: true
- detect-node-es@1.1.0: {}
+ /define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+ dev: true
- didyoumean@1.2.2: {}
+ /define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+ dev: true
- diff-match-patch@1.0.5: {}
+ /dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+ dev: false
- diff@5.2.0: {}
+ /detect-libc@2.0.3:
+ resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dev: false
+ optional: true
- dlv@1.1.3: {}
+ /detect-node-es@1.1.0:
+ resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+ dev: false
- eastasianwidth@0.2.0: {}
+ /devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ dependencies:
+ dequal: 2.0.3
+ dev: false
- electron-to-chromium@1.5.13: {}
+ /didyoumean@1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
- emoji-regex@8.0.0: {}
+ /diff-match-patch@1.0.5:
+ resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
+ dev: false
- emoji-regex@9.2.2: {}
+ /dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-type: 4.0.0
+ dev: true
- entities@4.5.0: {}
+ /dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
- escalade@3.1.2: {}
+ /doctrine@2.1.0:
+ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ esutils: 2.0.3
+ dev: true
- escape-string-regexp@5.0.0: {}
+ /doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ esutils: 2.0.3
+ dev: true
- estree-walker@2.0.2: {}
+ /dotenv@16.4.5:
+ resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
+ engines: {node: '>=12'}
+ dev: false
- estree-walker@3.0.3:
+ /drizzle-kit@0.25.0:
+ resolution: {integrity: sha512-Rcf0nYCAKizwjWQCY+d3zytyuTbDb81NcaPor+8NebESlUz1+9W3uGl0+r9FhU4Qal5Zv9j/7neXCSCe7DHzjA==}
+ hasBin: true
+ dependencies:
+ '@drizzle-team/brocli': 0.10.1
+ '@esbuild-kit/esm-loader': 2.6.5
+ esbuild: 0.19.12
+ esbuild-register: 3.6.0(esbuild@0.19.12)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /drizzle-orm@0.34.0(@types/react@18.3.3)(@vercel/postgres@0.10.0)(postgres@3.4.4)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-6l9v65YoCr53UOWjyPPNYYQsZYvtzgxMKxljQ5VlJcS3/zM81MXnWeSfqQFlrUHxoTNgyi9BWHysUE8+c0odzA==}
+ 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
+ dependencies:
+ '@types/react': 18.3.3
+ '@vercel/postgres': 0.10.0
+ postgres: 3.4.4
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
+
+ /eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ /emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ /emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ /enhanced-resolve@5.17.1:
+ resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.2.1
+ dev: true
+
+ /entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+ dev: false
+
+ /es-abstract@1.23.3:
+ resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ arraybuffer.prototype.slice: 1.0.3
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ data-view-buffer: 1.0.1
+ data-view-byte-length: 1.0.1
+ data-view-byte-offset: 1.0.0
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ es-set-tostringtag: 2.0.3
+ es-to-primitive: 1.2.1
+ function.prototype.name: 1.1.6
+ get-intrinsic: 1.2.4
+ get-symbol-description: 1.0.2
+ globalthis: 1.0.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+ internal-slot: 1.0.7
+ is-array-buffer: 3.0.4
+ is-callable: 1.2.7
+ is-data-view: 1.0.1
+ is-negative-zero: 2.0.3
+ is-regex: 1.1.4
+ is-shared-array-buffer: 1.0.3
+ is-string: 1.0.7
+ is-typed-array: 1.1.13
+ is-weakref: 1.0.2
+ object-inspect: 1.13.2
+ object-keys: 1.1.1
+ object.assign: 4.1.5
+ regexp.prototype.flags: 1.5.2
+ safe-array-concat: 1.1.2
+ safe-regex-test: 1.0.3
+ string.prototype.trim: 1.2.9
+ string.prototype.trimend: 1.0.8
+ string.prototype.trimstart: 1.0.8
+ typed-array-buffer: 1.0.2
+ typed-array-byte-length: 1.0.1
+ typed-array-byte-offset: 1.0.2
+ typed-array-length: 1.0.6
+ unbox-primitive: 1.0.2
+ which-typed-array: 1.1.15
+ dev: true
+
+ /es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /es-get-iterator@1.1.3:
+ resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
+ dependencies:
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+ has-symbols: 1.0.3
+ is-arguments: 1.1.1
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-string: 1.0.7
+ isarray: 2.0.5
+ stop-iteration-iterator: 1.0.0
+ dev: true
+
+ /es-iterator-helpers@1.0.19:
+ resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ es-set-tostringtag: 2.0.3
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ globalthis: 1.0.4
+ has-property-descriptors: 1.0.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ internal-slot: 1.0.7
+ iterator.prototype: 1.1.2
+ safe-array-concat: 1.1.2
+ dev: true
+
+ /es-object-atoms@1.0.0:
+ resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ dev: true
+
+ /es-set-tostringtag@2.0.3:
+ resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.4
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+ dev: true
+
+ /es-shim-unscopables@1.0.2:
+ resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
+ dependencies:
+ hasown: 2.0.2
+ dev: true
+
+ /es-to-primitive@1.2.1:
+ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.0.5
+ is-symbol: 1.0.4
+ dev: true
+
+ /esbuild-register@3.6.0(esbuild@0.19.12):
+ resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
+ peerDependencies:
+ esbuild: '>=0.12 <1'
+ dependencies:
+ debug: 4.3.6
+ esbuild: 0.19.12
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /esbuild@0.18.20:
+ resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ 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
+ dev: true
+
+ /esbuild@0.19.12:
+ resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ 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
+ dev: true
+
+ /esbuild@0.23.1:
+ resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==}
+ engines: {node: '>=18'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.23.1
+ '@esbuild/android-arm': 0.23.1
+ '@esbuild/android-arm64': 0.23.1
+ '@esbuild/android-x64': 0.23.1
+ '@esbuild/darwin-arm64': 0.23.1
+ '@esbuild/darwin-x64': 0.23.1
+ '@esbuild/freebsd-arm64': 0.23.1
+ '@esbuild/freebsd-x64': 0.23.1
+ '@esbuild/linux-arm': 0.23.1
+ '@esbuild/linux-arm64': 0.23.1
+ '@esbuild/linux-ia32': 0.23.1
+ '@esbuild/linux-loong64': 0.23.1
+ '@esbuild/linux-mips64el': 0.23.1
+ '@esbuild/linux-ppc64': 0.23.1
+ '@esbuild/linux-riscv64': 0.23.1
+ '@esbuild/linux-s390x': 0.23.1
+ '@esbuild/linux-x64': 0.23.1
+ '@esbuild/netbsd-x64': 0.23.1
+ '@esbuild/openbsd-arm64': 0.23.1
+ '@esbuild/openbsd-x64': 0.23.1
+ '@esbuild/sunos-x64': 0.23.1
+ '@esbuild/win32-arm64': 0.23.1
+ '@esbuild/win32-ia32': 0.23.1
+ '@esbuild/win32-x64': 0.23.1
+ dev: true
+
+ /escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /eslint-config-next@14.2.5(eslint@8.57.0)(typescript@5.5.4):
+ resolution: {integrity: sha512-zogs9zlOiZ7ka+wgUnmcM0KBEDjo4Jis7kxN1jvC0N4wynQ2MIx/KBkg4mVF63J5EK4W0QMCn7xO3vNisjaAoA==}
+ peerDependencies:
+ eslint: ^7.23.0 || ^8.0.0
+ typescript: '>=3.3.1'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@next/eslint-plugin-next': 14.2.5
+ '@rushstack/eslint-patch': 1.10.4
+ '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4)
+ eslint: 8.57.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0)
+ eslint-plugin-react: 7.35.0(eslint@8.57.0)
+ eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0)
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - eslint-import-resolver-webpack
+ - eslint-plugin-import-x
+ - supports-color
+ dev: true
+
+ /eslint-config-prettier@9.1.0(eslint@8.57.0):
+ resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+ dependencies:
+ eslint: 8.57.0
+ dev: true
+
+ /eslint-import-resolver-node@0.3.9:
+ resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+ dependencies:
+ debug: 3.2.7
+ is-core-module: 2.15.0
+ resolve: 1.22.8
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0):
+ resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '*'
+ eslint-plugin-import: '*'
+ eslint-plugin-import-x: '*'
+ peerDependenciesMeta:
+ eslint-plugin-import:
+ optional: true
+ eslint-plugin-import-x:
+ optional: true
+ dependencies:
+ '@nolyfill/is-core-module': 1.0.39
+ debug: 4.3.6
+ enhanced-resolve: 5.17.1
+ eslint: 8.57.0
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ fast-glob: 3.3.2
+ get-tsconfig: 4.7.6
+ is-bun-module: 1.2.1
+ is-glob: 4.0.3
+ transitivePeerDependencies:
+ - '@typescript-eslint/parser'
+ - eslint-import-resolver-node
+ - eslint-import-resolver-webpack
+ - supports-color
+ dev: true
+
+ /eslint-import-resolver-typescript@3.6.3(eslint-plugin-import@2.31.0)(eslint@8.57.0):
+ resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '*'
+ eslint-plugin-import: '*'
+ eslint-plugin-import-x: '*'
+ peerDependenciesMeta:
+ eslint-plugin-import:
+ optional: true
+ eslint-plugin-import-x:
+ optional: true
+ dependencies:
+ '@nolyfill/is-core-module': 1.0.39
+ debug: 4.3.6
+ enhanced-resolve: 5.17.1
+ eslint: 8.57.0
+ eslint-module-utils: 2.8.1(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ fast-glob: 3.3.2
+ get-tsconfig: 4.7.6
+ is-bun-module: 1.2.1
+ is-glob: 4.0.3
+ transitivePeerDependencies:
+ - '@typescript-eslint/parser'
+ - eslint-import-resolver-node
+ - eslint-import-resolver-webpack
+ - supports-color
+ dev: true
+
+ /eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
+ resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ eslint:
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4)
+ debug: 3.2.7
+ eslint: 8.57.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-module-utils@2.12.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
+ resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ eslint:
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
+ optional: true
+ dependencies:
+ debug: 3.2.7
+ eslint: 8.57.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.6.3(eslint-plugin-import@2.31.0)(eslint@8.57.0)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
+ resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ eslint:
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4)
+ debug: 3.2.7
+ eslint: 8.57.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-module-utils@2.8.1(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
+ resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ eslint:
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
+ optional: true
+ dependencies:
+ debug: 3.2.7
+ eslint: 8.57.0
+ eslint-import-resolver-typescript: 3.6.3(eslint-plugin-import@2.31.0)(eslint@8.57.0)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
+ resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ dependencies:
+ '@rtsao/scc': 1.1.0
+ '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4)
+ array-includes: 3.1.8
+ array.prototype.findlastindex: 1.2.5
+ array.prototype.flat: 1.3.2
+ array.prototype.flatmap: 1.3.2
+ debug: 3.2.7
+ doctrine: 2.1.0
+ eslint: 8.57.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ hasown: 2.0.2
+ is-core-module: 2.15.1
+ is-glob: 4.0.3
+ minimatch: 3.1.2
+ object.fromentries: 2.0.8
+ object.groupby: 1.0.3
+ object.values: 1.2.0
+ semver: 6.3.1
+ string.prototype.trimend: 1.0.8
+ tsconfig-paths: 3.15.0
+ transitivePeerDependencies:
+ - eslint-import-resolver-typescript
+ - eslint-import-resolver-webpack
+ - supports-color
+ dev: true
+
+ /eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
+ resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ dependencies:
+ '@rtsao/scc': 1.1.0
+ array-includes: 3.1.8
+ array.prototype.findlastindex: 1.2.5
+ array.prototype.flat: 1.3.2
+ array.prototype.flatmap: 1.3.2
+ debug: 3.2.7
+ doctrine: 2.1.0
+ eslint: 8.57.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ hasown: 2.0.2
+ is-core-module: 2.15.1
+ is-glob: 4.0.3
+ minimatch: 3.1.2
+ object.fromentries: 2.0.8
+ object.groupby: 1.0.3
+ object.values: 1.2.0
+ semver: 6.3.1
+ string.prototype.trimend: 1.0.8
+ tsconfig-paths: 3.15.0
+ transitivePeerDependencies:
+ - eslint-import-resolver-typescript
+ - eslint-import-resolver-webpack
+ - supports-color
+ dev: true
+
+ /eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0):
+ resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+ dependencies:
+ aria-query: 5.1.3
+ array-includes: 3.1.8
+ array.prototype.flatmap: 1.3.2
+ ast-types-flow: 0.0.8
+ axe-core: 4.10.0
+ axobject-query: 3.1.1
+ damerau-levenshtein: 1.0.8
+ emoji-regex: 9.2.2
+ es-iterator-helpers: 1.0.19
+ eslint: 8.57.0
+ hasown: 2.0.2
+ jsx-ast-utils: 3.3.5
+ language-tags: 1.0.9
+ minimatch: 3.1.2
+ object.fromentries: 2.0.8
+ safe-regex-test: 1.0.3
+ string.prototype.includes: 2.0.0
+ dev: true
+
+ /eslint-plugin-react-hooks@4.6.2(eslint@8.57.0):
+ resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ dependencies:
+ eslint: 8.57.0
+ dev: true
+
+ /eslint-plugin-react@7.35.0(eslint@8.57.0):
+ resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
+ dependencies:
+ array-includes: 3.1.8
+ array.prototype.findlast: 1.2.5
+ array.prototype.flatmap: 1.3.2
+ array.prototype.tosorted: 1.1.4
+ doctrine: 2.1.0
+ es-iterator-helpers: 1.0.19
+ eslint: 8.57.0
+ estraverse: 5.3.0
+ hasown: 2.0.2
+ jsx-ast-utils: 3.3.5
+ minimatch: 3.1.2
+ object.entries: 1.1.8
+ object.fromentries: 2.0.8
+ object.values: 1.2.0
+ prop-types: 15.8.1
+ resolve: 2.0.0-next.5
+ semver: 6.3.1
+ string.prototype.matchall: 4.0.11
+ string.prototype.repeat: 1.0.0
+ dev: true
+
+ /eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.7):
+ resolution: {integrity: sha512-8Mi7p7dm+mO1dHgRHHFdPu4RDTBk69Cn4P0B40vRQR+MrguUpwmKwhZy1kqYe3Km8/4nb+cyrCF+5SodOEmaow==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ tailwindcss: ^3.4.0
+ dependencies:
+ fast-glob: 3.3.2
+ postcss: 8.4.40
+ tailwindcss: 3.4.7
+ dev: true
+
+ /eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+ dev: true
+
+ /eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /eslint@8.57.0:
+ resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@eslint-community/regexpp': 4.11.0
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.57.0
+ '@humanwhocodes/config-array': 0.11.14
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.2.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.6
+ doctrine: 3.0.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ graphemer: 1.4.0
+ ignore: 5.3.1
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ is-path-inside: 3.0.3
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ acorn: 8.12.1
+ acorn-jsx: 5.3.2(acorn@8.12.1)
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /estree-util-is-identifier-name@3.0.0:
+ resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
+ dev: false
+
+ /estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+ dev: false
+
+ /estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
dependencies:
'@types/estree': 1.0.5
+ dev: false
- event-target-shim@5.0.1: {}
+ /esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
- eventsource-parser@1.1.2: {}
+ /eventsource-parser@1.1.2:
+ resolution: {integrity: sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==}
+ engines: {node: '>=14.18'}
+ dev: false
- extend@3.0.2: {}
+ /extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+ dev: false
- fast-glob@3.3.2:
+ /fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ dev: true
+
+ /fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
dependencies:
'@nodelib/fs.stat': 2.0.5
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
- micromatch: 4.0.8
+ micromatch: 4.0.7
- fastq@1.17.1:
+ /fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ dev: true
+
+ /fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ dev: true
+
+ /fastq@1.17.1:
+ resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
dependencies:
reusify: 1.0.4
- fault@1.0.4:
+ /file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
dependencies:
- format: 0.2.2
+ flat-cache: 3.2.0
+ dev: true
- fill-range@7.1.1:
+ /fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
dependencies:
to-regex-range: 5.0.1
- foreground-child@3.3.0:
+ /find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+ dev: true
+
+ /flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flatted: 3.3.1
+ keyv: 4.5.4
+ rimraf: 3.0.2
+ dev: true
+
+ /flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+ dev: true
+
+ /for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+ dependencies:
+ is-callable: 1.2.7
+ dev: true
+
+ /foreground-child@3.2.1:
+ resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==}
+ engines: {node: '>=14'}
dependencies:
cross-spawn: 7.0.3
signal-exit: 4.1.0
- form-data-encoder@1.7.2: {}
-
- form-data@4.0.0:
+ /framer-motion@11.3.19(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-+luuQdx4AsamyMcvzW7jUAJYIKvQs1KE7oHvKkW3eNzmo0S+3PSDWjBuQkuIP9WyneGnKGMLUSuHs8OP7jKpQg==}
+ peerDependencies:
+ '@emotion/is-prop-valid': '*'
+ react: ^18.0.0
+ react-dom: ^18.0.0
+ peerDependenciesMeta:
+ '@emotion/is-prop-valid':
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
dependencies:
- asynckit: 0.4.0
- combined-stream: 1.0.8
- mime-types: 2.1.35
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ tslib: 2.6.3
+ dev: false
- format@0.2.2: {}
+ /fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ dev: true
- formdata-node@4.4.1:
- dependencies:
- node-domexception: 1.0.0
- web-streams-polyfill: 4.0.0-beta.3
-
- fraction.js@4.3.7: {}
-
- framer-motion@11.3.30(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
- dependencies:
- tslib: 2.7.0
- optionalDependencies:
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
- fsevents@2.3.3:
+ /fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
optional: true
- function-bind@1.1.2: {}
+ /function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- geist@1.3.1(next@14.2.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
+ /function.prototype.name@1.1.6:
+ resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
+ engines: {node: '>= 0.4'}
dependencies:
- next: 14.2.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ functions-have-names: 1.2.3
+ dev: true
- get-nonce@1.0.1: {}
+ /functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ dev: true
- glob-parent@5.1.2:
+ /geist@1.3.1(next@15.0.0-canary.152):
+ resolution: {integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==}
+ peerDependencies:
+ next: '>=13.2.0'
+ dependencies:
+ next: 15.0.0-canary.152(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
+
+ /get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+ dev: true
+
+ /get-nonce@1.0.1:
+ resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /get-symbol-description@1.0.2:
+ resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /get-tsconfig@4.7.6:
+ resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==}
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+ dev: true
+
+ /glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
dependencies:
is-glob: 4.0.3
- glob-parent@6.0.2:
+ /glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
dependencies:
is-glob: 4.0.3
- glob@10.4.5:
+ /glob@10.3.10:
+ resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
dependencies:
- foreground-child: 3.3.0
+ foreground-child: 3.2.1
+ jackspeak: 2.3.6
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ path-scurry: 1.11.1
+ dev: true
+
+ /glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+ dependencies:
+ foreground-child: 3.2.1
jackspeak: 3.4.3
minimatch: 9.0.5
minipass: 7.1.2
package-json-from-dist: 1.0.0
path-scurry: 1.11.1
- graceful-fs@4.2.11: {}
+ /glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
- hasown@2.0.2:
+ /globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.20.2
+ dev: true
+
+ /globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.0.1
+ dev: true
+
+ /globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.1
+ merge2: 1.4.1
+ slash: 3.0.0
+ dev: true
+
+ /gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ /graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+ dev: true
+
+ /has-bigints@1.0.2:
+ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+ dev: true
+
+ /has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+ dependencies:
+ es-define-property: 1.0.0
+ dev: true
+
+ /has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
- hast-util-parse-selector@2.2.5: {}
-
- hast-util-whitespace@2.0.1: {}
-
- hastscript@6.0.0:
+ /hast-util-to-jsx-runtime@2.3.0:
+ resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==}
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
+ '@types/estree': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.2
+ 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.0
+ mdast-util-mdx-jsx: 3.1.2
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ style-to-object: 1.0.6
+ unist-util-position: 5.0.0
+ vfile-message: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
- highlight.js@10.7.3: {}
-
- humanize-ms@1.2.1:
+ /hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
dependencies:
- ms: 2.1.3
+ '@types/hast': 3.0.4
+ dev: false
- inline-style-parser@0.1.1: {}
+ /html-url-attributes@3.0.0:
+ resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==}
+ dev: false
- invariant@2.2.4:
+ /ignore@5.3.1:
+ resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+ dev: true
+
+ /imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+ dev: true
+
+ /inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: true
+
+ /inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ dev: true
+
+ /inline-style-parser@0.2.3:
+ resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==}
+ dev: false
+
+ /internal-slot@1.0.7:
+ resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.0.6
+ dev: true
+
+ /invariant@2.2.4:
+ resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
dependencies:
loose-envify: 1.4.0
+ dev: false
- is-alphabetical@1.0.4: {}
+ /is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+ dev: false
- is-alphanumerical@1.0.4:
+ /is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
dependencies:
- is-alphabetical: 1.0.4
- is-decimal: 1.0.4
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
+ dev: false
- is-binary-path@2.1.0:
+ /is-arguments@1.1.1:
+ resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+ dev: true
+
+ /is-array-buffer@3.0.4:
+ resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /is-arrayish@0.3.2:
+ resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /is-async-function@2.0.0:
+ resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: true
+
+ /is-bigint@1.0.4:
+ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+ dependencies:
+ has-bigints: 1.0.2
+ dev: true
+
+ /is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
dependencies:
binary-extensions: 2.3.0
- is-buffer@2.0.5: {}
+ /is-boolean-object@1.1.2:
+ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+ dev: true
- is-core-module@2.15.1:
+ /is-buffer@2.0.5:
+ resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /is-bun-module@1.2.1:
+ resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==}
+ dependencies:
+ semver: 7.6.3
+ dev: true
+
+ /is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /is-core-module@2.15.0:
+ resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==}
+ engines: {node: '>= 0.4'}
dependencies:
hasown: 2.0.2
- is-decimal@1.0.4: {}
+ /is-core-module@2.15.1:
+ resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ hasown: 2.0.2
+ dev: true
- is-extglob@2.1.1: {}
+ /is-data-view@1.0.1:
+ resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-typed-array: 1.1.13
+ dev: true
- is-fullwidth-code-point@3.0.0: {}
+ /is-date-object@1.0.5:
+ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: true
- is-glob@4.0.3:
+ /is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+ dev: false
+
+ /is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ /is-finalizationregistry@1.0.2:
+ resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
+ dependencies:
+ call-bind: 1.0.7
+ dev: true
+
+ /is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ /is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: true
+
+ /is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
dependencies:
is-extglob: 2.1.1
- is-hexadecimal@1.0.4: {}
+ /is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+ dev: false
- is-number@7.0.0: {}
+ /is-map@2.0.3:
+ resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
+ engines: {node: '>= 0.4'}
+ dev: true
- is-plain-obj@4.1.0: {}
+ /is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
+ dev: true
- is-reference@3.0.2:
+ /is-number-object@1.0.7:
+ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: true
+
+ /is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ /is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /is-reference@3.0.2:
+ resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==}
dependencies:
'@types/estree': 1.0.5
+ dev: false
- isexe@2.0.0: {}
+ /is-regex@1.1.4:
+ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+ dev: true
- jackspeak@3.4.3:
+ /is-set@2.0.3:
+ resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /is-shared-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ dev: true
+
+ /is-string@1.0.7:
+ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: true
+
+ /is-symbol@1.0.4:
+ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /is-typed-array@1.1.13:
+ resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ which-typed-array: 1.1.15
+ dev: true
+
+ /is-weakmap@2.0.2:
+ resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /is-weakref@1.0.2:
+ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+ dependencies:
+ call-bind: 1.0.7
+ dev: true
+
+ /is-weakset@2.0.3:
+ resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+ dev: true
+
+ /isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+ dev: true
+
+ /isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ /iterator.prototype@1.1.2:
+ resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
+ dependencies:
+ define-properties: 1.2.1
+ get-intrinsic: 1.2.4
+ has-symbols: 1.0.3
+ reflect.getprototypeof: 1.0.6
+ set-function-name: 2.0.2
+ dev: true
+
+ /jackspeak@2.3.6:
+ resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
+ engines: {node: '>=14'}
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+ dev: true
+
+ /jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
dependencies:
'@isaacs/cliui': 8.0.2
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
- jiti@1.21.6: {}
+ /jiti@1.21.6:
+ resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
+ hasBin: true
- jose@5.7.0: {}
+ /jose@5.9.3:
+ resolution: {integrity: sha512-egLIoYSpcd+QUF+UHgobt5YzI2Pkw/H39ou9suW687MY6PmCwPmkNV/4TNjn1p2tX5xO3j0d0sq5hiYE24bSlg==}
+ dev: false
- js-tokens@4.0.0: {}
+ /js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- json-schema@0.4.0: {}
+ /js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ dev: true
- jsondiffpatch@0.6.0:
+ /json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ dev: true
+
+ /json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ dev: true
+
+ /json-schema@0.4.0:
+ resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
+ dev: false
+
+ /json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ dev: true
+
+ /json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.8
+ dev: true
+
+ /jsondiffpatch@0.6.0:
+ resolution: {integrity: sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
dependencies:
'@types/diff-match-patch': 1.0.36
chalk: 5.3.0
diff-match-patch: 1.0.5
+ dev: false
- katex@0.16.11:
+ /jsx-ast-utils@3.3.5:
+ resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
+ engines: {node: '>=4.0'}
dependencies:
- commander: 8.3.0
+ array-includes: 3.1.8
+ array.prototype.flat: 1.3.2
+ object.assign: 4.1.5
+ object.values: 1.2.0
+ dev: true
- kleur@4.1.5: {}
+ /keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ dependencies:
+ json-buffer: 3.0.1
+ dev: true
- lilconfig@2.1.0: {}
+ /language-subtag-registry@0.3.23:
+ resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
+ dev: true
- lilconfig@3.1.2: {}
+ /language-tags@1.0.9:
+ resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ language-subtag-registry: 0.3.23
+ dev: true
- lines-and-columns@1.2.4: {}
+ /levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
- locate-character@3.0.0: {}
+ /lilconfig@2.1.0:
+ resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
+ engines: {node: '>=10'}
- lodash.castarray@4.4.0: {}
+ /lilconfig@3.1.2:
+ resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
+ engines: {node: '>=14'}
- lodash.isplainobject@4.0.6: {}
+ /lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- lodash.merge@4.6.2: {}
+ /locate-character@3.0.0:
+ resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
+ dev: false
- longest-streak@3.1.0: {}
+ /locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-locate: 5.0.0
+ dev: true
- loose-envify@1.4.0:
+ /lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+ dev: false
+
+ /lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ dev: true
+
+ /longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+ dev: false
+
+ /loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
dependencies:
js-tokens: 4.0.0
- lowlight@1.20.0:
+ /lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ /lucide-react@0.446.0(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-BU7gy8MfBMqvEdDPH79VhOXSEgyG8TSPOKWaExWGCQVqnGH7wGgDngPbofu+KdtVjPQBWbEmnfMTq90CTiiDRg==}
+ peerDependencies:
+ react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc
dependencies:
- fault: 1.0.4
- highlight.js: 10.7.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- lru-cache@10.4.3: {}
-
- magic-string@0.30.11:
+ /magic-string@0.30.11:
+ resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
+ dev: false
- markdown-table@3.0.3: {}
+ /markdown-table@3.0.3:
+ resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
+ dev: false
- mdast-util-definitions@5.1.2:
+ /mdast-util-find-and-replace@3.0.1:
+ resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
dependencies:
- '@types/mdast': 3.0.15
- '@types/unist': 2.0.11
- unist-util-visit: 4.1.2
-
- mdast-util-find-and-replace@2.2.2:
- dependencies:
- '@types/mdast': 3.0.15
+ '@types/mdast': 4.0.4
escape-string-regexp: 5.0.0
- unist-util-is: 5.2.1
- unist-util-visit-parents: 5.1.3
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
+ dev: false
- mdast-util-from-markdown@1.3.1:
+ /mdast-util-from-markdown@2.0.1:
+ resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==}
dependencies:
- '@types/mdast': 3.0.15
- '@types/unist': 2.0.11
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.2
decode-named-character-reference: 1.0.2
- mdast-util-to-string: 3.2.0
- micromark: 3.2.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-decode-string: 1.1.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- unist-util-stringify-position: 3.0.3
- uvu: 0.5.6
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.0
+ micromark-util-decode-numeric-character-reference: 2.0.1
+ micromark-util-decode-string: 2.0.0
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ unist-util-stringify-position: 4.0.0
transitivePeerDependencies:
- supports-color
+ dev: false
- mdast-util-gfm-autolink-literal@1.0.3:
+ /mdast-util-gfm-autolink-literal@2.0.0:
+ resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==}
dependencies:
- '@types/mdast': 3.0.15
+ '@types/mdast': 4.0.4
ccount: 2.0.1
- mdast-util-find-and-replace: 2.2.2
- micromark-util-character: 1.2.0
+ devlop: 1.1.0
+ mdast-util-find-and-replace: 3.0.1
+ micromark-util-character: 2.1.0
+ dev: false
- mdast-util-gfm-footnote@1.0.2:
+ /mdast-util-gfm-footnote@2.0.0:
+ resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==}
dependencies:
- '@types/mdast': 3.0.15
- mdast-util-to-markdown: 1.5.0
- micromark-util-normalize-identifier: 1.1.0
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.1
+ mdast-util-to-markdown: 2.1.0
+ micromark-util-normalize-identifier: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
- mdast-util-gfm-strikethrough@1.0.3:
+ /mdast-util-gfm-strikethrough@2.0.0:
+ resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
dependencies:
- '@types/mdast': 3.0.15
- mdast-util-to-markdown: 1.5.0
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.1
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
- mdast-util-gfm-table@1.0.7:
+ /mdast-util-gfm-table@2.0.0:
+ resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
dependencies:
- '@types/mdast': 3.0.15
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
markdown-table: 3.0.3
- mdast-util-from-markdown: 1.3.1
- mdast-util-to-markdown: 1.5.0
+ mdast-util-from-markdown: 2.0.1
+ mdast-util-to-markdown: 2.1.0
transitivePeerDependencies:
- supports-color
+ dev: false
- mdast-util-gfm-task-list-item@1.0.2:
+ /mdast-util-gfm-task-list-item@2.0.0:
+ resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
dependencies:
- '@types/mdast': 3.0.15
- mdast-util-to-markdown: 1.5.0
-
- mdast-util-gfm@2.0.2:
- dependencies:
- mdast-util-from-markdown: 1.3.1
- mdast-util-gfm-autolink-literal: 1.0.3
- mdast-util-gfm-footnote: 1.0.2
- mdast-util-gfm-strikethrough: 1.0.3
- mdast-util-gfm-table: 1.0.7
- mdast-util-gfm-task-list-item: 1.0.2
- mdast-util-to-markdown: 1.5.0
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.1
+ mdast-util-to-markdown: 2.1.0
transitivePeerDependencies:
- supports-color
+ dev: false
- mdast-util-math@2.0.2:
+ /mdast-util-gfm@3.0.0:
+ resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
dependencies:
- '@types/mdast': 3.0.15
- longest-streak: 3.1.0
- mdast-util-to-markdown: 1.5.0
+ mdast-util-from-markdown: 2.0.1
+ mdast-util-gfm-autolink-literal: 2.0.0
+ mdast-util-gfm-footnote: 2.0.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.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
- mdast-util-phrasing@3.0.1:
+ /mdast-util-mdx-expression@2.0.0:
+ resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==}
dependencies:
- '@types/mdast': 3.0.15
- unist-util-is: 5.2.1
+ '@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.1
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
- mdast-util-to-hast@12.3.0:
+ /mdast-util-mdx-jsx@3.1.2:
+ resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==}
dependencies:
- '@types/hast': 2.3.10
- '@types/mdast': 3.0.15
- mdast-util-definitions: 5.1.2
- micromark-util-sanitize-uri: 1.2.0
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.2
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.1
+ mdast-util-to-markdown: 2.1.0
+ parse-entities: 4.0.1
+ stringify-entities: 4.0.4
+ unist-util-remove-position: 5.0.0
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-mdxjs-esm@2.0.1:
+ resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
+ 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.1
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-phrasing@4.1.0:
+ resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
+ dependencies:
+ '@types/mdast': 4.0.4
+ unist-util-is: 6.0.0
+ dev: false
+
+ /mdast-util-to-hast@13.2.0:
+ resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.2.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.0
trim-lines: 3.0.1
- unist-util-generated: 2.0.1
- unist-util-position: 4.0.4
- unist-util-visit: 4.1.2
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.2
+ dev: false
- mdast-util-to-markdown@1.5.0:
+ /mdast-util-to-markdown@2.1.0:
+ resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==}
dependencies:
- '@types/mdast': 3.0.15
- '@types/unist': 2.0.11
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.2
longest-streak: 3.1.0
- mdast-util-phrasing: 3.0.1
- mdast-util-to-string: 3.2.0
- micromark-util-decode-string: 1.1.0
- unist-util-visit: 4.1.2
+ mdast-util-phrasing: 4.1.0
+ mdast-util-to-string: 4.0.0
+ micromark-util-decode-string: 2.0.0
+ unist-util-visit: 5.0.0
zwitch: 2.0.4
+ dev: false
- mdast-util-to-string@3.2.0:
+ /mdast-util-to-string@4.0.0:
+ resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
dependencies:
- '@types/mdast': 3.0.15
+ '@types/mdast': 4.0.4
+ dev: false
- mdn-data@2.0.30: {}
+ /mdn-data@2.0.30:
+ resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+ dev: false
- merge2@1.4.1: {}
+ /merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
- micromark-core-commonmark@1.1.0:
+ /micromark-core-commonmark@2.0.1:
+ resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==}
dependencies:
decode-named-character-reference: 1.0.2
- micromark-factory-destination: 1.1.0
- micromark-factory-label: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-factory-title: 1.1.0
- micromark-factory-whitespace: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-chunked: 1.1.0
- micromark-util-classify-character: 1.1.0
- micromark-util-html-tag-name: 1.2.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-subtokenize: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-factory-destination: 2.0.0
+ micromark-factory-label: 2.0.0
+ micromark-factory-space: 2.0.0
+ micromark-factory-title: 2.0.0
+ micromark-factory-whitespace: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-classify-character: 2.0.0
+ micromark-util-html-tag-name: 2.0.0
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-resolve-all: 2.0.0
+ micromark-util-subtokenize: 2.0.1
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-extension-gfm-autolink-literal@1.0.5:
+ /micromark-extension-gfm-autolink-literal@2.1.0:
+ resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-sanitize-uri: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-util-character: 2.1.0
+ micromark-util-sanitize-uri: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-extension-gfm-footnote@1.1.2:
+ /micromark-extension-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
dependencies:
- micromark-core-commonmark: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-sanitize-uri: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.1
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-sanitize-uri: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-extension-gfm-strikethrough@1.0.7:
+ /micromark-extension-gfm-strikethrough@2.1.0:
+ resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-classify-character: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-classify-character: 2.0.0
+ micromark-util-resolve-all: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-extension-gfm-table@1.0.7:
+ /micromark-extension-gfm-table@2.1.0:
+ resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==}
dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-extension-gfm-tagfilter@1.0.2:
+ /micromark-extension-gfm-tagfilter@2.0.0:
+ resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
dependencies:
- micromark-util-types: 1.1.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-extension-gfm-task-list-item@1.0.5:
+ /micromark-extension-gfm-task-list-item@2.1.0:
+ resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-extension-gfm@2.0.3:
+ /micromark-extension-gfm@3.0.0:
+ resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
dependencies:
- micromark-extension-gfm-autolink-literal: 1.0.5
- micromark-extension-gfm-footnote: 1.1.2
- micromark-extension-gfm-strikethrough: 1.0.7
- micromark-extension-gfm-table: 1.0.7
- micromark-extension-gfm-tagfilter: 1.0.2
- micromark-extension-gfm-task-list-item: 1.0.5
- micromark-util-combine-extensions: 1.1.0
- micromark-util-types: 1.1.0
+ 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.0
+ micromark-extension-gfm-tagfilter: 2.0.0
+ micromark-extension-gfm-task-list-item: 2.1.0
+ micromark-util-combine-extensions: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-extension-math@2.1.2:
+ /micromark-factory-destination@2.0.0:
+ resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
dependencies:
- '@types/katex': 0.16.7
- katex: 0.16.11
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-factory-destination@1.1.0:
+ /micromark-factory-label@2.0.0:
+ resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ devlop: 1.1.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-factory-label@1.1.0:
+ /micromark-factory-space@2.0.0:
+ resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ micromark-util-character: 2.1.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-factory-space@1.1.0:
+ /micromark-factory-title@2.0.0:
+ resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-types: 1.1.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-factory-title@1.1.0:
+ /micromark-factory-whitespace@2.0.0:
+ resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==}
dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-factory-whitespace@1.1.0:
+ /micromark-util-character@2.1.0:
+ resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==}
dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-util-character@1.2.0:
+ /micromark-util-chunked@2.0.0:
+ resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==}
dependencies:
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-util-symbol: 2.0.0
+ dev: false
- micromark-util-chunked@1.1.0:
+ /micromark-util-classify-character@2.0.0:
+ resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==}
dependencies:
- micromark-util-symbol: 1.1.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-util-classify-character@1.1.0:
+ /micromark-util-combine-extensions@2.0.0:
+ resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-util-combine-extensions@1.1.0:
+ /micromark-util-decode-numeric-character-reference@2.0.1:
+ resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==}
dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-util-symbol: 2.0.0
+ dev: false
- micromark-util-decode-numeric-character-reference@1.1.0:
- dependencies:
- micromark-util-symbol: 1.1.0
-
- micromark-util-decode-string@1.1.0:
+ /micromark-util-decode-string@2.0.0:
+ resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==}
dependencies:
decode-named-character-reference: 1.0.2
- micromark-util-character: 1.2.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-symbol: 1.1.0
+ micromark-util-character: 2.1.0
+ micromark-util-decode-numeric-character-reference: 2.0.1
+ micromark-util-symbol: 2.0.0
+ dev: false
- micromark-util-encode@1.1.0: {}
+ /micromark-util-encode@2.0.0:
+ resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
+ dev: false
- micromark-util-html-tag-name@1.2.0: {}
+ /micromark-util-html-tag-name@2.0.0:
+ resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
+ dev: false
- micromark-util-normalize-identifier@1.1.0:
+ /micromark-util-normalize-identifier@2.0.0:
+ resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==}
dependencies:
- micromark-util-symbol: 1.1.0
+ micromark-util-symbol: 2.0.0
+ dev: false
- micromark-util-resolve-all@1.1.0:
+ /micromark-util-resolve-all@2.0.0:
+ resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==}
dependencies:
- micromark-util-types: 1.1.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-util-sanitize-uri@1.2.0:
+ /micromark-util-sanitize-uri@2.0.0:
+ resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-encode: 1.1.0
- micromark-util-symbol: 1.1.0
+ micromark-util-character: 2.1.0
+ micromark-util-encode: 2.0.0
+ micromark-util-symbol: 2.0.0
+ dev: false
- micromark-util-subtokenize@1.1.0:
+ /micromark-util-subtokenize@2.0.1:
+ resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==}
dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
- micromark-util-symbol@1.1.0: {}
+ /micromark-util-symbol@2.0.0:
+ resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
+ dev: false
- micromark-util-types@1.1.0: {}
+ /micromark-util-types@2.0.0:
+ resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
+ dev: false
- micromark@3.2.0:
+ /micromark@4.0.0:
+ resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
dependencies:
'@types/debug': 4.1.12
debug: 4.3.6
decode-named-character-reference: 1.0.2
- micromark-core-commonmark: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-chunked: 1.1.0
- micromark-util-combine-extensions: 1.1.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-encode: 1.1.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-sanitize-uri: 1.2.0
- micromark-util-subtokenize: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.1
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-combine-extensions: 2.0.0
+ micromark-util-decode-numeric-character-reference: 2.0.1
+ micromark-util-encode: 2.0.0
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-resolve-all: 2.0.0
+ micromark-util-sanitize-uri: 2.0.0
+ micromark-util-subtokenize: 2.0.1
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
transitivePeerDependencies:
- supports-color
+ dev: false
- micromatch@4.0.8:
+ /micromatch@4.0.7:
+ resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
+ engines: {node: '>=8.6'}
dependencies:
braces: 3.0.3
picomatch: 2.3.1
- mime-db@1.52.0: {}
-
- mime-types@2.1.35:
+ /minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
- mime-db: 1.52.0
+ brace-expansion: 1.1.11
+ dev: true
- minimatch@9.0.5:
+ /minimatch@9.0.3:
+ resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
+ /minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
dependencies:
brace-expansion: 2.0.1
- minipass@7.1.2: {}
+ /minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ dev: true
- mri@1.2.0: {}
+ /minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
- ms@2.1.2: {}
+ /ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
- ms@2.1.3: {}
+ /ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ dev: true
- mz@2.7.0:
+ /mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
dependencies:
any-promise: 1.3.0
object-assign: 4.1.1
thenify-all: 1.6.0
- nanoid@3.3.6: {}
+ /nanoid@3.3.6:
+ resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+ dev: false
- nanoid@3.3.7: {}
+ /nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
- nanoid@5.0.7: {}
+ /natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ dev: true
- next-auth@5.0.0-beta.4(next@14.2.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1):
+ /next-auth@5.0.0-beta.22(next@15.0.0-canary.152)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-QGBo9HGOjmnJBHGXvtFztl0tM5tL0porDlk74HVoCCzXd986ApOlIW3EmiCuho7YzEopgkFiwwmcXpoCrHAtYw==}
+ 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
dependencies:
- '@auth/core': 0.18.4
- next: 14.2.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react: 18.3.1
+ '@auth/core': 0.35.3
+ next: 15.0.0-canary.152(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827)
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ /next-themes@0.3.0(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==}
+ peerDependencies:
+ react: ^16.8 || ^17 || ^18
+ react-dom: ^16.8 || ^17 || ^18
dependencies:
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- next@14.2.6(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ /next@15.0.0-canary.152(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-r0u1MXGuBKnrhZmtwUY6Wggisgj73Yel9D66shvZ3L4XnXNN7MVw25dtitKYHfYnd1ZktZb6fyt28nXCHKG7lQ==}
+ engines: {node: '>=18.18.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ '@playwright/test': ^1.41.2
+ babel-plugin-react-compiler: '*'
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ '@playwright/test':
+ optional: true
+ babel-plugin-react-compiler:
+ optional: true
+ sass:
+ optional: true
dependencies:
- '@next/env': 14.2.6
- '@swc/helpers': 0.5.5
+ '@next/env': 15.0.0-canary.152
+ '@swc/counter': 0.1.3
+ '@swc/helpers': 0.5.13
busboy: 1.6.0
- caniuse-lite: 1.0.30001651
+ caniuse-lite: 1.0.30001645
graceful-fs: 4.2.11
postcss: 8.4.31
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- styled-jsx: 5.1.1(react@18.3.1)
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ styled-jsx: 5.1.6(react@19.0.0-rc-7771d3a7-20240827)
optionalDependencies:
- '@next/swc-darwin-arm64': 14.2.6
- '@next/swc-darwin-x64': 14.2.6
- '@next/swc-linux-arm64-gnu': 14.2.6
- '@next/swc-linux-arm64-musl': 14.2.6
- '@next/swc-linux-x64-gnu': 14.2.6
- '@next/swc-linux-x64-musl': 14.2.6
- '@next/swc-win32-arm64-msvc': 14.2.6
- '@next/swc-win32-ia32-msvc': 14.2.6
- '@next/swc-win32-x64-msvc': 14.2.6
- '@opentelemetry/api': 1.9.0
+ '@next/swc-darwin-arm64': 15.0.0-canary.152
+ '@next/swc-darwin-x64': 15.0.0-canary.152
+ '@next/swc-linux-arm64-gnu': 15.0.0-canary.152
+ '@next/swc-linux-arm64-musl': 15.0.0-canary.152
+ '@next/swc-linux-x64-gnu': 15.0.0-canary.152
+ '@next/swc-linux-x64-musl': 15.0.0-canary.152
+ '@next/swc-win32-arm64-msvc': 15.0.0-canary.152
+ '@next/swc-win32-ia32-msvc': 15.0.0-canary.152
+ '@next/swc-win32-x64-msvc': 15.0.0-canary.152
+ sharp: 0.33.5
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
+ dev: false
- node-domexception@1.0.0: {}
+ /node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+ hasBin: true
+ dev: false
- node-fetch@2.7.0:
+ /normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ /oauth4webapi@2.17.0:
+ resolution: {integrity: sha512-lbC0Z7uzAFNFyzEYRIC+pkSVvDHJTbEW+dYlSBAlCYDe6RxUkJ26bClhk8ocBZip1wfI9uKTe0fm4Ib4RHn6uQ==}
+ dev: false
+
+ /object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ /object-hash@3.0.0:
+ resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+ engines: {node: '>= 6'}
+
+ /object-inspect@1.13.2:
+ resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
dependencies:
- whatwg-url: 5.0.0
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ dev: true
- node-releases@2.0.18: {}
+ /object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+ dev: true
- normalize-path@3.0.0: {}
-
- normalize-range@0.1.2: {}
-
- oauth4webapi@2.12.0: {}
-
- object-assign@4.1.1: {}
-
- object-hash@3.0.0: {}
-
- openai@4.56.0(zod@3.23.8):
+ /object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
dependencies:
- '@types/node': 18.19.45
- '@types/node-fetch': 2.6.11
- abort-controller: 3.0.0
- agentkeepalive: 4.5.0
- form-data-encoder: 1.7.2
- formdata-node: 4.4.1
- node-fetch: 2.7.0
- optionalDependencies:
- zod: 3.23.8
- transitivePeerDependencies:
- - encoding
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+ dev: true
- package-json-from-dist@1.0.0: {}
-
- parse-entities@2.0.0:
+ /object.entries@1.1.8:
+ resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==}
+ engines: {node: '>= 0.4'}
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
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+ dev: true
- path-key@3.1.1: {}
+ /object.fromentries@2.0.8:
+ resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
+ dev: true
- path-parse@1.0.7: {}
+ /object.groupby@1.0.3:
+ resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ dev: true
- path-scurry@1.11.1:
+ /object.values@1.2.0:
+ resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+ dev: true
+
+ /obuf@1.1.2:
+ resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
+ dev: false
+
+ /once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+ dev: true
+
+ /optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+ dev: true
+
+ /p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ yocto-queue: 0.1.0
+ dev: true
+
+ /p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-limit: 3.1.0
+ dev: true
+
+ /package-json-from-dist@1.0.0:
+ resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
+
+ /parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+ dependencies:
+ callsites: 3.1.0
+ dev: true
+
+ /parse-entities@4.0.1:
+ resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==}
+ dependencies:
+ '@types/unist': 2.0.10
+ character-entities: 2.0.2
+ character-entities-legacy: 3.0.0
+ character-reference-invalid: 2.0.1
+ decode-named-character-reference: 1.0.2
+ is-alphanumerical: 2.0.1
+ is-decimal: 2.0.1
+ is-hexadecimal: 2.0.1
+ dev: false
+
+ /path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ /path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ /path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
dependencies:
lru-cache: 10.4.3
minipass: 7.1.2
- periscopic@3.1.0:
+ /path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /periscopic@3.1.0:
+ resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
dependencies:
'@types/estree': 1.0.5
estree-walker: 3.0.3
is-reference: 3.0.2
+ dev: false
- picocolors@1.0.1: {}
+ /pg-int8@1.0.1:
+ resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
+ engines: {node: '>=4.0.0'}
+ dev: false
- picomatch@2.3.1: {}
+ /pg-numeric@1.0.2:
+ resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==}
+ engines: {node: '>=4'}
+ dev: false
- pify@2.3.0: {}
+ /pg-protocol@1.7.0:
+ resolution: {integrity: sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==}
+ dev: false
- pirates@4.0.6: {}
-
- postcss-import@15.1.0(postcss@8.4.41):
+ /pg-types@4.0.2:
+ resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==}
+ engines: {node: '>=10'}
dependencies:
- postcss: 8.4.41
+ pg-int8: 1.0.1
+ pg-numeric: 1.0.2
+ postgres-array: 3.0.2
+ postgres-bytea: 3.0.0
+ postgres-date: 2.1.0
+ postgres-interval: 3.0.0
+ postgres-range: 1.1.4
+ dev: false
+
+ /picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+
+ /picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ /pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+
+ /pirates@4.0.6:
+ resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ engines: {node: '>= 6'}
+
+ /possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /postcss-import@15.1.0(postcss@8.4.40):
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+ dependencies:
+ postcss: 8.4.40
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.8
- postcss-js@4.0.1(postcss@8.4.41):
+ /postcss-js@4.0.1(postcss@8.4.40):
+ resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
+ engines: {node: ^12 || ^14 || >= 16}
+ peerDependencies:
+ postcss: ^8.4.21
dependencies:
camelcase-css: 2.0.1
- postcss: 8.4.41
+ postcss: 8.4.40
- postcss-load-config@4.0.2(postcss@8.4.41):
+ /postcss-load-config@4.0.2(postcss@8.4.40):
+ resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
dependencies:
lilconfig: 3.1.2
+ postcss: 8.4.40
yaml: 2.5.0
- optionalDependencies:
- postcss: 8.4.41
- postcss-nested@6.2.0(postcss@8.4.41):
+ /postcss-nested@6.2.0(postcss@8.4.40):
+ resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.2.14
dependencies:
- postcss: 8.4.41
- postcss-selector-parser: 6.1.2
+ postcss: 8.4.40
+ postcss-selector-parser: 6.1.1
- postcss-selector-parser@6.0.10:
+ /postcss-selector-parser@6.1.1:
+ resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==}
+ engines: {node: '>=4'}
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
- postcss-selector-parser@6.1.2:
+ /postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ /postcss@8.4.31:
+ resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
+ engines: {node: ^10 || ^12 || >=14}
dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
+ nanoid: 3.3.7
+ picocolors: 1.0.1
+ source-map-js: 1.2.0
+ dev: false
- postcss-value-parser@4.2.0: {}
-
- postcss@8.4.31:
+ /postcss@8.4.40:
+ resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==}
+ engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.7
picocolors: 1.0.1
source-map-js: 1.2.0
- postcss@8.4.41:
- dependencies:
- nanoid: 3.3.7
- picocolors: 1.0.1
- source-map-js: 1.2.0
+ /postgres-array@3.0.2:
+ resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==}
+ engines: {node: '>=12'}
+ dev: false
- preact-render-to-string@5.2.3(preact@10.11.3):
+ /postgres-bytea@3.0.0:
+ resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==}
+ engines: {node: '>= 6'}
+ dependencies:
+ obuf: 1.1.2
+ dev: false
+
+ /postgres-date@2.1.0:
+ resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /postgres-interval@3.0.0:
+ resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /postgres-range@1.1.4:
+ resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==}
+ dev: false
+
+ /postgres@3.4.4:
+ resolution: {integrity: sha512-IbyN+9KslkqcXa8AO9fxpk97PA4pzewvpi2B3Dwy9u4zpV32QicaEdgmF3eSQUzdRk7ttDHQejNgAEr4XoeH4A==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /preact-render-to-string@5.2.3(preact@10.11.3):
+ resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==}
+ peerDependencies:
+ preact: '>=10'
dependencies:
preact: 10.11.3
pretty-format: 3.8.0
+ dev: false
- preact@10.11.3: {}
+ /preact@10.11.3:
+ resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==}
+ dev: false
- prettier@3.3.3: {}
+ /prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+ dev: true
- pretty-format@3.8.0: {}
+ /prettier@3.3.3:
+ resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
- prismjs@1.27.0: {}
+ /pretty-format@3.8.0:
+ resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
+ dev: false
- prismjs@1.29.0: {}
-
- prop-types@15.8.1:
+ /prop-types@15.8.1:
+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
dependencies:
loose-envify: 1.4.0
object-assign: 4.1.1
react-is: 16.13.1
+ dev: true
- property-information@5.6.0:
+ /property-information@6.5.0:
+ resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+ dev: false
+
+ /punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ /react-dom@19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-EMgZJX6EEQEr+pso+9ySkrEMPv3N7zF2fbi0f6uB+X7r8E+O2GqPRcIHtFigMdW8uS0XCVFHAocMnIc4yPULYQ==}
+ peerDependencies:
+ react: 19.0.0-rc-7771d3a7-20240827
dependencies:
- xtend: 4.0.2
+ react: 19.0.0-rc-7771d3a7-20240827
+ scheduler: 0.25.0-rc-7771d3a7-20240827
+ dev: false
- property-information@6.5.0: {}
+ /react-is@16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+ dev: true
- queue-microtask@1.2.3: {}
-
- react-dom@18.3.1(react@18.3.1):
+ /react-markdown@9.0.1(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==}
+ peerDependencies:
+ '@types/react': '>=18'
+ react: '>=18'
dependencies:
- loose-envify: 1.4.0
- react: 18.3.1
- scheduler: 0.23.2
-
- react-intersection-observer@9.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
- dependencies:
- react: 18.3.1
- optionalDependencies:
- react-dom: 18.3.1(react@18.3.1)
-
- react-is@16.13.1: {}
-
- react-is@18.3.1: {}
-
- react-markdown@8.0.7(@types/react@18.3.4)(react@18.3.1):
- dependencies:
- '@types/hast': 2.3.10
- '@types/prop-types': 15.7.12
- '@types/react': 18.3.4
- '@types/unist': 2.0.11
- comma-separated-tokens: 2.0.3
- hast-util-whitespace: 2.0.1
- prop-types: 15.8.1
- property-information: 6.5.0
- react: 18.3.1
- react-is: 18.3.1
- remark-parse: 10.0.2
- remark-rehype: 10.1.0
- space-separated-tokens: 2.0.2
- style-to-object: 0.4.4
- unified: 10.1.2
- unist-util-visit: 4.1.2
- vfile: 5.3.7
+ '@types/hast': 3.0.4
+ '@types/react': 18.3.3
+ devlop: 1.1.0
+ hast-util-to-jsx-runtime: 2.3.0
+ html-url-attributes: 3.0.0
+ mdast-util-to-hast: 13.2.0
+ react: 19.0.0-rc-7771d3a7-20240827
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+ vfile: 6.0.2
transitivePeerDependencies:
- supports-color
+ dev: false
- react-remove-scroll-bar@2.3.6(@types/react@18.3.4)(react@18.3.1):
+ /react-remove-scroll-bar@2.3.6(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
dependencies:
- react: 18.3.1
- react-style-singleton: 2.2.1(@types/react@18.3.4)(react@18.3.1)
- tslib: 2.7.0
- optionalDependencies:
- '@types/react': 18.3.4
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-style-singleton: 2.2.1(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ tslib: 2.6.3
+ dev: false
- react-remove-scroll@2.5.7(@types/react@18.3.4)(react@18.3.1):
+ /react-remove-scroll@2.5.7(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
dependencies:
- react: 18.3.1
- react-remove-scroll-bar: 2.3.6(@types/react@18.3.4)(react@18.3.1)
- react-style-singleton: 2.2.1(@types/react@18.3.4)(react@18.3.1)
- tslib: 2.7.0
- use-callback-ref: 1.3.2(@types/react@18.3.4)(react@18.3.1)
- use-sidecar: 1.1.2(@types/react@18.3.4)(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ react-style-singleton: 2.2.1(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ tslib: 2.6.3
+ use-callback-ref: 1.3.2(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ use-sidecar: 1.1.2(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- react-style-singleton@2.2.1(@types/react@18.3.4)(react@18.3.1):
+ /react-remove-scroll@2.6.0(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
dependencies:
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ react-style-singleton: 2.2.1(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ tslib: 2.6.3
+ use-callback-ref: 1.3.2(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ use-sidecar: 1.1.2(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
+
+ /react-style-singleton@2.2.1(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.3.3
get-nonce: 1.0.1
invariant: 2.2.4
- react: 18.3.1
- tslib: 2.7.0
- optionalDependencies:
- '@types/react': 18.3.4
+ react: 19.0.0-rc-7771d3a7-20240827
+ tslib: 2.6.3
+ dev: false
- react-syntax-highlighter@15.5.0(react@18.3.1):
- dependencies:
- '@babel/runtime': 7.25.4
- highlight.js: 10.7.3
- lowlight: 1.20.0
- prismjs: 1.29.0
- react: 18.3.1
- refractor: 3.6.0
+ /react@19.0.0-rc-7771d3a7-20240827:
+ resolution: {integrity: sha512-Xg6LoxgPpT4efYHzRB2gUUQCoNXu2df3sOBRgiUvzTVT1qQNOV611/w80JiOmnTWlIyCaUfSkNrMG8OUO/D+AA==}
+ engines: {node: '>=0.10.0'}
+ dev: false
- react-textarea-autosize@8.5.3(@types/react@18.3.4)(react@18.3.1):
- dependencies:
- '@babel/runtime': 7.25.4
- react: 18.3.1
- use-composed-ref: 1.3.0(react@18.3.1)
- use-latest: 1.2.1(@types/react@18.3.4)(react@18.3.1)
- transitivePeerDependencies:
- - '@types/react'
-
- react@18.3.1:
- dependencies:
- loose-envify: 1.4.0
-
- read-cache@1.0.0:
+ /read-cache@1.0.0:
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
dependencies:
pify: 2.3.0
- readdirp@3.6.0:
+ /readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
dependencies:
picomatch: 2.3.1
- refractor@3.6.0:
+ /reflect.getprototypeof@1.0.6:
+ resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==}
+ engines: {node: '>= 0.4'}
dependencies:
- hastscript: 6.0.0
- parse-entities: 2.0.0
- prismjs: 1.27.0
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ globalthis: 1.0.4
+ which-builtin-type: 1.1.4
+ dev: true
- regenerator-runtime@0.14.1: {}
-
- remark-gfm@3.0.1:
+ /regexp.prototype.flags@1.5.2:
+ resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
+ engines: {node: '>= 0.4'}
dependencies:
- '@types/mdast': 3.0.15
- mdast-util-gfm: 2.0.2
- micromark-extension-gfm: 2.0.3
- unified: 10.1.2
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ set-function-name: 2.0.2
+ dev: true
+
+ /remark-gfm@4.0.0:
+ resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-gfm: 3.0.0
+ micromark-extension-gfm: 3.0.0
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
transitivePeerDependencies:
- supports-color
+ dev: false
- remark-math@5.1.1:
+ /remark-parse@11.0.0:
+ resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
dependencies:
- '@types/mdast': 3.0.15
- mdast-util-math: 2.0.2
- micromark-extension-math: 2.1.2
- unified: 10.1.2
-
- remark-parse@10.0.2:
- dependencies:
- '@types/mdast': 3.0.15
- mdast-util-from-markdown: 1.3.1
- unified: 10.1.2
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.1
+ micromark-util-types: 2.0.0
+ unified: 11.0.5
transitivePeerDependencies:
- supports-color
+ dev: false
- remark-rehype@10.1.0:
+ /remark-rehype@11.1.0:
+ resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==}
dependencies:
- '@types/hast': 2.3.10
- '@types/mdast': 3.0.15
- mdast-util-to-hast: 12.3.0
- unified: 10.1.2
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ mdast-util-to-hast: 13.2.0
+ unified: 11.0.5
+ vfile: 6.0.2
+ dev: false
- resolve@1.22.8:
+ /remark-stringify@11.0.0:
+ resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
dependencies:
- is-core-module: 2.15.1
+ '@types/mdast': 4.0.4
+ mdast-util-to-markdown: 2.1.0
+ unified: 11.0.5
+ dev: false
+
+ /resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+ dev: true
+
+ /resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.15.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- reusify@1.0.4: {}
+ /resolve@2.0.0-next.5:
+ resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.15.0
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+ dev: true
- run-parallel@1.2.0:
+ /retry@0.13.1:
+ resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
+ engines: {node: '>= 4'}
+ dev: false
+
+ /reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ /rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ dev: true
+
+ /run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
dependencies:
queue-microtask: 1.2.3
- sade@1.8.1:
+ /safe-array-concat@1.1.2:
+ resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
+ engines: {node: '>=0.4'}
dependencies:
- mri: 1.2.0
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+ has-symbols: 1.0.3
+ isarray: 2.0.5
+ dev: true
- scheduler@0.23.2:
+ /safe-regex-test@1.0.3:
+ resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
+ engines: {node: '>= 0.4'}
dependencies:
- loose-envify: 1.4.0
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-regex: 1.1.4
+ dev: true
- secure-json-parse@2.7.0: {}
+ /scheduler@0.25.0-rc-7771d3a7-20240827:
+ resolution: {integrity: sha512-n4nHmAoerbIOSrH24w0+fcdCUwQ4Npm7yXfsrn09FL01OWIaxpuo4P0rj3qPyLFgsJDbn18sWvLVB/e/KPnR+A==}
+ dev: false
- server-only@0.0.1: {}
+ /secure-json-parse@2.7.0:
+ resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
+ dev: false
- shebang-command@2.0.0:
+ /semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+ dev: true
+
+ /semver@7.6.3:
+ resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ /server-only@0.0.1:
+ resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
+ dev: false
+
+ /set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+ dev: true
+
+ /set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+ dev: true
+
+ /sharp@0.33.5:
+ resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ requiresBuild: true
+ dependencies:
+ color: 4.2.3
+ detect-libc: 2.0.3
+ semver: 7.6.3
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.33.5
+ '@img/sharp-darwin-x64': 0.33.5
+ '@img/sharp-libvips-darwin-arm64': 1.0.4
+ '@img/sharp-libvips-darwin-x64': 1.0.4
+ '@img/sharp-libvips-linux-arm': 1.0.5
+ '@img/sharp-libvips-linux-arm64': 1.0.4
+ '@img/sharp-libvips-linux-s390x': 1.0.4
+ '@img/sharp-libvips-linux-x64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+ '@img/sharp-linux-arm': 0.33.5
+ '@img/sharp-linux-arm64': 0.33.5
+ '@img/sharp-linux-s390x': 0.33.5
+ '@img/sharp-linux-x64': 0.33.5
+ '@img/sharp-linuxmusl-arm64': 0.33.5
+ '@img/sharp-linuxmusl-x64': 0.33.5
+ '@img/sharp-wasm32': 0.33.5
+ '@img/sharp-win32-ia32': 0.33.5
+ '@img/sharp-win32-x64': 0.33.5
+ dev: false
+ optional: true
+
+ /shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
dependencies:
shebang-regex: 3.0.0
- shebang-regex@3.0.0: {}
+ /shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
- signal-exit@4.1.0: {}
-
- sonner@1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ /side-channel@1.0.6:
+ resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
+ engines: {node: '>= 0.4'}
dependencies:
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ object-inspect: 1.13.2
+ dev: true
- source-map-js@1.2.0: {}
+ /signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
- space-separated-tokens@1.1.5: {}
-
- space-separated-tokens@2.0.2: {}
-
- sswr@2.1.0(svelte@4.2.19):
+ /simple-swizzle@0.2.2:
+ resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+ requiresBuild: true
dependencies:
- svelte: 4.2.19
+ is-arrayish: 0.3.2
+ dev: false
+ optional: true
+
+ /slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /sonner@1.5.0(react-dom@19.0.0-rc-7771d3a7-20240827)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==}
+ peerDependencies:
+ react: ^18.0.0
+ react-dom: ^18.0.0
+ dependencies:
+ react: 19.0.0-rc-7771d3a7-20240827
+ react-dom: 19.0.0-rc-7771d3a7-20240827(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
+
+ /source-map-js@1.2.0:
+ resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
+ engines: {node: '>=0.10.0'}
+
+ /source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+ dev: true
+
+ /source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+ dev: false
+
+ /sswr@2.1.0(svelte@4.2.18):
+ resolution: {integrity: sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==}
+ peerDependencies:
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ dependencies:
+ svelte: 4.2.18
swrev: 4.0.0
+ dev: false
- streamsearch@1.1.0: {}
+ /stop-iteration-iterator@1.0.0:
+ resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ internal-slot: 1.0.7
+ dev: true
- string-width@4.2.3:
+ /streamsearch@1.1.0:
+ resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
+ engines: {node: '>=10.0.0'}
+ dev: false
+
+ /string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
dependencies:
emoji-regex: 8.0.0
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
- string-width@5.1.2:
+ /string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
strip-ansi: 7.1.0
- strip-ansi@6.0.1:
+ /string.prototype.includes@2.0.0:
+ resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==}
+ dependencies:
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ dev: true
+
+ /string.prototype.matchall@4.0.11:
+ resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-symbols: 1.0.3
+ internal-slot: 1.0.7
+ regexp.prototype.flags: 1.5.2
+ set-function-name: 2.0.2
+ side-channel: 1.0.6
+ dev: true
+
+ /string.prototype.repeat@1.0.0:
+ resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
+ dependencies:
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ dev: true
+
+ /string.prototype.trim@1.2.9:
+ resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
+ dev: true
+
+ /string.prototype.trimend@1.0.8:
+ resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+ dev: true
+
+ /string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+ dev: true
+
+ /stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
+ dev: false
+
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
dependencies:
ansi-regex: 5.0.1
- strip-ansi@7.1.0:
+ /strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
dependencies:
ansi-regex: 6.0.1
- style-to-object@0.4.4:
- dependencies:
- inline-style-parser: 0.1.1
+ /strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+ dev: true
- styled-jsx@5.1.1(react@18.3.1):
+ /strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /style-to-object@1.0.6:
+ resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==}
+ dependencies:
+ inline-style-parser: 0.2.3
+ dev: false
+
+ /styled-jsx@5.1.6(react@19.0.0-rc-7771d3a7-20240827):
+ 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
dependencies:
client-only: 0.0.1
- react: 18.3.1
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- sucrase@3.35.0:
+ /sucrase@3.35.0:
+ resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
dependencies:
'@jridgewell/gen-mapping': 0.3.5
commander: 4.1.1
@@ -4037,9 +6227,20 @@ snapshots:
pirates: 4.0.6
ts-interface-checker: 0.1.13
- supports-preserve-symlinks-flag@1.0.0: {}
+ /supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
- svelte@4.2.19:
+ /supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ /svelte@4.2.18:
+ resolution: {integrity: sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==}
+ engines: {node: '>=16'}
dependencies:
'@ampproject/remapping': 2.3.0
'@jridgewell/sourcemap-codec': 1.5.0
@@ -4055,26 +6256,46 @@ snapshots:
locate-character: 3.0.0
magic-string: 0.30.11
periscopic: 3.1.0
+ dev: false
- swr@2.2.5(react@18.3.1):
+ /swr@2.2.5(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==}
+ peerDependencies:
+ react: ^16.11.0 || ^17.0.0 || ^18.0.0
dependencies:
client-only: 0.0.1
- react: 18.3.1
- use-sync-external-store: 1.2.2(react@18.3.1)
+ react: 19.0.0-rc-7771d3a7-20240827
+ use-sync-external-store: 1.2.2(react@19.0.0-rc-7771d3a7-20240827)
+ dev: false
- swrev@4.0.0: {}
+ /swrev@4.0.0:
+ resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==}
+ dev: false
- swrv@1.0.4(vue@3.4.38(typescript@5.5.4)):
+ /swrv@1.0.4(vue@3.4.35):
+ resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==}
+ peerDependencies:
+ vue: '>=3.2.26 < 4'
dependencies:
- vue: 3.4.38(typescript@5.5.4)
+ vue: 3.4.35(typescript@5.5.4)
+ dev: false
- tailwind-merge@2.5.2: {}
+ /tailwind-merge@2.5.2:
+ resolution: {integrity: sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==}
+ dev: false
- tailwindcss-animate@1.0.7(tailwindcss@3.4.10):
+ /tailwindcss-animate@1.0.7(tailwindcss@3.4.7):
+ resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==}
+ peerDependencies:
+ tailwindcss: '>=3.0.0 || insiders'
dependencies:
- tailwindcss: 3.4.10
+ tailwindcss: 3.4.7
+ dev: false
- tailwindcss@3.4.10:
+ /tailwindcss@3.4.7:
+ resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@@ -4086,192 +6307,435 @@ snapshots:
is-glob: 4.0.3
jiti: 1.21.6
lilconfig: 2.1.0
- micromatch: 4.0.8
+ micromatch: 4.0.7
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.0.1
- postcss: 8.4.41
- postcss-import: 15.1.0(postcss@8.4.41)
- postcss-js: 4.0.1(postcss@8.4.41)
- postcss-load-config: 4.0.2(postcss@8.4.41)
- postcss-nested: 6.2.0(postcss@8.4.41)
- postcss-selector-parser: 6.1.2
+ postcss: 8.4.40
+ postcss-import: 15.1.0(postcss@8.4.40)
+ postcss-js: 4.0.1(postcss@8.4.40)
+ postcss-load-config: 4.0.2(postcss@8.4.40)
+ postcss-nested: 6.2.0(postcss@8.4.40)
+ postcss-selector-parser: 6.1.1
resolve: 1.22.8
sucrase: 3.35.0
transitivePeerDependencies:
- ts-node
- thenify-all@1.6.0:
+ /tapable@2.2.1:
+ resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ dev: true
+
+ /thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
dependencies:
thenify: 3.3.1
- thenify@3.3.1:
+ /thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
dependencies:
any-promise: 1.3.0
- to-fast-properties@2.0.0: {}
+ /to-fast-properties@2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+ dev: false
- to-regex-range@5.0.1:
+ /to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
dependencies:
is-number: 7.0.0
- tr46@0.0.3: {}
+ /trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+ dev: false
- trim-lines@3.0.1: {}
+ /trough@2.2.0:
+ resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+ dev: false
- trough@2.2.0: {}
-
- ts-interface-checker@0.1.13: {}
-
- tslib@2.7.0: {}
-
- typescript@5.5.4: {}
-
- undici-types@5.26.5: {}
-
- undici-types@6.19.8: {}
-
- unified@10.1.2:
+ /ts-api-utils@1.3.0(typescript@5.5.4):
+ resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ typescript: '>=4.2.0'
dependencies:
- '@types/unist': 2.0.11
+ typescript: 5.5.4
+ dev: true
+
+ /ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+ /tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ dev: true
+
+ /tslib@2.6.3:
+ resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+ dev: false
+
+ /tsx@4.19.1:
+ resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+ dependencies:
+ esbuild: 0.23.1
+ get-tsconfig: 4.7.6
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ dev: true
+
+ /type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /typed-array-buffer@1.0.2:
+ resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-typed-array: 1.1.13
+ dev: true
+
+ /typed-array-byte-length@1.0.1:
+ resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
+ dev: true
+
+ /typed-array-byte-offset@1.0.2:
+ resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
+ dev: true
+
+ /typed-array-length@1.0.6:
+ resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
+ possible-typed-array-names: 1.0.0
+ dev: true
+
+ /typescript@5.5.4:
+ resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ /unbox-primitive@1.0.2:
+ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+ dependencies:
+ call-bind: 1.0.7
+ has-bigints: 1.0.2
+ has-symbols: 1.0.3
+ which-boxed-primitive: 1.0.2
+ dev: true
+
+ /undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ /undici@5.28.4:
+ resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
+ engines: {node: '>=14.0'}
+ dependencies:
+ '@fastify/busboy': 2.1.1
+ dev: false
+
+ /unified@11.0.5:
+ resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
+ dependencies:
+ '@types/unist': 3.0.2
bail: 2.0.2
+ devlop: 1.1.0
extend: 3.0.2
- is-buffer: 2.0.5
is-plain-obj: 4.1.0
trough: 2.2.0
- vfile: 5.3.7
+ vfile: 6.0.2
+ dev: false
- unist-util-generated@2.0.1: {}
-
- unist-util-is@5.2.1:
+ /unist-util-is@6.0.0:
+ resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
dependencies:
- '@types/unist': 2.0.11
+ '@types/unist': 3.0.2
+ dev: false
- unist-util-position@4.0.4:
+ /unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
dependencies:
- '@types/unist': 2.0.11
+ '@types/unist': 3.0.2
+ dev: false
- unist-util-stringify-position@3.0.3:
+ /unist-util-remove-position@5.0.0:
+ resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
dependencies:
- '@types/unist': 2.0.11
+ '@types/unist': 3.0.2
+ unist-util-visit: 5.0.0
+ dev: false
- unist-util-visit-parents@5.1.3:
+ /unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
dependencies:
- '@types/unist': 2.0.11
- unist-util-is: 5.2.1
+ '@types/unist': 3.0.2
+ dev: false
- unist-util-visit@4.1.2:
+ /unist-util-visit-parents@6.0.1:
+ resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
dependencies:
- '@types/unist': 2.0.11
- unist-util-is: 5.2.1
- unist-util-visit-parents: 5.1.3
+ '@types/unist': 3.0.2
+ unist-util-is: 6.0.0
+ dev: false
- update-browserslist-db@1.1.0(browserslist@4.23.3):
+ /unist-util-visit@5.0.0:
+ resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
dependencies:
- browserslist: 4.23.3
- escalade: 3.1.2
- picocolors: 1.0.1
+ '@types/unist': 3.0.2
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
+ dev: false
- use-callback-ref@1.3.2(@types/react@18.3.4)(react@18.3.1):
+ /uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
- react: 18.3.1
- tslib: 2.7.0
- optionalDependencies:
- '@types/react': 18.3.4
+ punycode: 2.3.1
+ dev: true
- use-composed-ref@1.3.0(react@18.3.1):
+ /use-callback-ref@1.3.2(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
dependencies:
- react: 18.3.1
+ '@types/react': 18.3.3
+ react: 19.0.0-rc-7771d3a7-20240827
+ tslib: 2.6.3
+ dev: false
- use-isomorphic-layout-effect@1.1.2(@types/react@18.3.4)(react@18.3.1):
- dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.4
-
- use-latest@1.2.1(@types/react@18.3.4)(react@18.3.1):
- dependencies:
- react: 18.3.1
- use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.4)(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.4
-
- use-sidecar@1.1.2(@types/react@18.3.4)(react@18.3.1):
+ /use-sidecar@1.1.2(@types/react@18.3.3)(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
dependencies:
+ '@types/react': 18.3.3
detect-node-es: 1.1.0
- react: 18.3.1
- tslib: 2.7.0
- optionalDependencies:
- '@types/react': 18.3.4
+ react: 19.0.0-rc-7771d3a7-20240827
+ tslib: 2.6.3
+ dev: false
- use-sync-external-store@1.2.2(react@18.3.1):
+ /use-sync-external-store@1.2.2(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
- react: 18.3.1
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- util-deprecate@1.0.2: {}
-
- uvu@0.5.6:
+ /usehooks-ts@3.1.0(react@19.0.0-rc-7771d3a7-20240827):
+ resolution: {integrity: sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==}
+ engines: {node: '>=16.15.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17 || ^18
dependencies:
- dequal: 2.0.3
- diff: 5.2.0
- kleur: 4.1.5
- sade: 1.8.1
+ lodash.debounce: 4.0.8
+ react: 19.0.0-rc-7771d3a7-20240827
+ dev: false
- vfile-message@3.1.4:
- dependencies:
- '@types/unist': 2.0.11
- unist-util-stringify-position: 3.0.3
+ /util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- vfile@5.3.7:
+ /vfile-message@4.0.2:
+ resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
dependencies:
- '@types/unist': 2.0.11
- is-buffer: 2.0.5
- unist-util-stringify-position: 3.0.3
- vfile-message: 3.1.4
+ '@types/unist': 3.0.2
+ unist-util-stringify-position: 4.0.0
+ dev: false
- vue@3.4.38(typescript@5.5.4):
+ /vfile@6.0.2:
+ resolution: {integrity: sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==}
dependencies:
- '@vue/compiler-dom': 3.4.38
- '@vue/compiler-sfc': 3.4.38
- '@vue/runtime-dom': 3.4.38
- '@vue/server-renderer': 3.4.38(vue@3.4.38(typescript@5.5.4))
- '@vue/shared': 3.4.38
- optionalDependencies:
+ '@types/unist': 3.0.2
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.2
+ dev: false
+
+ /vue@3.4.35(typescript@5.5.4):
+ resolution: {integrity: sha512-+fl/GLmI4GPileHftVlCdB7fUL4aziPcqTudpTGXCT8s+iZWuOCeNEB5haX6Uz2IpRrbEXOgIFbe+XciCuGbNQ==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@vue/compiler-dom': 3.4.35
+ '@vue/compiler-sfc': 3.4.35
+ '@vue/runtime-dom': 3.4.35
+ '@vue/server-renderer': 3.4.35(vue@3.4.35)
+ '@vue/shared': 3.4.35
typescript: 5.5.4
+ dev: false
- web-streams-polyfill@4.0.0-beta.3: {}
-
- webidl-conversions@3.0.1: {}
-
- whatwg-url@5.0.0:
+ /which-boxed-primitive@1.0.2:
+ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
dependencies:
- tr46: 0.0.3
- webidl-conversions: 3.0.1
+ is-bigint: 1.0.4
+ is-boolean-object: 1.1.2
+ is-number-object: 1.0.7
+ is-string: 1.0.7
+ is-symbol: 1.0.4
+ dev: true
- which@2.0.2:
+ /which-builtin-type@1.1.4:
+ resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function.prototype.name: 1.1.6
+ has-tostringtag: 1.0.2
+ is-async-function: 2.0.0
+ is-date-object: 1.0.5
+ is-finalizationregistry: 1.0.2
+ is-generator-function: 1.0.10
+ is-regex: 1.1.4
+ is-weakref: 1.0.2
+ isarray: 2.0.5
+ which-boxed-primitive: 1.0.2
+ which-collection: 1.0.2
+ which-typed-array: 1.1.15
+ dev: true
+
+ /which-collection@1.0.2:
+ resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-weakmap: 2.0.2
+ is-weakset: 2.0.3
+ dev: true
+
+ /which-typed-array@1.1.15:
+ resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.2
+ dev: true
+
+ /which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
dependencies:
isexe: 2.0.0
- wrap-ansi@7.0.0:
+ /word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
- wrap-ansi@8.1.0:
+ /wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
dependencies:
ansi-styles: 6.2.1
string-width: 5.1.2
strip-ansi: 7.1.0
- xtend@4.0.2: {}
+ /wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ dev: true
- yaml@2.5.0: {}
+ /ws@8.18.0(bufferutil@4.0.8):
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ 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
+ dependencies:
+ bufferutil: 4.0.8
+ dev: false
- zod-to-json-schema@3.23.2(zod@3.23.8):
+ /yaml@2.5.0:
+ resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==}
+ engines: {node: '>= 14'}
+ hasBin: true
+
+ /yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /zod-to-json-schema@3.23.2(zod@3.23.8):
+ resolution: {integrity: sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw==}
+ peerDependencies:
+ zod: ^3.23.3
dependencies:
zod: 3.23.8
+ dev: false
- zod@3.23.8: {}
+ /zod@3.23.8:
+ resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+ dev: false
- zwitch@2.0.4: {}
+ /zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+ dev: false
diff --git a/postcss.config.js b/postcss.config.js
deleted file mode 100644
index 33ad091..0000000
--- a/postcss.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
- plugins: {
- tailwindcss: {},
- autoprefixer: {},
- },
-}
diff --git a/postcss.config.mjs b/postcss.config.mjs
new file mode 100644
index 0000000..1a69fd2
--- /dev/null
+++ b/postcss.config.mjs
@@ -0,0 +1,8 @@
+/** @type {import('postcss-load-config').Config} */
+const config = {
+ plugins: {
+ tailwindcss: {},
+ },
+};
+
+export default config;
diff --git a/prettier.config.cjs b/prettier.config.cjs
deleted file mode 100644
index 842ca6b..0000000
--- a/prettier.config.cjs
+++ /dev/null
@@ -1,34 +0,0 @@
-/** @type {import('prettier').Config} */
-module.exports = {
- endOfLine: 'lf',
- semi: false,
- useTabs: false,
- singleQuote: true,
- arrowParens: 'avoid',
- tabWidth: 2,
- trailingComma: 'none',
- importOrder: [
- '^(react/(.*)$)|^(react$)',
- '^(next/(.*)$)|^(next$)',
- '',
- '',
- '^types$',
- '^@/types/(.*)$',
- '^@/config/(.*)$',
- '^@/lib/(.*)$',
- '^@/hooks/(.*)$',
- '^@/components/ui/(.*)$',
- '^@/components/(.*)$',
- '^@/registry/(.*)$',
- '^@/styles/(.*)$',
- '^@/app/(.*)$',
- '',
- '^[./]'
- ],
- importOrderSeparation: false,
- importOrderSortSpecifiers: true,
- importOrderBuiltinModulesToTop: true,
- importOrderParserPlugins: ['typescript', 'jsx', 'decorators-legacy'],
- importOrderMergeDuplicateImports: true,
- importOrderCombineTypeAndValueImports: true
-}
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
deleted file mode 100644
index 0eb831f..0000000
Binary files a/public/apple-touch-icon.png and /dev/null differ
diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png
deleted file mode 100644
index 620c7d8..0000000
Binary files a/public/favicon-16x16.png and /dev/null differ
diff --git a/public/fonts/geist-mono.woff2 b/public/fonts/geist-mono.woff2
new file mode 100644
index 0000000..8172029
Binary files /dev/null and b/public/fonts/geist-mono.woff2 differ
diff --git a/public/fonts/geist.woff2 b/public/fonts/geist.woff2
new file mode 100644
index 0000000..9f52b47
Binary files /dev/null and b/public/fonts/geist.woff2 differ
diff --git a/public/images/demo-thumbnail.png b/public/images/demo-thumbnail.png
new file mode 100644
index 0000000..8c6f98a
Binary files /dev/null and b/public/images/demo-thumbnail.png differ
diff --git a/public/next.svg b/public/next.svg
deleted file mode 100644
index 5174b28..0000000
--- a/public/next.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/thirteen.svg b/public/thirteen.svg
deleted file mode 100644
index 8977c1b..0000000
--- a/public/thirteen.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/vercel.svg b/public/vercel.svg
deleted file mode 100644
index d2f8422..0000000
--- a/public/vercel.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/tailwind.config.ts b/tailwind.config.ts
index 14261e0..62d765b 100644
--- a/tailwind.config.ts
+++ b/tailwind.config.ts
@@ -1,81 +1,68 @@
-/** @type {import('tailwindcss').Config} */
-module.exports = {
- darkMode: ['class'],
+import type { Config } from "tailwindcss";
+
+const config: Config = {
+ darkMode: ["class"],
content: [
- './pages/**/*.{ts,tsx}',
- './components/**/*.{ts,tsx}',
- './app/**/*.{ts,tsx}',
- './src/**/*.{ts,tsx}'
+ "./pages/**/*.{js,ts,jsx,tsx,mdx}",
+ "./components/**/*.{js,ts,jsx,tsx,mdx}",
+ "./app/**/*.{js,ts,jsx,tsx,mdx}",
],
- prefix: '',
theme: {
- container: {
- center: true,
- padding: '2rem',
- screens: {
- '2xl': '1400px'
- }
+ fontFamily: {
+ sans: ["geist"],
+ mono: ["geist-mono"],
},
extend: {
- fontFamily: {
- sans: ['var(--font-geist-sans)'],
- mono: ['var(--font-geist-mono)']
+ borderRadius: {
+ lg: "var(--radius)",
+ md: "calc(var(--radius) - 2px)",
+ sm: "calc(var(--radius) - 4px)",
},
colors: {
- border: 'hsl(var(--border))',
- input: 'hsl(var(--input))',
- ring: 'hsl(var(--ring))',
- background: 'hsl(var(--background))',
- foreground: 'hsl(var(--foreground))',
- primary: {
- DEFAULT: 'hsl(var(--primary))',
- foreground: 'hsl(var(--primary-foreground))'
- },
- secondary: {
- DEFAULT: 'hsl(var(--secondary))',
- foreground: 'hsl(var(--secondary-foreground))'
- },
- destructive: {
- DEFAULT: 'hsl(var(--destructive))',
- foreground: 'hsl(var(--destructive-foreground))'
- },
- muted: {
- DEFAULT: 'hsl(var(--muted))',
- foreground: 'hsl(var(--muted-foreground))'
- },
- accent: {
- DEFAULT: 'hsl(var(--accent))',
- foreground: 'hsl(var(--accent-foreground))'
+ background: "hsl(var(--background))",
+ foreground: "hsl(var(--foreground))",
+ card: {
+ DEFAULT: "hsl(var(--card))",
+ foreground: "hsl(var(--card-foreground))",
},
popover: {
- DEFAULT: 'hsl(var(--popover))',
- foreground: 'hsl(var(--popover-foreground))'
+ DEFAULT: "hsl(var(--popover))",
+ foreground: "hsl(var(--popover-foreground))",
},
- card: {
- DEFAULT: 'hsl(var(--card))',
- foreground: 'hsl(var(--card-foreground))'
- }
- },
- borderRadius: {
- lg: 'var(--radius)',
- md: 'calc(var(--radius) - 2px)',
- sm: 'calc(var(--radius) - 4px)'
- },
- keyframes: {
- 'accordion-down': {
- from: { height: '0' },
- to: { height: 'var(--radix-accordion-content-height)' }
+ primary: {
+ DEFAULT: "hsl(var(--primary))",
+ foreground: "hsl(var(--primary-foreground))",
+ },
+ secondary: {
+ DEFAULT: "hsl(var(--secondary))",
+ foreground: "hsl(var(--secondary-foreground))",
+ },
+ muted: {
+ DEFAULT: "hsl(var(--muted))",
+ foreground: "hsl(var(--muted-foreground))",
+ },
+ accent: {
+ DEFAULT: "hsl(var(--accent))",
+ foreground: "hsl(var(--accent-foreground))",
+ },
+ destructive: {
+ DEFAULT: "hsl(var(--destructive))",
+ foreground: "hsl(var(--destructive-foreground))",
+ },
+ border: "hsl(var(--border))",
+ input: "hsl(var(--input))",
+ ring: "hsl(var(--ring))",
+ chart: {
+ "1": "hsl(var(--chart-1))",
+ "2": "hsl(var(--chart-2))",
+ "3": "hsl(var(--chart-3))",
+ "4": "hsl(var(--chart-4))",
+ "5": "hsl(var(--chart-5))",
},
- 'accordion-up': {
- from: { height: 'var(--radix-accordion-content-height)' },
- to: { height: '0' }
- }
},
- animation: {
- 'accordion-down': 'accordion-down 0.2s ease-out',
- 'accordion-up': 'accordion-up 0.2s ease-out'
- }
- }
+ },
},
- plugins: [require('tailwindcss-animate'), require('@tailwindcss/typography')]
-}
+ plugins: [require("tailwindcss-animate")],
+ safelist: ["w-32", "w-44", "w-52"],
+};
+export default config;
diff --git a/tsconfig.json b/tsconfig.json
index 9f91b9b..88730b6 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,35 +1,27 @@
{
"compilerOptions": {
+ "target": "ESNext",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
- "forceConsistentCasingInFileNames": true,
"noEmit": true,
- "incremental": true,
"esModuleInterop": true,
"module": "esnext",
- "moduleResolution": "node",
+ "moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
- "baseUrl": ".",
- "paths": {
- "@/*": ["./*"]
- },
+ "incremental": true,
"plugins": [
{
"name": "next"
}
],
- "strictNullChecks": true
+ "paths": {
+ "@/*": ["./*"]
+ }
},
- "include": [
- "next-env.d.ts",
- "next-auth.d.ts",
- "**/*.ts",
- "**/*.tsx",
- ".next/types/**/*.ts"
- ],
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}