├── .env.example
├── .gitignore
├── README.md
├── app
├── api
│ └── exaanswer
│ │ └── route.ts
├── component
│ ├── Citation.tsx
│ └── 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
└── utils.ts
├── middleware.ts
├── next.config.mjs
├── package-lock.json
├── package.json
├── postcss.config.mjs
├── tailwind.config.ts
└── tsconfig.json
/.env.example:
--------------------------------------------------------------------------------
1 | EXA_API_KEY=Your-Exa-API-Key
2 |
3 | # Get Your Exa API Key from https://dashboard.exa.ai/api-keys
--------------------------------------------------------------------------------
/.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 Answer Chat App
2 | ### Powered by [Exa](https://exa.ai) - The Web Search API
3 |
4 | An open-source chat app showcasing the power of Exa's Answer endpoint.
5 |
6 | 
7 |
8 | ### ✨ Try it yourself:
9 | - [Try the Answer Endpoint](https://dashboard.exa.ai/playground/answer?q=What%20makes%20some%20LLMs%20so%20much%20better%20than%20others%3F&filters=%7B%22model%22%3A%22exa-pro%22%7D) - Experience the Answer endpoint directly on Exa dashboard
10 |
11 | - [Live Demo](https://demo.exa.ai/answer) - See the chat app in action
12 |
13 |
14 |
15 | ## 🎯 What is Exa Answer Chat App?
16 |
17 | Exa Answer Chat App is a free and open-source application that shows how to use Exa's Answer endpoint. It provides a modern chat interface with real-time streaming responses and citation support.
18 |
19 |
20 |
21 | ## 💻 Tech Stack
22 | - **Backend**: [Exa API](https://exa.ai) - Answer endpoint
23 | - **Frontend**: [Next.js](https://nextjs.org/docs) with App Router
24 | - **Styling**: [TailwindCSS](https://tailwindcss.com)
25 | - **Language**: TypeScript
26 | - **Hosting**: [Vercel](https://vercel.com/)
27 |
28 |
29 |
30 | ## 🚀 Getting Started
31 |
32 | ### Prerequisites
33 | - Node.js 18+ installed
34 | - Exa API key ([Get it here](https://dashboard.exa.ai/api-keys))
35 |
36 | ### Installation
37 |
38 | 1. Clone the repository
39 | ```bash
40 | git clone https://github.com/exa-labs/answer-chat-app.git
41 | cd answer-chat-app
42 | ```
43 |
44 | 2. Install dependencies
45 | ```bash
46 | npm install
47 | ```
48 |
49 | 3. Set up environment variables
50 | ```bash
51 | cp .env.example .env.local
52 | ```
53 | Then add your Exa API key to `.env.local`:
54 | ```
55 | EXA_API_KEY=your-api-key-here
56 | ```
57 |
58 | 4. Run the development server
59 | ```bash
60 | npm run dev
61 | ```
62 |
63 | 5. Open [http://localhost:3000/answer](http://localhost:3000/answer) in your browser
64 |
65 |
66 |
67 | ## ⭐ About [Exa](https://exa.ai)
68 |
69 | This project showcases [Exa's](https://exa.ai) Answer endpoint, which provides:
70 |
71 | * Real-time streaming responses
72 | * High-quality answers with citations
73 | * Simple API integration (with OpenAI compatible API)
74 |
75 | [Try Exa API](https://dashboard.exa.ai) today and build your own AI-powered applications!
76 |
77 |
78 |
79 | ---
80 |
81 | Built with ❤️ using [Exa](https://exa.ai)
82 |
--------------------------------------------------------------------------------
/app/api/exaanswer/route.ts:
--------------------------------------------------------------------------------
1 | // app/api/exaanswer/route.ts
2 | import { NextRequest } from 'next/server';
3 | import Exa from "exa-js";
4 |
5 | export const maxDuration = 60;
6 | export const dynamic = 'force-dynamic';
7 |
8 | const exa = new Exa(process.env.EXA_API_KEY as string);
9 |
10 | export async function POST(req: NextRequest) {
11 | try {
12 | const { query } = await req.json();
13 | if (!query) {
14 | return new Response(JSON.stringify({ error: 'query is required' }), { status: 400 });
15 | }
16 |
17 | const stream = exa.streamAnswer(query, { model: "exa-pro" });
18 |
19 | const encoder = new TextEncoder();
20 |
21 | const streamResponse = new ReadableStream({
22 | async start(controller) {
23 | try {
24 | for await (const chunk of stream) {
25 | // Send citations if present
26 | if (chunk.citations?.length) {
27 | controller.enqueue(encoder.encode(JSON.stringify({ citations: chunk.citations }) + '\n'));
28 | }
29 |
30 | // Send content
31 | controller.enqueue(encoder.encode(JSON.stringify({
32 | choices: [{ delta: { content: chunk.content } }]
33 | }) + '\n'));
34 | }
35 | controller.close();
36 | } catch (error) {
37 | controller.error(error);
38 | }
39 | },
40 | });
41 |
42 | return new Response(streamResponse, {
43 | headers: {
44 | 'Content-Type': 'text/event-stream',
45 | 'Cache-Control': 'no-cache',
46 | 'Connection': 'keep-alive',
47 | },
48 | });
49 | } catch (error: any) {
50 | return new Response(
51 | JSON.stringify({ error: `Failed to perform search | ${error.message}` }),
52 | { status: 500 }
53 | );
54 | }
55 | }
--------------------------------------------------------------------------------
/app/component/Citation.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 |
3 | interface CitationProps {
4 | citations: any[];
5 | }
6 |
7 | export default function Citation({ citations }: CitationProps) {
8 | // Debug log
9 | console.log('Citation component received:', citations);
10 |
11 | if (!citations || citations.length === 0) {
12 | console.log('No citations to display');
13 | return null;
14 | }
15 |
16 | return (
17 |
18 | {/* Header */}
19 |
20 |
Exa Search Results
21 |
22 |
23 | {/* Results */}
24 |
25 |
26 | {citations.map((citation, idx) => (
27 |
46 | ))}
47 |
48 |
49 |
50 | );
51 | }
--------------------------------------------------------------------------------
/app/component/MessageContent.tsx:
--------------------------------------------------------------------------------
1 | interface MessageContentProps {
2 | content: string;
3 | }
4 |
5 | export default function MessageContent({ content }: MessageContentProps) {
6 | // Function to process the content and format links and bold text
7 | const formatContent = (text: string) => {
8 | // Regular expressions for markdown-style links and bold text
9 | const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
10 | const boldRegex = /\*\*([^*]+)\*\*/g;
11 |
12 | // Split the text into parts (text, links, and bold)
13 | const parts: (string | JSX.Element)[] = [];
14 | let lastIndex = 0;
15 | let workingText = text;
16 |
17 | // First process bold text
18 | const boldParts: (string | JSX.Element)[] = [];
19 | let boldLastIndex = 0;
20 | let boldMatch;
21 |
22 | while ((boldMatch = boldRegex.exec(workingText)) !== null) {
23 | // Add text before the bold
24 | if (boldMatch.index > boldLastIndex) {
25 | boldParts.push(workingText.slice(boldLastIndex, boldMatch.index));
26 | }
27 |
28 | // Add the bold text
29 | boldParts.push(
30 |
31 | {boldMatch[1]}
32 |
33 | );
34 |
35 | boldLastIndex = boldMatch.index + boldMatch[0].length;
36 | }
37 |
38 | // Add remaining text after last bold
39 | if (boldLastIndex < workingText.length) {
40 | boldParts.push(workingText.slice(boldLastIndex));
41 | }
42 |
43 | // Now process links within each part
44 | boldParts.forEach((part, index) => {
45 | if (typeof part === 'string') {
46 | const linkParts: (string | JSX.Element)[] = [];
47 | let linkLastIndex = 0;
48 | let linkMatch;
49 |
50 | while ((linkMatch = linkRegex.exec(part)) !== null) {
51 | // Add text before the link
52 | if (linkMatch.index > linkLastIndex) {
53 | linkParts.push(part.slice(linkLastIndex, linkMatch.index));
54 | }
55 |
56 | // Add the formatted link
57 | linkParts.push(
58 |
65 | {linkMatch[1]}
66 |
67 | );
68 |
69 | linkLastIndex = linkMatch.index + linkMatch[0].length;
70 | }
71 |
72 | // Add remaining text after last link
73 | if (linkLastIndex < part.length) {
74 | linkParts.push(part.slice(linkLastIndex));
75 | }
76 |
77 | parts.push(...linkParts);
78 | } else {
79 | parts.push(part);
80 | }
81 | });
82 |
83 | return parts;
84 | };
85 |
86 | return <>{formatContent(content)}>;
87 | }
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exa-labs/answer-chat-app/882bca0407d046b96760feb2267d61496b3023e5/app/favicon.ico
--------------------------------------------------------------------------------
/app/fonts/ABCDiatype-Bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exa-labs/answer-chat-app/882bca0407d046b96760feb2267d61496b3023e5/app/fonts/ABCDiatype-Bold.otf
--------------------------------------------------------------------------------
/app/fonts/ABCDiatype-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exa-labs/answer-chat-app/882bca0407d046b96760feb2267d61496b3023e5/app/fonts/ABCDiatype-Regular.otf
--------------------------------------------------------------------------------
/app/fonts/GeistMonoVF.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exa-labs/answer-chat-app/882bca0407d046b96760feb2267d61496b3023e5/app/fonts/GeistMonoVF.woff
--------------------------------------------------------------------------------
/app/fonts/GeistVF.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exa-labs/answer-chat-app/882bca0407d046b96760feb2267d61496b3023e5/app/fonts/GeistVF.woff
--------------------------------------------------------------------------------
/app/fonts/RecklessTRIAL-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exa-labs/answer-chat-app/882bca0407d046b96760feb2267d61496b3023e5/app/fonts/RecklessTRIAL-Medium.woff2
--------------------------------------------------------------------------------
/app/fonts/RecklessTRIAL-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exa-labs/answer-chat-app/882bca0407d046b96760feb2267d61496b3023e5/app/fonts/RecklessTRIAL-Regular.otf
--------------------------------------------------------------------------------
/app/fonts/RecklessTRIAL-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exa-labs/answer-chat-app/882bca0407d046b96760feb2267d61496b3023e5/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 Answer Chat App",
26 | description: "An opensource chat application built with Exa Answer endpoint.",
27 | openGraph: {
28 | title: "Exa Answer Chat App",
29 | description: "An opensource chat application built with Exa Answer endpoint.",
30 | type: "website",
31 | locale: "en_US",
32 | images: [
33 | {
34 | url: "https://demo.exa.ai/answer/opengraph-image.jpg",
35 | width: 1200,
36 | height: 630,
37 | alt: "Exa Answer Chat App"
38 | }
39 | ]
40 | },
41 | twitter: {
42 | card: "summary_large_image",
43 | title: "Exa Answer Chat App",
44 | description: "An opensource chat application built with Exa Answer endpoint.",
45 | images: ["https://demo.exa.ai/answer/opengraph-image.jpg"]
46 | },
47 | metadataBase: new URL("https://demo.exa.ai/answer"),
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 | }
--------------------------------------------------------------------------------
/app/opengraph-image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/exa-labs/answer-chat-app/882bca0407d046b96760feb2267d61496b3023e5/app/opengraph-image.jpg
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import { useState, useRef } from 'react';
4 | import MessageContent from './component/MessageContent';
5 | import Citation from './component/Citation';
6 | import { getAssetPath } from './utils';
7 |
8 | interface Message {
9 | id: string;
10 | role: 'user' | 'assistant';
11 | content: string;
12 | citations?: any[];
13 | }
14 |
15 | export default function Page() {
16 | const [messages, setMessages] = useState([]);
17 | const [input, setInput] = useState('');
18 | const [isLoading, setIsLoading] = useState(false);
19 | const abortControllerRef = useRef(null);
20 |
21 | const handleInputChange = (e: React.ChangeEvent) => {
22 | setInput(e.target.value);
23 | };
24 |
25 | const handleSubmit = async (e: React.FormEvent) => {
26 | e.preventDefault();
27 | if (!input.trim() || isLoading) return;
28 |
29 | // Cancel any ongoing request
30 | if (abortControllerRef.current) {
31 | abortControllerRef.current.abort();
32 | }
33 |
34 | const messageId = Date.now().toString();
35 | const userMessage: Message = {
36 | id: messageId,
37 | role: 'user',
38 | content: input,
39 | };
40 |
41 | setMessages(prev => [...prev, userMessage]);
42 | setInput('');
43 | setIsLoading(true);
44 |
45 | const assistantMessage: Message = {
46 | id: (Date.now() + 1).toString(),
47 | role: 'assistant',
48 | content: '',
49 | };
50 |
51 | setMessages(prev => [...prev, assistantMessage]);
52 |
53 | try {
54 | abortControllerRef.current = new AbortController();
55 |
56 | // Format previous messages into conversation history
57 | const conversationHistory = messages.map(msg =>
58 | `${msg.role === 'user' ? 'User' : 'Assistant'}: ${msg.content}`
59 | ).join('\n');
60 |
61 | // Combine history with new query
62 | const fullQuery = conversationHistory
63 | ? `${conversationHistory}\nUser: ${input}`
64 | : input;
65 |
66 | const response = await fetch(getAssetPath('/api/exaanswer'), {
67 | method: 'POST',
68 | headers: { 'Content-Type': 'application/json' },
69 | body: JSON.stringify({ query: fullQuery }),
70 | signal: abortControllerRef.current.signal,
71 | });
72 |
73 | if (!response.ok) throw new Error('Failed to fetch response');
74 |
75 | const reader = response.body?.getReader();
76 | if (!reader) throw new Error('No reader available');
77 |
78 | let content = '';
79 | let citations: any[] = [];
80 |
81 | while (true) {
82 | const { done, value } = await reader.read();
83 | if (done) break;
84 |
85 | // Convert the chunk to text
86 | const chunk = new TextDecoder().decode(value);
87 | const lines = chunk.split('\n').filter(line => line.trim());
88 |
89 | for (const line of lines) {
90 | try {
91 | const data = JSON.parse(line);
92 | if (data.citations) {
93 | citations = data.citations;
94 | // Update message with new citations immediately
95 | setMessages(prev =>
96 | prev.map(msg =>
97 | msg.id === assistantMessage.id
98 | ? { ...msg, citations: data.citations }
99 | : msg
100 | )
101 | );
102 | } else if (data.choices?.[0]?.delta?.content) {
103 | content += data.choices[0].delta.content;
104 | setMessages(prev =>
105 | prev.map(msg =>
106 | msg.id === assistantMessage.id
107 | ? { ...msg, content, citations }
108 | : msg
109 | )
110 | );
111 | }
112 | } catch (e) {
113 | console.error('Error parsing chunk:', e);
114 | }
115 | }
116 | }
117 | } catch (error: any) {
118 | if (error.name === 'AbortError') {
119 | console.log('Request was aborted');
120 | } else {
121 | console.error('Error:', error);
122 | setMessages(prev =>
123 | prev.map(msg =>
124 | msg.id === assistantMessage.id
125 | ? { ...msg, content: 'Sorry, there was an error processing your request.' }
126 | : msg
127 | )
128 | );
129 | }
130 | } finally {
131 | setIsLoading(false);
132 | abortControllerRef.current = null;
133 | }
134 | };
135 |
136 | const hasMessages = messages.length > 0;
137 |
138 | return (
139 | <>
140 | {/* Top Navigation Bar */}
141 |
184 |
185 | {/* Chat Messages */}
186 |
187 |
188 | {messages.map((message) => (
189 |
190 |
195 |
202 |
203 |
204 |
205 | {message.citations && message.citations.length > 0 && (
206 |
207 | )}
208 |
209 |
210 |
211 | ))}
212 |
213 | {/* Loading indicator */}
214 | {isLoading && (
215 |
216 |
217 |
218 |
219 |
Asking Exa...
220 |
221 | )}
222 |
223 |
224 |
225 | {/* Input Form - centered when no messages, fixed bottom otherwise */}
226 |
231 |
236 | {/* New Chat Button - Only show when there are messages */}
237 | {hasMessages && (
238 |
247 | )}
248 |
270 | {!hasMessages && (
271 |
277 | )}
278 |
279 |
280 | >
281 | );
282 | }
--------------------------------------------------------------------------------
/app/utils.ts:
--------------------------------------------------------------------------------
1 | export const getAssetPath = (path: string): string => {
2 | return `/answer${path}`;
3 | };
--------------------------------------------------------------------------------
/middleware.ts:
--------------------------------------------------------------------------------
1 | import { NextResponse } from 'next/server'
2 | import type { NextRequest } from 'next/server'
3 | export function middleware(request: NextRequest) {
4 | if (request.headers.get('host') === 'https://answer-chat-app.vercel.app/') {
5 | return NextResponse.redirect('https://demo.exa.ai/answer', {
6 | status: 301
7 | })
8 | }
9 | return NextResponse.next()
10 | }
11 | export const config = {
12 | matcher: '/:path*'
13 | }
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 |
3 | const nextConfig = {
4 | basePath: "/answer",
5 | experimental: {
6 | serverActions: {
7 | allowedOrigins: ["demo.exa.ai"],
8 | allowedForwardedHosts: ["demo.exa.ai"],
9 | },
10 | },
11 | };
12 |
13 | export default nextConfig;
14 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "answer-chat-app",
3 | "version": "0.1.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "answer-chat-app",
9 | "version": "0.1.0",
10 | "dependencies": {
11 | "@tailwindcss/typography": "^0.5.16",
12 | "@vercel/analytics": "^1.5.0",
13 | "exa-js": "^1.4.10",
14 | "next": "14.2.17",
15 | "react": "^18",
16 | "react-dom": "^18",
17 | "tailwindcss-animate": "^1.0.7"
18 | },
19 | "devDependencies": {
20 | "@types/node": "^20",
21 | "@types/react": "^18",
22 | "@types/react-dom": "^18",
23 | "postcss": "^8",
24 | "tailwindcss": "^3.4.1",
25 | "typescript": "^5"
26 | }
27 | },
28 | "node_modules/@alloc/quick-lru": {
29 | "version": "5.2.0",
30 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
31 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
32 | "engines": {
33 | "node": ">=10"
34 | },
35 | "funding": {
36 | "url": "https://github.com/sponsors/sindresorhus"
37 | }
38 | },
39 | "node_modules/@isaacs/cliui": {
40 | "version": "8.0.2",
41 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
42 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
43 | "dependencies": {
44 | "string-width": "^5.1.2",
45 | "string-width-cjs": "npm:string-width@^4.2.0",
46 | "strip-ansi": "^7.0.1",
47 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
48 | "wrap-ansi": "^8.1.0",
49 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
50 | },
51 | "engines": {
52 | "node": ">=12"
53 | }
54 | },
55 | "node_modules/@jridgewell/gen-mapping": {
56 | "version": "0.3.8",
57 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
58 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
59 | "dependencies": {
60 | "@jridgewell/set-array": "^1.2.1",
61 | "@jridgewell/sourcemap-codec": "^1.4.10",
62 | "@jridgewell/trace-mapping": "^0.3.24"
63 | },
64 | "engines": {
65 | "node": ">=6.0.0"
66 | }
67 | },
68 | "node_modules/@jridgewell/resolve-uri": {
69 | "version": "3.1.2",
70 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
71 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
72 | "engines": {
73 | "node": ">=6.0.0"
74 | }
75 | },
76 | "node_modules/@jridgewell/set-array": {
77 | "version": "1.2.1",
78 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
79 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
80 | "engines": {
81 | "node": ">=6.0.0"
82 | }
83 | },
84 | "node_modules/@jridgewell/sourcemap-codec": {
85 | "version": "1.5.0",
86 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
87 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
88 | },
89 | "node_modules/@jridgewell/trace-mapping": {
90 | "version": "0.3.25",
91 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
92 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
93 | "dependencies": {
94 | "@jridgewell/resolve-uri": "^3.1.0",
95 | "@jridgewell/sourcemap-codec": "^1.4.14"
96 | }
97 | },
98 | "node_modules/@next/env": {
99 | "version": "14.2.17",
100 | "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.17.tgz",
101 | "integrity": "sha512-MCgO7VHxXo8sYR/0z+sk9fGyJJU636JyRmkjc7ZJY8Hurl8df35qG5hoAh5KMs75FLjhlEo9bb2LGe89Y/scDA=="
102 | },
103 | "node_modules/@next/swc-darwin-arm64": {
104 | "version": "14.2.17",
105 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.17.tgz",
106 | "integrity": "sha512-WiOf5nElPknrhRMTipXYTJcUz7+8IAjOYw3vXzj3BYRcVY0hRHKWgTgQ5439EvzQyHEko77XK+yN9x9OJ0oOog==",
107 | "cpu": [
108 | "arm64"
109 | ],
110 | "optional": true,
111 | "os": [
112 | "darwin"
113 | ],
114 | "engines": {
115 | "node": ">= 10"
116 | }
117 | },
118 | "node_modules/@next/swc-darwin-x64": {
119 | "version": "14.2.17",
120 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.17.tgz",
121 | "integrity": "sha512-29y425wYnL17cvtxrDQWC3CkXe/oRrdt8ie61S03VrpwpPRI0XsnTvtKO06XCisK4alaMnZlf8riwZIbJTaSHQ==",
122 | "cpu": [
123 | "x64"
124 | ],
125 | "optional": true,
126 | "os": [
127 | "darwin"
128 | ],
129 | "engines": {
130 | "node": ">= 10"
131 | }
132 | },
133 | "node_modules/@next/swc-linux-arm64-gnu": {
134 | "version": "14.2.17",
135 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.17.tgz",
136 | "integrity": "sha512-SSHLZls3ZwNEHsc+d0ynKS+7Af0Nr8+KTUBAy9pm6xz9SHkJ/TeuEg6W3cbbcMSh6j4ITvrjv3Oi8n27VR+IPw==",
137 | "cpu": [
138 | "arm64"
139 | ],
140 | "optional": true,
141 | "os": [
142 | "linux"
143 | ],
144 | "engines": {
145 | "node": ">= 10"
146 | }
147 | },
148 | "node_modules/@next/swc-linux-arm64-musl": {
149 | "version": "14.2.17",
150 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.17.tgz",
151 | "integrity": "sha512-VFge37us5LNPatB4F7iYeuGs9Dprqe4ZkW7lOEJM91r+Wf8EIdViWHLpIwfdDXinvCdLl6b4VyLpEBwpkctJHA==",
152 | "cpu": [
153 | "arm64"
154 | ],
155 | "optional": true,
156 | "os": [
157 | "linux"
158 | ],
159 | "engines": {
160 | "node": ">= 10"
161 | }
162 | },
163 | "node_modules/@next/swc-linux-x64-gnu": {
164 | "version": "14.2.17",
165 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.17.tgz",
166 | "integrity": "sha512-aaQlpxUVb9RZ41adlTYVQ3xvYEfBPUC8+6rDgmQ/0l7SvK8S1YNJzPmDPX6a4t0jLtIoNk7j+nroS/pB4nx7vQ==",
167 | "cpu": [
168 | "x64"
169 | ],
170 | "optional": true,
171 | "os": [
172 | "linux"
173 | ],
174 | "engines": {
175 | "node": ">= 10"
176 | }
177 | },
178 | "node_modules/@next/swc-linux-x64-musl": {
179 | "version": "14.2.17",
180 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.17.tgz",
181 | "integrity": "sha512-HSyEiFaEY3ay5iATDqEup5WAfrhMATNJm8dYx3ZxL+e9eKv10XKZCwtZByDoLST7CyBmyDz+OFJL1wigyXeaoA==",
182 | "cpu": [
183 | "x64"
184 | ],
185 | "optional": true,
186 | "os": [
187 | "linux"
188 | ],
189 | "engines": {
190 | "node": ">= 10"
191 | }
192 | },
193 | "node_modules/@next/swc-win32-arm64-msvc": {
194 | "version": "14.2.17",
195 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.17.tgz",
196 | "integrity": "sha512-h5qM9Btqv87eYH8ArrnLoAHLyi79oPTP2vlGNSg4CDvUiXgi7l0+5KuEGp5pJoMhjuv9ChRdm7mRlUUACeBt4w==",
197 | "cpu": [
198 | "arm64"
199 | ],
200 | "optional": true,
201 | "os": [
202 | "win32"
203 | ],
204 | "engines": {
205 | "node": ">= 10"
206 | }
207 | },
208 | "node_modules/@next/swc-win32-ia32-msvc": {
209 | "version": "14.2.17",
210 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.17.tgz",
211 | "integrity": "sha512-BD/G++GKSLexQjdyoEUgyo5nClU7er5rK0sE+HlEqnldJSm96CIr/+YOTT063LVTT/dUOeQsNgp5DXr86/K7/A==",
212 | "cpu": [
213 | "ia32"
214 | ],
215 | "optional": true,
216 | "os": [
217 | "win32"
218 | ],
219 | "engines": {
220 | "node": ">= 10"
221 | }
222 | },
223 | "node_modules/@next/swc-win32-x64-msvc": {
224 | "version": "14.2.17",
225 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.17.tgz",
226 | "integrity": "sha512-vkQfN1+4V4KqDibkW2q0sJ6CxQuXq5l2ma3z0BRcfIqkAMZiiW67T9yCpwqJKP68QghBtPEFjPAlaqe38O6frw==",
227 | "cpu": [
228 | "x64"
229 | ],
230 | "optional": true,
231 | "os": [
232 | "win32"
233 | ],
234 | "engines": {
235 | "node": ">= 10"
236 | }
237 | },
238 | "node_modules/@nodelib/fs.scandir": {
239 | "version": "2.1.5",
240 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
241 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
242 | "dependencies": {
243 | "@nodelib/fs.stat": "2.0.5",
244 | "run-parallel": "^1.1.9"
245 | },
246 | "engines": {
247 | "node": ">= 8"
248 | }
249 | },
250 | "node_modules/@nodelib/fs.stat": {
251 | "version": "2.0.5",
252 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
253 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
254 | "engines": {
255 | "node": ">= 8"
256 | }
257 | },
258 | "node_modules/@nodelib/fs.walk": {
259 | "version": "1.2.8",
260 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
261 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
262 | "dependencies": {
263 | "@nodelib/fs.scandir": "2.1.5",
264 | "fastq": "^1.6.0"
265 | },
266 | "engines": {
267 | "node": ">= 8"
268 | }
269 | },
270 | "node_modules/@pkgjs/parseargs": {
271 | "version": "0.11.0",
272 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
273 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
274 | "optional": true,
275 | "engines": {
276 | "node": ">=14"
277 | }
278 | },
279 | "node_modules/@swc/counter": {
280 | "version": "0.1.3",
281 | "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
282 | "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
283 | },
284 | "node_modules/@swc/helpers": {
285 | "version": "0.5.5",
286 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
287 | "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
288 | "dependencies": {
289 | "@swc/counter": "^0.1.3",
290 | "tslib": "^2.4.0"
291 | }
292 | },
293 | "node_modules/@tailwindcss/typography": {
294 | "version": "0.5.16",
295 | "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz",
296 | "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==",
297 | "dependencies": {
298 | "lodash.castarray": "^4.4.0",
299 | "lodash.isplainobject": "^4.0.6",
300 | "lodash.merge": "^4.6.2",
301 | "postcss-selector-parser": "6.0.10"
302 | },
303 | "peerDependencies": {
304 | "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
305 | }
306 | },
307 | "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
308 | "version": "6.0.10",
309 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
310 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
311 | "dependencies": {
312 | "cssesc": "^3.0.0",
313 | "util-deprecate": "^1.0.2"
314 | },
315 | "engines": {
316 | "node": ">=4"
317 | }
318 | },
319 | "node_modules/@types/node": {
320 | "version": "20.17.19",
321 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.19.tgz",
322 | "integrity": "sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==",
323 | "dev": true,
324 | "dependencies": {
325 | "undici-types": "~6.19.2"
326 | }
327 | },
328 | "node_modules/@types/prop-types": {
329 | "version": "15.7.14",
330 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
331 | "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==",
332 | "dev": true
333 | },
334 | "node_modules/@types/react": {
335 | "version": "18.3.18",
336 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz",
337 | "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==",
338 | "dev": true,
339 | "dependencies": {
340 | "@types/prop-types": "*",
341 | "csstype": "^3.0.2"
342 | }
343 | },
344 | "node_modules/@types/react-dom": {
345 | "version": "18.3.5",
346 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz",
347 | "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==",
348 | "dev": true,
349 | "peerDependencies": {
350 | "@types/react": "^18.0.0"
351 | }
352 | },
353 | "node_modules/@vercel/analytics": {
354 | "version": "1.5.0",
355 | "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.5.0.tgz",
356 | "integrity": "sha512-MYsBzfPki4gthY5HnYN7jgInhAZ7Ac1cYDoRWFomwGHWEX7odTEzbtg9kf/QSo7XEsEAqlQugA6gJ2WS2DEa3g==",
357 | "peerDependencies": {
358 | "@remix-run/react": "^2",
359 | "@sveltejs/kit": "^1 || ^2",
360 | "next": ">= 13",
361 | "react": "^18 || ^19 || ^19.0.0-rc",
362 | "svelte": ">= 4",
363 | "vue": "^3",
364 | "vue-router": "^4"
365 | },
366 | "peerDependenciesMeta": {
367 | "@remix-run/react": {
368 | "optional": true
369 | },
370 | "@sveltejs/kit": {
371 | "optional": true
372 | },
373 | "next": {
374 | "optional": true
375 | },
376 | "react": {
377 | "optional": true
378 | },
379 | "svelte": {
380 | "optional": true
381 | },
382 | "vue": {
383 | "optional": true
384 | },
385 | "vue-router": {
386 | "optional": true
387 | }
388 | }
389 | },
390 | "node_modules/ansi-regex": {
391 | "version": "6.1.0",
392 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
393 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
394 | "engines": {
395 | "node": ">=12"
396 | },
397 | "funding": {
398 | "url": "https://github.com/chalk/ansi-regex?sponsor=1"
399 | }
400 | },
401 | "node_modules/ansi-styles": {
402 | "version": "6.2.1",
403 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
404 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
405 | "engines": {
406 | "node": ">=12"
407 | },
408 | "funding": {
409 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
410 | }
411 | },
412 | "node_modules/any-promise": {
413 | "version": "1.3.0",
414 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
415 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
416 | },
417 | "node_modules/anymatch": {
418 | "version": "3.1.3",
419 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
420 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
421 | "dependencies": {
422 | "normalize-path": "^3.0.0",
423 | "picomatch": "^2.0.4"
424 | },
425 | "engines": {
426 | "node": ">= 8"
427 | }
428 | },
429 | "node_modules/arg": {
430 | "version": "5.0.2",
431 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
432 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
433 | },
434 | "node_modules/balanced-match": {
435 | "version": "1.0.2",
436 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
437 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
438 | },
439 | "node_modules/binary-extensions": {
440 | "version": "2.3.0",
441 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
442 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
443 | "engines": {
444 | "node": ">=8"
445 | },
446 | "funding": {
447 | "url": "https://github.com/sponsors/sindresorhus"
448 | }
449 | },
450 | "node_modules/brace-expansion": {
451 | "version": "2.0.1",
452 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
453 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
454 | "dependencies": {
455 | "balanced-match": "^1.0.0"
456 | }
457 | },
458 | "node_modules/braces": {
459 | "version": "3.0.3",
460 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
461 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
462 | "dependencies": {
463 | "fill-range": "^7.1.1"
464 | },
465 | "engines": {
466 | "node": ">=8"
467 | }
468 | },
469 | "node_modules/busboy": {
470 | "version": "1.6.0",
471 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
472 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
473 | "dependencies": {
474 | "streamsearch": "^1.1.0"
475 | },
476 | "engines": {
477 | "node": ">=10.16.0"
478 | }
479 | },
480 | "node_modules/camelcase-css": {
481 | "version": "2.0.1",
482 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
483 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
484 | "engines": {
485 | "node": ">= 6"
486 | }
487 | },
488 | "node_modules/caniuse-lite": {
489 | "version": "1.0.30001700",
490 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz",
491 | "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==",
492 | "funding": [
493 | {
494 | "type": "opencollective",
495 | "url": "https://opencollective.com/browserslist"
496 | },
497 | {
498 | "type": "tidelift",
499 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
500 | },
501 | {
502 | "type": "github",
503 | "url": "https://github.com/sponsors/ai"
504 | }
505 | ]
506 | },
507 | "node_modules/chokidar": {
508 | "version": "3.6.0",
509 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
510 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
511 | "dependencies": {
512 | "anymatch": "~3.1.2",
513 | "braces": "~3.0.2",
514 | "glob-parent": "~5.1.2",
515 | "is-binary-path": "~2.1.0",
516 | "is-glob": "~4.0.1",
517 | "normalize-path": "~3.0.0",
518 | "readdirp": "~3.6.0"
519 | },
520 | "engines": {
521 | "node": ">= 8.10.0"
522 | },
523 | "funding": {
524 | "url": "https://paulmillr.com/funding/"
525 | },
526 | "optionalDependencies": {
527 | "fsevents": "~2.3.2"
528 | }
529 | },
530 | "node_modules/chokidar/node_modules/glob-parent": {
531 | "version": "5.1.2",
532 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
533 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
534 | "dependencies": {
535 | "is-glob": "^4.0.1"
536 | },
537 | "engines": {
538 | "node": ">= 6"
539 | }
540 | },
541 | "node_modules/client-only": {
542 | "version": "0.0.1",
543 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
544 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
545 | },
546 | "node_modules/color-convert": {
547 | "version": "2.0.1",
548 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
549 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
550 | "dependencies": {
551 | "color-name": "~1.1.4"
552 | },
553 | "engines": {
554 | "node": ">=7.0.0"
555 | }
556 | },
557 | "node_modules/color-name": {
558 | "version": "1.1.4",
559 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
560 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
561 | },
562 | "node_modules/commander": {
563 | "version": "4.1.1",
564 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
565 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
566 | "engines": {
567 | "node": ">= 6"
568 | }
569 | },
570 | "node_modules/cross-fetch": {
571 | "version": "4.1.0",
572 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz",
573 | "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==",
574 | "dependencies": {
575 | "node-fetch": "^2.7.0"
576 | }
577 | },
578 | "node_modules/cross-spawn": {
579 | "version": "7.0.6",
580 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
581 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
582 | "dependencies": {
583 | "path-key": "^3.1.0",
584 | "shebang-command": "^2.0.0",
585 | "which": "^2.0.1"
586 | },
587 | "engines": {
588 | "node": ">= 8"
589 | }
590 | },
591 | "node_modules/cssesc": {
592 | "version": "3.0.0",
593 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
594 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
595 | "bin": {
596 | "cssesc": "bin/cssesc"
597 | },
598 | "engines": {
599 | "node": ">=4"
600 | }
601 | },
602 | "node_modules/csstype": {
603 | "version": "3.1.3",
604 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
605 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
606 | "dev": true
607 | },
608 | "node_modules/didyoumean": {
609 | "version": "1.2.2",
610 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
611 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
612 | },
613 | "node_modules/dlv": {
614 | "version": "1.1.3",
615 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
616 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
617 | },
618 | "node_modules/dotenv": {
619 | "version": "16.4.7",
620 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
621 | "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
622 | "engines": {
623 | "node": ">=12"
624 | },
625 | "funding": {
626 | "url": "https://dotenvx.com"
627 | }
628 | },
629 | "node_modules/eastasianwidth": {
630 | "version": "0.2.0",
631 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
632 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
633 | },
634 | "node_modules/emoji-regex": {
635 | "version": "9.2.2",
636 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
637 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
638 | },
639 | "node_modules/exa-js": {
640 | "version": "1.4.10",
641 | "resolved": "https://registry.npmjs.org/exa-js/-/exa-js-1.4.10.tgz",
642 | "integrity": "sha512-rffYWPU568gOiYmsHW3L5J6atoNfLJTrtAk/DAKyPuGtdDXrE9fsSfltP1X1pNVtLTsz8DIyhUHOXErueNLJrQ==",
643 | "dependencies": {
644 | "cross-fetch": "^4.0.0",
645 | "dotenv": "^16.4.7"
646 | }
647 | },
648 | "node_modules/fast-glob": {
649 | "version": "3.3.3",
650 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
651 | "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
652 | "dependencies": {
653 | "@nodelib/fs.stat": "^2.0.2",
654 | "@nodelib/fs.walk": "^1.2.3",
655 | "glob-parent": "^5.1.2",
656 | "merge2": "^1.3.0",
657 | "micromatch": "^4.0.8"
658 | },
659 | "engines": {
660 | "node": ">=8.6.0"
661 | }
662 | },
663 | "node_modules/fast-glob/node_modules/glob-parent": {
664 | "version": "5.1.2",
665 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
666 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
667 | "dependencies": {
668 | "is-glob": "^4.0.1"
669 | },
670 | "engines": {
671 | "node": ">= 6"
672 | }
673 | },
674 | "node_modules/fastq": {
675 | "version": "1.19.0",
676 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz",
677 | "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==",
678 | "dependencies": {
679 | "reusify": "^1.0.4"
680 | }
681 | },
682 | "node_modules/fill-range": {
683 | "version": "7.1.1",
684 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
685 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
686 | "dependencies": {
687 | "to-regex-range": "^5.0.1"
688 | },
689 | "engines": {
690 | "node": ">=8"
691 | }
692 | },
693 | "node_modules/foreground-child": {
694 | "version": "3.3.0",
695 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
696 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
697 | "dependencies": {
698 | "cross-spawn": "^7.0.0",
699 | "signal-exit": "^4.0.1"
700 | },
701 | "engines": {
702 | "node": ">=14"
703 | },
704 | "funding": {
705 | "url": "https://github.com/sponsors/isaacs"
706 | }
707 | },
708 | "node_modules/fsevents": {
709 | "version": "2.3.3",
710 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
711 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
712 | "hasInstallScript": true,
713 | "optional": true,
714 | "os": [
715 | "darwin"
716 | ],
717 | "engines": {
718 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
719 | }
720 | },
721 | "node_modules/function-bind": {
722 | "version": "1.1.2",
723 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
724 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
725 | "funding": {
726 | "url": "https://github.com/sponsors/ljharb"
727 | }
728 | },
729 | "node_modules/glob": {
730 | "version": "10.4.5",
731 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
732 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
733 | "dependencies": {
734 | "foreground-child": "^3.1.0",
735 | "jackspeak": "^3.1.2",
736 | "minimatch": "^9.0.4",
737 | "minipass": "^7.1.2",
738 | "package-json-from-dist": "^1.0.0",
739 | "path-scurry": "^1.11.1"
740 | },
741 | "bin": {
742 | "glob": "dist/esm/bin.mjs"
743 | },
744 | "funding": {
745 | "url": "https://github.com/sponsors/isaacs"
746 | }
747 | },
748 | "node_modules/glob-parent": {
749 | "version": "6.0.2",
750 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
751 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
752 | "dependencies": {
753 | "is-glob": "^4.0.3"
754 | },
755 | "engines": {
756 | "node": ">=10.13.0"
757 | }
758 | },
759 | "node_modules/graceful-fs": {
760 | "version": "4.2.11",
761 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
762 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
763 | },
764 | "node_modules/hasown": {
765 | "version": "2.0.2",
766 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
767 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
768 | "dependencies": {
769 | "function-bind": "^1.1.2"
770 | },
771 | "engines": {
772 | "node": ">= 0.4"
773 | }
774 | },
775 | "node_modules/is-binary-path": {
776 | "version": "2.1.0",
777 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
778 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
779 | "dependencies": {
780 | "binary-extensions": "^2.0.0"
781 | },
782 | "engines": {
783 | "node": ">=8"
784 | }
785 | },
786 | "node_modules/is-core-module": {
787 | "version": "2.16.1",
788 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
789 | "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
790 | "dependencies": {
791 | "hasown": "^2.0.2"
792 | },
793 | "engines": {
794 | "node": ">= 0.4"
795 | },
796 | "funding": {
797 | "url": "https://github.com/sponsors/ljharb"
798 | }
799 | },
800 | "node_modules/is-extglob": {
801 | "version": "2.1.1",
802 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
803 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
804 | "engines": {
805 | "node": ">=0.10.0"
806 | }
807 | },
808 | "node_modules/is-fullwidth-code-point": {
809 | "version": "3.0.0",
810 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
811 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
812 | "engines": {
813 | "node": ">=8"
814 | }
815 | },
816 | "node_modules/is-glob": {
817 | "version": "4.0.3",
818 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
819 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
820 | "dependencies": {
821 | "is-extglob": "^2.1.1"
822 | },
823 | "engines": {
824 | "node": ">=0.10.0"
825 | }
826 | },
827 | "node_modules/is-number": {
828 | "version": "7.0.0",
829 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
830 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
831 | "engines": {
832 | "node": ">=0.12.0"
833 | }
834 | },
835 | "node_modules/isexe": {
836 | "version": "2.0.0",
837 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
838 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
839 | },
840 | "node_modules/jackspeak": {
841 | "version": "3.4.3",
842 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
843 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
844 | "dependencies": {
845 | "@isaacs/cliui": "^8.0.2"
846 | },
847 | "funding": {
848 | "url": "https://github.com/sponsors/isaacs"
849 | },
850 | "optionalDependencies": {
851 | "@pkgjs/parseargs": "^0.11.0"
852 | }
853 | },
854 | "node_modules/jiti": {
855 | "version": "1.21.7",
856 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
857 | "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
858 | "bin": {
859 | "jiti": "bin/jiti.js"
860 | }
861 | },
862 | "node_modules/js-tokens": {
863 | "version": "4.0.0",
864 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
865 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
866 | },
867 | "node_modules/lilconfig": {
868 | "version": "3.1.3",
869 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
870 | "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
871 | "engines": {
872 | "node": ">=14"
873 | },
874 | "funding": {
875 | "url": "https://github.com/sponsors/antonk52"
876 | }
877 | },
878 | "node_modules/lines-and-columns": {
879 | "version": "1.2.4",
880 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
881 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
882 | },
883 | "node_modules/lodash.castarray": {
884 | "version": "4.4.0",
885 | "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
886 | "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q=="
887 | },
888 | "node_modules/lodash.isplainobject": {
889 | "version": "4.0.6",
890 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
891 | "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
892 | },
893 | "node_modules/lodash.merge": {
894 | "version": "4.6.2",
895 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
896 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
897 | },
898 | "node_modules/loose-envify": {
899 | "version": "1.4.0",
900 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
901 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
902 | "dependencies": {
903 | "js-tokens": "^3.0.0 || ^4.0.0"
904 | },
905 | "bin": {
906 | "loose-envify": "cli.js"
907 | }
908 | },
909 | "node_modules/lru-cache": {
910 | "version": "10.4.3",
911 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
912 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
913 | },
914 | "node_modules/merge2": {
915 | "version": "1.4.1",
916 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
917 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
918 | "engines": {
919 | "node": ">= 8"
920 | }
921 | },
922 | "node_modules/micromatch": {
923 | "version": "4.0.8",
924 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
925 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
926 | "dependencies": {
927 | "braces": "^3.0.3",
928 | "picomatch": "^2.3.1"
929 | },
930 | "engines": {
931 | "node": ">=8.6"
932 | }
933 | },
934 | "node_modules/minimatch": {
935 | "version": "9.0.5",
936 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
937 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
938 | "dependencies": {
939 | "brace-expansion": "^2.0.1"
940 | },
941 | "engines": {
942 | "node": ">=16 || 14 >=14.17"
943 | },
944 | "funding": {
945 | "url": "https://github.com/sponsors/isaacs"
946 | }
947 | },
948 | "node_modules/minipass": {
949 | "version": "7.1.2",
950 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
951 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
952 | "engines": {
953 | "node": ">=16 || 14 >=14.17"
954 | }
955 | },
956 | "node_modules/mz": {
957 | "version": "2.7.0",
958 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
959 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
960 | "dependencies": {
961 | "any-promise": "^1.0.0",
962 | "object-assign": "^4.0.1",
963 | "thenify-all": "^1.0.0"
964 | }
965 | },
966 | "node_modules/nanoid": {
967 | "version": "3.3.8",
968 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
969 | "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
970 | "funding": [
971 | {
972 | "type": "github",
973 | "url": "https://github.com/sponsors/ai"
974 | }
975 | ],
976 | "bin": {
977 | "nanoid": "bin/nanoid.cjs"
978 | },
979 | "engines": {
980 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
981 | }
982 | },
983 | "node_modules/next": {
984 | "version": "14.2.17",
985 | "resolved": "https://registry.npmjs.org/next/-/next-14.2.17.tgz",
986 | "integrity": "sha512-hNo/Zy701DDO3nzKkPmsLRlDfNCtb1OJxFUvjGEl04u7SFa3zwC6hqsOUzMajcaEOEV8ey1GjvByvrg0Qr5AiQ==",
987 | "dependencies": {
988 | "@next/env": "14.2.17",
989 | "@swc/helpers": "0.5.5",
990 | "busboy": "1.6.0",
991 | "caniuse-lite": "^1.0.30001579",
992 | "graceful-fs": "^4.2.11",
993 | "postcss": "8.4.31",
994 | "styled-jsx": "5.1.1"
995 | },
996 | "bin": {
997 | "next": "dist/bin/next"
998 | },
999 | "engines": {
1000 | "node": ">=18.17.0"
1001 | },
1002 | "optionalDependencies": {
1003 | "@next/swc-darwin-arm64": "14.2.17",
1004 | "@next/swc-darwin-x64": "14.2.17",
1005 | "@next/swc-linux-arm64-gnu": "14.2.17",
1006 | "@next/swc-linux-arm64-musl": "14.2.17",
1007 | "@next/swc-linux-x64-gnu": "14.2.17",
1008 | "@next/swc-linux-x64-musl": "14.2.17",
1009 | "@next/swc-win32-arm64-msvc": "14.2.17",
1010 | "@next/swc-win32-ia32-msvc": "14.2.17",
1011 | "@next/swc-win32-x64-msvc": "14.2.17"
1012 | },
1013 | "peerDependencies": {
1014 | "@opentelemetry/api": "^1.1.0",
1015 | "@playwright/test": "^1.41.2",
1016 | "react": "^18.2.0",
1017 | "react-dom": "^18.2.0",
1018 | "sass": "^1.3.0"
1019 | },
1020 | "peerDependenciesMeta": {
1021 | "@opentelemetry/api": {
1022 | "optional": true
1023 | },
1024 | "@playwright/test": {
1025 | "optional": true
1026 | },
1027 | "sass": {
1028 | "optional": true
1029 | }
1030 | }
1031 | },
1032 | "node_modules/next/node_modules/postcss": {
1033 | "version": "8.4.31",
1034 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
1035 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
1036 | "funding": [
1037 | {
1038 | "type": "opencollective",
1039 | "url": "https://opencollective.com/postcss/"
1040 | },
1041 | {
1042 | "type": "tidelift",
1043 | "url": "https://tidelift.com/funding/github/npm/postcss"
1044 | },
1045 | {
1046 | "type": "github",
1047 | "url": "https://github.com/sponsors/ai"
1048 | }
1049 | ],
1050 | "dependencies": {
1051 | "nanoid": "^3.3.6",
1052 | "picocolors": "^1.0.0",
1053 | "source-map-js": "^1.0.2"
1054 | },
1055 | "engines": {
1056 | "node": "^10 || ^12 || >=14"
1057 | }
1058 | },
1059 | "node_modules/node-fetch": {
1060 | "version": "2.7.0",
1061 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
1062 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
1063 | "dependencies": {
1064 | "whatwg-url": "^5.0.0"
1065 | },
1066 | "engines": {
1067 | "node": "4.x || >=6.0.0"
1068 | },
1069 | "peerDependencies": {
1070 | "encoding": "^0.1.0"
1071 | },
1072 | "peerDependenciesMeta": {
1073 | "encoding": {
1074 | "optional": true
1075 | }
1076 | }
1077 | },
1078 | "node_modules/normalize-path": {
1079 | "version": "3.0.0",
1080 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1081 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1082 | "engines": {
1083 | "node": ">=0.10.0"
1084 | }
1085 | },
1086 | "node_modules/object-assign": {
1087 | "version": "4.1.1",
1088 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1089 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1090 | "engines": {
1091 | "node": ">=0.10.0"
1092 | }
1093 | },
1094 | "node_modules/object-hash": {
1095 | "version": "3.0.0",
1096 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
1097 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
1098 | "engines": {
1099 | "node": ">= 6"
1100 | }
1101 | },
1102 | "node_modules/package-json-from-dist": {
1103 | "version": "1.0.1",
1104 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
1105 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
1106 | },
1107 | "node_modules/path-key": {
1108 | "version": "3.1.1",
1109 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1110 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1111 | "engines": {
1112 | "node": ">=8"
1113 | }
1114 | },
1115 | "node_modules/path-parse": {
1116 | "version": "1.0.7",
1117 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1118 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
1119 | },
1120 | "node_modules/path-scurry": {
1121 | "version": "1.11.1",
1122 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
1123 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
1124 | "dependencies": {
1125 | "lru-cache": "^10.2.0",
1126 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
1127 | },
1128 | "engines": {
1129 | "node": ">=16 || 14 >=14.18"
1130 | },
1131 | "funding": {
1132 | "url": "https://github.com/sponsors/isaacs"
1133 | }
1134 | },
1135 | "node_modules/picocolors": {
1136 | "version": "1.1.1",
1137 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1138 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
1139 | },
1140 | "node_modules/picomatch": {
1141 | "version": "2.3.1",
1142 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1143 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1144 | "engines": {
1145 | "node": ">=8.6"
1146 | },
1147 | "funding": {
1148 | "url": "https://github.com/sponsors/jonschlinkert"
1149 | }
1150 | },
1151 | "node_modules/pify": {
1152 | "version": "2.3.0",
1153 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1154 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
1155 | "engines": {
1156 | "node": ">=0.10.0"
1157 | }
1158 | },
1159 | "node_modules/pirates": {
1160 | "version": "4.0.6",
1161 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
1162 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
1163 | "engines": {
1164 | "node": ">= 6"
1165 | }
1166 | },
1167 | "node_modules/postcss": {
1168 | "version": "8.5.2",
1169 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz",
1170 | "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==",
1171 | "funding": [
1172 | {
1173 | "type": "opencollective",
1174 | "url": "https://opencollective.com/postcss/"
1175 | },
1176 | {
1177 | "type": "tidelift",
1178 | "url": "https://tidelift.com/funding/github/npm/postcss"
1179 | },
1180 | {
1181 | "type": "github",
1182 | "url": "https://github.com/sponsors/ai"
1183 | }
1184 | ],
1185 | "dependencies": {
1186 | "nanoid": "^3.3.8",
1187 | "picocolors": "^1.1.1",
1188 | "source-map-js": "^1.2.1"
1189 | },
1190 | "engines": {
1191 | "node": "^10 || ^12 || >=14"
1192 | }
1193 | },
1194 | "node_modules/postcss-import": {
1195 | "version": "15.1.0",
1196 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
1197 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
1198 | "dependencies": {
1199 | "postcss-value-parser": "^4.0.0",
1200 | "read-cache": "^1.0.0",
1201 | "resolve": "^1.1.7"
1202 | },
1203 | "engines": {
1204 | "node": ">=14.0.0"
1205 | },
1206 | "peerDependencies": {
1207 | "postcss": "^8.0.0"
1208 | }
1209 | },
1210 | "node_modules/postcss-js": {
1211 | "version": "4.0.1",
1212 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
1213 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
1214 | "dependencies": {
1215 | "camelcase-css": "^2.0.1"
1216 | },
1217 | "engines": {
1218 | "node": "^12 || ^14 || >= 16"
1219 | },
1220 | "funding": {
1221 | "type": "opencollective",
1222 | "url": "https://opencollective.com/postcss/"
1223 | },
1224 | "peerDependencies": {
1225 | "postcss": "^8.4.21"
1226 | }
1227 | },
1228 | "node_modules/postcss-load-config": {
1229 | "version": "4.0.2",
1230 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
1231 | "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
1232 | "funding": [
1233 | {
1234 | "type": "opencollective",
1235 | "url": "https://opencollective.com/postcss/"
1236 | },
1237 | {
1238 | "type": "github",
1239 | "url": "https://github.com/sponsors/ai"
1240 | }
1241 | ],
1242 | "dependencies": {
1243 | "lilconfig": "^3.0.0",
1244 | "yaml": "^2.3.4"
1245 | },
1246 | "engines": {
1247 | "node": ">= 14"
1248 | },
1249 | "peerDependencies": {
1250 | "postcss": ">=8.0.9",
1251 | "ts-node": ">=9.0.0"
1252 | },
1253 | "peerDependenciesMeta": {
1254 | "postcss": {
1255 | "optional": true
1256 | },
1257 | "ts-node": {
1258 | "optional": true
1259 | }
1260 | }
1261 | },
1262 | "node_modules/postcss-nested": {
1263 | "version": "6.2.0",
1264 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
1265 | "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
1266 | "funding": [
1267 | {
1268 | "type": "opencollective",
1269 | "url": "https://opencollective.com/postcss/"
1270 | },
1271 | {
1272 | "type": "github",
1273 | "url": "https://github.com/sponsors/ai"
1274 | }
1275 | ],
1276 | "dependencies": {
1277 | "postcss-selector-parser": "^6.1.1"
1278 | },
1279 | "engines": {
1280 | "node": ">=12.0"
1281 | },
1282 | "peerDependencies": {
1283 | "postcss": "^8.2.14"
1284 | }
1285 | },
1286 | "node_modules/postcss-selector-parser": {
1287 | "version": "6.1.2",
1288 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
1289 | "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
1290 | "dependencies": {
1291 | "cssesc": "^3.0.0",
1292 | "util-deprecate": "^1.0.2"
1293 | },
1294 | "engines": {
1295 | "node": ">=4"
1296 | }
1297 | },
1298 | "node_modules/postcss-value-parser": {
1299 | "version": "4.2.0",
1300 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
1301 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
1302 | },
1303 | "node_modules/queue-microtask": {
1304 | "version": "1.2.3",
1305 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1306 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1307 | "funding": [
1308 | {
1309 | "type": "github",
1310 | "url": "https://github.com/sponsors/feross"
1311 | },
1312 | {
1313 | "type": "patreon",
1314 | "url": "https://www.patreon.com/feross"
1315 | },
1316 | {
1317 | "type": "consulting",
1318 | "url": "https://feross.org/support"
1319 | }
1320 | ]
1321 | },
1322 | "node_modules/react": {
1323 | "version": "18.3.1",
1324 | "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
1325 | "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
1326 | "dependencies": {
1327 | "loose-envify": "^1.1.0"
1328 | },
1329 | "engines": {
1330 | "node": ">=0.10.0"
1331 | }
1332 | },
1333 | "node_modules/react-dom": {
1334 | "version": "18.3.1",
1335 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
1336 | "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
1337 | "dependencies": {
1338 | "loose-envify": "^1.1.0",
1339 | "scheduler": "^0.23.2"
1340 | },
1341 | "peerDependencies": {
1342 | "react": "^18.3.1"
1343 | }
1344 | },
1345 | "node_modules/read-cache": {
1346 | "version": "1.0.0",
1347 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
1348 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
1349 | "dependencies": {
1350 | "pify": "^2.3.0"
1351 | }
1352 | },
1353 | "node_modules/readdirp": {
1354 | "version": "3.6.0",
1355 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1356 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1357 | "dependencies": {
1358 | "picomatch": "^2.2.1"
1359 | },
1360 | "engines": {
1361 | "node": ">=8.10.0"
1362 | }
1363 | },
1364 | "node_modules/resolve": {
1365 | "version": "1.22.10",
1366 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
1367 | "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
1368 | "dependencies": {
1369 | "is-core-module": "^2.16.0",
1370 | "path-parse": "^1.0.7",
1371 | "supports-preserve-symlinks-flag": "^1.0.0"
1372 | },
1373 | "bin": {
1374 | "resolve": "bin/resolve"
1375 | },
1376 | "engines": {
1377 | "node": ">= 0.4"
1378 | },
1379 | "funding": {
1380 | "url": "https://github.com/sponsors/ljharb"
1381 | }
1382 | },
1383 | "node_modules/reusify": {
1384 | "version": "1.0.4",
1385 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1386 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
1387 | "engines": {
1388 | "iojs": ">=1.0.0",
1389 | "node": ">=0.10.0"
1390 | }
1391 | },
1392 | "node_modules/run-parallel": {
1393 | "version": "1.2.0",
1394 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1395 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1396 | "funding": [
1397 | {
1398 | "type": "github",
1399 | "url": "https://github.com/sponsors/feross"
1400 | },
1401 | {
1402 | "type": "patreon",
1403 | "url": "https://www.patreon.com/feross"
1404 | },
1405 | {
1406 | "type": "consulting",
1407 | "url": "https://feross.org/support"
1408 | }
1409 | ],
1410 | "dependencies": {
1411 | "queue-microtask": "^1.2.2"
1412 | }
1413 | },
1414 | "node_modules/scheduler": {
1415 | "version": "0.23.2",
1416 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
1417 | "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
1418 | "dependencies": {
1419 | "loose-envify": "^1.1.0"
1420 | }
1421 | },
1422 | "node_modules/shebang-command": {
1423 | "version": "2.0.0",
1424 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1425 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1426 | "dependencies": {
1427 | "shebang-regex": "^3.0.0"
1428 | },
1429 | "engines": {
1430 | "node": ">=8"
1431 | }
1432 | },
1433 | "node_modules/shebang-regex": {
1434 | "version": "3.0.0",
1435 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1436 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1437 | "engines": {
1438 | "node": ">=8"
1439 | }
1440 | },
1441 | "node_modules/signal-exit": {
1442 | "version": "4.1.0",
1443 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
1444 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
1445 | "engines": {
1446 | "node": ">=14"
1447 | },
1448 | "funding": {
1449 | "url": "https://github.com/sponsors/isaacs"
1450 | }
1451 | },
1452 | "node_modules/source-map-js": {
1453 | "version": "1.2.1",
1454 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
1455 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
1456 | "engines": {
1457 | "node": ">=0.10.0"
1458 | }
1459 | },
1460 | "node_modules/streamsearch": {
1461 | "version": "1.1.0",
1462 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
1463 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
1464 | "engines": {
1465 | "node": ">=10.0.0"
1466 | }
1467 | },
1468 | "node_modules/string-width": {
1469 | "version": "5.1.2",
1470 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
1471 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
1472 | "dependencies": {
1473 | "eastasianwidth": "^0.2.0",
1474 | "emoji-regex": "^9.2.2",
1475 | "strip-ansi": "^7.0.1"
1476 | },
1477 | "engines": {
1478 | "node": ">=12"
1479 | },
1480 | "funding": {
1481 | "url": "https://github.com/sponsors/sindresorhus"
1482 | }
1483 | },
1484 | "node_modules/string-width-cjs": {
1485 | "name": "string-width",
1486 | "version": "4.2.3",
1487 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1488 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1489 | "dependencies": {
1490 | "emoji-regex": "^8.0.0",
1491 | "is-fullwidth-code-point": "^3.0.0",
1492 | "strip-ansi": "^6.0.1"
1493 | },
1494 | "engines": {
1495 | "node": ">=8"
1496 | }
1497 | },
1498 | "node_modules/string-width-cjs/node_modules/ansi-regex": {
1499 | "version": "5.0.1",
1500 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1501 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1502 | "engines": {
1503 | "node": ">=8"
1504 | }
1505 | },
1506 | "node_modules/string-width-cjs/node_modules/emoji-regex": {
1507 | "version": "8.0.0",
1508 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1509 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
1510 | },
1511 | "node_modules/string-width-cjs/node_modules/strip-ansi": {
1512 | "version": "6.0.1",
1513 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1514 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1515 | "dependencies": {
1516 | "ansi-regex": "^5.0.1"
1517 | },
1518 | "engines": {
1519 | "node": ">=8"
1520 | }
1521 | },
1522 | "node_modules/strip-ansi": {
1523 | "version": "7.1.0",
1524 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
1525 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
1526 | "dependencies": {
1527 | "ansi-regex": "^6.0.1"
1528 | },
1529 | "engines": {
1530 | "node": ">=12"
1531 | },
1532 | "funding": {
1533 | "url": "https://github.com/chalk/strip-ansi?sponsor=1"
1534 | }
1535 | },
1536 | "node_modules/strip-ansi-cjs": {
1537 | "name": "strip-ansi",
1538 | "version": "6.0.1",
1539 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1540 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1541 | "dependencies": {
1542 | "ansi-regex": "^5.0.1"
1543 | },
1544 | "engines": {
1545 | "node": ">=8"
1546 | }
1547 | },
1548 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
1549 | "version": "5.0.1",
1550 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1551 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1552 | "engines": {
1553 | "node": ">=8"
1554 | }
1555 | },
1556 | "node_modules/styled-jsx": {
1557 | "version": "5.1.1",
1558 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
1559 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
1560 | "dependencies": {
1561 | "client-only": "0.0.1"
1562 | },
1563 | "engines": {
1564 | "node": ">= 12.0.0"
1565 | },
1566 | "peerDependencies": {
1567 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
1568 | },
1569 | "peerDependenciesMeta": {
1570 | "@babel/core": {
1571 | "optional": true
1572 | },
1573 | "babel-plugin-macros": {
1574 | "optional": true
1575 | }
1576 | }
1577 | },
1578 | "node_modules/sucrase": {
1579 | "version": "3.35.0",
1580 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
1581 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
1582 | "dependencies": {
1583 | "@jridgewell/gen-mapping": "^0.3.2",
1584 | "commander": "^4.0.0",
1585 | "glob": "^10.3.10",
1586 | "lines-and-columns": "^1.1.6",
1587 | "mz": "^2.7.0",
1588 | "pirates": "^4.0.1",
1589 | "ts-interface-checker": "^0.1.9"
1590 | },
1591 | "bin": {
1592 | "sucrase": "bin/sucrase",
1593 | "sucrase-node": "bin/sucrase-node"
1594 | },
1595 | "engines": {
1596 | "node": ">=16 || 14 >=14.17"
1597 | }
1598 | },
1599 | "node_modules/supports-preserve-symlinks-flag": {
1600 | "version": "1.0.0",
1601 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1602 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1603 | "engines": {
1604 | "node": ">= 0.4"
1605 | },
1606 | "funding": {
1607 | "url": "https://github.com/sponsors/ljharb"
1608 | }
1609 | },
1610 | "node_modules/tailwindcss": {
1611 | "version": "3.4.17",
1612 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
1613 | "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
1614 | "dependencies": {
1615 | "@alloc/quick-lru": "^5.2.0",
1616 | "arg": "^5.0.2",
1617 | "chokidar": "^3.6.0",
1618 | "didyoumean": "^1.2.2",
1619 | "dlv": "^1.1.3",
1620 | "fast-glob": "^3.3.2",
1621 | "glob-parent": "^6.0.2",
1622 | "is-glob": "^4.0.3",
1623 | "jiti": "^1.21.6",
1624 | "lilconfig": "^3.1.3",
1625 | "micromatch": "^4.0.8",
1626 | "normalize-path": "^3.0.0",
1627 | "object-hash": "^3.0.0",
1628 | "picocolors": "^1.1.1",
1629 | "postcss": "^8.4.47",
1630 | "postcss-import": "^15.1.0",
1631 | "postcss-js": "^4.0.1",
1632 | "postcss-load-config": "^4.0.2",
1633 | "postcss-nested": "^6.2.0",
1634 | "postcss-selector-parser": "^6.1.2",
1635 | "resolve": "^1.22.8",
1636 | "sucrase": "^3.35.0"
1637 | },
1638 | "bin": {
1639 | "tailwind": "lib/cli.js",
1640 | "tailwindcss": "lib/cli.js"
1641 | },
1642 | "engines": {
1643 | "node": ">=14.0.0"
1644 | }
1645 | },
1646 | "node_modules/tailwindcss-animate": {
1647 | "version": "1.0.7",
1648 | "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
1649 | "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
1650 | "peerDependencies": {
1651 | "tailwindcss": ">=3.0.0 || insiders"
1652 | }
1653 | },
1654 | "node_modules/thenify": {
1655 | "version": "3.3.1",
1656 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
1657 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
1658 | "dependencies": {
1659 | "any-promise": "^1.0.0"
1660 | }
1661 | },
1662 | "node_modules/thenify-all": {
1663 | "version": "1.6.0",
1664 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
1665 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
1666 | "dependencies": {
1667 | "thenify": ">= 3.1.0 < 4"
1668 | },
1669 | "engines": {
1670 | "node": ">=0.8"
1671 | }
1672 | },
1673 | "node_modules/to-regex-range": {
1674 | "version": "5.0.1",
1675 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1676 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1677 | "dependencies": {
1678 | "is-number": "^7.0.0"
1679 | },
1680 | "engines": {
1681 | "node": ">=8.0"
1682 | }
1683 | },
1684 | "node_modules/tr46": {
1685 | "version": "0.0.3",
1686 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1687 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
1688 | },
1689 | "node_modules/ts-interface-checker": {
1690 | "version": "0.1.13",
1691 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
1692 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
1693 | },
1694 | "node_modules/tslib": {
1695 | "version": "2.8.1",
1696 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
1697 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
1698 | },
1699 | "node_modules/typescript": {
1700 | "version": "5.7.3",
1701 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
1702 | "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
1703 | "dev": true,
1704 | "bin": {
1705 | "tsc": "bin/tsc",
1706 | "tsserver": "bin/tsserver"
1707 | },
1708 | "engines": {
1709 | "node": ">=14.17"
1710 | }
1711 | },
1712 | "node_modules/undici-types": {
1713 | "version": "6.19.8",
1714 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
1715 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
1716 | "dev": true
1717 | },
1718 | "node_modules/util-deprecate": {
1719 | "version": "1.0.2",
1720 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1721 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
1722 | },
1723 | "node_modules/webidl-conversions": {
1724 | "version": "3.0.1",
1725 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1726 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
1727 | },
1728 | "node_modules/whatwg-url": {
1729 | "version": "5.0.0",
1730 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1731 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
1732 | "dependencies": {
1733 | "tr46": "~0.0.3",
1734 | "webidl-conversions": "^3.0.0"
1735 | }
1736 | },
1737 | "node_modules/which": {
1738 | "version": "2.0.2",
1739 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1740 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1741 | "dependencies": {
1742 | "isexe": "^2.0.0"
1743 | },
1744 | "bin": {
1745 | "node-which": "bin/node-which"
1746 | },
1747 | "engines": {
1748 | "node": ">= 8"
1749 | }
1750 | },
1751 | "node_modules/wrap-ansi": {
1752 | "version": "8.1.0",
1753 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
1754 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
1755 | "dependencies": {
1756 | "ansi-styles": "^6.1.0",
1757 | "string-width": "^5.0.1",
1758 | "strip-ansi": "^7.0.1"
1759 | },
1760 | "engines": {
1761 | "node": ">=12"
1762 | },
1763 | "funding": {
1764 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
1765 | }
1766 | },
1767 | "node_modules/wrap-ansi-cjs": {
1768 | "name": "wrap-ansi",
1769 | "version": "7.0.0",
1770 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
1771 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
1772 | "dependencies": {
1773 | "ansi-styles": "^4.0.0",
1774 | "string-width": "^4.1.0",
1775 | "strip-ansi": "^6.0.0"
1776 | },
1777 | "engines": {
1778 | "node": ">=10"
1779 | },
1780 | "funding": {
1781 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
1782 | }
1783 | },
1784 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
1785 | "version": "5.0.1",
1786 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1787 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1788 | "engines": {
1789 | "node": ">=8"
1790 | }
1791 | },
1792 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
1793 | "version": "4.3.0",
1794 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1795 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1796 | "dependencies": {
1797 | "color-convert": "^2.0.1"
1798 | },
1799 | "engines": {
1800 | "node": ">=8"
1801 | },
1802 | "funding": {
1803 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1804 | }
1805 | },
1806 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
1807 | "version": "8.0.0",
1808 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1809 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
1810 | },
1811 | "node_modules/wrap-ansi-cjs/node_modules/string-width": {
1812 | "version": "4.2.3",
1813 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1814 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1815 | "dependencies": {
1816 | "emoji-regex": "^8.0.0",
1817 | "is-fullwidth-code-point": "^3.0.0",
1818 | "strip-ansi": "^6.0.1"
1819 | },
1820 | "engines": {
1821 | "node": ">=8"
1822 | }
1823 | },
1824 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
1825 | "version": "6.0.1",
1826 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1827 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1828 | "dependencies": {
1829 | "ansi-regex": "^5.0.1"
1830 | },
1831 | "engines": {
1832 | "node": ">=8"
1833 | }
1834 | },
1835 | "node_modules/yaml": {
1836 | "version": "2.7.0",
1837 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
1838 | "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
1839 | "bin": {
1840 | "yaml": "bin.mjs"
1841 | },
1842 | "engines": {
1843 | "node": ">= 14"
1844 | }
1845 | }
1846 | }
1847 | }
1848 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "answer-chat-app",
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 | "@tailwindcss/typography": "^0.5.16",
13 | "@vercel/analytics": "^1.5.0",
14 | "exa-js": "^1.4.10",
15 | "next": "14.2.17",
16 | "react": "^18",
17 | "react-dom": "^18",
18 | "tailwindcss-animate": "^1.0.7"
19 | },
20 | "devDependencies": {
21 | "@types/node": "^20",
22 | "@types/react": "^18",
23 | "@types/react-dom": "^18",
24 | "postcss": "^8",
25 | "tailwindcss": "^3.4.1",
26 | "typescript": "^5"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------