├── .env.example ├── .gitignore ├── README.md ├── app ├── api │ └── chat │ │ └── route.ts ├── components │ └── MessageContent.tsx ├── favicon.ico ├── fonts │ ├── ABCDiatype-Bold.otf │ ├── ABCDiatype-Regular.otf │ ├── GeistMonoVF.woff │ ├── GeistVF.woff │ ├── RecklessTRIAL-Medium.woff2 │ ├── RecklessTRIAL-Regular.otf │ └── RecklessTRIAL-Regular.woff2 ├── globals.css ├── layout.tsx ├── opengraph-image.jpg └── page.tsx ├── next.config.mjs ├── package-lock.json ├── package.json ├── postcss.config.mjs ├── tailwind.config.ts └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | # Exa AI API Key (Get from https://dashboard.exa.ai/api-keys) 2 | EXA_API_KEY=your_exa_api_key_here 3 | 4 | # OpenAI API Key (Get from https://platform.openai.com/settings/organization/api-keys) 5 | OPENAI_API_KEY=your_openai_api_key_here 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 💬 Exa & o3-mini Chat App 2 | ### Powered by [Exa](https://exa.ai) - The Web Search API 3 | 4 | ### Try the tool: https://o3minichat.exa.ai/ 5 | 6 | ![Screenshot](https://o3minichat.exa.ai/opengraph-image.jpg) 7 | 8 |
9 | 10 | ## 🎯 What is Exa & o3-mini Chat App? 11 | 12 | Exa & o3-mini Chat App is a free and open-source chat application that combines Exa's powerful web search API with OpenAI's o3-mini language model. 13 | 14 | This app provides a cool and simple chat experience which you can clone and build upon. 15 | 16 |
17 | 18 | ## 💻 Tech Stack 19 | - **Search Engine**: [Exa API](https://exa.ai) - Web search API 20 | - **Language Model**: OpenAI o3-mini 21 | - **Frontend**: [Next.js 14](https://nextjs.org/docs) with App Router, [TailwindCSS](https://tailwindcss.com), TypeScript 22 | - **AI Integration**: [Vercel AI SDK](https://sdk.vercel.ai/docs/ai-sdk-core) 23 | - **Hosting**: [Vercel](https://vercel.com/) 24 | 25 |
26 | 27 | ## 🚀 Getting Started 28 | 29 | ### Prerequisites 30 | - Node.js 31 | - Exa API key 32 | - OpenAI API key 33 | 34 | ### Installation 35 | 36 | 1. Clone the repository 37 | ```bash 38 | git clone https://github.com/exa-labs/exa-o3mini-chat.git 39 | cd exa-o3mini-chat 40 | ``` 41 | 42 | 2. Install dependencies 43 | ```bash 44 | npm install 45 | ``` 46 | 47 | 3. Set up environment variables (for Exa and OpenAI) 48 | 49 | 4. Run the development server 50 | ```bash 51 | npm run dev 52 | ``` 53 | 54 | 5. Open http://localhost:3000 in your browser 55 | 56 |
57 | 58 | ## 🔑 API Keys & Environment Setup 59 | 60 | ### Required API Keys 61 | * **Exa API Key**: Get from [Exa Dashboard](https://dashboard.exa.ai/api-keys) 62 | * **OpenAI API Key**: Get from [OpenAI Dashboard](https://platform.openai.com/api-keys) 63 | 64 |
65 | 66 | ## ⭐ About [Exa](https://exa.ai) 67 | 68 | This project is powered by [Exa.ai](https://exa.ai), a web search API designed specifically for AI applications. Exa provides: 69 | 70 | * Real-time web search capabilities 71 | * Enhanced response accuracy through current information 72 | * Seamless integration with language models 73 | * Comprehensive web search results 74 | 75 | [Try Exa API](https://dashboard.exa.ai) 76 | 77 |
78 | 79 | --- 80 | 81 | Built with ❤️ by the Exa team 82 | -------------------------------------------------------------------------------- /app/api/chat/route.ts: -------------------------------------------------------------------------------- 1 | import { openai } from '@ai-sdk/openai'; 2 | import { streamText, tool } from 'ai'; 3 | import { z } from 'zod'; 4 | import Exa from 'exa-js'; 5 | 6 | // Allow responses up to 5 minutes 7 | export const maxDuration = 300; 8 | 9 | const exa = new Exa(process.env.EXA_API_KEY); 10 | 11 | export async function POST(req: Request) { 12 | const { messages } = await req.json(); 13 | 14 | const result = streamText({ 15 | model: openai('o3-mini'), 16 | system: 'Always use the webSearch tool. Always provide source links in your response (the sources which you got from the webSearch tool). You are a helpful assistant that searches the web for information and provides accurate answer. Use simple english. Use the webSearch tool in every message!', 17 | messages, 18 | providerOptions: { 19 | openai: { reasoningEffort: 'medium' }, 20 | }, 21 | maxSteps: 2, 22 | tools: { 23 | webSearch: tool({ 24 | description: 'Search the web for current information on a topic. Use this tool in every message, always. Always provide source links in your response.', 25 | parameters: z.object({ 26 | query: z.string().describe('The search query'), 27 | }), 28 | execute: async ({ query }) => { 29 | try { 30 | const results = await exa.search(query, { 31 | 32 | 33 | numResults: 5, 34 | type: 'auto', 35 | useAutoprompt: true 36 | }); 37 | return results.results; 38 | } catch (error) { 39 | console.error('Exa search error:', error); 40 | return { error: 'Failed to perform web search' }; 41 | } 42 | }, 43 | }), 44 | }, 45 | }); 46 | 47 | return result.toDataStreamResponse(); 48 | } -------------------------------------------------------------------------------- /app/components/MessageContent.tsx: -------------------------------------------------------------------------------- 1 | // Helper function to convert URLs in text to clickable links 2 | const MessageContent = ({ content }: { content: string }) => { 3 | // Regular expression to match URLs, including those in bullet points 4 | const urlRegex = /(https?:\/\/[^\s•]+)/g; 5 | 6 | // Split content by newlines to handle bullet points 7 | const lines = content.split('\n'); 8 | 9 | return ( 10 | <> 11 | {lines.map((line, lineIndex) => { 12 | // Check if line is empty 13 | if (!line.trim()) { 14 | return
; 15 | } 16 | 17 | // Split the line by URLs 18 | const parts = line.split(urlRegex); 19 | 20 | return ( 21 |
22 | {parts.map((part, partIndex) => { 23 | // Check if this part is a URL 24 | if (part.match(urlRegex)) { 25 | return ( 26 | 33 | {part} 34 | 35 | ); 36 | } 37 | return {part}; 38 | })} 39 |
40 | ); 41 | })} 42 | 43 | ); 44 | }; 45 | 46 | export default MessageContent; -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exa-labs/exa-o3mini-chat/7be5f484c80be9948b5b7b061398732ba8367d1b/app/favicon.ico -------------------------------------------------------------------------------- /app/fonts/ABCDiatype-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exa-labs/exa-o3mini-chat/7be5f484c80be9948b5b7b061398732ba8367d1b/app/fonts/ABCDiatype-Bold.otf -------------------------------------------------------------------------------- /app/fonts/ABCDiatype-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exa-labs/exa-o3mini-chat/7be5f484c80be9948b5b7b061398732ba8367d1b/app/fonts/ABCDiatype-Regular.otf -------------------------------------------------------------------------------- /app/fonts/GeistMonoVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exa-labs/exa-o3mini-chat/7be5f484c80be9948b5b7b061398732ba8367d1b/app/fonts/GeistMonoVF.woff -------------------------------------------------------------------------------- /app/fonts/GeistVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exa-labs/exa-o3mini-chat/7be5f484c80be9948b5b7b061398732ba8367d1b/app/fonts/GeistVF.woff -------------------------------------------------------------------------------- /app/fonts/RecklessTRIAL-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exa-labs/exa-o3mini-chat/7be5f484c80be9948b5b7b061398732ba8367d1b/app/fonts/RecklessTRIAL-Medium.woff2 -------------------------------------------------------------------------------- /app/fonts/RecklessTRIAL-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exa-labs/exa-o3mini-chat/7be5f484c80be9948b5b7b061398732ba8367d1b/app/fonts/RecklessTRIAL-Regular.otf -------------------------------------------------------------------------------- /app/fonts/RecklessTRIAL-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exa-labs/exa-o3mini-chat/7be5f484c80be9948b5b7b061398732ba8367d1b/app/fonts/RecklessTRIAL-Regular.woff2 -------------------------------------------------------------------------------- /app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --foreground-rgb: 0, 0, 0; 7 | --background-start-rgb: 231, 231, 245; 8 | --background-end-rgb: 255, 255, 255; 9 | 10 | /* COLORS */ 11 | --brand-default: #254bf1; 12 | --brand-fainter: #e7ebfd; 13 | --brand-faint: #c6cfff; 14 | --brand-subtle: #a1aff7; 15 | --brand-muted: #4d87e7; 16 | --brand-dark: #0d2189; 17 | --brand-darker: #000a40; 18 | 19 | --secondary-accent: #9f9672; 20 | --secondary-accent2x: #89805d; 21 | --secondary-dark: #f4f1e7; 22 | --secondary-darker: #efebdc; 23 | --secondary-darkest: #e5e0cd; 24 | --secondary-default: #faf7ec; 25 | --secondary-faint: #fffdf5; 26 | --secondary-fainter: #fffefa; 27 | 28 | --gray-50: #fafafa; 29 | --gray-100: #f5f5f5; 30 | --gray-200: #e5e5e5; 31 | --gray-300: #d4d4d4; 32 | --gray-400: #a3a3a3; 33 | --gray-500: #737373; 34 | --gray-600: #525252; 35 | --gray-700: #404040; 36 | --gray-800: #262626; 37 | --gray-900: #171717; 38 | --gray-950: #0a0a0a; 39 | 40 | --black: #000000; 41 | --white: #ffffff; 42 | 43 | --accent-yellow-light: #fef3c7; 44 | --accent-yellow-dark: #92400e; 45 | --accent-skyblue-light: #dbeafe; 46 | --accent-skyblue-dark: #1e40af; 47 | --accent-green: #50b40a; 48 | --accent-red: #d32f2f; 49 | --accent-darkgreen-dark: #065f46; 50 | --accent-darkgreen-light: #d1fae5; 51 | --accent-purple-dark: #5b21b6; 52 | --accent-purple-light: #ede9fe; 53 | --accent-pink-dark: #9d174d; 54 | --accent-pink-light: #fce7f3; 55 | --accent-maroon-dark: #991b1b; 56 | --accent-maroon-light: #fee2e2; 57 | } 58 | 59 | body { 60 | color: rgb(var(--foreground-rgb)); 61 | background: linear-gradient(to bottom, transparent, rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb)); 62 | } 63 | 64 | @layer utilities { 65 | .text-balance { 66 | text-wrap: balance; 67 | } 68 | } 69 | 70 | :root { 71 | --background: var(--secondary-default); 72 | --accent: var(--brand-default); 73 | --accent-background: var(--brand-default); 74 | } 75 | 76 | :root { 77 | --border-default: var(--gray-300); 78 | --border-radius-default: 2px; 79 | 80 | /* Typography */ 81 | --font-family-sans: 'ABCDiatype', 'Trebuchet MS', sans-serif; 82 | --font-family-serif: 'Reckless', Georgia, serif; 83 | --text-light-default: #111827; 84 | --text-light-muted: #6b7280; 85 | --text-light-subtle: #9ca3af; 86 | --text-light-faint: #e5e7eb; 87 | --text-light-link: #1f40ed; 88 | } 89 | 90 | body { 91 | color: var(--foreground); 92 | background: var(--background); 93 | 94 | /* Apply ABCDiatype for body */ 95 | font-family: var(--font-abcd-diatype), sans-serif; 96 | } 97 | 98 | /* Apply Reckless for headings */ 99 | h1, h2, h3, h4, h5, h6 { 100 | font-family: var(--font-reckless), serif; 101 | } 102 | 103 | 104 | @layer utilities { 105 | .text-balance { 106 | text-wrap: balance; 107 | } 108 | } -------------------------------------------------------------------------------- /app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from "next"; 2 | import localFont from "next/font/local"; 3 | import "./globals.css"; 4 | import { Analytics } from '@vercel/analytics/next'; 5 | 6 | // Load the ABCDiatype font (Regular and Bold only) 7 | const abcdDiatype = localFont({ 8 | src: [ 9 | { path: "./fonts/ABCDiatype-Regular.otf", weight: "400" }, 10 | { path: "./fonts/ABCDiatype-Bold.otf", weight: "700" }, 11 | ], 12 | variable: "--font-abcd-diatype", 13 | }); 14 | 15 | // Load the Reckless font (Regular and Medium only) 16 | const reckless = localFont({ 17 | src: [ 18 | { path: "./fonts/RecklessTRIAL-Regular.woff2", weight: "400" }, 19 | { path: "./fonts/RecklessTRIAL-Medium.woff2", weight: "500" }, 20 | ], 21 | variable: "--font-reckless", 22 | }); 23 | 24 | export const metadata: Metadata = { 25 | title: "Exa & o3-mini chat app", 26 | description: "An opensource chat application built with Exa for web search and openai o3-mini.", 27 | openGraph: { 28 | title: "Exa & o3-mini chat app", 29 | description: "An opensource chat application built with Exa for web search and openai o3-mini.", 30 | type: "website", 31 | locale: "en_US", 32 | images: [ 33 | { 34 | url: "https://o3minichat.exa.ai/opengraph-image.jpg", 35 | width: 1200, 36 | height: 630, 37 | alt: "Exa & o3-mini chat app" 38 | } 39 | ] 40 | }, 41 | twitter: { 42 | card: "summary_large_image", 43 | title: "Exa & o3-mini chat app", 44 | description: "An opensource chat application built with Exa for web search and openai o3-mini.", 45 | images: ["https://o3minichat.exa.ai/opengraph-image.jpg"] 46 | }, 47 | metadataBase: new URL("https://o3minichat.exa.ai/"), 48 | robots: { 49 | index: true, 50 | follow: true 51 | }, 52 | }; 53 | 54 | export default function RootLayout({ 55 | children, 56 | }: Readonly<{ 57 | children: React.ReactNode; 58 | }>) { 59 | return ( 60 | 61 | 62 | 63 | 64 | 67 | {children} 68 | 69 | 70 | 71 | ); 72 | } 73 | 74 | -------------------------------------------------------------------------------- /app/opengraph-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exa-labs/exa-o3mini-chat/7be5f484c80be9948b5b7b061398732ba8367d1b/app/opengraph-image.jpg -------------------------------------------------------------------------------- /app/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { useChat } from 'ai/react'; 4 | import MessageContent from './components/MessageContent'; 5 | 6 | export default function Page() { 7 | const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat(); 8 | const hasMessages = messages.length > 0; 9 | 10 | return ( 11 | <> 12 | {/* Top Navigation Bar */} 13 |
14 |
15 | 22 | Try Exa API 23 | 24 | 29 | View Source Code 30 | 36 | 42 | 43 | 44 |
45 |
46 | 47 | {/* Chat Messages */} 48 |
49 |
50 | {messages.map((message) => ( 51 |
52 |
57 |
64 |
65 | 66 |
67 |
68 |
69 |
70 | ))} 71 | 72 | {/* Loading indicator */} 73 | {isLoading && ( 74 |
75 |
76 |
77 |
78 | Asking o3-mini and searching on Exa... 79 |
80 | )} 81 |
82 |
83 | 84 | {/* Input Form - centered when no messages, fixed bottom otherwise */} 85 |
90 |
95 |
96 | 105 | 115 |
116 | {!hasMessages && ( 117 |
118 | powered by 119 | 120 | Exa - The Web Search API 121 | 122 |
123 | )} 124 |
125 |
126 | 127 | ); 128 | } -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {}; 3 | 4 | export default nextConfig; 5 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "exa-o3mini-chat", 3 | "version": "0.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "exa-o3mini-chat", 9 | "version": "0.1.0", 10 | "dependencies": { 11 | "@ai-sdk/openai": "^1.1.9", 12 | "@tailwindcss/typography": "^0.5.16", 13 | "@vercel/analytics": "^1.4.1", 14 | "ai": "^4.1.16", 15 | "exa-js": "^1.4.8", 16 | "next": "14.2.17", 17 | "react": "^18", 18 | "react-dom": "^18", 19 | "tailwindcss-animate": "^1.0.7" 20 | }, 21 | "devDependencies": { 22 | "@types/node": "^20", 23 | "@types/react": "^18", 24 | "@types/react-dom": "^18", 25 | "postcss": "^8", 26 | "tailwindcss": "^3.4.17", 27 | "typescript": "^5" 28 | } 29 | }, 30 | "node_modules/@ai-sdk/openai": { 31 | "version": "1.1.9", 32 | "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-1.1.9.tgz", 33 | "integrity": "sha512-t/CpC4TLipdbgBJTMX/otzzqzCMBSPQwUOkYPGbT/jyuC86F+YO9o+LS0Ty2pGUE1kyT+B3WmJ318B16ZCg4hw==", 34 | "dependencies": { 35 | "@ai-sdk/provider": "1.0.7", 36 | "@ai-sdk/provider-utils": "2.1.6" 37 | }, 38 | "engines": { 39 | "node": ">=18" 40 | }, 41 | "peerDependencies": { 42 | "zod": "^3.0.0" 43 | } 44 | }, 45 | "node_modules/@ai-sdk/provider": { 46 | "version": "1.0.7", 47 | "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-1.0.7.tgz", 48 | "integrity": "sha512-q1PJEZ0qD9rVR+8JFEd01/QM++csMT5UVwYXSN2u54BrVw/D8TZLTeg2FEfKK00DgAx0UtWd8XOhhwITP9BT5g==", 49 | "dependencies": { 50 | "json-schema": "^0.4.0" 51 | }, 52 | "engines": { 53 | "node": ">=18" 54 | } 55 | }, 56 | "node_modules/@ai-sdk/provider-utils": { 57 | "version": "2.1.6", 58 | "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-2.1.6.tgz", 59 | "integrity": "sha512-Pfyaj0QZS22qyVn5Iz7IXcJ8nKIKlu2MeSAdKJzTwkAks7zdLaKVB+396Rqcp1bfQnxl7vaduQVMQiXUrgK8Gw==", 60 | "dependencies": { 61 | "@ai-sdk/provider": "1.0.7", 62 | "eventsource-parser": "^3.0.0", 63 | "nanoid": "^3.3.8", 64 | "secure-json-parse": "^2.7.0" 65 | }, 66 | "engines": { 67 | "node": ">=18" 68 | }, 69 | "peerDependencies": { 70 | "zod": "^3.0.0" 71 | }, 72 | "peerDependenciesMeta": { 73 | "zod": { 74 | "optional": true 75 | } 76 | } 77 | }, 78 | "node_modules/@ai-sdk/react": { 79 | "version": "1.1.8", 80 | "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-1.1.8.tgz", 81 | "integrity": "sha512-buHm7hP21xEOksnRQtJX9fKbi7cAUwanEBa5niddTDibCDKd+kIXP2vaJGy8+heB3rff+XSW3BWlA8pscK+n1g==", 82 | "dependencies": { 83 | "@ai-sdk/provider-utils": "2.1.6", 84 | "@ai-sdk/ui-utils": "1.1.8", 85 | "swr": "^2.2.5", 86 | "throttleit": "2.1.0" 87 | }, 88 | "engines": { 89 | "node": ">=18" 90 | }, 91 | "peerDependencies": { 92 | "react": "^18 || ^19 || ^19.0.0-rc", 93 | "zod": "^3.0.0" 94 | }, 95 | "peerDependenciesMeta": { 96 | "react": { 97 | "optional": true 98 | }, 99 | "zod": { 100 | "optional": true 101 | } 102 | } 103 | }, 104 | "node_modules/@ai-sdk/ui-utils": { 105 | "version": "1.1.8", 106 | "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-1.1.8.tgz", 107 | "integrity": "sha512-nbok53K1EalO2sZjBLFB33cqs+8SxiL6pe7ekZ7+5f2MJTwdvpShl6d9U4O8fO3DnZ9pYLzaVC0XNMxnJt030Q==", 108 | "dependencies": { 109 | "@ai-sdk/provider": "1.0.7", 110 | "@ai-sdk/provider-utils": "2.1.6", 111 | "zod-to-json-schema": "^3.24.1" 112 | }, 113 | "engines": { 114 | "node": ">=18" 115 | }, 116 | "peerDependencies": { 117 | "zod": "^3.0.0" 118 | }, 119 | "peerDependenciesMeta": { 120 | "zod": { 121 | "optional": true 122 | } 123 | } 124 | }, 125 | "node_modules/@alloc/quick-lru": { 126 | "version": "5.2.0", 127 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 128 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 129 | "engines": { 130 | "node": ">=10" 131 | }, 132 | "funding": { 133 | "url": "https://github.com/sponsors/sindresorhus" 134 | } 135 | }, 136 | "node_modules/@isaacs/cliui": { 137 | "version": "8.0.2", 138 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 139 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 140 | "dependencies": { 141 | "string-width": "^5.1.2", 142 | "string-width-cjs": "npm:string-width@^4.2.0", 143 | "strip-ansi": "^7.0.1", 144 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 145 | "wrap-ansi": "^8.1.0", 146 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 147 | }, 148 | "engines": { 149 | "node": ">=12" 150 | } 151 | }, 152 | "node_modules/@jridgewell/gen-mapping": { 153 | "version": "0.3.8", 154 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 155 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 156 | "dependencies": { 157 | "@jridgewell/set-array": "^1.2.1", 158 | "@jridgewell/sourcemap-codec": "^1.4.10", 159 | "@jridgewell/trace-mapping": "^0.3.24" 160 | }, 161 | "engines": { 162 | "node": ">=6.0.0" 163 | } 164 | }, 165 | "node_modules/@jridgewell/resolve-uri": { 166 | "version": "3.1.2", 167 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 168 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 169 | "engines": { 170 | "node": ">=6.0.0" 171 | } 172 | }, 173 | "node_modules/@jridgewell/set-array": { 174 | "version": "1.2.1", 175 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 176 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 177 | "engines": { 178 | "node": ">=6.0.0" 179 | } 180 | }, 181 | "node_modules/@jridgewell/sourcemap-codec": { 182 | "version": "1.5.0", 183 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 184 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" 185 | }, 186 | "node_modules/@jridgewell/trace-mapping": { 187 | "version": "0.3.25", 188 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 189 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 190 | "dependencies": { 191 | "@jridgewell/resolve-uri": "^3.1.0", 192 | "@jridgewell/sourcemap-codec": "^1.4.14" 193 | } 194 | }, 195 | "node_modules/@next/env": { 196 | "version": "14.2.17", 197 | "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.17.tgz", 198 | "integrity": "sha512-MCgO7VHxXo8sYR/0z+sk9fGyJJU636JyRmkjc7ZJY8Hurl8df35qG5hoAh5KMs75FLjhlEo9bb2LGe89Y/scDA==" 199 | }, 200 | "node_modules/@next/swc-darwin-arm64": { 201 | "version": "14.2.17", 202 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.17.tgz", 203 | "integrity": "sha512-WiOf5nElPknrhRMTipXYTJcUz7+8IAjOYw3vXzj3BYRcVY0hRHKWgTgQ5439EvzQyHEko77XK+yN9x9OJ0oOog==", 204 | "cpu": [ 205 | "arm64" 206 | ], 207 | "optional": true, 208 | "os": [ 209 | "darwin" 210 | ], 211 | "engines": { 212 | "node": ">= 10" 213 | } 214 | }, 215 | "node_modules/@next/swc-darwin-x64": { 216 | "version": "14.2.17", 217 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.17.tgz", 218 | "integrity": "sha512-29y425wYnL17cvtxrDQWC3CkXe/oRrdt8ie61S03VrpwpPRI0XsnTvtKO06XCisK4alaMnZlf8riwZIbJTaSHQ==", 219 | "cpu": [ 220 | "x64" 221 | ], 222 | "optional": true, 223 | "os": [ 224 | "darwin" 225 | ], 226 | "engines": { 227 | "node": ">= 10" 228 | } 229 | }, 230 | "node_modules/@next/swc-linux-arm64-gnu": { 231 | "version": "14.2.17", 232 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.17.tgz", 233 | "integrity": "sha512-SSHLZls3ZwNEHsc+d0ynKS+7Af0Nr8+KTUBAy9pm6xz9SHkJ/TeuEg6W3cbbcMSh6j4ITvrjv3Oi8n27VR+IPw==", 234 | "cpu": [ 235 | "arm64" 236 | ], 237 | "optional": true, 238 | "os": [ 239 | "linux" 240 | ], 241 | "engines": { 242 | "node": ">= 10" 243 | } 244 | }, 245 | "node_modules/@next/swc-linux-arm64-musl": { 246 | "version": "14.2.17", 247 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.17.tgz", 248 | "integrity": "sha512-VFge37us5LNPatB4F7iYeuGs9Dprqe4ZkW7lOEJM91r+Wf8EIdViWHLpIwfdDXinvCdLl6b4VyLpEBwpkctJHA==", 249 | "cpu": [ 250 | "arm64" 251 | ], 252 | "optional": true, 253 | "os": [ 254 | "linux" 255 | ], 256 | "engines": { 257 | "node": ">= 10" 258 | } 259 | }, 260 | "node_modules/@next/swc-linux-x64-gnu": { 261 | "version": "14.2.17", 262 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.17.tgz", 263 | "integrity": "sha512-aaQlpxUVb9RZ41adlTYVQ3xvYEfBPUC8+6rDgmQ/0l7SvK8S1YNJzPmDPX6a4t0jLtIoNk7j+nroS/pB4nx7vQ==", 264 | "cpu": [ 265 | "x64" 266 | ], 267 | "optional": true, 268 | "os": [ 269 | "linux" 270 | ], 271 | "engines": { 272 | "node": ">= 10" 273 | } 274 | }, 275 | "node_modules/@next/swc-linux-x64-musl": { 276 | "version": "14.2.17", 277 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.17.tgz", 278 | "integrity": "sha512-HSyEiFaEY3ay5iATDqEup5WAfrhMATNJm8dYx3ZxL+e9eKv10XKZCwtZByDoLST7CyBmyDz+OFJL1wigyXeaoA==", 279 | "cpu": [ 280 | "x64" 281 | ], 282 | "optional": true, 283 | "os": [ 284 | "linux" 285 | ], 286 | "engines": { 287 | "node": ">= 10" 288 | } 289 | }, 290 | "node_modules/@next/swc-win32-arm64-msvc": { 291 | "version": "14.2.17", 292 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.17.tgz", 293 | "integrity": "sha512-h5qM9Btqv87eYH8ArrnLoAHLyi79oPTP2vlGNSg4CDvUiXgi7l0+5KuEGp5pJoMhjuv9ChRdm7mRlUUACeBt4w==", 294 | "cpu": [ 295 | "arm64" 296 | ], 297 | "optional": true, 298 | "os": [ 299 | "win32" 300 | ], 301 | "engines": { 302 | "node": ">= 10" 303 | } 304 | }, 305 | "node_modules/@next/swc-win32-ia32-msvc": { 306 | "version": "14.2.17", 307 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.17.tgz", 308 | "integrity": "sha512-BD/G++GKSLexQjdyoEUgyo5nClU7er5rK0sE+HlEqnldJSm96CIr/+YOTT063LVTT/dUOeQsNgp5DXr86/K7/A==", 309 | "cpu": [ 310 | "ia32" 311 | ], 312 | "optional": true, 313 | "os": [ 314 | "win32" 315 | ], 316 | "engines": { 317 | "node": ">= 10" 318 | } 319 | }, 320 | "node_modules/@next/swc-win32-x64-msvc": { 321 | "version": "14.2.17", 322 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.17.tgz", 323 | "integrity": "sha512-vkQfN1+4V4KqDibkW2q0sJ6CxQuXq5l2ma3z0BRcfIqkAMZiiW67T9yCpwqJKP68QghBtPEFjPAlaqe38O6frw==", 324 | "cpu": [ 325 | "x64" 326 | ], 327 | "optional": true, 328 | "os": [ 329 | "win32" 330 | ], 331 | "engines": { 332 | "node": ">= 10" 333 | } 334 | }, 335 | "node_modules/@nodelib/fs.scandir": { 336 | "version": "2.1.5", 337 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 338 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 339 | "dependencies": { 340 | "@nodelib/fs.stat": "2.0.5", 341 | "run-parallel": "^1.1.9" 342 | }, 343 | "engines": { 344 | "node": ">= 8" 345 | } 346 | }, 347 | "node_modules/@nodelib/fs.stat": { 348 | "version": "2.0.5", 349 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 350 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 351 | "engines": { 352 | "node": ">= 8" 353 | } 354 | }, 355 | "node_modules/@nodelib/fs.walk": { 356 | "version": "1.2.8", 357 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 358 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 359 | "dependencies": { 360 | "@nodelib/fs.scandir": "2.1.5", 361 | "fastq": "^1.6.0" 362 | }, 363 | "engines": { 364 | "node": ">= 8" 365 | } 366 | }, 367 | "node_modules/@opentelemetry/api": { 368 | "version": "1.9.0", 369 | "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", 370 | "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", 371 | "engines": { 372 | "node": ">=8.0.0" 373 | } 374 | }, 375 | "node_modules/@pkgjs/parseargs": { 376 | "version": "0.11.0", 377 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 378 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 379 | "optional": true, 380 | "engines": { 381 | "node": ">=14" 382 | } 383 | }, 384 | "node_modules/@swc/counter": { 385 | "version": "0.1.3", 386 | "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", 387 | "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" 388 | }, 389 | "node_modules/@swc/helpers": { 390 | "version": "0.5.5", 391 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", 392 | "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", 393 | "dependencies": { 394 | "@swc/counter": "^0.1.3", 395 | "tslib": "^2.4.0" 396 | } 397 | }, 398 | "node_modules/@tailwindcss/typography": { 399 | "version": "0.5.16", 400 | "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", 401 | "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", 402 | "dependencies": { 403 | "lodash.castarray": "^4.4.0", 404 | "lodash.isplainobject": "^4.0.6", 405 | "lodash.merge": "^4.6.2", 406 | "postcss-selector-parser": "6.0.10" 407 | }, 408 | "peerDependencies": { 409 | "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" 410 | } 411 | }, 412 | "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { 413 | "version": "6.0.10", 414 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 415 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 416 | "dependencies": { 417 | "cssesc": "^3.0.0", 418 | "util-deprecate": "^1.0.2" 419 | }, 420 | "engines": { 421 | "node": ">=4" 422 | } 423 | }, 424 | "node_modules/@types/diff-match-patch": { 425 | "version": "1.0.36", 426 | "resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz", 427 | "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==" 428 | }, 429 | "node_modules/@types/node": { 430 | "version": "20.17.16", 431 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.16.tgz", 432 | "integrity": "sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw==", 433 | "dev": true, 434 | "dependencies": { 435 | "undici-types": "~6.19.2" 436 | } 437 | }, 438 | "node_modules/@types/prop-types": { 439 | "version": "15.7.14", 440 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", 441 | "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", 442 | "dev": true 443 | }, 444 | "node_modules/@types/react": { 445 | "version": "18.3.18", 446 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", 447 | "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", 448 | "dev": true, 449 | "dependencies": { 450 | "@types/prop-types": "*", 451 | "csstype": "^3.0.2" 452 | } 453 | }, 454 | "node_modules/@types/react-dom": { 455 | "version": "18.3.5", 456 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz", 457 | "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", 458 | "dev": true, 459 | "peerDependencies": { 460 | "@types/react": "^18.0.0" 461 | } 462 | }, 463 | "node_modules/@vercel/analytics": { 464 | "version": "1.4.1", 465 | "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.4.1.tgz", 466 | "integrity": "sha512-ekpL4ReX2TH3LnrRZTUKjHHNpNy9S1I7QmS+g/RQXoSUQ8ienzosuX7T9djZ/s8zPhBx1mpHP/Rw5875N+zQIQ==", 467 | "peerDependencies": { 468 | "@remix-run/react": "^2", 469 | "@sveltejs/kit": "^1 || ^2", 470 | "next": ">= 13", 471 | "react": "^18 || ^19 || ^19.0.0-rc", 472 | "svelte": ">= 4", 473 | "vue": "^3", 474 | "vue-router": "^4" 475 | }, 476 | "peerDependenciesMeta": { 477 | "@remix-run/react": { 478 | "optional": true 479 | }, 480 | "@sveltejs/kit": { 481 | "optional": true 482 | }, 483 | "next": { 484 | "optional": true 485 | }, 486 | "react": { 487 | "optional": true 488 | }, 489 | "svelte": { 490 | "optional": true 491 | }, 492 | "vue": { 493 | "optional": true 494 | }, 495 | "vue-router": { 496 | "optional": true 497 | } 498 | } 499 | }, 500 | "node_modules/ai": { 501 | "version": "4.1.16", 502 | "resolved": "https://registry.npmjs.org/ai/-/ai-4.1.16.tgz", 503 | "integrity": "sha512-4l8Dl2+reG210/l19E/D9NrpfumJuiyih7EehVm1wdMhz4/rSLjVewxkcmdcTczPee3/axB5Rp5h8q5hyIYB/g==", 504 | "dependencies": { 505 | "@ai-sdk/provider": "1.0.7", 506 | "@ai-sdk/provider-utils": "2.1.6", 507 | "@ai-sdk/react": "1.1.8", 508 | "@ai-sdk/ui-utils": "1.1.8", 509 | "@opentelemetry/api": "1.9.0", 510 | "jsondiffpatch": "0.6.0" 511 | }, 512 | "engines": { 513 | "node": ">=18" 514 | }, 515 | "peerDependencies": { 516 | "react": "^18 || ^19 || ^19.0.0-rc", 517 | "zod": "^3.0.0" 518 | }, 519 | "peerDependenciesMeta": { 520 | "react": { 521 | "optional": true 522 | }, 523 | "zod": { 524 | "optional": true 525 | } 526 | } 527 | }, 528 | "node_modules/ansi-regex": { 529 | "version": "6.1.0", 530 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 531 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 532 | "engines": { 533 | "node": ">=12" 534 | }, 535 | "funding": { 536 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 537 | } 538 | }, 539 | "node_modules/ansi-styles": { 540 | "version": "6.2.1", 541 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 542 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 543 | "engines": { 544 | "node": ">=12" 545 | }, 546 | "funding": { 547 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 548 | } 549 | }, 550 | "node_modules/any-promise": { 551 | "version": "1.3.0", 552 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 553 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" 554 | }, 555 | "node_modules/anymatch": { 556 | "version": "3.1.3", 557 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 558 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 559 | "dependencies": { 560 | "normalize-path": "^3.0.0", 561 | "picomatch": "^2.0.4" 562 | }, 563 | "engines": { 564 | "node": ">= 8" 565 | } 566 | }, 567 | "node_modules/arg": { 568 | "version": "5.0.2", 569 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 570 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" 571 | }, 572 | "node_modules/balanced-match": { 573 | "version": "1.0.2", 574 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 575 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 576 | }, 577 | "node_modules/binary-extensions": { 578 | "version": "2.3.0", 579 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 580 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 581 | "engines": { 582 | "node": ">=8" 583 | }, 584 | "funding": { 585 | "url": "https://github.com/sponsors/sindresorhus" 586 | } 587 | }, 588 | "node_modules/brace-expansion": { 589 | "version": "2.0.1", 590 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 591 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 592 | "dependencies": { 593 | "balanced-match": "^1.0.0" 594 | } 595 | }, 596 | "node_modules/braces": { 597 | "version": "3.0.3", 598 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 599 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 600 | "dependencies": { 601 | "fill-range": "^7.1.1" 602 | }, 603 | "engines": { 604 | "node": ">=8" 605 | } 606 | }, 607 | "node_modules/busboy": { 608 | "version": "1.6.0", 609 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 610 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 611 | "dependencies": { 612 | "streamsearch": "^1.1.0" 613 | }, 614 | "engines": { 615 | "node": ">=10.16.0" 616 | } 617 | }, 618 | "node_modules/camelcase-css": { 619 | "version": "2.0.1", 620 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 621 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 622 | "engines": { 623 | "node": ">= 6" 624 | } 625 | }, 626 | "node_modules/caniuse-lite": { 627 | "version": "1.0.30001696", 628 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", 629 | "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", 630 | "funding": [ 631 | { 632 | "type": "opencollective", 633 | "url": "https://opencollective.com/browserslist" 634 | }, 635 | { 636 | "type": "tidelift", 637 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 638 | }, 639 | { 640 | "type": "github", 641 | "url": "https://github.com/sponsors/ai" 642 | } 643 | ] 644 | }, 645 | "node_modules/chalk": { 646 | "version": "5.4.1", 647 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", 648 | "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", 649 | "engines": { 650 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 651 | }, 652 | "funding": { 653 | "url": "https://github.com/chalk/chalk?sponsor=1" 654 | } 655 | }, 656 | "node_modules/chokidar": { 657 | "version": "3.6.0", 658 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 659 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 660 | "dependencies": { 661 | "anymatch": "~3.1.2", 662 | "braces": "~3.0.2", 663 | "glob-parent": "~5.1.2", 664 | "is-binary-path": "~2.1.0", 665 | "is-glob": "~4.0.1", 666 | "normalize-path": "~3.0.0", 667 | "readdirp": "~3.6.0" 668 | }, 669 | "engines": { 670 | "node": ">= 8.10.0" 671 | }, 672 | "funding": { 673 | "url": "https://paulmillr.com/funding/" 674 | }, 675 | "optionalDependencies": { 676 | "fsevents": "~2.3.2" 677 | } 678 | }, 679 | "node_modules/chokidar/node_modules/glob-parent": { 680 | "version": "5.1.2", 681 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 682 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 683 | "dependencies": { 684 | "is-glob": "^4.0.1" 685 | }, 686 | "engines": { 687 | "node": ">= 6" 688 | } 689 | }, 690 | "node_modules/client-only": { 691 | "version": "0.0.1", 692 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", 693 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" 694 | }, 695 | "node_modules/color-convert": { 696 | "version": "2.0.1", 697 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 698 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 699 | "dependencies": { 700 | "color-name": "~1.1.4" 701 | }, 702 | "engines": { 703 | "node": ">=7.0.0" 704 | } 705 | }, 706 | "node_modules/color-name": { 707 | "version": "1.1.4", 708 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 709 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 710 | }, 711 | "node_modules/commander": { 712 | "version": "4.1.1", 713 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 714 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 715 | "engines": { 716 | "node": ">= 6" 717 | } 718 | }, 719 | "node_modules/cross-fetch": { 720 | "version": "4.1.0", 721 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", 722 | "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", 723 | "dependencies": { 724 | "node-fetch": "^2.7.0" 725 | } 726 | }, 727 | "node_modules/cross-spawn": { 728 | "version": "7.0.6", 729 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 730 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 731 | "dependencies": { 732 | "path-key": "^3.1.0", 733 | "shebang-command": "^2.0.0", 734 | "which": "^2.0.1" 735 | }, 736 | "engines": { 737 | "node": ">= 8" 738 | } 739 | }, 740 | "node_modules/cssesc": { 741 | "version": "3.0.0", 742 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 743 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 744 | "bin": { 745 | "cssesc": "bin/cssesc" 746 | }, 747 | "engines": { 748 | "node": ">=4" 749 | } 750 | }, 751 | "node_modules/csstype": { 752 | "version": "3.1.3", 753 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 754 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 755 | "dev": true 756 | }, 757 | "node_modules/dequal": { 758 | "version": "2.0.3", 759 | "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 760 | "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 761 | "engines": { 762 | "node": ">=6" 763 | } 764 | }, 765 | "node_modules/didyoumean": { 766 | "version": "1.2.2", 767 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 768 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" 769 | }, 770 | "node_modules/diff-match-patch": { 771 | "version": "1.0.5", 772 | "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", 773 | "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" 774 | }, 775 | "node_modules/dlv": { 776 | "version": "1.1.3", 777 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 778 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" 779 | }, 780 | "node_modules/eastasianwidth": { 781 | "version": "0.2.0", 782 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 783 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 784 | }, 785 | "node_modules/emoji-regex": { 786 | "version": "9.2.2", 787 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 788 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" 789 | }, 790 | "node_modules/eventsource-parser": { 791 | "version": "3.0.0", 792 | "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.0.tgz", 793 | "integrity": "sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==", 794 | "engines": { 795 | "node": ">=18.0.0" 796 | } 797 | }, 798 | "node_modules/exa-js": { 799 | "version": "1.4.8", 800 | "resolved": "https://registry.npmjs.org/exa-js/-/exa-js-1.4.8.tgz", 801 | "integrity": "sha512-5iMt6oyfOU3Cc/7Xwqbqcvsk/w2u/Un+DRdgk9mslmCoTLchO3ehsGB5m8uciqpoxR5dOOQUpGF3WP4+tLxwvg==", 802 | "dependencies": { 803 | "cross-fetch": "^4.0.0" 804 | } 805 | }, 806 | "node_modules/fast-glob": { 807 | "version": "3.3.3", 808 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", 809 | "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 810 | "dependencies": { 811 | "@nodelib/fs.stat": "^2.0.2", 812 | "@nodelib/fs.walk": "^1.2.3", 813 | "glob-parent": "^5.1.2", 814 | "merge2": "^1.3.0", 815 | "micromatch": "^4.0.8" 816 | }, 817 | "engines": { 818 | "node": ">=8.6.0" 819 | } 820 | }, 821 | "node_modules/fast-glob/node_modules/glob-parent": { 822 | "version": "5.1.2", 823 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 824 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 825 | "dependencies": { 826 | "is-glob": "^4.0.1" 827 | }, 828 | "engines": { 829 | "node": ">= 6" 830 | } 831 | }, 832 | "node_modules/fastq": { 833 | "version": "1.19.0", 834 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", 835 | "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", 836 | "dependencies": { 837 | "reusify": "^1.0.4" 838 | } 839 | }, 840 | "node_modules/fill-range": { 841 | "version": "7.1.1", 842 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 843 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 844 | "dependencies": { 845 | "to-regex-range": "^5.0.1" 846 | }, 847 | "engines": { 848 | "node": ">=8" 849 | } 850 | }, 851 | "node_modules/foreground-child": { 852 | "version": "3.3.0", 853 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", 854 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 855 | "dependencies": { 856 | "cross-spawn": "^7.0.0", 857 | "signal-exit": "^4.0.1" 858 | }, 859 | "engines": { 860 | "node": ">=14" 861 | }, 862 | "funding": { 863 | "url": "https://github.com/sponsors/isaacs" 864 | } 865 | }, 866 | "node_modules/fsevents": { 867 | "version": "2.3.3", 868 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 869 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 870 | "hasInstallScript": true, 871 | "optional": true, 872 | "os": [ 873 | "darwin" 874 | ], 875 | "engines": { 876 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 877 | } 878 | }, 879 | "node_modules/function-bind": { 880 | "version": "1.1.2", 881 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 882 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 883 | "funding": { 884 | "url": "https://github.com/sponsors/ljharb" 885 | } 886 | }, 887 | "node_modules/glob": { 888 | "version": "10.4.5", 889 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 890 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 891 | "dependencies": { 892 | "foreground-child": "^3.1.0", 893 | "jackspeak": "^3.1.2", 894 | "minimatch": "^9.0.4", 895 | "minipass": "^7.1.2", 896 | "package-json-from-dist": "^1.0.0", 897 | "path-scurry": "^1.11.1" 898 | }, 899 | "bin": { 900 | "glob": "dist/esm/bin.mjs" 901 | }, 902 | "funding": { 903 | "url": "https://github.com/sponsors/isaacs" 904 | } 905 | }, 906 | "node_modules/glob-parent": { 907 | "version": "6.0.2", 908 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 909 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 910 | "dependencies": { 911 | "is-glob": "^4.0.3" 912 | }, 913 | "engines": { 914 | "node": ">=10.13.0" 915 | } 916 | }, 917 | "node_modules/graceful-fs": { 918 | "version": "4.2.11", 919 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 920 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 921 | }, 922 | "node_modules/hasown": { 923 | "version": "2.0.2", 924 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 925 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 926 | "dependencies": { 927 | "function-bind": "^1.1.2" 928 | }, 929 | "engines": { 930 | "node": ">= 0.4" 931 | } 932 | }, 933 | "node_modules/is-binary-path": { 934 | "version": "2.1.0", 935 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 936 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 937 | "dependencies": { 938 | "binary-extensions": "^2.0.0" 939 | }, 940 | "engines": { 941 | "node": ">=8" 942 | } 943 | }, 944 | "node_modules/is-core-module": { 945 | "version": "2.16.1", 946 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 947 | "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 948 | "dependencies": { 949 | "hasown": "^2.0.2" 950 | }, 951 | "engines": { 952 | "node": ">= 0.4" 953 | }, 954 | "funding": { 955 | "url": "https://github.com/sponsors/ljharb" 956 | } 957 | }, 958 | "node_modules/is-extglob": { 959 | "version": "2.1.1", 960 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 961 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 962 | "engines": { 963 | "node": ">=0.10.0" 964 | } 965 | }, 966 | "node_modules/is-fullwidth-code-point": { 967 | "version": "3.0.0", 968 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 969 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 970 | "engines": { 971 | "node": ">=8" 972 | } 973 | }, 974 | "node_modules/is-glob": { 975 | "version": "4.0.3", 976 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 977 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 978 | "dependencies": { 979 | "is-extglob": "^2.1.1" 980 | }, 981 | "engines": { 982 | "node": ">=0.10.0" 983 | } 984 | }, 985 | "node_modules/is-number": { 986 | "version": "7.0.0", 987 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 988 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 989 | "engines": { 990 | "node": ">=0.12.0" 991 | } 992 | }, 993 | "node_modules/isexe": { 994 | "version": "2.0.0", 995 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 996 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 997 | }, 998 | "node_modules/jackspeak": { 999 | "version": "3.4.3", 1000 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 1001 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 1002 | "dependencies": { 1003 | "@isaacs/cliui": "^8.0.2" 1004 | }, 1005 | "funding": { 1006 | "url": "https://github.com/sponsors/isaacs" 1007 | }, 1008 | "optionalDependencies": { 1009 | "@pkgjs/parseargs": "^0.11.0" 1010 | } 1011 | }, 1012 | "node_modules/jiti": { 1013 | "version": "1.21.7", 1014 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", 1015 | "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", 1016 | "bin": { 1017 | "jiti": "bin/jiti.js" 1018 | } 1019 | }, 1020 | "node_modules/js-tokens": { 1021 | "version": "4.0.0", 1022 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1023 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1024 | }, 1025 | "node_modules/json-schema": { 1026 | "version": "0.4.0", 1027 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", 1028 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" 1029 | }, 1030 | "node_modules/jsondiffpatch": { 1031 | "version": "0.6.0", 1032 | "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz", 1033 | "integrity": "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==", 1034 | "dependencies": { 1035 | "@types/diff-match-patch": "^1.0.36", 1036 | "chalk": "^5.3.0", 1037 | "diff-match-patch": "^1.0.5" 1038 | }, 1039 | "bin": { 1040 | "jsondiffpatch": "bin/jsondiffpatch.js" 1041 | }, 1042 | "engines": { 1043 | "node": "^18.0.0 || >=20.0.0" 1044 | } 1045 | }, 1046 | "node_modules/lilconfig": { 1047 | "version": "3.1.3", 1048 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", 1049 | "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", 1050 | "engines": { 1051 | "node": ">=14" 1052 | }, 1053 | "funding": { 1054 | "url": "https://github.com/sponsors/antonk52" 1055 | } 1056 | }, 1057 | "node_modules/lines-and-columns": { 1058 | "version": "1.2.4", 1059 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1060 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" 1061 | }, 1062 | "node_modules/lodash.castarray": { 1063 | "version": "4.4.0", 1064 | "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", 1065 | "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" 1066 | }, 1067 | "node_modules/lodash.isplainobject": { 1068 | "version": "4.0.6", 1069 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 1070 | "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" 1071 | }, 1072 | "node_modules/lodash.merge": { 1073 | "version": "4.6.2", 1074 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1075 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" 1076 | }, 1077 | "node_modules/loose-envify": { 1078 | "version": "1.4.0", 1079 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1080 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1081 | "dependencies": { 1082 | "js-tokens": "^3.0.0 || ^4.0.0" 1083 | }, 1084 | "bin": { 1085 | "loose-envify": "cli.js" 1086 | } 1087 | }, 1088 | "node_modules/lru-cache": { 1089 | "version": "10.4.3", 1090 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 1091 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" 1092 | }, 1093 | "node_modules/merge2": { 1094 | "version": "1.4.1", 1095 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1096 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1097 | "engines": { 1098 | "node": ">= 8" 1099 | } 1100 | }, 1101 | "node_modules/micromatch": { 1102 | "version": "4.0.8", 1103 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 1104 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 1105 | "dependencies": { 1106 | "braces": "^3.0.3", 1107 | "picomatch": "^2.3.1" 1108 | }, 1109 | "engines": { 1110 | "node": ">=8.6" 1111 | } 1112 | }, 1113 | "node_modules/minimatch": { 1114 | "version": "9.0.5", 1115 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1116 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1117 | "dependencies": { 1118 | "brace-expansion": "^2.0.1" 1119 | }, 1120 | "engines": { 1121 | "node": ">=16 || 14 >=14.17" 1122 | }, 1123 | "funding": { 1124 | "url": "https://github.com/sponsors/isaacs" 1125 | } 1126 | }, 1127 | "node_modules/minipass": { 1128 | "version": "7.1.2", 1129 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1130 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1131 | "engines": { 1132 | "node": ">=16 || 14 >=14.17" 1133 | } 1134 | }, 1135 | "node_modules/mz": { 1136 | "version": "2.7.0", 1137 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 1138 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 1139 | "dependencies": { 1140 | "any-promise": "^1.0.0", 1141 | "object-assign": "^4.0.1", 1142 | "thenify-all": "^1.0.0" 1143 | } 1144 | }, 1145 | "node_modules/nanoid": { 1146 | "version": "3.3.8", 1147 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", 1148 | "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", 1149 | "funding": [ 1150 | { 1151 | "type": "github", 1152 | "url": "https://github.com/sponsors/ai" 1153 | } 1154 | ], 1155 | "bin": { 1156 | "nanoid": "bin/nanoid.cjs" 1157 | }, 1158 | "engines": { 1159 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1160 | } 1161 | }, 1162 | "node_modules/next": { 1163 | "version": "14.2.17", 1164 | "resolved": "https://registry.npmjs.org/next/-/next-14.2.17.tgz", 1165 | "integrity": "sha512-hNo/Zy701DDO3nzKkPmsLRlDfNCtb1OJxFUvjGEl04u7SFa3zwC6hqsOUzMajcaEOEV8ey1GjvByvrg0Qr5AiQ==", 1166 | "dependencies": { 1167 | "@next/env": "14.2.17", 1168 | "@swc/helpers": "0.5.5", 1169 | "busboy": "1.6.0", 1170 | "caniuse-lite": "^1.0.30001579", 1171 | "graceful-fs": "^4.2.11", 1172 | "postcss": "8.4.31", 1173 | "styled-jsx": "5.1.1" 1174 | }, 1175 | "bin": { 1176 | "next": "dist/bin/next" 1177 | }, 1178 | "engines": { 1179 | "node": ">=18.17.0" 1180 | }, 1181 | "optionalDependencies": { 1182 | "@next/swc-darwin-arm64": "14.2.17", 1183 | "@next/swc-darwin-x64": "14.2.17", 1184 | "@next/swc-linux-arm64-gnu": "14.2.17", 1185 | "@next/swc-linux-arm64-musl": "14.2.17", 1186 | "@next/swc-linux-x64-gnu": "14.2.17", 1187 | "@next/swc-linux-x64-musl": "14.2.17", 1188 | "@next/swc-win32-arm64-msvc": "14.2.17", 1189 | "@next/swc-win32-ia32-msvc": "14.2.17", 1190 | "@next/swc-win32-x64-msvc": "14.2.17" 1191 | }, 1192 | "peerDependencies": { 1193 | "@opentelemetry/api": "^1.1.0", 1194 | "@playwright/test": "^1.41.2", 1195 | "react": "^18.2.0", 1196 | "react-dom": "^18.2.0", 1197 | "sass": "^1.3.0" 1198 | }, 1199 | "peerDependenciesMeta": { 1200 | "@opentelemetry/api": { 1201 | "optional": true 1202 | }, 1203 | "@playwright/test": { 1204 | "optional": true 1205 | }, 1206 | "sass": { 1207 | "optional": true 1208 | } 1209 | } 1210 | }, 1211 | "node_modules/next/node_modules/postcss": { 1212 | "version": "8.4.31", 1213 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", 1214 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", 1215 | "funding": [ 1216 | { 1217 | "type": "opencollective", 1218 | "url": "https://opencollective.com/postcss/" 1219 | }, 1220 | { 1221 | "type": "tidelift", 1222 | "url": "https://tidelift.com/funding/github/npm/postcss" 1223 | }, 1224 | { 1225 | "type": "github", 1226 | "url": "https://github.com/sponsors/ai" 1227 | } 1228 | ], 1229 | "dependencies": { 1230 | "nanoid": "^3.3.6", 1231 | "picocolors": "^1.0.0", 1232 | "source-map-js": "^1.0.2" 1233 | }, 1234 | "engines": { 1235 | "node": "^10 || ^12 || >=14" 1236 | } 1237 | }, 1238 | "node_modules/node-fetch": { 1239 | "version": "2.7.0", 1240 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 1241 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 1242 | "dependencies": { 1243 | "whatwg-url": "^5.0.0" 1244 | }, 1245 | "engines": { 1246 | "node": "4.x || >=6.0.0" 1247 | }, 1248 | "peerDependencies": { 1249 | "encoding": "^0.1.0" 1250 | }, 1251 | "peerDependenciesMeta": { 1252 | "encoding": { 1253 | "optional": true 1254 | } 1255 | } 1256 | }, 1257 | "node_modules/normalize-path": { 1258 | "version": "3.0.0", 1259 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1260 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1261 | "engines": { 1262 | "node": ">=0.10.0" 1263 | } 1264 | }, 1265 | "node_modules/object-assign": { 1266 | "version": "4.1.1", 1267 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1268 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1269 | "engines": { 1270 | "node": ">=0.10.0" 1271 | } 1272 | }, 1273 | "node_modules/object-hash": { 1274 | "version": "3.0.0", 1275 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 1276 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 1277 | "engines": { 1278 | "node": ">= 6" 1279 | } 1280 | }, 1281 | "node_modules/package-json-from-dist": { 1282 | "version": "1.0.1", 1283 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 1284 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" 1285 | }, 1286 | "node_modules/path-key": { 1287 | "version": "3.1.1", 1288 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1289 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1290 | "engines": { 1291 | "node": ">=8" 1292 | } 1293 | }, 1294 | "node_modules/path-parse": { 1295 | "version": "1.0.7", 1296 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1297 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 1298 | }, 1299 | "node_modules/path-scurry": { 1300 | "version": "1.11.1", 1301 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 1302 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 1303 | "dependencies": { 1304 | "lru-cache": "^10.2.0", 1305 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 1306 | }, 1307 | "engines": { 1308 | "node": ">=16 || 14 >=14.18" 1309 | }, 1310 | "funding": { 1311 | "url": "https://github.com/sponsors/isaacs" 1312 | } 1313 | }, 1314 | "node_modules/picocolors": { 1315 | "version": "1.1.1", 1316 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1317 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" 1318 | }, 1319 | "node_modules/picomatch": { 1320 | "version": "2.3.1", 1321 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1322 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1323 | "engines": { 1324 | "node": ">=8.6" 1325 | }, 1326 | "funding": { 1327 | "url": "https://github.com/sponsors/jonschlinkert" 1328 | } 1329 | }, 1330 | "node_modules/pify": { 1331 | "version": "2.3.0", 1332 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1333 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 1334 | "engines": { 1335 | "node": ">=0.10.0" 1336 | } 1337 | }, 1338 | "node_modules/pirates": { 1339 | "version": "4.0.6", 1340 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 1341 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 1342 | "engines": { 1343 | "node": ">= 6" 1344 | } 1345 | }, 1346 | "node_modules/postcss": { 1347 | "version": "8.5.1", 1348 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", 1349 | "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", 1350 | "funding": [ 1351 | { 1352 | "type": "opencollective", 1353 | "url": "https://opencollective.com/postcss/" 1354 | }, 1355 | { 1356 | "type": "tidelift", 1357 | "url": "https://tidelift.com/funding/github/npm/postcss" 1358 | }, 1359 | { 1360 | "type": "github", 1361 | "url": "https://github.com/sponsors/ai" 1362 | } 1363 | ], 1364 | "dependencies": { 1365 | "nanoid": "^3.3.8", 1366 | "picocolors": "^1.1.1", 1367 | "source-map-js": "^1.2.1" 1368 | }, 1369 | "engines": { 1370 | "node": "^10 || ^12 || >=14" 1371 | } 1372 | }, 1373 | "node_modules/postcss-import": { 1374 | "version": "15.1.0", 1375 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 1376 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 1377 | "dependencies": { 1378 | "postcss-value-parser": "^4.0.0", 1379 | "read-cache": "^1.0.0", 1380 | "resolve": "^1.1.7" 1381 | }, 1382 | "engines": { 1383 | "node": ">=14.0.0" 1384 | }, 1385 | "peerDependencies": { 1386 | "postcss": "^8.0.0" 1387 | } 1388 | }, 1389 | "node_modules/postcss-js": { 1390 | "version": "4.0.1", 1391 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 1392 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 1393 | "dependencies": { 1394 | "camelcase-css": "^2.0.1" 1395 | }, 1396 | "engines": { 1397 | "node": "^12 || ^14 || >= 16" 1398 | }, 1399 | "funding": { 1400 | "type": "opencollective", 1401 | "url": "https://opencollective.com/postcss/" 1402 | }, 1403 | "peerDependencies": { 1404 | "postcss": "^8.4.21" 1405 | } 1406 | }, 1407 | "node_modules/postcss-load-config": { 1408 | "version": "4.0.2", 1409 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", 1410 | "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", 1411 | "funding": [ 1412 | { 1413 | "type": "opencollective", 1414 | "url": "https://opencollective.com/postcss/" 1415 | }, 1416 | { 1417 | "type": "github", 1418 | "url": "https://github.com/sponsors/ai" 1419 | } 1420 | ], 1421 | "dependencies": { 1422 | "lilconfig": "^3.0.0", 1423 | "yaml": "^2.3.4" 1424 | }, 1425 | "engines": { 1426 | "node": ">= 14" 1427 | }, 1428 | "peerDependencies": { 1429 | "postcss": ">=8.0.9", 1430 | "ts-node": ">=9.0.0" 1431 | }, 1432 | "peerDependenciesMeta": { 1433 | "postcss": { 1434 | "optional": true 1435 | }, 1436 | "ts-node": { 1437 | "optional": true 1438 | } 1439 | } 1440 | }, 1441 | "node_modules/postcss-nested": { 1442 | "version": "6.2.0", 1443 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", 1444 | "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", 1445 | "funding": [ 1446 | { 1447 | "type": "opencollective", 1448 | "url": "https://opencollective.com/postcss/" 1449 | }, 1450 | { 1451 | "type": "github", 1452 | "url": "https://github.com/sponsors/ai" 1453 | } 1454 | ], 1455 | "dependencies": { 1456 | "postcss-selector-parser": "^6.1.1" 1457 | }, 1458 | "engines": { 1459 | "node": ">=12.0" 1460 | }, 1461 | "peerDependencies": { 1462 | "postcss": "^8.2.14" 1463 | } 1464 | }, 1465 | "node_modules/postcss-selector-parser": { 1466 | "version": "6.1.2", 1467 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", 1468 | "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", 1469 | "dependencies": { 1470 | "cssesc": "^3.0.0", 1471 | "util-deprecate": "^1.0.2" 1472 | }, 1473 | "engines": { 1474 | "node": ">=4" 1475 | } 1476 | }, 1477 | "node_modules/postcss-value-parser": { 1478 | "version": "4.2.0", 1479 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1480 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" 1481 | }, 1482 | "node_modules/queue-microtask": { 1483 | "version": "1.2.3", 1484 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1485 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1486 | "funding": [ 1487 | { 1488 | "type": "github", 1489 | "url": "https://github.com/sponsors/feross" 1490 | }, 1491 | { 1492 | "type": "patreon", 1493 | "url": "https://www.patreon.com/feross" 1494 | }, 1495 | { 1496 | "type": "consulting", 1497 | "url": "https://feross.org/support" 1498 | } 1499 | ] 1500 | }, 1501 | "node_modules/react": { 1502 | "version": "18.3.1", 1503 | "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", 1504 | "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", 1505 | "dependencies": { 1506 | "loose-envify": "^1.1.0" 1507 | }, 1508 | "engines": { 1509 | "node": ">=0.10.0" 1510 | } 1511 | }, 1512 | "node_modules/react-dom": { 1513 | "version": "18.3.1", 1514 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", 1515 | "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", 1516 | "dependencies": { 1517 | "loose-envify": "^1.1.0", 1518 | "scheduler": "^0.23.2" 1519 | }, 1520 | "peerDependencies": { 1521 | "react": "^18.3.1" 1522 | } 1523 | }, 1524 | "node_modules/read-cache": { 1525 | "version": "1.0.0", 1526 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 1527 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 1528 | "dependencies": { 1529 | "pify": "^2.3.0" 1530 | } 1531 | }, 1532 | "node_modules/readdirp": { 1533 | "version": "3.6.0", 1534 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1535 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1536 | "dependencies": { 1537 | "picomatch": "^2.2.1" 1538 | }, 1539 | "engines": { 1540 | "node": ">=8.10.0" 1541 | } 1542 | }, 1543 | "node_modules/resolve": { 1544 | "version": "1.22.10", 1545 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", 1546 | "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", 1547 | "dependencies": { 1548 | "is-core-module": "^2.16.0", 1549 | "path-parse": "^1.0.7", 1550 | "supports-preserve-symlinks-flag": "^1.0.0" 1551 | }, 1552 | "bin": { 1553 | "resolve": "bin/resolve" 1554 | }, 1555 | "engines": { 1556 | "node": ">= 0.4" 1557 | }, 1558 | "funding": { 1559 | "url": "https://github.com/sponsors/ljharb" 1560 | } 1561 | }, 1562 | "node_modules/reusify": { 1563 | "version": "1.0.4", 1564 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1565 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1566 | "engines": { 1567 | "iojs": ">=1.0.0", 1568 | "node": ">=0.10.0" 1569 | } 1570 | }, 1571 | "node_modules/run-parallel": { 1572 | "version": "1.2.0", 1573 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1574 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1575 | "funding": [ 1576 | { 1577 | "type": "github", 1578 | "url": "https://github.com/sponsors/feross" 1579 | }, 1580 | { 1581 | "type": "patreon", 1582 | "url": "https://www.patreon.com/feross" 1583 | }, 1584 | { 1585 | "type": "consulting", 1586 | "url": "https://feross.org/support" 1587 | } 1588 | ], 1589 | "dependencies": { 1590 | "queue-microtask": "^1.2.2" 1591 | } 1592 | }, 1593 | "node_modules/scheduler": { 1594 | "version": "0.23.2", 1595 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", 1596 | "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", 1597 | "dependencies": { 1598 | "loose-envify": "^1.1.0" 1599 | } 1600 | }, 1601 | "node_modules/secure-json-parse": { 1602 | "version": "2.7.0", 1603 | "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", 1604 | "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" 1605 | }, 1606 | "node_modules/shebang-command": { 1607 | "version": "2.0.0", 1608 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1609 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1610 | "dependencies": { 1611 | "shebang-regex": "^3.0.0" 1612 | }, 1613 | "engines": { 1614 | "node": ">=8" 1615 | } 1616 | }, 1617 | "node_modules/shebang-regex": { 1618 | "version": "3.0.0", 1619 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1620 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1621 | "engines": { 1622 | "node": ">=8" 1623 | } 1624 | }, 1625 | "node_modules/signal-exit": { 1626 | "version": "4.1.0", 1627 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1628 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1629 | "engines": { 1630 | "node": ">=14" 1631 | }, 1632 | "funding": { 1633 | "url": "https://github.com/sponsors/isaacs" 1634 | } 1635 | }, 1636 | "node_modules/source-map-js": { 1637 | "version": "1.2.1", 1638 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1639 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1640 | "engines": { 1641 | "node": ">=0.10.0" 1642 | } 1643 | }, 1644 | "node_modules/streamsearch": { 1645 | "version": "1.1.0", 1646 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 1647 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 1648 | "engines": { 1649 | "node": ">=10.0.0" 1650 | } 1651 | }, 1652 | "node_modules/string-width": { 1653 | "version": "5.1.2", 1654 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1655 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1656 | "dependencies": { 1657 | "eastasianwidth": "^0.2.0", 1658 | "emoji-regex": "^9.2.2", 1659 | "strip-ansi": "^7.0.1" 1660 | }, 1661 | "engines": { 1662 | "node": ">=12" 1663 | }, 1664 | "funding": { 1665 | "url": "https://github.com/sponsors/sindresorhus" 1666 | } 1667 | }, 1668 | "node_modules/string-width-cjs": { 1669 | "name": "string-width", 1670 | "version": "4.2.3", 1671 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1672 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1673 | "dependencies": { 1674 | "emoji-regex": "^8.0.0", 1675 | "is-fullwidth-code-point": "^3.0.0", 1676 | "strip-ansi": "^6.0.1" 1677 | }, 1678 | "engines": { 1679 | "node": ">=8" 1680 | } 1681 | }, 1682 | "node_modules/string-width-cjs/node_modules/ansi-regex": { 1683 | "version": "5.0.1", 1684 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1685 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1686 | "engines": { 1687 | "node": ">=8" 1688 | } 1689 | }, 1690 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 1691 | "version": "8.0.0", 1692 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1693 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1694 | }, 1695 | "node_modules/string-width-cjs/node_modules/strip-ansi": { 1696 | "version": "6.0.1", 1697 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1698 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1699 | "dependencies": { 1700 | "ansi-regex": "^5.0.1" 1701 | }, 1702 | "engines": { 1703 | "node": ">=8" 1704 | } 1705 | }, 1706 | "node_modules/strip-ansi": { 1707 | "version": "7.1.0", 1708 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1709 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1710 | "dependencies": { 1711 | "ansi-regex": "^6.0.1" 1712 | }, 1713 | "engines": { 1714 | "node": ">=12" 1715 | }, 1716 | "funding": { 1717 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1718 | } 1719 | }, 1720 | "node_modules/strip-ansi-cjs": { 1721 | "name": "strip-ansi", 1722 | "version": "6.0.1", 1723 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1724 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1725 | "dependencies": { 1726 | "ansi-regex": "^5.0.1" 1727 | }, 1728 | "engines": { 1729 | "node": ">=8" 1730 | } 1731 | }, 1732 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 1733 | "version": "5.0.1", 1734 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1735 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1736 | "engines": { 1737 | "node": ">=8" 1738 | } 1739 | }, 1740 | "node_modules/styled-jsx": { 1741 | "version": "5.1.1", 1742 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", 1743 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", 1744 | "dependencies": { 1745 | "client-only": "0.0.1" 1746 | }, 1747 | "engines": { 1748 | "node": ">= 12.0.0" 1749 | }, 1750 | "peerDependencies": { 1751 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" 1752 | }, 1753 | "peerDependenciesMeta": { 1754 | "@babel/core": { 1755 | "optional": true 1756 | }, 1757 | "babel-plugin-macros": { 1758 | "optional": true 1759 | } 1760 | } 1761 | }, 1762 | "node_modules/sucrase": { 1763 | "version": "3.35.0", 1764 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", 1765 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", 1766 | "dependencies": { 1767 | "@jridgewell/gen-mapping": "^0.3.2", 1768 | "commander": "^4.0.0", 1769 | "glob": "^10.3.10", 1770 | "lines-and-columns": "^1.1.6", 1771 | "mz": "^2.7.0", 1772 | "pirates": "^4.0.1", 1773 | "ts-interface-checker": "^0.1.9" 1774 | }, 1775 | "bin": { 1776 | "sucrase": "bin/sucrase", 1777 | "sucrase-node": "bin/sucrase-node" 1778 | }, 1779 | "engines": { 1780 | "node": ">=16 || 14 >=14.17" 1781 | } 1782 | }, 1783 | "node_modules/supports-preserve-symlinks-flag": { 1784 | "version": "1.0.0", 1785 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1786 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1787 | "engines": { 1788 | "node": ">= 0.4" 1789 | }, 1790 | "funding": { 1791 | "url": "https://github.com/sponsors/ljharb" 1792 | } 1793 | }, 1794 | "node_modules/swr": { 1795 | "version": "2.3.0", 1796 | "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.0.tgz", 1797 | "integrity": "sha512-NyZ76wA4yElZWBHzSgEJc28a0u6QZvhb6w0azeL2k7+Q1gAzVK+IqQYXhVOC/mzi+HZIozrZvBVeSeOZNR2bqA==", 1798 | "dependencies": { 1799 | "dequal": "^2.0.3", 1800 | "use-sync-external-store": "^1.4.0" 1801 | }, 1802 | "peerDependencies": { 1803 | "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 1804 | } 1805 | }, 1806 | "node_modules/tailwindcss": { 1807 | "version": "3.4.17", 1808 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", 1809 | "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", 1810 | "dependencies": { 1811 | "@alloc/quick-lru": "^5.2.0", 1812 | "arg": "^5.0.2", 1813 | "chokidar": "^3.6.0", 1814 | "didyoumean": "^1.2.2", 1815 | "dlv": "^1.1.3", 1816 | "fast-glob": "^3.3.2", 1817 | "glob-parent": "^6.0.2", 1818 | "is-glob": "^4.0.3", 1819 | "jiti": "^1.21.6", 1820 | "lilconfig": "^3.1.3", 1821 | "micromatch": "^4.0.8", 1822 | "normalize-path": "^3.0.0", 1823 | "object-hash": "^3.0.0", 1824 | "picocolors": "^1.1.1", 1825 | "postcss": "^8.4.47", 1826 | "postcss-import": "^15.1.0", 1827 | "postcss-js": "^4.0.1", 1828 | "postcss-load-config": "^4.0.2", 1829 | "postcss-nested": "^6.2.0", 1830 | "postcss-selector-parser": "^6.1.2", 1831 | "resolve": "^1.22.8", 1832 | "sucrase": "^3.35.0" 1833 | }, 1834 | "bin": { 1835 | "tailwind": "lib/cli.js", 1836 | "tailwindcss": "lib/cli.js" 1837 | }, 1838 | "engines": { 1839 | "node": ">=14.0.0" 1840 | } 1841 | }, 1842 | "node_modules/tailwindcss-animate": { 1843 | "version": "1.0.7", 1844 | "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", 1845 | "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", 1846 | "peerDependencies": { 1847 | "tailwindcss": ">=3.0.0 || insiders" 1848 | } 1849 | }, 1850 | "node_modules/thenify": { 1851 | "version": "3.3.1", 1852 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 1853 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 1854 | "dependencies": { 1855 | "any-promise": "^1.0.0" 1856 | } 1857 | }, 1858 | "node_modules/thenify-all": { 1859 | "version": "1.6.0", 1860 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 1861 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 1862 | "dependencies": { 1863 | "thenify": ">= 3.1.0 < 4" 1864 | }, 1865 | "engines": { 1866 | "node": ">=0.8" 1867 | } 1868 | }, 1869 | "node_modules/throttleit": { 1870 | "version": "2.1.0", 1871 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", 1872 | "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", 1873 | "engines": { 1874 | "node": ">=18" 1875 | }, 1876 | "funding": { 1877 | "url": "https://github.com/sponsors/sindresorhus" 1878 | } 1879 | }, 1880 | "node_modules/to-regex-range": { 1881 | "version": "5.0.1", 1882 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1883 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1884 | "dependencies": { 1885 | "is-number": "^7.0.0" 1886 | }, 1887 | "engines": { 1888 | "node": ">=8.0" 1889 | } 1890 | }, 1891 | "node_modules/tr46": { 1892 | "version": "0.0.3", 1893 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1894 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1895 | }, 1896 | "node_modules/ts-interface-checker": { 1897 | "version": "0.1.13", 1898 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 1899 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" 1900 | }, 1901 | "node_modules/tslib": { 1902 | "version": "2.8.1", 1903 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 1904 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" 1905 | }, 1906 | "node_modules/typescript": { 1907 | "version": "5.7.3", 1908 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", 1909 | "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", 1910 | "dev": true, 1911 | "bin": { 1912 | "tsc": "bin/tsc", 1913 | "tsserver": "bin/tsserver" 1914 | }, 1915 | "engines": { 1916 | "node": ">=14.17" 1917 | } 1918 | }, 1919 | "node_modules/undici-types": { 1920 | "version": "6.19.8", 1921 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 1922 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 1923 | "dev": true 1924 | }, 1925 | "node_modules/use-sync-external-store": { 1926 | "version": "1.4.0", 1927 | "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", 1928 | "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", 1929 | "peerDependencies": { 1930 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 1931 | } 1932 | }, 1933 | "node_modules/util-deprecate": { 1934 | "version": "1.0.2", 1935 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1936 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1937 | }, 1938 | "node_modules/webidl-conversions": { 1939 | "version": "3.0.1", 1940 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1941 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1942 | }, 1943 | "node_modules/whatwg-url": { 1944 | "version": "5.0.0", 1945 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1946 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1947 | "dependencies": { 1948 | "tr46": "~0.0.3", 1949 | "webidl-conversions": "^3.0.0" 1950 | } 1951 | }, 1952 | "node_modules/which": { 1953 | "version": "2.0.2", 1954 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1955 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1956 | "dependencies": { 1957 | "isexe": "^2.0.0" 1958 | }, 1959 | "bin": { 1960 | "node-which": "bin/node-which" 1961 | }, 1962 | "engines": { 1963 | "node": ">= 8" 1964 | } 1965 | }, 1966 | "node_modules/wrap-ansi": { 1967 | "version": "8.1.0", 1968 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 1969 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 1970 | "dependencies": { 1971 | "ansi-styles": "^6.1.0", 1972 | "string-width": "^5.0.1", 1973 | "strip-ansi": "^7.0.1" 1974 | }, 1975 | "engines": { 1976 | "node": ">=12" 1977 | }, 1978 | "funding": { 1979 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1980 | } 1981 | }, 1982 | "node_modules/wrap-ansi-cjs": { 1983 | "name": "wrap-ansi", 1984 | "version": "7.0.0", 1985 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1986 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1987 | "dependencies": { 1988 | "ansi-styles": "^4.0.0", 1989 | "string-width": "^4.1.0", 1990 | "strip-ansi": "^6.0.0" 1991 | }, 1992 | "engines": { 1993 | "node": ">=10" 1994 | }, 1995 | "funding": { 1996 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1997 | } 1998 | }, 1999 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 2000 | "version": "5.0.1", 2001 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2002 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2003 | "engines": { 2004 | "node": ">=8" 2005 | } 2006 | }, 2007 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 2008 | "version": "4.3.0", 2009 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2010 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2011 | "dependencies": { 2012 | "color-convert": "^2.0.1" 2013 | }, 2014 | "engines": { 2015 | "node": ">=8" 2016 | }, 2017 | "funding": { 2018 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2019 | } 2020 | }, 2021 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 2022 | "version": "8.0.0", 2023 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2024 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 2025 | }, 2026 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 2027 | "version": "4.2.3", 2028 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2029 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2030 | "dependencies": { 2031 | "emoji-regex": "^8.0.0", 2032 | "is-fullwidth-code-point": "^3.0.0", 2033 | "strip-ansi": "^6.0.1" 2034 | }, 2035 | "engines": { 2036 | "node": ">=8" 2037 | } 2038 | }, 2039 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 2040 | "version": "6.0.1", 2041 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2042 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2043 | "dependencies": { 2044 | "ansi-regex": "^5.0.1" 2045 | }, 2046 | "engines": { 2047 | "node": ">=8" 2048 | } 2049 | }, 2050 | "node_modules/yaml": { 2051 | "version": "2.7.0", 2052 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", 2053 | "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", 2054 | "bin": { 2055 | "yaml": "bin.mjs" 2056 | }, 2057 | "engines": { 2058 | "node": ">= 14" 2059 | } 2060 | }, 2061 | "node_modules/zod": { 2062 | "version": "3.24.1", 2063 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", 2064 | "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", 2065 | "peer": true, 2066 | "funding": { 2067 | "url": "https://github.com/sponsors/colinhacks" 2068 | } 2069 | }, 2070 | "node_modules/zod-to-json-schema": { 2071 | "version": "3.24.1", 2072 | "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.1.tgz", 2073 | "integrity": "sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==", 2074 | "peerDependencies": { 2075 | "zod": "^3.24.1" 2076 | } 2077 | } 2078 | } 2079 | } 2080 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "exa-o3mini-chat", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@ai-sdk/openai": "^1.1.9", 13 | "@tailwindcss/typography": "^0.5.16", 14 | "@vercel/analytics": "^1.4.1", 15 | "ai": "^4.1.16", 16 | "exa-js": "^1.4.8", 17 | "next": "14.2.17", 18 | "react": "^18", 19 | "react-dom": "^18", 20 | "tailwindcss-animate": "^1.0.7" 21 | }, 22 | "devDependencies": { 23 | "@types/node": "^20", 24 | "@types/react": "^18", 25 | "@types/react-dom": "^18", 26 | "postcss": "^8", 27 | "tailwindcss": "^3.4.17", 28 | "typescript": "^5" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | const config: Config = { 4 | darkMode: ["class"], 5 | content: [ 6 | "./pages/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./components/**/*.{js,ts,jsx,tsx,mdx}", 8 | "./app/**/*.{js,ts,jsx,tsx,mdx}", 9 | ], 10 | theme: { 11 | extend: { 12 | colors: { 13 | foreground: 'hsl(var(--foreground))', 14 | 'background-start': 'rgb(var(--background-start-rgb))', 15 | 'background-end': 'rgb(var(--background-end-rgb))', 16 | 'brand-default': 'var(--brand-default)', 17 | 'brand-fainter': 'var(--brand-fainter)', 18 | 'brand-faint': 'var(--brand-faint)', 19 | 'brand-subtle': 'var(--brand-subtle)', 20 | 'brand-muted': 'var(--brand-muted)', 21 | 'brand-dark': 'var(--brand-dark)', 22 | 'brand-darker': 'var(--brand-darker)', 23 | 'secondary-accent': 'var(--secondary-accent)', 24 | 'secondary-accent2x': 'var(--secondary-accent2x)', 25 | 'secondary-dark': 'var(--secondary-dark)', 26 | 'secondary-darker': 'var(--secondary-darker)', 27 | 'secondary-darkest': 'var(--secondary-darkest)', 28 | 'secondary-default': 'var(--secondary-default)', 29 | 'secondary-faint': 'var(--secondary-faint)', 30 | 'secondary-fainter': 'var(--secondary-fainter)', 31 | 'gray-100': 'var(--gray-100)', 32 | 'gray-200': 'var(--gray-200)', 33 | 'gray-300': 'var(--gray-300)', 34 | 'gray-400': 'var(--gray-400)', 35 | 'gray-50': 'var(--gray-50)', 36 | 'gray-500': 'var(--gray-500)', 37 | 'gray-600': 'var(--gray-600)', 38 | 'gray-700': 'var(--gray-700)', 39 | 'gray-800': 'var(--gray-800)', 40 | 'gray-900': 'var(--gray-900)', 41 | 'gray-950': 'var(--gray-950)', 42 | black: 'var(--black)', 43 | white: 'var(--white)', 44 | 'accent-yellow-light': 'var(--accent-yellow-light)', 45 | 'accent-yellow-dark': 'var(--accent-yellow-dark)', 46 | 'accent-skyblue-light': 'var(--accent-skyblue-light)', 47 | 'accent-skyblue-dark': 'var(--accent-skyblue-dark)', 48 | 'accent-green': 'var(--accent-green)', 49 | 'accent-red': 'var(--accent-red)', 50 | 'accent-darkgreen-dark': 'var(--accent-darkgreen-dark)', 51 | 'accent-darkgreen-light': 'var(--accent-darkgreen-light)', 52 | 'accent-purple-dark': 'var(--accent-purple-dark)', 53 | 'accent-purple-light': 'var(--accent-purple-light)', 54 | 'accent-pink-dark': 'var(--accent-pink-dark)', 55 | 'accent-pink-light': 'var(--accent-pink-light)', 56 | 'accent-maroon-dark': 'var(--accent-maroon-dark)', 57 | 'accent-maroon-light': 'var(--accent-maroon-light)', 58 | 'dark-accent-skyblue-dark': 'var(--dark-accent-skyblue-dark)', 59 | 'dark-accent-skyblue-light': 'var(--dark-accent-skyblue-light)', 60 | 'dark-accent-maroon-dark': 'var(--dark-accent-maroon-dark)', 61 | 'dark-accent-maroon-light': 'var(--dark-accent-maroon-light)', 62 | 'dark-accent-green-dark': 'var(--dark-accent-green-dark)', 63 | 'dark-accent-green-light': 'var(--dark-accent-green-light)', 64 | 'dark-accent-yellow-dark': 'var(--dark-accent-yellow-dark)', 65 | 'dark-accent-yellow-light': 'var(--dark-accent-yellow-light)', 66 | 'dark-accent-purple-dark': 'var(--dark-accent-purple-dark)', 67 | 'dark-accent-purple-light': 'var(--dark-accent-purple-light)', 68 | 'dark-accent-pink-dark': 'var(--dark-accent-pink-dark)', 69 | 'dark-accent-pink-light': 'var(--dark-accent-pink-light)', 70 | background: 'hsl(var(--background))', 71 | card: { 72 | DEFAULT: 'hsl(var(--card))', 73 | foreground: 'hsl(var(--card-foreground))' 74 | }, 75 | popover: { 76 | DEFAULT: 'hsl(var(--popover))', 77 | foreground: 'hsl(var(--popover-foreground))' 78 | }, 79 | primary: { 80 | DEFAULT: 'hsl(var(--primary))', 81 | foreground: 'hsl(var(--primary-foreground))' 82 | }, 83 | secondary: { 84 | DEFAULT: 'hsl(var(--secondary))', 85 | foreground: 'hsl(var(--secondary-foreground))' 86 | }, 87 | muted: { 88 | DEFAULT: 'hsl(var(--muted))', 89 | foreground: 'hsl(var(--muted-foreground))' 90 | }, 91 | accent: { 92 | DEFAULT: 'hsl(var(--accent))', 93 | foreground: 'hsl(var(--accent-foreground))' 94 | }, 95 | destructive: { 96 | DEFAULT: 'hsl(var(--destructive))', 97 | foreground: 'hsl(var(--destructive-foreground))' 98 | }, 99 | border: 'hsl(var(--border))', 100 | input: 'hsl(var(--input))', 101 | ring: 'hsl(var(--ring))', 102 | chart: { 103 | '1': 'hsl(var(--chart-1))', 104 | '2': 'hsl(var(--chart-2))', 105 | '3': 'hsl(var(--chart-3))', 106 | '4': 'hsl(var(--chart-4))', 107 | '5': 'hsl(var(--chart-5))' 108 | } 109 | }, 110 | animation: { 111 | 'fade-up': 'fade-up 0.5s ease-out forwards' 112 | }, 113 | keyframes: { 114 | 'fade-up': { 115 | '0%': { 116 | opacity: '0', 117 | transform: 'translateY(20px)' 118 | }, 119 | '100%': { 120 | opacity: '1', 121 | transform: 'translateY(0)' 122 | } 123 | } 124 | }, 125 | borderRadius: { 126 | lg: 'var(--radius)', 127 | md: 'calc(var(--radius) - 2px)', 128 | sm: 'calc(var(--radius) - 4px)' 129 | }, 130 | backgroundImage: { 131 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', 132 | 'gradient-conic': 133 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', 134 | }, 135 | } 136 | }, 137 | plugins: [ 138 | require("tailwindcss-animate"), 139 | require('@tailwindcss/typography'), 140 | ], 141 | }; 142 | export default config; -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["dom", "dom.iterable", "esnext"], 4 | "allowJs": true, 5 | "skipLibCheck": true, 6 | "strict": true, 7 | "noEmit": true, 8 | "esModuleInterop": true, 9 | "module": "esnext", 10 | "moduleResolution": "bundler", 11 | "resolveJsonModule": true, 12 | "isolatedModules": true, 13 | "jsx": "preserve", 14 | "incremental": true, 15 | "plugins": [ 16 | { 17 | "name": "next" 18 | } 19 | ], 20 | "paths": { 21 | "@/*": ["./*"] 22 | } 23 | }, 24 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 25 | "exclude": ["node_modules"] 26 | } 27 | --------------------------------------------------------------------------------