├── src
├── __init__.py
├── rag.py
└── data_pipeline.py
├── tests
├── __init__.py
└── test_rag.py
├── frontend
├── .vite
│ └── deps_temp_bb8246a7
│ │ └── package.json
├── postcss.config.cjs
├── src
│ ├── main.tsx
│ ├── App.tsx
│ ├── index.css
│ └── components
│ │ └── GitHubChat.tsx
├── tailwind.config.js
├── tsconfig.node.json
├── vite.config.ts
├── index.html
├── tsconfig.json
├── package.json
└── pnpm-lock.yaml
├── pyproject.toml
├── .gitignore
├── config.py
├── README.md
├── app.py
└── api.py
/src/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tests/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/.vite/deps_temp_bb8246a7/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "module"
3 | }
4 |
--------------------------------------------------------------------------------
/frontend/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | const tailwindcss = require('tailwindcss');
2 | const autoprefixer = require('autoprefixer');
3 |
4 | module.exports = {
5 | plugins: [
6 | tailwindcss,
7 | autoprefixer,
8 | ],
9 | }
--------------------------------------------------------------------------------
/frontend/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 | import './index.css';
5 |
6 | ReactDOM.createRoot(document.getElementById('root')!).render(
7 |
8 |
9 |
10 | );
--------------------------------------------------------------------------------
/frontend/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | export default {
3 | content: [
4 | "./index.html",
5 | "./src/**/*.{js,ts,jsx,tsx}",
6 | ],
7 | theme: {
8 | extend: {},
9 | },
10 | plugins: [
11 | require('@tailwindcss/typography'),
12 | ],
13 | }
--------------------------------------------------------------------------------
/frontend/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true,
8 | "strict": true
9 | },
10 | "include": ["vite.config.ts"]
11 | }
--------------------------------------------------------------------------------
/frontend/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import react from '@vitejs/plugin-react';
3 | import path from 'path';
4 |
5 | export default defineConfig({
6 | plugins: [react()],
7 | resolve: {
8 | alias: {
9 | '@': path.resolve(__dirname, './src'),
10 | },
11 | },
12 | server: {
13 | port: 3000,
14 | },
15 | });
--------------------------------------------------------------------------------
/frontend/src/App.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Toaster } from 'react-hot-toast';
3 | import GitHubChat from './components/GitHubChat';
4 |
5 | const App: React.FC = () => {
6 | return (
7 |
8 |
9 |
10 |
11 | );
12 | };
13 |
14 | export default App;
--------------------------------------------------------------------------------
/frontend/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | :root {
6 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
7 | line-height: 1.5;
8 | font-weight: 400;
9 |
10 | font-synthesis: none;
11 | text-rendering: optimizeLegibility;
12 | -webkit-font-smoothing: antialiased;
13 | -moz-osx-font-smoothing: grayscale;
14 | }
--------------------------------------------------------------------------------
/frontend/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | GitHub Chat
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [tool.poetry]
2 | name = "github-chat"
3 | version = "0.1.0"
4 | description = ""
5 | authors = ["Li Yin "]
6 | readme = "README.md"
7 |
8 | [tool.poetry.dependencies]
9 | python = "^3.12"
10 |
11 | adalflow = { version = ">=1.0.0", extras = ["openai"] }
12 |
13 | faiss-cpu = "^1.9.0.post1"
14 | streamlit = "^1.31.1"
15 | fastapi = "^0.109.2"
16 | uvicorn = "^0.27.1"
17 |
18 |
19 | [build-system]
20 | requires = ["poetry-core"]
21 | build-backend = "poetry.core.masonry.api"
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .env
2 |
3 | # Streamlit secrets
4 | .streamlit/secrets.toml
5 | node_modules/
6 | # Python
7 | __pycache__/
8 | *.py[cod]
9 | *$py.class
10 | *.so
11 | .Python
12 | build/
13 | develop-eggs/
14 | dist/
15 | downloads/
16 | eggs/
17 | .eggs/
18 | lib/
19 | lib64/
20 | parts/
21 | sdist/
22 | var/
23 | wheels/
24 | *.egg-info/
25 | .installed.cfg
26 | *.egg
27 |
28 | # Virtual Environment
29 | .env
30 | .venv
31 | env/
32 | venv/
33 | ENV/
34 |
35 | # IDE
36 | .idea/
37 | .vscode/
38 | *.swp
39 | *.swo
40 |
41 | # OS
42 | .DS_Store
43 | Thumbs.db
44 | __pycache__/
45 |
46 | # ignore adalflow cache
47 | /adalflow
48 |
--------------------------------------------------------------------------------
/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "useDefineForClassFields": true,
5 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
6 | "module": "ESNext",
7 | "skipLibCheck": true,
8 | "moduleResolution": "bundler",
9 | "allowImportingTsExtensions": true,
10 | "resolveJsonModule": true,
11 | "isolatedModules": true,
12 | "noEmit": true,
13 | "jsx": "react-jsx",
14 | "strict": true,
15 | "noUnusedLocals": true,
16 | "noUnusedParameters": true,
17 | "noFallthroughCasesInSwitch": true,
18 | "baseUrl": ".",
19 | "paths": {
20 | "@/*": ["./src/*"]
21 | }
22 | },
23 | "include": ["src"],
24 | "references": [{ "path": "./tsconfig.node.json" }]
25 | }
--------------------------------------------------------------------------------
/config.py:
--------------------------------------------------------------------------------
1 | from adalflow import OpenAIClient
2 |
3 |
4 | configs = {
5 | "embedder": {
6 | "batch_size": 100,
7 | "model_client": OpenAIClient, # make sure to initialize the model client later
8 | "model_kwargs": {
9 | "model": "text-embedding-3-small",
10 | "dimensions": 256,
11 | "encoding_format": "float",
12 | },
13 | },
14 | "retriever": {
15 | "top_k": 20,
16 | },
17 | "generator": {
18 | "model_client": OpenAIClient,
19 | "model_kwargs": {
20 | "model": "gpt-4o-mini",
21 | "temperature": 0.3,
22 | "stream": False,
23 | },
24 | },
25 | "text_splitter": {
26 | "split_by": "word",
27 | "chunk_size": 400,
28 | "chunk_overlap": 100,
29 | },
30 | }
31 |
32 | DEFAULT_GITHUB_REPO = "https://github.com/SylphAI-Inc/AdalFlow"
33 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "github-chat",
3 | "version": "0.1.0",
4 | "private": true,
5 | "type": "module",
6 | "dependencies": {
7 | "@tailwindcss/typography": "^0.5.10",
8 | "@types/node": "^20.0.0",
9 | "@types/react": "^18.0.0",
10 | "@types/react-dom": "^18.0.0",
11 | "lucide-react": "^0.358.0",
12 | "react": "^18.2.0",
13 | "react-dom": "^18.2.0",
14 | "react-hot-toast": "^2.4.1",
15 | "react-markdown": "^9.0.1",
16 | "tailwindcss": "^3.4.0",
17 | "typescript": "^5.0.0"
18 | },
19 | "scripts": {
20 | "dev": "vite",
21 | "build": "tsc && vite build",
22 | "serve": "vite preview"
23 | },
24 | "devDependencies": {
25 | "@types/babel__generator": "^7.6.8",
26 | "@types/babel__template": "^7.4.4",
27 | "@types/babel__traverse": "^7.20.6",
28 | "@types/estree": "^1.0.6",
29 | "@types/prop-types": "^15.7.14",
30 | "@vitejs/plugin-react": "^4.2.0",
31 | "autoprefixer": "^10.4.17",
32 | "postcss": "^8.4.35",
33 | "vite": "^5.0.0"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/tests/test_rag.py:
--------------------------------------------------------------------------------
1 | import os
2 | from src.rag import RAG
3 | import adalflow as adal
4 | from adalflow.utils import get_adalflow_default_root_path
5 | import tempfile
6 | from src.data_pipeline import (
7 | create_sample_documents,
8 | transform_documents_and_save_to_db,
9 | )
10 |
11 |
12 | def initialize_test_database(db_path: str):
13 | """Initialize database with sample documents."""
14 | documents = create_sample_documents()
15 | transform_documents_and_save_to_db(documents, db_path)
16 | return db_path
17 |
18 |
19 | def main():
20 |
21 | temp_dir = tempfile.mkdtemp()
22 | db_path = os.path.join(temp_dir, "test_db")
23 |
24 | initialize_test_database(db_path)
25 |
26 | # Create RAG instance
27 | rag = RAG(index_path=db_path)
28 |
29 | # Test conversation flow with memory
30 | test_conversation = [
31 | "Who is Alice and what does she do?",
32 | "What about Bob? What's his expertise?",
33 | "Can you tell me more about what the previous person works on?",
34 | "What was her favorite project?", # Tests memory of Alice
35 | "Between these two people, who has more experience with RAG systems?", # Tests memory of both
36 | "Do they ever meet? Where might they have lunch together?", # Tests memory and context combination
37 | ]
38 |
39 | print("Starting conversation test with memory...\n")
40 | for i, query in enumerate(test_conversation, 1):
41 | print(f"\n----- Query {i} -----")
42 | print(f"User: {query}")
43 | try:
44 | # Get conversation history before the response
45 | print("\nCurrent Conversation History:")
46 | history = rag.memory()
47 | if history:
48 | print(history)
49 | else:
50 | print("(No history yet)")
51 |
52 | response, docs = rag(query)
53 | print(f"\nAssistant: {response}")
54 |
55 | # Show most relevant document used
56 | if docs:
57 | most_relevant = docs[0].documents[0].text.strip()
58 | print(f"\nMost relevant context used: \n{most_relevant[:200]}...")
59 |
60 | except Exception as e:
61 | print(f"Error: {e}")
62 | print("\n" + "=" * 50)
63 |
64 |
65 | if __name__ == "__main__":
66 | from adalflow.utils import setup_env
67 |
68 | setup_env()
69 | main()
70 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # GithubChat
2 |
3 | A RAG assistant to allow you to chat with any github repo.
4 | Learn fast. The default repo is AdalFlow github repo.
5 |
6 | [](https://youtu.be/PvZTSmTK8b0)
7 | *Click the image above to watch the demo video*
8 |
9 |
10 |
11 | ## Project Structure
12 | ```
13 | .
14 | ├── frontend/ # React frontend application
15 | ├── src/ # Python backend code
16 | ├── api.py # FastAPI server
17 | ├── app.py # Streamlit application
18 | └── pyproject.toml # Python dependencies
19 | ```
20 |
21 | ## Backend Setup
22 |
23 | 1. Install dependencies:
24 | ```bash
25 | poetry install
26 | ```
27 |
28 | 2. Set up OpenAI API key:
29 |
30 | Create a `.streamlit/secrets.toml` file in your project root:
31 | ```bash
32 | mkdir -p .streamlit
33 | touch .streamlit/secrets.toml
34 | ```
35 |
36 | Add your OpenAI API key to `.streamlit/secrets.toml`:
37 | ```toml
38 | OPENAI_API_KEY = "your-openai-api-key-here"
39 | ```
40 |
41 | ## Running the Applications
42 |
43 | ### Streamlit UI
44 | Run the streamlit app:
45 | ```bash
46 | poetry run streamlit run app.py
47 | ```
48 |
49 | ### FastAPI Backend
50 | Run the API server:
51 | ```bash
52 | poetry run uvicorn api:app --reload
53 | ```
54 | The API will be available at http://localhost:8000
55 |
56 | ### React Frontend
57 | 1. Navigate to the frontend directory:
58 | ```bash
59 | cd frontend
60 | ```
61 |
62 | 2. Install Node.js dependencies:
63 | ```bash
64 | pnpm install
65 | ```
66 |
67 |
68 | 3. Start the development server:
69 | ```bash
70 | pnpm run dev
71 | ```
72 | The frontend will be available at http://localhost:3000
73 |
74 | ## API Endpoints
75 |
76 | ### POST /query
77 | Analyzes a GitHub repository based on a query.
78 | ```json
79 | // Request
80 | {
81 | "repo_url": "https://github.com/username/repo",
82 | "query": "What does this repository do?"
83 | }
84 |
85 | // Response
86 | {
87 | "rationale": "Analysis rationale...",
88 | "answer": "Detailed answer...",
89 | "contexts": [...]
90 | }
91 | ```
92 |
93 | ## ROADMAP
94 | - [x] Clearly structured RAG that can prepare a repo, persit from reloading, and answer questions.
95 | - `DatabaseManager` in `src/data_pipeline.py` to manage the database.
96 | - `RAG` class in `src/rag.py` to manage the whole RAG lifecycle.
97 |
98 | ### On the RAG backend
99 | - [ ] Conditional retrieval. Sometimes users just want to clarify a past conversation, no extra context needed.
100 | - [ ] Create an evaluation dataset
101 | - [ ] Evaluate the RAG performance on the dataset
102 | - [ ] Auto-optimize the RAG model
103 |
104 | ### On the React frontend
105 |
106 | - [ ] Support the display of the whole conversation history instead of just the last message.
107 | - [ ] Support the management of multiple conversations.
108 |
--------------------------------------------------------------------------------
/app.py:
--------------------------------------------------------------------------------
1 | import streamlit as st
2 | import os
3 | from src.rag import RAG
4 |
5 | from typing import List
6 |
7 | from config import DEFAULT_GITHUB_REPO
8 |
9 |
10 | def init_rag(repo_path_or_url: str):
11 |
12 | # from adalflow.utils import setup_env
13 |
14 | os.environ["OPENAI_API_KEY"] = st.secrets["OPENAI_API_KEY"]
15 |
16 | rag = RAG()
17 | print(f"Loading repository from: {repo_path_or_url}")
18 | rag.prepare_retriever(repo_url_or_path=repo_path_or_url)
19 | return rag
20 |
21 |
22 | st.title("GithubChat")
23 | st.caption("Learn a repo with RAG assistant")
24 |
25 | repo_path = st.text_input(
26 | "Repository Path",
27 | value=DEFAULT_GITHUB_REPO,
28 | help="Github repo URL",
29 | )
30 |
31 | if "messages" not in st.session_state:
32 | st.session_state.messages = []
33 | if "rag" not in st.session_state:
34 | st.session_state.rag = None
35 |
36 | if st.button("Initialize local RAG"):
37 | try:
38 | st.session_state.rag = init_rag(repo_path)
39 | if st.session_state.rag:
40 | st.toast("Repository loaded successfully!")
41 | except Exception as e:
42 | st.toast(f"Load failed for repository at: {repo_path}")
43 |
44 | # TODO: Better reset the conversation
45 | if st.button("Clear Chat"):
46 | st.session_state.messages = []
47 | if st.session_state.rag:
48 | st.session_state.rag.memory.current_conversation.dialog_turns.clear()
49 |
50 |
51 | def display_messages():
52 | for message in st.session_state.messages:
53 | with st.chat_message(message["role"]):
54 | st.write("Assistant:")
55 | if "rationale" in message:
56 | st.write(message["rationale"])
57 | st.write(message["content"])
58 | if "context" in message:
59 | with st.expander("View context"):
60 | for doc in message["context"]:
61 | st.write(
62 | f"file_path: {doc.meta_data.get('file_path', 'unknown')}"
63 | )
64 | st.write(f"language: {doc.meta_data.get('type', 'unknown')}")
65 | language = doc.meta_data.get("type", "python")
66 | if language == "py":
67 | st.code(doc.text, language="python")
68 | else:
69 | st.write(doc.text)
70 |
71 |
72 | from adalflow.core.types import Document
73 |
74 |
75 | def form_context(context: List[Document]):
76 | formatted_context = ""
77 | for doc in context:
78 | formatted_context += ""
79 | f"file_path: {doc.meta_data.get('file_path', 'unknown')} \n"
80 | f"language: {doc.meta_data.get('type', 'python')} \n"
81 | f"content: {doc.text} \n"
82 | return formatted_context
83 |
84 |
85 | if st.session_state.rag and (
86 | query := st.chat_input(
87 | "Ask about the code (e.g., 'Show me the implementation of the RAG class', 'How is memory handled?')"
88 | )
89 | ):
90 | st.session_state.messages.append({"role": "user", "content": query})
91 |
92 | with st.chat_message("user"):
93 | st.write(query)
94 |
95 | with st.chat_message("assistant"):
96 | with st.spinner("Analyzing code..."):
97 |
98 | st.write(f"memory: {st.session_state.rag.memory()}")
99 | response, docs = st.session_state.rag(query)
100 |
101 | # Show relevant context first, then the explanation
102 | if docs and docs[0].documents:
103 | context = docs[0].documents
104 |
105 | # Add to chat history
106 | st.write(f"add to history")
107 | st.session_state.messages.append(
108 | {
109 | "role": "assistant",
110 | "rationale": (
111 | response.rationale
112 | if hasattr(response, "rationale")
113 | else None
114 | ),
115 | "content": (
116 | response.answer
117 | if hasattr(response, "answer")
118 | else response.raw_response
119 | ),
120 | "context": context,
121 | }
122 | )
123 | else:
124 | st.write(response)
125 | st.session_state.messages.append(
126 | {"role": "assistant", "content": response}
127 | )
128 | elif not st.session_state.rag:
129 | st.info("Please load a repository first!")
130 |
131 | # Finally, call display_messages *after* everything is appended
132 | display_messages()
133 |
--------------------------------------------------------------------------------
/api.py:
--------------------------------------------------------------------------------
1 | from fastapi import FastAPI, HTTPException
2 | from fastapi.middleware.cors import CORSMiddleware
3 | from pydantic import BaseModel
4 | import adalflow as adal
5 | from src.rag import RAG
6 | from typing import List, Optional
7 | import os
8 | from dotenv import load_dotenv
9 | from datetime import datetime, timezone
10 |
11 | def load_environment():
12 | """Load environment variables from .env file if available, otherwise use system environment variables."""
13 | try:
14 | # Try to load from .env file for local development
15 | load_dotenv()
16 | print("Loaded environment variables from .env file")
17 | except FileNotFoundError:
18 | # In production, env variables should be set in the environment
19 | print("No .env file found, using system environment variables")
20 | except Exception as e:
21 | print(f"Note: Error loading .env file: {e}")
22 |
23 | # Load environment variables
24 | load_environment()
25 |
26 | # Check for required environment variables
27 | openai_api_key = os.getenv("OPENAI_API_KEY")
28 | if not openai_api_key:
29 | raise ValueError(
30 | "OPENAI_API_KEY environment variable is required. Either:\n"
31 | "1. Create a .env file with OPENAI_API_KEY=your-key-here (for local development)\n"
32 | "2. Set the environment variable in your deployment platform (for production)"
33 | )
34 |
35 | # Initialize FastAPI app
36 | app = FastAPI(
37 | title="GithubChat API",
38 | description="API for querying GitHub repositories using RAG",
39 | version="1.0.0"
40 | )
41 |
42 | # Add CORS middleware
43 | app.add_middleware(
44 | CORSMiddleware,
45 | allow_origins=["*"], # In production, replace with specific origins
46 | allow_credentials=True,
47 | allow_methods=["*"],
48 | allow_headers=["*"],
49 | )
50 |
51 | # Initialize RAG component
52 | try:
53 | # Set up adalflow environment
54 | os.environ["OPENAI_API_KEY"] = openai_api_key
55 | adal.setup_env()
56 | rag = RAG()
57 | print("Successfully initialized RAG component")
58 | except Exception as e:
59 | print(f"Error initializing RAG component: {e}")
60 | raise RuntimeError(f"Failed to initialize RAG component: {e}")
61 |
62 | class QueryRequest(BaseModel):
63 | repo_url: str
64 | query: str
65 |
66 | class DocumentMetadata(BaseModel):
67 | file_path: str
68 | type: str
69 | is_code: bool = False
70 | is_implementation: bool = False
71 | title: str = ""
72 |
73 | class Document(BaseModel):
74 | text: str
75 | meta_data: DocumentMetadata
76 |
77 | class QueryResponse(BaseModel):
78 | rationale: str
79 | answer: str
80 | contexts: List[Document]
81 |
82 | @app.post("/query", response_model=QueryResponse)
83 | async def query_repository(request: QueryRequest):
84 | """
85 | Query a GitHub repository with RAG
86 |
87 | Args:
88 | request: QueryRequest containing repo_url and query
89 |
90 | Returns:
91 | QueryResponse containing the answer, rationale, and relevant contexts
92 | """
93 | try:
94 | # Prepare retriever for the repository
95 | rag.prepare_retriever(request.repo_url)
96 |
97 | # Get response and retrieved documents
98 | response, retrieved_documents = rag(request.query)
99 |
100 | # Format response
101 | return QueryResponse(
102 | rationale=response.rationale if hasattr(response, 'rationale') else "",
103 | answer=response.answer if hasattr(response, 'answer') else response.raw_response,
104 | contexts=[
105 | Document(
106 | text=doc.text,
107 | meta_data=DocumentMetadata(
108 | file_path=doc.meta_data.get('file_path', ''),
109 | type=doc.meta_data.get('type', ''),
110 | is_code=doc.meta_data.get('is_code', False),
111 | is_implementation=doc.meta_data.get('is_implementation', False),
112 | title=doc.meta_data.get('title', '')
113 | )
114 | )
115 | for doc in retrieved_documents[0].documents
116 | ] if retrieved_documents and retrieved_documents[0].documents else []
117 | )
118 | except Exception as e:
119 | error_msg = f"Error processing query: {str(e)}"
120 | print(error_msg) # Log the error
121 | raise HTTPException(status_code=500, detail=error_msg)
122 |
123 | @app.get("/health")
124 | async def health_check():
125 | """Health check endpoint to verify API is running"""
126 | return {
127 | "status": "healthy",
128 | "timestamp": datetime.now(timezone.utc).isoformat(),
129 | "version": "1.0.0"
130 | }
131 |
132 | @app.get("/")
133 | async def root():
134 | """Root endpoint with API information"""
135 | return {
136 | "name": "GithubChat API",
137 | "description": "API for querying GitHub repositories using RAG",
138 | "version": "1.0.0",
139 | "documentation": "/docs",
140 | "health_check": "/health"
141 | }
142 |
143 | if __name__ == "__main__":
144 | import uvicorn
145 | uvicorn.run(app, host="0.0.0.0", port=8000)
--------------------------------------------------------------------------------
/src/rag.py:
--------------------------------------------------------------------------------
1 | from typing import Any, List
2 | from uuid import uuid4
3 |
4 | import adalflow as adal
5 | from adalflow.core.types import (
6 | Conversation,
7 | DialogTurn,
8 | UserQuery,
9 | AssistantResponse,
10 | )
11 | from adalflow.components.retriever.faiss_retriever import FAISSRetriever
12 | from adalflow.components.data_process import (
13 | RetrieverOutputToContextStr,
14 | )
15 | from adalflow.core.component import DataComponent
16 | from config import configs
17 | from src.data_pipeline import DatabaseManager
18 | from adalflow.utils import printc
19 |
20 |
21 | class Memory(DataComponent):
22 | """Simple conversation management with a list of dialog turns."""
23 |
24 | def __init__(self):
25 | super().__init__()
26 | self.current_conversation = Conversation()
27 |
28 | def call(self) -> List[DialogTurn]:
29 |
30 | all_dialog_turns = self.current_conversation.dialog_turns
31 |
32 | return all_dialog_turns
33 |
34 | def add_dialog_turn(self, user_query: str, assistant_response: str):
35 | dialog_turn = DialogTurn(
36 | id=str(uuid4()),
37 | user_query=UserQuery(query_str=user_query),
38 | assistant_response=AssistantResponse(response_str=assistant_response),
39 | )
40 |
41 | self.current_conversation.append_dialog_turn(dialog_turn)
42 |
43 |
44 | system_prompt = r"""
45 | You are a code assistant which answer's user question on a Github Repo.
46 | You will receive user query, relevant context, and past conversation history.
47 | Think step by step."""
48 |
49 | # history is a list of dialog turns
50 | RAG_TEMPLATE = r"""
51 | {{system_prompt}}
52 | {{output_format_str}}
53 |
54 | {# OrderedDict of DialogTurn #}
55 | {% if conversation_history %}
56 |
57 | {% for key, dialog_turn in conversation_history.items() %}
58 | {{key}}.
59 | User: {{dialog_turn.user_query.query_str}}
60 | You: {{dialog_turn.assistant_response.response_str}}
61 | {% endfor %}
62 |
63 | {% endif %}
64 | {% if contexts %}
65 |
66 | {% for context in contexts %}
67 | {{loop.index }}.
68 | File Path: {{context.meta_data.get('file_path', 'unknown')}}
69 | Content: {{context.text}}
70 | {% endfor %}
71 |
72 | {% endif %}
73 |
74 | {{input_str}}
75 |
76 | """
77 |
78 | from dataclasses import dataclass, field
79 |
80 |
81 | @dataclass
82 | class RAGAnswer(adal.DataClass):
83 | rationale: str = field(default="", metadata={"desc": "Rationale for the answer."})
84 | answer: str = field(default="", metadata={"desc": "Answer to the user query."})
85 |
86 | __output_fields__ = ["rationale", "answer"]
87 |
88 |
89 | class RAG(adal.Component):
90 | __doc__ = """RAG with one repo.
91 | If you want to load a new repo. You need to call prepare_retriever(repo_url_or_path) first."""
92 |
93 | def __init__(self):
94 |
95 | super().__init__()
96 |
97 | # Initialize embedder, generator, and db_manager
98 | self.memory = Memory()
99 |
100 | self.embedder = adal.Embedder(
101 | model_client=configs["embedder"]["model_client"](),
102 | model_kwargs=configs["embedder"]["model_kwargs"],
103 | )
104 |
105 | self.initialize_db_manager()
106 |
107 | # Get the appropriate prompt template
108 | data_parser = adal.DataClassParser(data_class=RAGAnswer, return_data_class=True)
109 |
110 | self.generator = adal.Generator(
111 | template=RAG_TEMPLATE,
112 | prompt_kwargs={
113 | "output_format_str": data_parser.get_output_format_str(),
114 | "conversation_history": self.memory(),
115 | "system_prompt": system_prompt,
116 | "contexts": None,
117 | },
118 | model_client=configs["generator"]["model_client"](),
119 | model_kwargs=configs["generator"]["model_kwargs"],
120 | output_processors=data_parser,
121 | )
122 |
123 | def initialize_db_manager(self):
124 | self.db_manager = DatabaseManager()
125 | self.transformed_docs = []
126 |
127 | def prepare_retriever(self, repo_url_or_path: str):
128 | r"""Run prepare_retriever once for each repo."""
129 | self.initialize_db_manager()
130 | self.transformed_docs = self.db_manager.prepare_database(repo_url_or_path)
131 | print(f"len(self.transformed_docs): {len(self.transformed_docs)}")
132 | self.retriever = FAISSRetriever(
133 | **configs["retriever"],
134 | embedder=self.embedder,
135 | documents=self.transformed_docs,
136 | document_map_func=lambda doc: doc.vector,
137 | )
138 |
139 | def call(self, query: str) -> Any:
140 |
141 | retrieved_documents = self.retriever(query)
142 |
143 | # fill in the document
144 | retrieved_documents[0].documents = [
145 | self.transformed_docs[doc_index]
146 | for doc_index in retrieved_documents[0].doc_indices
147 | ]
148 |
149 | printc(f"retrieved_documents: {retrieved_documents[0].documents}")
150 | printc(f"memory: {self.memory()}")
151 |
152 | prompt_kwargs = {
153 | "input_str": query,
154 | "contexts": retrieved_documents[0].documents,
155 | "conversation_history": self.memory(),
156 | }
157 | response = self.generator(
158 | prompt_kwargs=prompt_kwargs,
159 | )
160 |
161 | # for debug
162 | prompt_str = self.generator.get_prompt(**prompt_kwargs)
163 | printc(f"prompt_str: {prompt_str}")
164 |
165 | final_response = response.data
166 |
167 | self.memory.add_dialog_turn(user_query=query, assistant_response=final_response)
168 |
169 | return final_response, retrieved_documents
170 |
171 |
172 | if __name__ == "__main__":
173 | from adalflow.utils import get_logger
174 |
175 | adal.setup_env()
176 | # repo_url = "https://github.com/SylphAI-Inc/AdalFlow"
177 | repo_url = "https://github.com/SylphAI-Inc/GithubChat"
178 | rag = RAG()
179 | rag.prepare_retriever(repo_url)
180 | print(
181 | f"RAG component initialized for repo: {repo_url}. Type your query below or type 'exit' to quit."
182 | )
183 |
184 | while True:
185 | # Get user input
186 |
187 | query = input("Enter your query (or type 'exit' to stop): ")
188 |
189 | # Exit condition
190 | if query.lower() in ["exit", "quit", "stop"]:
191 | print("Exiting RAG component. Goodbye!")
192 | break
193 |
194 | # Process the query
195 | try:
196 | response, retrieved_documents = rag(query)
197 | rag.memory.add_dialog_turn(user_query=query, assistant_response=response)
198 | print(f"\nResponse:\n{response}\n")
199 | print(f"Retrieved Documents:\n{retrieved_documents}\n")
200 | except Exception as e:
201 | print(f"An error occurred while processing the query: {e}")
202 |
--------------------------------------------------------------------------------
/frontend/src/components/GitHubChat.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useCallback } from "react";
2 | import ReactMarkdown from "react-markdown";
3 | import { Loader2, ChevronDown, ChevronRight, Github } from "lucide-react";
4 | import { toast } from "react-hot-toast";
5 |
6 | interface DocumentMetadata {
7 | file_path: string;
8 | type: string;
9 | is_code: boolean;
10 | is_implementation: boolean;
11 | title: string;
12 | }
13 |
14 | interface Document {
15 | text: string;
16 | meta_data: DocumentMetadata;
17 | }
18 |
19 | interface QueryResponse {
20 | rationale: string;
21 | answer: string;
22 | contexts: Document[];
23 | }
24 |
25 | const GitHubChat: React.FC = () => {
26 | const [repoUrl, setRepoUrl] = useState("");
27 | const [query, setQuery] = useState("");
28 | const [isProcessing, setIsProcessing] = useState(false);
29 | const [response, setResponse] = useState(null);
30 | const [expandedContexts, setExpandedContexts] = useState<{
31 | [key: number]: boolean;
32 | }>({});
33 |
34 | const analyzeRepo = useCallback(async () => {
35 | if (!repoUrl.trim() || !query.trim()) return;
36 |
37 | setIsProcessing(true);
38 | try {
39 | const response = await fetch("http://localhost:8000/query", {
40 | method: "POST",
41 | headers: {
42 | "Content-Type": "application/json",
43 | },
44 | body: JSON.stringify({
45 | repo_url: repoUrl,
46 | query: query,
47 | }),
48 | });
49 |
50 | if (!response.ok) {
51 | throw new Error("Failed to analyze repository");
52 | }
53 |
54 | const result = await response.json();
55 | setResponse(result);
56 | toast.success("Analysis complete!");
57 | } catch (error) {
58 | console.error("Error:", error);
59 | const errorMessage =
60 | error instanceof Error ? error.message : "Failed to analyze repository";
61 | toast.error(errorMessage);
62 | } finally {
63 | setIsProcessing(false);
64 | }
65 | }, [repoUrl, query]);
66 |
67 | const toggleContext = (index: number) => {
68 | setExpandedContexts((prev) => ({
69 | ...prev,
70 | [index]: !prev[index],
71 | }));
72 | };
73 |
74 | return (
75 |
76 |
77 |
78 |
79 |
80 |
GitHubChat
81 |
82 |
Chat with any Github Repo!
83 |
84 |
85 |
86 |
87 |
88 |
94 |
95 | setRepoUrl(e.target.value)}
100 | className="block w-full rounded-md border-gray-300 shadow-sm focus:border-black focus:ring-black sm:text-sm px-4 py-2 border"
101 | placeholder="https://github.com/username/repository"
102 | />
103 |
104 |
105 |
106 |
107 |
113 |
114 |
123 |
124 |
125 |
139 |
140 |
141 |
142 | {response && (
143 |
144 |
145 |
Analysis
146 |
147 | {response.rationale}
148 |
149 |
150 |
151 |
152 |
Answer
153 |
154 | {response.answer}
155 |
156 |
157 |
158 |
159 |
Context
160 |
161 | {response.contexts.map((context, index) => (
162 |
166 |
179 | {expandedContexts[index] && (
180 |
181 |
182 | {context.text}
183 |
184 |
185 | )}
186 |
187 | ))}
188 |
189 |
190 |
191 |
192 |
201 |
202 |
203 | )}
204 |
205 |
206 | );
207 | };
208 |
209 | export default GitHubChat;
210 |
--------------------------------------------------------------------------------
/src/data_pipeline.py:
--------------------------------------------------------------------------------
1 | import adalflow as adal
2 | from adalflow.core.types import Document, List
3 | from adalflow.components.data_process import TextSplitter, ToEmbeddings
4 | import os
5 | import subprocess
6 | import re
7 | import glob
8 | from adalflow.utils import get_adalflow_default_root_path
9 | from adalflow.utils import printc
10 | from config import configs
11 | from adalflow.core.db import LocalDB
12 |
13 |
14 | def download_github_repo(repo_url: str, local_path: str):
15 | """
16 | Downloads a GitHub repository to a specified local path.
17 |
18 | Args:
19 | repo_url (str): The URL of the GitHub repository to clone.
20 | local_path (str): The local directory where the repository will be cloned.
21 |
22 | Returns:
23 | str: The output message from the `git` command.
24 | """
25 | try:
26 | # Check if Git is installed
27 | print(f"local_path: {local_path}")
28 | subprocess.run(
29 | ["git", "--version"],
30 | check=True,
31 | stdout=subprocess.PIPE,
32 | stderr=subprocess.PIPE,
33 | )
34 |
35 | # Ensure the local path exists
36 | os.makedirs(local_path, exist_ok=True)
37 |
38 | # Clone the repository
39 | result = subprocess.run(
40 | ["git", "clone", repo_url, local_path],
41 | check=True,
42 | stdout=subprocess.PIPE,
43 | stderr=subprocess.PIPE,
44 | )
45 |
46 | return result.stdout.decode("utf-8")
47 |
48 | except subprocess.CalledProcessError as e:
49 | return f"Error during cloning: {e.stderr.decode('utf-8')}"
50 | except Exception as e:
51 | return f"An unexpected error occurred: {str(e)}"
52 |
53 |
54 | def read_all_documents(path: str):
55 | """
56 | Recursively reads all documents in a directory and its subdirectories.
57 |
58 | Args:
59 | path (str): The root directory path.
60 |
61 | Returns:
62 | list: A list of Document objects with metadata.
63 | """
64 | documents = []
65 | # File extensions to look for, prioritizing code files
66 | code_extensions = [".py", ".js", ".ts", ".java", ".cpp", ".c", ".go", ".rs"]
67 | doc_extensions = [".md", ".txt", ".rst", ".json", ".yaml", ".yml"]
68 |
69 | # Process code files first
70 | for ext in code_extensions:
71 | files = glob.glob(f"{path}/**/*{ext}", recursive=True)
72 | for file_path in files:
73 | if ".venv" in file_path or "node_modules" in file_path:
74 | continue
75 | try:
76 | with open(file_path, "r", encoding="utf-8") as f:
77 | content = f.read()
78 | relative_path = os.path.relpath(file_path, path)
79 |
80 | # Determine if this is an implementation file
81 | is_implementation = (
82 | not relative_path.startswith("test_")
83 | and not relative_path.startswith("app_")
84 | and "test" not in relative_path.lower()
85 | )
86 |
87 | doc = Document(
88 | text=content,
89 | meta_data={
90 | "file_path": relative_path,
91 | "type": ext[1:],
92 | "is_code": True,
93 | "is_implementation": is_implementation,
94 | "title": relative_path,
95 | },
96 | )
97 | documents.append(doc)
98 | except Exception as e:
99 | print(f"Error reading {file_path}: {e}")
100 |
101 | # Then process documentation files
102 | for ext in doc_extensions:
103 | files = glob.glob(f"{path}/**/*{ext}", recursive=True)
104 | for file_path in files:
105 | if ".venv" in file_path or "node_modules" in file_path:
106 | continue
107 | try:
108 | with open(file_path, "r", encoding="utf-8") as f:
109 | content = f.read()
110 | relative_path = os.path.relpath(file_path, path)
111 | doc = Document(
112 | text=content,
113 | meta_data={
114 | "file_path": relative_path,
115 | "type": ext[1:],
116 | "is_code": False,
117 | "is_implementation": False,
118 | "title": relative_path,
119 | },
120 | )
121 | documents.append(doc)
122 | except Exception as e:
123 | print(f"Error reading {file_path}: {e}")
124 |
125 | return documents
126 |
127 |
128 | def prepare_data_pipeline():
129 | """Creates and returns the data transformation pipeline."""
130 | splitter = TextSplitter(**configs["text_splitter"])
131 | embedder = adal.Embedder(
132 | model_client=configs["embedder"]["model_client"](),
133 | model_kwargs=configs["embedder"]["model_kwargs"],
134 | )
135 | embedder_transformer = ToEmbeddings(
136 | embedder=embedder, batch_size=configs["embedder"]["batch_size"]
137 | )
138 | data_transformer = adal.Sequential(
139 | splitter, embedder_transformer
140 | ) # sequential will chain together splitter and embedder
141 | return data_transformer
142 |
143 |
144 | def transform_documents_and_save_to_db(
145 | documents: List[Document], db_path: str
146 | ) -> LocalDB:
147 | """
148 | Transforms a list of documents and saves them to a local database.
149 |
150 | Args:
151 | documents (list): A list of `Document` objects.
152 | db_path (str): The path to the local database file.
153 | """
154 | # Get the data transformer
155 | data_transformer = prepare_data_pipeline()
156 |
157 | # Save the documents to a local database
158 | db = LocalDB()
159 | db.register_transformer(transformer=data_transformer, key="split_and_embed")
160 | db.load(documents)
161 | db.transform(key="split_and_embed")
162 | os.makedirs(os.path.dirname(db_path), exist_ok=True)
163 | db.save_state(filepath=db_path)
164 | return db
165 |
166 |
167 | def chat_with_adalflow_lib():
168 | """
169 | (1) Download repo: https://github.com/SylphAI-Inc/AdalFlow
170 | (2) Read all documents in the repo
171 | (3) Transform the documents using the data pipeline
172 | (4) Save the transformed documents to a local database
173 | """
174 | # Download the repository
175 | repo_url = "https://github.com/SylphAI-Inc/AdalFlow"
176 | local_path = os.path.join(get_adalflow_default_root_path(), "AdalFlow")
177 | download_github_repo(repo_url, local_path)
178 | # Read all documents in the repository
179 | documents = read_all_documents(local_path)
180 | # Transform the documents using the data pipeline
181 | db_path = os.path.join(get_adalflow_default_root_path(), "db_adalflow")
182 | transform_documents_and_save_to_db(documents, db_path)
183 |
184 |
185 | class DatabaseManager:
186 | """
187 | Manages the creation, loading, transformation, and persistence of LocalDB instances.
188 | """
189 |
190 | def __init__(self):
191 | self.db = None
192 | self.repo_url_or_path = None
193 | self.repo_paths = None
194 |
195 | def prepare_database(self, repo_url_or_path: str) -> List[Document]:
196 | """
197 | Create a new database from the repository.
198 | :return: List of Document objects
199 | """
200 | self.reset_database()
201 | self._create_repo(repo_url_or_path)
202 | return self.prepare_db_index()
203 |
204 | def reset_database(self):
205 | """
206 | Reset the database to its initial state.
207 | """
208 | self.db = None
209 | self.repo_url_or_path = None
210 | self.repo_paths = None
211 |
212 | def _create_repo(self, repo_url_or_path: str) -> None:
213 | """
214 | Download and prepare all paths.
215 | Paths:
216 | ~/.adalflow/repos/{repo_name} (for url, local path will be the same)
217 | ~/.adalflow/databases/{repo_name}.pkl
218 | """
219 | printc(f"Preparing repo storage for {repo_url_or_path}...")
220 |
221 | try:
222 | root_path = get_adalflow_default_root_path()
223 |
224 | os.makedirs(root_path, exist_ok=True)
225 | # url
226 | if repo_url_or_path.startswith("https://" or "http://"):
227 | repo_name = repo_url_or_path.split("/")[-1].replace(".git", "")
228 | save_repo_dir = os.path.join(root_path, "repos", repo_name)
229 | # download the repo
230 | download_github_repo(repo_url_or_path, save_repo_dir)
231 | else: # local path
232 | repo_name = os.path.basename(repo_url_or_path)
233 | save_repo_dir = repo_url_or_path
234 |
235 | save_db_file = os.path.join(root_path, "databases", f"{repo_name}.pkl")
236 | os.makedirs(save_repo_dir, exist_ok=True)
237 | os.makedirs(os.path.dirname(save_db_file), exist_ok=True)
238 |
239 | self.repo_paths = {
240 | "save_repo_dir": save_repo_dir,
241 | "save_db_file": save_db_file,
242 | }
243 | printc(f"Repo paths: {self.repo_paths}")
244 |
245 | except Exception as e:
246 | printc(f"Failed to create repository structure: {e}")
247 | raise
248 |
249 | def prepare_db_index(self) -> List[Document]:
250 | """
251 | Prepare the indexed database for the repository.
252 | :return: List of Document objects
253 | """
254 | # check the database
255 | if self.repo_paths and os.path.exists(self.repo_paths["save_db_file"]):
256 | printc("Loading existing database...")
257 | self.db = LocalDB.load_state(self.repo_paths["save_db_file"])
258 | documents = self.db.get_transformed_data(key="split_and_embed")
259 | if documents:
260 | return documents
261 |
262 | # prepare the database
263 | printc("Creating new database...")
264 | documents = read_all_documents(self.repo_paths["save_repo_dir"])
265 | self.db = transform_documents_and_save_to_db(
266 | documents, self.repo_paths["save_db_file"]
267 | )
268 | printc(f"total documents: {len(documents)}")
269 | transformed_docs = self.db.get_transformed_data(key="split_and_embed")
270 | printc(f"total transformed documents: {len(transformed_docs)}")
271 | return transformed_docs
272 |
273 |
274 | if __name__ == "__main__":
275 | from adalflow.utils import get_logger
276 |
277 | adal.setup_env()
278 |
279 | chat_with_adalflow_lib()
280 |
--------------------------------------------------------------------------------
/frontend/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | '@tailwindcss/typography':
12 | specifier: ^0.5.10
13 | version: 0.5.16(tailwindcss@3.4.17)
14 | '@types/node':
15 | specifier: ^20.0.0
16 | version: 20.17.17
17 | '@types/react':
18 | specifier: ^18.0.0
19 | version: 18.3.18
20 | '@types/react-dom':
21 | specifier: ^18.0.0
22 | version: 18.3.5(@types/react@18.3.18)
23 | lucide-react:
24 | specifier: ^0.358.0
25 | version: 0.358.0(react@18.3.1)
26 | react:
27 | specifier: ^18.2.0
28 | version: 18.3.1
29 | react-dom:
30 | specifier: ^18.2.0
31 | version: 18.3.1(react@18.3.1)
32 | react-hot-toast:
33 | specifier: ^2.4.1
34 | version: 2.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
35 | react-markdown:
36 | specifier: ^9.0.1
37 | version: 9.0.3(@types/react@18.3.18)(react@18.3.1)
38 | tailwindcss:
39 | specifier: ^3.4.0
40 | version: 3.4.17
41 | typescript:
42 | specifier: ^5.0.0
43 | version: 5.7.3
44 | devDependencies:
45 | '@types/babel__generator':
46 | specifier: ^7.6.8
47 | version: 7.6.8
48 | '@types/babel__template':
49 | specifier: ^7.4.4
50 | version: 7.4.4
51 | '@types/babel__traverse':
52 | specifier: ^7.20.6
53 | version: 7.20.6
54 | '@types/estree':
55 | specifier: ^1.0.6
56 | version: 1.0.6
57 | '@types/prop-types':
58 | specifier: ^15.7.14
59 | version: 15.7.14
60 | '@vitejs/plugin-react':
61 | specifier: ^4.2.0
62 | version: 4.3.4(vite@5.4.14(@types/node@20.17.17))
63 | autoprefixer:
64 | specifier: ^10.4.17
65 | version: 10.4.20(postcss@8.5.1)
66 | postcss:
67 | specifier: ^8.4.35
68 | version: 8.5.1
69 | vite:
70 | specifier: ^5.0.0
71 | version: 5.4.14(@types/node@20.17.17)
72 |
73 | packages:
74 |
75 | '@alloc/quick-lru@5.2.0':
76 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
77 | engines: {node: '>=10'}
78 |
79 | '@ampproject/remapping@2.3.0':
80 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
81 | engines: {node: '>=6.0.0'}
82 |
83 | '@babel/code-frame@7.26.2':
84 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
85 | engines: {node: '>=6.9.0'}
86 |
87 | '@babel/compat-data@7.26.5':
88 | resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==}
89 | engines: {node: '>=6.9.0'}
90 |
91 | '@babel/core@7.26.7':
92 | resolution: {integrity: sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==}
93 | engines: {node: '>=6.9.0'}
94 |
95 | '@babel/generator@7.26.5':
96 | resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==}
97 | engines: {node: '>=6.9.0'}
98 |
99 | '@babel/helper-compilation-targets@7.26.5':
100 | resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==}
101 | engines: {node: '>=6.9.0'}
102 |
103 | '@babel/helper-module-imports@7.25.9':
104 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
105 | engines: {node: '>=6.9.0'}
106 |
107 | '@babel/helper-module-transforms@7.26.0':
108 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
109 | engines: {node: '>=6.9.0'}
110 | peerDependencies:
111 | '@babel/core': ^7.0.0
112 |
113 | '@babel/helper-plugin-utils@7.26.5':
114 | resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
115 | engines: {node: '>=6.9.0'}
116 |
117 | '@babel/helper-string-parser@7.25.9':
118 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
119 | engines: {node: '>=6.9.0'}
120 |
121 | '@babel/helper-validator-identifier@7.25.9':
122 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
123 | engines: {node: '>=6.9.0'}
124 |
125 | '@babel/helper-validator-option@7.25.9':
126 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
127 | engines: {node: '>=6.9.0'}
128 |
129 | '@babel/helpers@7.26.7':
130 | resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==}
131 | engines: {node: '>=6.9.0'}
132 |
133 | '@babel/parser@7.26.7':
134 | resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==}
135 | engines: {node: '>=6.0.0'}
136 | hasBin: true
137 |
138 | '@babel/plugin-transform-react-jsx-self@7.25.9':
139 | resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==}
140 | engines: {node: '>=6.9.0'}
141 | peerDependencies:
142 | '@babel/core': ^7.0.0-0
143 |
144 | '@babel/plugin-transform-react-jsx-source@7.25.9':
145 | resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==}
146 | engines: {node: '>=6.9.0'}
147 | peerDependencies:
148 | '@babel/core': ^7.0.0-0
149 |
150 | '@babel/template@7.25.9':
151 | resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==}
152 | engines: {node: '>=6.9.0'}
153 |
154 | '@babel/traverse@7.26.7':
155 | resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==}
156 | engines: {node: '>=6.9.0'}
157 |
158 | '@babel/types@7.26.7':
159 | resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==}
160 | engines: {node: '>=6.9.0'}
161 |
162 | '@esbuild/aix-ppc64@0.21.5':
163 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
164 | engines: {node: '>=12'}
165 | cpu: [ppc64]
166 | os: [aix]
167 |
168 | '@esbuild/android-arm64@0.21.5':
169 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
170 | engines: {node: '>=12'}
171 | cpu: [arm64]
172 | os: [android]
173 |
174 | '@esbuild/android-arm@0.21.5':
175 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
176 | engines: {node: '>=12'}
177 | cpu: [arm]
178 | os: [android]
179 |
180 | '@esbuild/android-x64@0.21.5':
181 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
182 | engines: {node: '>=12'}
183 | cpu: [x64]
184 | os: [android]
185 |
186 | '@esbuild/darwin-arm64@0.21.5':
187 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
188 | engines: {node: '>=12'}
189 | cpu: [arm64]
190 | os: [darwin]
191 |
192 | '@esbuild/darwin-x64@0.21.5':
193 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
194 | engines: {node: '>=12'}
195 | cpu: [x64]
196 | os: [darwin]
197 |
198 | '@esbuild/freebsd-arm64@0.21.5':
199 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
200 | engines: {node: '>=12'}
201 | cpu: [arm64]
202 | os: [freebsd]
203 |
204 | '@esbuild/freebsd-x64@0.21.5':
205 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
206 | engines: {node: '>=12'}
207 | cpu: [x64]
208 | os: [freebsd]
209 |
210 | '@esbuild/linux-arm64@0.21.5':
211 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
212 | engines: {node: '>=12'}
213 | cpu: [arm64]
214 | os: [linux]
215 |
216 | '@esbuild/linux-arm@0.21.5':
217 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
218 | engines: {node: '>=12'}
219 | cpu: [arm]
220 | os: [linux]
221 |
222 | '@esbuild/linux-ia32@0.21.5':
223 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
224 | engines: {node: '>=12'}
225 | cpu: [ia32]
226 | os: [linux]
227 |
228 | '@esbuild/linux-loong64@0.21.5':
229 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
230 | engines: {node: '>=12'}
231 | cpu: [loong64]
232 | os: [linux]
233 |
234 | '@esbuild/linux-mips64el@0.21.5':
235 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
236 | engines: {node: '>=12'}
237 | cpu: [mips64el]
238 | os: [linux]
239 |
240 | '@esbuild/linux-ppc64@0.21.5':
241 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
242 | engines: {node: '>=12'}
243 | cpu: [ppc64]
244 | os: [linux]
245 |
246 | '@esbuild/linux-riscv64@0.21.5':
247 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
248 | engines: {node: '>=12'}
249 | cpu: [riscv64]
250 | os: [linux]
251 |
252 | '@esbuild/linux-s390x@0.21.5':
253 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
254 | engines: {node: '>=12'}
255 | cpu: [s390x]
256 | os: [linux]
257 |
258 | '@esbuild/linux-x64@0.21.5':
259 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
260 | engines: {node: '>=12'}
261 | cpu: [x64]
262 | os: [linux]
263 |
264 | '@esbuild/netbsd-x64@0.21.5':
265 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
266 | engines: {node: '>=12'}
267 | cpu: [x64]
268 | os: [netbsd]
269 |
270 | '@esbuild/openbsd-x64@0.21.5':
271 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
272 | engines: {node: '>=12'}
273 | cpu: [x64]
274 | os: [openbsd]
275 |
276 | '@esbuild/sunos-x64@0.21.5':
277 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
278 | engines: {node: '>=12'}
279 | cpu: [x64]
280 | os: [sunos]
281 |
282 | '@esbuild/win32-arm64@0.21.5':
283 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
284 | engines: {node: '>=12'}
285 | cpu: [arm64]
286 | os: [win32]
287 |
288 | '@esbuild/win32-ia32@0.21.5':
289 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
290 | engines: {node: '>=12'}
291 | cpu: [ia32]
292 | os: [win32]
293 |
294 | '@esbuild/win32-x64@0.21.5':
295 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
296 | engines: {node: '>=12'}
297 | cpu: [x64]
298 | os: [win32]
299 |
300 | '@isaacs/cliui@8.0.2':
301 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
302 | engines: {node: '>=12'}
303 |
304 | '@jridgewell/gen-mapping@0.3.8':
305 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
306 | engines: {node: '>=6.0.0'}
307 |
308 | '@jridgewell/resolve-uri@3.1.2':
309 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
310 | engines: {node: '>=6.0.0'}
311 |
312 | '@jridgewell/set-array@1.2.1':
313 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
314 | engines: {node: '>=6.0.0'}
315 |
316 | '@jridgewell/sourcemap-codec@1.5.0':
317 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
318 |
319 | '@jridgewell/trace-mapping@0.3.25':
320 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
321 |
322 | '@nodelib/fs.scandir@2.1.5':
323 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
324 | engines: {node: '>= 8'}
325 |
326 | '@nodelib/fs.stat@2.0.5':
327 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
328 | engines: {node: '>= 8'}
329 |
330 | '@nodelib/fs.walk@1.2.8':
331 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
332 | engines: {node: '>= 8'}
333 |
334 | '@pkgjs/parseargs@0.11.0':
335 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
336 | engines: {node: '>=14'}
337 |
338 | '@rollup/rollup-android-arm-eabi@4.34.4':
339 | resolution: {integrity: sha512-gGi5adZWvjtJU7Axs//CWaQbQd/vGy8KGcnEaCWiyCqxWYDxwIlAHFuSe6Guoxtd0SRvSfVTDMPd5H+4KE2kKA==}
340 | cpu: [arm]
341 | os: [android]
342 |
343 | '@rollup/rollup-android-arm64@4.34.4':
344 | resolution: {integrity: sha512-1aRlh1gqtF7vNPMnlf1vJKk72Yshw5zknR/ZAVh7zycRAGF2XBMVDAHmFQz/Zws5k++nux3LOq/Ejj1WrDR6xg==}
345 | cpu: [arm64]
346 | os: [android]
347 |
348 | '@rollup/rollup-darwin-arm64@4.34.4':
349 | resolution: {integrity: sha512-drHl+4qhFj+PV/jrQ78p9ch6A0MfNVZScl/nBps5a7u01aGf/GuBRrHnRegA9bP222CBDfjYbFdjkIJ/FurvSQ==}
350 | cpu: [arm64]
351 | os: [darwin]
352 |
353 | '@rollup/rollup-darwin-x64@4.34.4':
354 | resolution: {integrity: sha512-hQqq/8QALU6t1+fbNmm6dwYsa0PDD4L5r3TpHx9dNl+aSEMnIksHZkSO3AVH+hBMvZhpumIGrTFj8XCOGuIXjw==}
355 | cpu: [x64]
356 | os: [darwin]
357 |
358 | '@rollup/rollup-freebsd-arm64@4.34.4':
359 | resolution: {integrity: sha512-/L0LixBmbefkec1JTeAQJP0ETzGjFtNml2gpQXA8rpLo7Md+iXQzo9kwEgzyat5Q+OG/C//2B9Fx52UxsOXbzw==}
360 | cpu: [arm64]
361 | os: [freebsd]
362 |
363 | '@rollup/rollup-freebsd-x64@4.34.4':
364 | resolution: {integrity: sha512-6Rk3PLRK+b8L/M6m/x6Mfj60LhAUcLJ34oPaxufA+CfqkUrDoUPQYFdRrhqyOvtOKXLJZJwxlOLbQjNYQcRQfw==}
365 | cpu: [x64]
366 | os: [freebsd]
367 |
368 | '@rollup/rollup-linux-arm-gnueabihf@4.34.4':
369 | resolution: {integrity: sha512-kmT3x0IPRuXY/tNoABp2nDvI9EvdiS2JZsd4I9yOcLCCViKsP0gB38mVHOhluzx+SSVnM1KNn9k6osyXZhLoCA==}
370 | cpu: [arm]
371 | os: [linux]
372 |
373 | '@rollup/rollup-linux-arm-musleabihf@4.34.4':
374 | resolution: {integrity: sha512-3iSA9tx+4PZcJH/Wnwsvx/BY4qHpit/u2YoZoXugWVfc36/4mRkgGEoRbRV7nzNBSCOgbWMeuQ27IQWgJ7tRzw==}
375 | cpu: [arm]
376 | os: [linux]
377 |
378 | '@rollup/rollup-linux-arm64-gnu@4.34.4':
379 | resolution: {integrity: sha512-7CwSJW+sEhM9sESEk+pEREF2JL0BmyCro8UyTq0Kyh0nu1v0QPNY3yfLPFKChzVoUmaKj8zbdgBxUhBRR+xGxg==}
380 | cpu: [arm64]
381 | os: [linux]
382 |
383 | '@rollup/rollup-linux-arm64-musl@4.34.4':
384 | resolution: {integrity: sha512-GZdafB41/4s12j8Ss2izofjeFXRAAM7sHCb+S4JsI9vaONX/zQ8cXd87B9MRU/igGAJkKvmFmJJBeeT9jJ5Cbw==}
385 | cpu: [arm64]
386 | os: [linux]
387 |
388 | '@rollup/rollup-linux-loongarch64-gnu@4.34.4':
389 | resolution: {integrity: sha512-uuphLuw1X6ur11675c2twC6YxbzyLSpWggvdawTUamlsoUv81aAXRMPBC1uvQllnBGls0Qt5Siw8reSIBnbdqQ==}
390 | cpu: [loong64]
391 | os: [linux]
392 |
393 | '@rollup/rollup-linux-powerpc64le-gnu@4.34.4':
394 | resolution: {integrity: sha512-KvLEw1os2gSmD6k6QPCQMm2T9P2GYvsMZMRpMz78QpSoEevHbV/KOUbI/46/JRalhtSAYZBYLAnT9YE4i/l4vg==}
395 | cpu: [ppc64]
396 | os: [linux]
397 |
398 | '@rollup/rollup-linux-riscv64-gnu@4.34.4':
399 | resolution: {integrity: sha512-wcpCLHGM9yv+3Dql/CI4zrY2mpQ4WFergD3c9cpRowltEh5I84pRT/EuHZsG0In4eBPPYthXnuR++HrFkeqwkA==}
400 | cpu: [riscv64]
401 | os: [linux]
402 |
403 | '@rollup/rollup-linux-s390x-gnu@4.34.4':
404 | resolution: {integrity: sha512-nLbfQp2lbJYU8obhRQusXKbuiqm4jSJteLwfjnunDT5ugBKdxqw1X9KWwk8xp1OMC6P5d0WbzxzhWoznuVK6XA==}
405 | cpu: [s390x]
406 | os: [linux]
407 |
408 | '@rollup/rollup-linux-x64-gnu@4.34.4':
409 | resolution: {integrity: sha512-JGejzEfVzqc/XNiCKZj14eb6s5w8DdWlnQ5tWUbs99kkdvfq9btxxVX97AaxiUX7xJTKFA0LwoS0KU8C2faZRg==}
410 | cpu: [x64]
411 | os: [linux]
412 |
413 | '@rollup/rollup-linux-x64-musl@4.34.4':
414 | resolution: {integrity: sha512-/iFIbhzeyZZy49ozAWJ1ZR2KW6ZdYUbQXLT4O5n1cRZRoTpwExnHLjlurDXXPKEGxiAg0ujaR9JDYKljpr2fDg==}
415 | cpu: [x64]
416 | os: [linux]
417 |
418 | '@rollup/rollup-win32-arm64-msvc@4.34.4':
419 | resolution: {integrity: sha512-qORc3UzoD5UUTneiP2Afg5n5Ti1GAW9Gp5vHPxzvAFFA3FBaum9WqGvYXGf+c7beFdOKNos31/41PRMUwh1tpA==}
420 | cpu: [arm64]
421 | os: [win32]
422 |
423 | '@rollup/rollup-win32-ia32-msvc@4.34.4':
424 | resolution: {integrity: sha512-5g7E2PHNK2uvoD5bASBD9aelm44nf1w4I5FEI7MPHLWcCSrR8JragXZWgKPXk5i2FU3JFfa6CGZLw2RrGBHs2Q==}
425 | cpu: [ia32]
426 | os: [win32]
427 |
428 | '@rollup/rollup-win32-x64-msvc@4.34.4':
429 | resolution: {integrity: sha512-p0scwGkR4kZ242xLPBuhSckrJ734frz6v9xZzD+kHVYRAkSUmdSLCIJRfql6H5//aF8Q10K+i7q8DiPfZp0b7A==}
430 | cpu: [x64]
431 | os: [win32]
432 |
433 | '@tailwindcss/typography@0.5.16':
434 | resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==}
435 | peerDependencies:
436 | tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1'
437 |
438 | '@types/babel__core@7.20.5':
439 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
440 |
441 | '@types/babel__generator@7.6.8':
442 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
443 |
444 | '@types/babel__template@7.4.4':
445 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
446 |
447 | '@types/babel__traverse@7.20.6':
448 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
449 |
450 | '@types/debug@4.1.12':
451 | resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
452 |
453 | '@types/estree-jsx@1.0.5':
454 | resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
455 |
456 | '@types/estree@1.0.6':
457 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
458 |
459 | '@types/hast@3.0.4':
460 | resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
461 |
462 | '@types/mdast@4.0.4':
463 | resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
464 |
465 | '@types/ms@2.1.0':
466 | resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
467 |
468 | '@types/node@20.17.17':
469 | resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==}
470 |
471 | '@types/prop-types@15.7.14':
472 | resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
473 |
474 | '@types/react-dom@18.3.5':
475 | resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==}
476 | peerDependencies:
477 | '@types/react': ^18.0.0
478 |
479 | '@types/react@18.3.18':
480 | resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==}
481 |
482 | '@types/unist@2.0.11':
483 | resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
484 |
485 | '@types/unist@3.0.3':
486 | resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
487 |
488 | '@ungap/structured-clone@1.3.0':
489 | resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
490 |
491 | '@vitejs/plugin-react@4.3.4':
492 | resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==}
493 | engines: {node: ^14.18.0 || >=16.0.0}
494 | peerDependencies:
495 | vite: ^4.2.0 || ^5.0.0 || ^6.0.0
496 |
497 | ansi-regex@5.0.1:
498 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
499 | engines: {node: '>=8'}
500 |
501 | ansi-regex@6.1.0:
502 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
503 | engines: {node: '>=12'}
504 |
505 | ansi-styles@4.3.0:
506 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
507 | engines: {node: '>=8'}
508 |
509 | ansi-styles@6.2.1:
510 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
511 | engines: {node: '>=12'}
512 |
513 | any-promise@1.3.0:
514 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
515 |
516 | anymatch@3.1.3:
517 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
518 | engines: {node: '>= 8'}
519 |
520 | arg@5.0.2:
521 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
522 |
523 | autoprefixer@10.4.20:
524 | resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
525 | engines: {node: ^10 || ^12 || >=14}
526 | hasBin: true
527 | peerDependencies:
528 | postcss: ^8.1.0
529 |
530 | bail@2.0.2:
531 | resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
532 |
533 | balanced-match@1.0.2:
534 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
535 |
536 | binary-extensions@2.3.0:
537 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
538 | engines: {node: '>=8'}
539 |
540 | brace-expansion@2.0.1:
541 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
542 |
543 | braces@3.0.3:
544 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
545 | engines: {node: '>=8'}
546 |
547 | browserslist@4.24.4:
548 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
549 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
550 | hasBin: true
551 |
552 | camelcase-css@2.0.1:
553 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
554 | engines: {node: '>= 6'}
555 |
556 | caniuse-lite@1.0.30001697:
557 | resolution: {integrity: sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ==}
558 |
559 | ccount@2.0.1:
560 | resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
561 |
562 | character-entities-html4@2.1.0:
563 | resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
564 |
565 | character-entities-legacy@3.0.0:
566 | resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
567 |
568 | character-entities@2.0.2:
569 | resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
570 |
571 | character-reference-invalid@2.0.1:
572 | resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
573 |
574 | chokidar@3.6.0:
575 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
576 | engines: {node: '>= 8.10.0'}
577 |
578 | color-convert@2.0.1:
579 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
580 | engines: {node: '>=7.0.0'}
581 |
582 | color-name@1.1.4:
583 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
584 |
585 | comma-separated-tokens@2.0.3:
586 | resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
587 |
588 | commander@4.1.1:
589 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
590 | engines: {node: '>= 6'}
591 |
592 | convert-source-map@2.0.0:
593 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
594 |
595 | cross-spawn@7.0.6:
596 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
597 | engines: {node: '>= 8'}
598 |
599 | cssesc@3.0.0:
600 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
601 | engines: {node: '>=4'}
602 | hasBin: true
603 |
604 | csstype@3.1.3:
605 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
606 |
607 | debug@4.4.0:
608 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
609 | engines: {node: '>=6.0'}
610 | peerDependencies:
611 | supports-color: '*'
612 | peerDependenciesMeta:
613 | supports-color:
614 | optional: true
615 |
616 | decode-named-character-reference@1.0.2:
617 | resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
618 |
619 | dequal@2.0.3:
620 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
621 | engines: {node: '>=6'}
622 |
623 | devlop@1.1.0:
624 | resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
625 |
626 | didyoumean@1.2.2:
627 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
628 |
629 | dlv@1.1.3:
630 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
631 |
632 | eastasianwidth@0.2.0:
633 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
634 |
635 | electron-to-chromium@1.5.93:
636 | resolution: {integrity: sha512-M+29jTcfNNoR9NV7la4SwUqzWAxEwnc7ThA5e1m6LRSotmpfpCpLcIfgtSCVL+MllNLgAyM/5ru86iMRemPzDQ==}
637 |
638 | emoji-regex@8.0.0:
639 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
640 |
641 | emoji-regex@9.2.2:
642 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
643 |
644 | esbuild@0.21.5:
645 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
646 | engines: {node: '>=12'}
647 | hasBin: true
648 |
649 | escalade@3.2.0:
650 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
651 | engines: {node: '>=6'}
652 |
653 | estree-util-is-identifier-name@3.0.0:
654 | resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
655 |
656 | extend@3.0.2:
657 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
658 |
659 | fast-glob@3.3.3:
660 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
661 | engines: {node: '>=8.6.0'}
662 |
663 | fastq@1.19.0:
664 | resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
665 |
666 | fill-range@7.1.1:
667 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
668 | engines: {node: '>=8'}
669 |
670 | foreground-child@3.3.0:
671 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
672 | engines: {node: '>=14'}
673 |
674 | fraction.js@4.3.7:
675 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
676 |
677 | fsevents@2.3.3:
678 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
679 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
680 | os: [darwin]
681 |
682 | function-bind@1.1.2:
683 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
684 |
685 | gensync@1.0.0-beta.2:
686 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
687 | engines: {node: '>=6.9.0'}
688 |
689 | glob-parent@5.1.2:
690 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
691 | engines: {node: '>= 6'}
692 |
693 | glob-parent@6.0.2:
694 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
695 | engines: {node: '>=10.13.0'}
696 |
697 | glob@10.4.5:
698 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
699 | hasBin: true
700 |
701 | globals@11.12.0:
702 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
703 | engines: {node: '>=4'}
704 |
705 | goober@2.1.16:
706 | resolution: {integrity: sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==}
707 | peerDependencies:
708 | csstype: ^3.0.10
709 |
710 | hasown@2.0.2:
711 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
712 | engines: {node: '>= 0.4'}
713 |
714 | hast-util-to-jsx-runtime@2.3.2:
715 | resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==}
716 |
717 | hast-util-whitespace@3.0.0:
718 | resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
719 |
720 | html-url-attributes@3.0.1:
721 | resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==}
722 |
723 | inline-style-parser@0.2.4:
724 | resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
725 |
726 | is-alphabetical@2.0.1:
727 | resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
728 |
729 | is-alphanumerical@2.0.1:
730 | resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
731 |
732 | is-binary-path@2.1.0:
733 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
734 | engines: {node: '>=8'}
735 |
736 | is-core-module@2.16.1:
737 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
738 | engines: {node: '>= 0.4'}
739 |
740 | is-decimal@2.0.1:
741 | resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
742 |
743 | is-extglob@2.1.1:
744 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
745 | engines: {node: '>=0.10.0'}
746 |
747 | is-fullwidth-code-point@3.0.0:
748 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
749 | engines: {node: '>=8'}
750 |
751 | is-glob@4.0.3:
752 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
753 | engines: {node: '>=0.10.0'}
754 |
755 | is-hexadecimal@2.0.1:
756 | resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
757 |
758 | is-number@7.0.0:
759 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
760 | engines: {node: '>=0.12.0'}
761 |
762 | is-plain-obj@4.1.0:
763 | resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
764 | engines: {node: '>=12'}
765 |
766 | isexe@2.0.0:
767 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
768 |
769 | jackspeak@3.4.3:
770 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
771 |
772 | jiti@1.21.7:
773 | resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
774 | hasBin: true
775 |
776 | js-tokens@4.0.0:
777 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
778 |
779 | jsesc@3.1.0:
780 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
781 | engines: {node: '>=6'}
782 | hasBin: true
783 |
784 | json5@2.2.3:
785 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
786 | engines: {node: '>=6'}
787 | hasBin: true
788 |
789 | lilconfig@3.1.3:
790 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
791 | engines: {node: '>=14'}
792 |
793 | lines-and-columns@1.2.4:
794 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
795 |
796 | lodash.castarray@4.4.0:
797 | resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
798 |
799 | lodash.isplainobject@4.0.6:
800 | resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
801 |
802 | lodash.merge@4.6.2:
803 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
804 |
805 | longest-streak@3.1.0:
806 | resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
807 |
808 | loose-envify@1.4.0:
809 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
810 | hasBin: true
811 |
812 | lru-cache@10.4.3:
813 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
814 |
815 | lru-cache@5.1.1:
816 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
817 |
818 | lucide-react@0.358.0:
819 | resolution: {integrity: sha512-rBSptRjZTMBm24zsFhR6pK/NgbT18JegZGKcH4+1H3+UigMSRpeoWLtR/fAwMYwYnlJOZB+y8WpeHne9D6X6Kg==}
820 | peerDependencies:
821 | react: ^16.5.1 || ^17.0.0 || ^18.0.0
822 |
823 | mdast-util-from-markdown@2.0.2:
824 | resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
825 |
826 | mdast-util-mdx-expression@2.0.1:
827 | resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
828 |
829 | mdast-util-mdx-jsx@3.2.0:
830 | resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
831 |
832 | mdast-util-mdxjs-esm@2.0.1:
833 | resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
834 |
835 | mdast-util-phrasing@4.1.0:
836 | resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
837 |
838 | mdast-util-to-hast@13.2.0:
839 | resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
840 |
841 | mdast-util-to-markdown@2.1.2:
842 | resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
843 |
844 | mdast-util-to-string@4.0.0:
845 | resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
846 |
847 | merge2@1.4.1:
848 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
849 | engines: {node: '>= 8'}
850 |
851 | micromark-core-commonmark@2.0.2:
852 | resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==}
853 |
854 | micromark-factory-destination@2.0.1:
855 | resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
856 |
857 | micromark-factory-label@2.0.1:
858 | resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
859 |
860 | micromark-factory-space@2.0.1:
861 | resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
862 |
863 | micromark-factory-title@2.0.1:
864 | resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
865 |
866 | micromark-factory-whitespace@2.0.1:
867 | resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
868 |
869 | micromark-util-character@2.1.1:
870 | resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
871 |
872 | micromark-util-chunked@2.0.1:
873 | resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
874 |
875 | micromark-util-classify-character@2.0.1:
876 | resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
877 |
878 | micromark-util-combine-extensions@2.0.1:
879 | resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
880 |
881 | micromark-util-decode-numeric-character-reference@2.0.2:
882 | resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
883 |
884 | micromark-util-decode-string@2.0.1:
885 | resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
886 |
887 | micromark-util-encode@2.0.1:
888 | resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
889 |
890 | micromark-util-html-tag-name@2.0.1:
891 | resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
892 |
893 | micromark-util-normalize-identifier@2.0.1:
894 | resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
895 |
896 | micromark-util-resolve-all@2.0.1:
897 | resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
898 |
899 | micromark-util-sanitize-uri@2.0.1:
900 | resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
901 |
902 | micromark-util-subtokenize@2.0.4:
903 | resolution: {integrity: sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==}
904 |
905 | micromark-util-symbol@2.0.1:
906 | resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
907 |
908 | micromark-util-types@2.0.1:
909 | resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==}
910 |
911 | micromark@4.0.1:
912 | resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==}
913 |
914 | micromatch@4.0.8:
915 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
916 | engines: {node: '>=8.6'}
917 |
918 | minimatch@9.0.5:
919 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
920 | engines: {node: '>=16 || 14 >=14.17'}
921 |
922 | minipass@7.1.2:
923 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
924 | engines: {node: '>=16 || 14 >=14.17'}
925 |
926 | ms@2.1.3:
927 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
928 |
929 | mz@2.7.0:
930 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
931 |
932 | nanoid@3.3.8:
933 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
934 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
935 | hasBin: true
936 |
937 | node-releases@2.0.19:
938 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
939 |
940 | normalize-path@3.0.0:
941 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
942 | engines: {node: '>=0.10.0'}
943 |
944 | normalize-range@0.1.2:
945 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
946 | engines: {node: '>=0.10.0'}
947 |
948 | object-assign@4.1.1:
949 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
950 | engines: {node: '>=0.10.0'}
951 |
952 | object-hash@3.0.0:
953 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
954 | engines: {node: '>= 6'}
955 |
956 | package-json-from-dist@1.0.1:
957 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
958 |
959 | parse-entities@4.0.2:
960 | resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
961 |
962 | path-key@3.1.1:
963 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
964 | engines: {node: '>=8'}
965 |
966 | path-parse@1.0.7:
967 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
968 |
969 | path-scurry@1.11.1:
970 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
971 | engines: {node: '>=16 || 14 >=14.18'}
972 |
973 | picocolors@1.1.1:
974 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
975 |
976 | picomatch@2.3.1:
977 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
978 | engines: {node: '>=8.6'}
979 |
980 | pify@2.3.0:
981 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
982 | engines: {node: '>=0.10.0'}
983 |
984 | pirates@4.0.6:
985 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
986 | engines: {node: '>= 6'}
987 |
988 | postcss-import@15.1.0:
989 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
990 | engines: {node: '>=14.0.0'}
991 | peerDependencies:
992 | postcss: ^8.0.0
993 |
994 | postcss-js@4.0.1:
995 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
996 | engines: {node: ^12 || ^14 || >= 16}
997 | peerDependencies:
998 | postcss: ^8.4.21
999 |
1000 | postcss-load-config@4.0.2:
1001 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
1002 | engines: {node: '>= 14'}
1003 | peerDependencies:
1004 | postcss: '>=8.0.9'
1005 | ts-node: '>=9.0.0'
1006 | peerDependenciesMeta:
1007 | postcss:
1008 | optional: true
1009 | ts-node:
1010 | optional: true
1011 |
1012 | postcss-nested@6.2.0:
1013 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
1014 | engines: {node: '>=12.0'}
1015 | peerDependencies:
1016 | postcss: ^8.2.14
1017 |
1018 | postcss-selector-parser@6.0.10:
1019 | resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
1020 | engines: {node: '>=4'}
1021 |
1022 | postcss-selector-parser@6.1.2:
1023 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
1024 | engines: {node: '>=4'}
1025 |
1026 | postcss-value-parser@4.2.0:
1027 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1028 |
1029 | postcss@8.5.1:
1030 | resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==}
1031 | engines: {node: ^10 || ^12 || >=14}
1032 |
1033 | property-information@6.5.0:
1034 | resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
1035 |
1036 | queue-microtask@1.2.3:
1037 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1038 |
1039 | react-dom@18.3.1:
1040 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
1041 | peerDependencies:
1042 | react: ^18.3.1
1043 |
1044 | react-hot-toast@2.5.1:
1045 | resolution: {integrity: sha512-54Gq1ZD1JbmAb4psp9bvFHjS7lje+8ubboUmvKZkCsQBLH6AOpZ9JemfRvIdHcfb9AZXRaFLrb3qUobGYDJhFQ==}
1046 | engines: {node: '>=10'}
1047 | peerDependencies:
1048 | react: '>=16'
1049 | react-dom: '>=16'
1050 |
1051 | react-markdown@9.0.3:
1052 | resolution: {integrity: sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==}
1053 | peerDependencies:
1054 | '@types/react': '>=18'
1055 | react: '>=18'
1056 |
1057 | react-refresh@0.14.2:
1058 | resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
1059 | engines: {node: '>=0.10.0'}
1060 |
1061 | react@18.3.1:
1062 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
1063 | engines: {node: '>=0.10.0'}
1064 |
1065 | read-cache@1.0.0:
1066 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
1067 |
1068 | readdirp@3.6.0:
1069 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1070 | engines: {node: '>=8.10.0'}
1071 |
1072 | remark-parse@11.0.0:
1073 | resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
1074 |
1075 | remark-rehype@11.1.1:
1076 | resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
1077 |
1078 | resolve@1.22.10:
1079 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1080 | engines: {node: '>= 0.4'}
1081 | hasBin: true
1082 |
1083 | reusify@1.0.4:
1084 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1085 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1086 |
1087 | rollup@4.34.4:
1088 | resolution: {integrity: sha512-spF66xoyD7rz3o08sHP7wogp1gZ6itSq22SGa/IZTcUDXDlOyrShwMwkVSB+BUxFRZZCUYqdb3KWDEOMVQZxuw==}
1089 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1090 | hasBin: true
1091 |
1092 | run-parallel@1.2.0:
1093 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1094 |
1095 | scheduler@0.23.2:
1096 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
1097 |
1098 | semver@6.3.1:
1099 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1100 | hasBin: true
1101 |
1102 | shebang-command@2.0.0:
1103 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1104 | engines: {node: '>=8'}
1105 |
1106 | shebang-regex@3.0.0:
1107 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1108 | engines: {node: '>=8'}
1109 |
1110 | signal-exit@4.1.0:
1111 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1112 | engines: {node: '>=14'}
1113 |
1114 | source-map-js@1.2.1:
1115 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1116 | engines: {node: '>=0.10.0'}
1117 |
1118 | space-separated-tokens@2.0.2:
1119 | resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
1120 |
1121 | string-width@4.2.3:
1122 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1123 | engines: {node: '>=8'}
1124 |
1125 | string-width@5.1.2:
1126 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1127 | engines: {node: '>=12'}
1128 |
1129 | stringify-entities@4.0.4:
1130 | resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
1131 |
1132 | strip-ansi@6.0.1:
1133 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1134 | engines: {node: '>=8'}
1135 |
1136 | strip-ansi@7.1.0:
1137 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1138 | engines: {node: '>=12'}
1139 |
1140 | style-to-object@1.0.8:
1141 | resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==}
1142 |
1143 | sucrase@3.35.0:
1144 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
1145 | engines: {node: '>=16 || 14 >=14.17'}
1146 | hasBin: true
1147 |
1148 | supports-preserve-symlinks-flag@1.0.0:
1149 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1150 | engines: {node: '>= 0.4'}
1151 |
1152 | tailwindcss@3.4.17:
1153 | resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
1154 | engines: {node: '>=14.0.0'}
1155 | hasBin: true
1156 |
1157 | thenify-all@1.6.0:
1158 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1159 | engines: {node: '>=0.8'}
1160 |
1161 | thenify@3.3.1:
1162 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1163 |
1164 | to-regex-range@5.0.1:
1165 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1166 | engines: {node: '>=8.0'}
1167 |
1168 | trim-lines@3.0.1:
1169 | resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
1170 |
1171 | trough@2.2.0:
1172 | resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
1173 |
1174 | ts-interface-checker@0.1.13:
1175 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1176 |
1177 | typescript@5.7.3:
1178 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==}
1179 | engines: {node: '>=14.17'}
1180 | hasBin: true
1181 |
1182 | undici-types@6.19.8:
1183 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
1184 |
1185 | unified@11.0.5:
1186 | resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
1187 |
1188 | unist-util-is@6.0.0:
1189 | resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
1190 |
1191 | unist-util-position@5.0.0:
1192 | resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
1193 |
1194 | unist-util-stringify-position@4.0.0:
1195 | resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
1196 |
1197 | unist-util-visit-parents@6.0.1:
1198 | resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
1199 |
1200 | unist-util-visit@5.0.0:
1201 | resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
1202 |
1203 | update-browserslist-db@1.1.2:
1204 | resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==}
1205 | hasBin: true
1206 | peerDependencies:
1207 | browserslist: '>= 4.21.0'
1208 |
1209 | util-deprecate@1.0.2:
1210 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1211 |
1212 | vfile-message@4.0.2:
1213 | resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
1214 |
1215 | vfile@6.0.3:
1216 | resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
1217 |
1218 | vite@5.4.14:
1219 | resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==}
1220 | engines: {node: ^18.0.0 || >=20.0.0}
1221 | hasBin: true
1222 | peerDependencies:
1223 | '@types/node': ^18.0.0 || >=20.0.0
1224 | less: '*'
1225 | lightningcss: ^1.21.0
1226 | sass: '*'
1227 | sass-embedded: '*'
1228 | stylus: '*'
1229 | sugarss: '*'
1230 | terser: ^5.4.0
1231 | peerDependenciesMeta:
1232 | '@types/node':
1233 | optional: true
1234 | less:
1235 | optional: true
1236 | lightningcss:
1237 | optional: true
1238 | sass:
1239 | optional: true
1240 | sass-embedded:
1241 | optional: true
1242 | stylus:
1243 | optional: true
1244 | sugarss:
1245 | optional: true
1246 | terser:
1247 | optional: true
1248 |
1249 | which@2.0.2:
1250 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1251 | engines: {node: '>= 8'}
1252 | hasBin: true
1253 |
1254 | wrap-ansi@7.0.0:
1255 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1256 | engines: {node: '>=10'}
1257 |
1258 | wrap-ansi@8.1.0:
1259 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1260 | engines: {node: '>=12'}
1261 |
1262 | yallist@3.1.1:
1263 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1264 |
1265 | yaml@2.7.0:
1266 | resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==}
1267 | engines: {node: '>= 14'}
1268 | hasBin: true
1269 |
1270 | zwitch@2.0.4:
1271 | resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
1272 |
1273 | snapshots:
1274 |
1275 | '@alloc/quick-lru@5.2.0': {}
1276 |
1277 | '@ampproject/remapping@2.3.0':
1278 | dependencies:
1279 | '@jridgewell/gen-mapping': 0.3.8
1280 | '@jridgewell/trace-mapping': 0.3.25
1281 |
1282 | '@babel/code-frame@7.26.2':
1283 | dependencies:
1284 | '@babel/helper-validator-identifier': 7.25.9
1285 | js-tokens: 4.0.0
1286 | picocolors: 1.1.1
1287 |
1288 | '@babel/compat-data@7.26.5': {}
1289 |
1290 | '@babel/core@7.26.7':
1291 | dependencies:
1292 | '@ampproject/remapping': 2.3.0
1293 | '@babel/code-frame': 7.26.2
1294 | '@babel/generator': 7.26.5
1295 | '@babel/helper-compilation-targets': 7.26.5
1296 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7)
1297 | '@babel/helpers': 7.26.7
1298 | '@babel/parser': 7.26.7
1299 | '@babel/template': 7.25.9
1300 | '@babel/traverse': 7.26.7
1301 | '@babel/types': 7.26.7
1302 | convert-source-map: 2.0.0
1303 | debug: 4.4.0
1304 | gensync: 1.0.0-beta.2
1305 | json5: 2.2.3
1306 | semver: 6.3.1
1307 | transitivePeerDependencies:
1308 | - supports-color
1309 |
1310 | '@babel/generator@7.26.5':
1311 | dependencies:
1312 | '@babel/parser': 7.26.7
1313 | '@babel/types': 7.26.7
1314 | '@jridgewell/gen-mapping': 0.3.8
1315 | '@jridgewell/trace-mapping': 0.3.25
1316 | jsesc: 3.1.0
1317 |
1318 | '@babel/helper-compilation-targets@7.26.5':
1319 | dependencies:
1320 | '@babel/compat-data': 7.26.5
1321 | '@babel/helper-validator-option': 7.25.9
1322 | browserslist: 4.24.4
1323 | lru-cache: 5.1.1
1324 | semver: 6.3.1
1325 |
1326 | '@babel/helper-module-imports@7.25.9':
1327 | dependencies:
1328 | '@babel/traverse': 7.26.7
1329 | '@babel/types': 7.26.7
1330 | transitivePeerDependencies:
1331 | - supports-color
1332 |
1333 | '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.7)':
1334 | dependencies:
1335 | '@babel/core': 7.26.7
1336 | '@babel/helper-module-imports': 7.25.9
1337 | '@babel/helper-validator-identifier': 7.25.9
1338 | '@babel/traverse': 7.26.7
1339 | transitivePeerDependencies:
1340 | - supports-color
1341 |
1342 | '@babel/helper-plugin-utils@7.26.5': {}
1343 |
1344 | '@babel/helper-string-parser@7.25.9': {}
1345 |
1346 | '@babel/helper-validator-identifier@7.25.9': {}
1347 |
1348 | '@babel/helper-validator-option@7.25.9': {}
1349 |
1350 | '@babel/helpers@7.26.7':
1351 | dependencies:
1352 | '@babel/template': 7.25.9
1353 | '@babel/types': 7.26.7
1354 |
1355 | '@babel/parser@7.26.7':
1356 | dependencies:
1357 | '@babel/types': 7.26.7
1358 |
1359 | '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.7)':
1360 | dependencies:
1361 | '@babel/core': 7.26.7
1362 | '@babel/helper-plugin-utils': 7.26.5
1363 |
1364 | '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.7)':
1365 | dependencies:
1366 | '@babel/core': 7.26.7
1367 | '@babel/helper-plugin-utils': 7.26.5
1368 |
1369 | '@babel/template@7.25.9':
1370 | dependencies:
1371 | '@babel/code-frame': 7.26.2
1372 | '@babel/parser': 7.26.7
1373 | '@babel/types': 7.26.7
1374 |
1375 | '@babel/traverse@7.26.7':
1376 | dependencies:
1377 | '@babel/code-frame': 7.26.2
1378 | '@babel/generator': 7.26.5
1379 | '@babel/parser': 7.26.7
1380 | '@babel/template': 7.25.9
1381 | '@babel/types': 7.26.7
1382 | debug: 4.4.0
1383 | globals: 11.12.0
1384 | transitivePeerDependencies:
1385 | - supports-color
1386 |
1387 | '@babel/types@7.26.7':
1388 | dependencies:
1389 | '@babel/helper-string-parser': 7.25.9
1390 | '@babel/helper-validator-identifier': 7.25.9
1391 |
1392 | '@esbuild/aix-ppc64@0.21.5':
1393 | optional: true
1394 |
1395 | '@esbuild/android-arm64@0.21.5':
1396 | optional: true
1397 |
1398 | '@esbuild/android-arm@0.21.5':
1399 | optional: true
1400 |
1401 | '@esbuild/android-x64@0.21.5':
1402 | optional: true
1403 |
1404 | '@esbuild/darwin-arm64@0.21.5':
1405 | optional: true
1406 |
1407 | '@esbuild/darwin-x64@0.21.5':
1408 | optional: true
1409 |
1410 | '@esbuild/freebsd-arm64@0.21.5':
1411 | optional: true
1412 |
1413 | '@esbuild/freebsd-x64@0.21.5':
1414 | optional: true
1415 |
1416 | '@esbuild/linux-arm64@0.21.5':
1417 | optional: true
1418 |
1419 | '@esbuild/linux-arm@0.21.5':
1420 | optional: true
1421 |
1422 | '@esbuild/linux-ia32@0.21.5':
1423 | optional: true
1424 |
1425 | '@esbuild/linux-loong64@0.21.5':
1426 | optional: true
1427 |
1428 | '@esbuild/linux-mips64el@0.21.5':
1429 | optional: true
1430 |
1431 | '@esbuild/linux-ppc64@0.21.5':
1432 | optional: true
1433 |
1434 | '@esbuild/linux-riscv64@0.21.5':
1435 | optional: true
1436 |
1437 | '@esbuild/linux-s390x@0.21.5':
1438 | optional: true
1439 |
1440 | '@esbuild/linux-x64@0.21.5':
1441 | optional: true
1442 |
1443 | '@esbuild/netbsd-x64@0.21.5':
1444 | optional: true
1445 |
1446 | '@esbuild/openbsd-x64@0.21.5':
1447 | optional: true
1448 |
1449 | '@esbuild/sunos-x64@0.21.5':
1450 | optional: true
1451 |
1452 | '@esbuild/win32-arm64@0.21.5':
1453 | optional: true
1454 |
1455 | '@esbuild/win32-ia32@0.21.5':
1456 | optional: true
1457 |
1458 | '@esbuild/win32-x64@0.21.5':
1459 | optional: true
1460 |
1461 | '@isaacs/cliui@8.0.2':
1462 | dependencies:
1463 | string-width: 5.1.2
1464 | string-width-cjs: string-width@4.2.3
1465 | strip-ansi: 7.1.0
1466 | strip-ansi-cjs: strip-ansi@6.0.1
1467 | wrap-ansi: 8.1.0
1468 | wrap-ansi-cjs: wrap-ansi@7.0.0
1469 |
1470 | '@jridgewell/gen-mapping@0.3.8':
1471 | dependencies:
1472 | '@jridgewell/set-array': 1.2.1
1473 | '@jridgewell/sourcemap-codec': 1.5.0
1474 | '@jridgewell/trace-mapping': 0.3.25
1475 |
1476 | '@jridgewell/resolve-uri@3.1.2': {}
1477 |
1478 | '@jridgewell/set-array@1.2.1': {}
1479 |
1480 | '@jridgewell/sourcemap-codec@1.5.0': {}
1481 |
1482 | '@jridgewell/trace-mapping@0.3.25':
1483 | dependencies:
1484 | '@jridgewell/resolve-uri': 3.1.2
1485 | '@jridgewell/sourcemap-codec': 1.5.0
1486 |
1487 | '@nodelib/fs.scandir@2.1.5':
1488 | dependencies:
1489 | '@nodelib/fs.stat': 2.0.5
1490 | run-parallel: 1.2.0
1491 |
1492 | '@nodelib/fs.stat@2.0.5': {}
1493 |
1494 | '@nodelib/fs.walk@1.2.8':
1495 | dependencies:
1496 | '@nodelib/fs.scandir': 2.1.5
1497 | fastq: 1.19.0
1498 |
1499 | '@pkgjs/parseargs@0.11.0':
1500 | optional: true
1501 |
1502 | '@rollup/rollup-android-arm-eabi@4.34.4':
1503 | optional: true
1504 |
1505 | '@rollup/rollup-android-arm64@4.34.4':
1506 | optional: true
1507 |
1508 | '@rollup/rollup-darwin-arm64@4.34.4':
1509 | optional: true
1510 |
1511 | '@rollup/rollup-darwin-x64@4.34.4':
1512 | optional: true
1513 |
1514 | '@rollup/rollup-freebsd-arm64@4.34.4':
1515 | optional: true
1516 |
1517 | '@rollup/rollup-freebsd-x64@4.34.4':
1518 | optional: true
1519 |
1520 | '@rollup/rollup-linux-arm-gnueabihf@4.34.4':
1521 | optional: true
1522 |
1523 | '@rollup/rollup-linux-arm-musleabihf@4.34.4':
1524 | optional: true
1525 |
1526 | '@rollup/rollup-linux-arm64-gnu@4.34.4':
1527 | optional: true
1528 |
1529 | '@rollup/rollup-linux-arm64-musl@4.34.4':
1530 | optional: true
1531 |
1532 | '@rollup/rollup-linux-loongarch64-gnu@4.34.4':
1533 | optional: true
1534 |
1535 | '@rollup/rollup-linux-powerpc64le-gnu@4.34.4':
1536 | optional: true
1537 |
1538 | '@rollup/rollup-linux-riscv64-gnu@4.34.4':
1539 | optional: true
1540 |
1541 | '@rollup/rollup-linux-s390x-gnu@4.34.4':
1542 | optional: true
1543 |
1544 | '@rollup/rollup-linux-x64-gnu@4.34.4':
1545 | optional: true
1546 |
1547 | '@rollup/rollup-linux-x64-musl@4.34.4':
1548 | optional: true
1549 |
1550 | '@rollup/rollup-win32-arm64-msvc@4.34.4':
1551 | optional: true
1552 |
1553 | '@rollup/rollup-win32-ia32-msvc@4.34.4':
1554 | optional: true
1555 |
1556 | '@rollup/rollup-win32-x64-msvc@4.34.4':
1557 | optional: true
1558 |
1559 | '@tailwindcss/typography@0.5.16(tailwindcss@3.4.17)':
1560 | dependencies:
1561 | lodash.castarray: 4.4.0
1562 | lodash.isplainobject: 4.0.6
1563 | lodash.merge: 4.6.2
1564 | postcss-selector-parser: 6.0.10
1565 | tailwindcss: 3.4.17
1566 |
1567 | '@types/babel__core@7.20.5':
1568 | dependencies:
1569 | '@babel/parser': 7.26.7
1570 | '@babel/types': 7.26.7
1571 | '@types/babel__generator': 7.6.8
1572 | '@types/babel__template': 7.4.4
1573 | '@types/babel__traverse': 7.20.6
1574 |
1575 | '@types/babel__generator@7.6.8':
1576 | dependencies:
1577 | '@babel/types': 7.26.7
1578 |
1579 | '@types/babel__template@7.4.4':
1580 | dependencies:
1581 | '@babel/parser': 7.26.7
1582 | '@babel/types': 7.26.7
1583 |
1584 | '@types/babel__traverse@7.20.6':
1585 | dependencies:
1586 | '@babel/types': 7.26.7
1587 |
1588 | '@types/debug@4.1.12':
1589 | dependencies:
1590 | '@types/ms': 2.1.0
1591 |
1592 | '@types/estree-jsx@1.0.5':
1593 | dependencies:
1594 | '@types/estree': 1.0.6
1595 |
1596 | '@types/estree@1.0.6': {}
1597 |
1598 | '@types/hast@3.0.4':
1599 | dependencies:
1600 | '@types/unist': 3.0.3
1601 |
1602 | '@types/mdast@4.0.4':
1603 | dependencies:
1604 | '@types/unist': 3.0.3
1605 |
1606 | '@types/ms@2.1.0': {}
1607 |
1608 | '@types/node@20.17.17':
1609 | dependencies:
1610 | undici-types: 6.19.8
1611 |
1612 | '@types/prop-types@15.7.14': {}
1613 |
1614 | '@types/react-dom@18.3.5(@types/react@18.3.18)':
1615 | dependencies:
1616 | '@types/react': 18.3.18
1617 |
1618 | '@types/react@18.3.18':
1619 | dependencies:
1620 | '@types/prop-types': 15.7.14
1621 | csstype: 3.1.3
1622 |
1623 | '@types/unist@2.0.11': {}
1624 |
1625 | '@types/unist@3.0.3': {}
1626 |
1627 | '@ungap/structured-clone@1.3.0': {}
1628 |
1629 | '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@20.17.17))':
1630 | dependencies:
1631 | '@babel/core': 7.26.7
1632 | '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.7)
1633 | '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.7)
1634 | '@types/babel__core': 7.20.5
1635 | react-refresh: 0.14.2
1636 | vite: 5.4.14(@types/node@20.17.17)
1637 | transitivePeerDependencies:
1638 | - supports-color
1639 |
1640 | ansi-regex@5.0.1: {}
1641 |
1642 | ansi-regex@6.1.0: {}
1643 |
1644 | ansi-styles@4.3.0:
1645 | dependencies:
1646 | color-convert: 2.0.1
1647 |
1648 | ansi-styles@6.2.1: {}
1649 |
1650 | any-promise@1.3.0: {}
1651 |
1652 | anymatch@3.1.3:
1653 | dependencies:
1654 | normalize-path: 3.0.0
1655 | picomatch: 2.3.1
1656 |
1657 | arg@5.0.2: {}
1658 |
1659 | autoprefixer@10.4.20(postcss@8.5.1):
1660 | dependencies:
1661 | browserslist: 4.24.4
1662 | caniuse-lite: 1.0.30001697
1663 | fraction.js: 4.3.7
1664 | normalize-range: 0.1.2
1665 | picocolors: 1.1.1
1666 | postcss: 8.5.1
1667 | postcss-value-parser: 4.2.0
1668 |
1669 | bail@2.0.2: {}
1670 |
1671 | balanced-match@1.0.2: {}
1672 |
1673 | binary-extensions@2.3.0: {}
1674 |
1675 | brace-expansion@2.0.1:
1676 | dependencies:
1677 | balanced-match: 1.0.2
1678 |
1679 | braces@3.0.3:
1680 | dependencies:
1681 | fill-range: 7.1.1
1682 |
1683 | browserslist@4.24.4:
1684 | dependencies:
1685 | caniuse-lite: 1.0.30001697
1686 | electron-to-chromium: 1.5.93
1687 | node-releases: 2.0.19
1688 | update-browserslist-db: 1.1.2(browserslist@4.24.4)
1689 |
1690 | camelcase-css@2.0.1: {}
1691 |
1692 | caniuse-lite@1.0.30001697: {}
1693 |
1694 | ccount@2.0.1: {}
1695 |
1696 | character-entities-html4@2.1.0: {}
1697 |
1698 | character-entities-legacy@3.0.0: {}
1699 |
1700 | character-entities@2.0.2: {}
1701 |
1702 | character-reference-invalid@2.0.1: {}
1703 |
1704 | chokidar@3.6.0:
1705 | dependencies:
1706 | anymatch: 3.1.3
1707 | braces: 3.0.3
1708 | glob-parent: 5.1.2
1709 | is-binary-path: 2.1.0
1710 | is-glob: 4.0.3
1711 | normalize-path: 3.0.0
1712 | readdirp: 3.6.0
1713 | optionalDependencies:
1714 | fsevents: 2.3.3
1715 |
1716 | color-convert@2.0.1:
1717 | dependencies:
1718 | color-name: 1.1.4
1719 |
1720 | color-name@1.1.4: {}
1721 |
1722 | comma-separated-tokens@2.0.3: {}
1723 |
1724 | commander@4.1.1: {}
1725 |
1726 | convert-source-map@2.0.0: {}
1727 |
1728 | cross-spawn@7.0.6:
1729 | dependencies:
1730 | path-key: 3.1.1
1731 | shebang-command: 2.0.0
1732 | which: 2.0.2
1733 |
1734 | cssesc@3.0.0: {}
1735 |
1736 | csstype@3.1.3: {}
1737 |
1738 | debug@4.4.0:
1739 | dependencies:
1740 | ms: 2.1.3
1741 |
1742 | decode-named-character-reference@1.0.2:
1743 | dependencies:
1744 | character-entities: 2.0.2
1745 |
1746 | dequal@2.0.3: {}
1747 |
1748 | devlop@1.1.0:
1749 | dependencies:
1750 | dequal: 2.0.3
1751 |
1752 | didyoumean@1.2.2: {}
1753 |
1754 | dlv@1.1.3: {}
1755 |
1756 | eastasianwidth@0.2.0: {}
1757 |
1758 | electron-to-chromium@1.5.93: {}
1759 |
1760 | emoji-regex@8.0.0: {}
1761 |
1762 | emoji-regex@9.2.2: {}
1763 |
1764 | esbuild@0.21.5:
1765 | optionalDependencies:
1766 | '@esbuild/aix-ppc64': 0.21.5
1767 | '@esbuild/android-arm': 0.21.5
1768 | '@esbuild/android-arm64': 0.21.5
1769 | '@esbuild/android-x64': 0.21.5
1770 | '@esbuild/darwin-arm64': 0.21.5
1771 | '@esbuild/darwin-x64': 0.21.5
1772 | '@esbuild/freebsd-arm64': 0.21.5
1773 | '@esbuild/freebsd-x64': 0.21.5
1774 | '@esbuild/linux-arm': 0.21.5
1775 | '@esbuild/linux-arm64': 0.21.5
1776 | '@esbuild/linux-ia32': 0.21.5
1777 | '@esbuild/linux-loong64': 0.21.5
1778 | '@esbuild/linux-mips64el': 0.21.5
1779 | '@esbuild/linux-ppc64': 0.21.5
1780 | '@esbuild/linux-riscv64': 0.21.5
1781 | '@esbuild/linux-s390x': 0.21.5
1782 | '@esbuild/linux-x64': 0.21.5
1783 | '@esbuild/netbsd-x64': 0.21.5
1784 | '@esbuild/openbsd-x64': 0.21.5
1785 | '@esbuild/sunos-x64': 0.21.5
1786 | '@esbuild/win32-arm64': 0.21.5
1787 | '@esbuild/win32-ia32': 0.21.5
1788 | '@esbuild/win32-x64': 0.21.5
1789 |
1790 | escalade@3.2.0: {}
1791 |
1792 | estree-util-is-identifier-name@3.0.0: {}
1793 |
1794 | extend@3.0.2: {}
1795 |
1796 | fast-glob@3.3.3:
1797 | dependencies:
1798 | '@nodelib/fs.stat': 2.0.5
1799 | '@nodelib/fs.walk': 1.2.8
1800 | glob-parent: 5.1.2
1801 | merge2: 1.4.1
1802 | micromatch: 4.0.8
1803 |
1804 | fastq@1.19.0:
1805 | dependencies:
1806 | reusify: 1.0.4
1807 |
1808 | fill-range@7.1.1:
1809 | dependencies:
1810 | to-regex-range: 5.0.1
1811 |
1812 | foreground-child@3.3.0:
1813 | dependencies:
1814 | cross-spawn: 7.0.6
1815 | signal-exit: 4.1.0
1816 |
1817 | fraction.js@4.3.7: {}
1818 |
1819 | fsevents@2.3.3:
1820 | optional: true
1821 |
1822 | function-bind@1.1.2: {}
1823 |
1824 | gensync@1.0.0-beta.2: {}
1825 |
1826 | glob-parent@5.1.2:
1827 | dependencies:
1828 | is-glob: 4.0.3
1829 |
1830 | glob-parent@6.0.2:
1831 | dependencies:
1832 | is-glob: 4.0.3
1833 |
1834 | glob@10.4.5:
1835 | dependencies:
1836 | foreground-child: 3.3.0
1837 | jackspeak: 3.4.3
1838 | minimatch: 9.0.5
1839 | minipass: 7.1.2
1840 | package-json-from-dist: 1.0.1
1841 | path-scurry: 1.11.1
1842 |
1843 | globals@11.12.0: {}
1844 |
1845 | goober@2.1.16(csstype@3.1.3):
1846 | dependencies:
1847 | csstype: 3.1.3
1848 |
1849 | hasown@2.0.2:
1850 | dependencies:
1851 | function-bind: 1.1.2
1852 |
1853 | hast-util-to-jsx-runtime@2.3.2:
1854 | dependencies:
1855 | '@types/estree': 1.0.6
1856 | '@types/hast': 3.0.4
1857 | '@types/unist': 3.0.3
1858 | comma-separated-tokens: 2.0.3
1859 | devlop: 1.1.0
1860 | estree-util-is-identifier-name: 3.0.0
1861 | hast-util-whitespace: 3.0.0
1862 | mdast-util-mdx-expression: 2.0.1
1863 | mdast-util-mdx-jsx: 3.2.0
1864 | mdast-util-mdxjs-esm: 2.0.1
1865 | property-information: 6.5.0
1866 | space-separated-tokens: 2.0.2
1867 | style-to-object: 1.0.8
1868 | unist-util-position: 5.0.0
1869 | vfile-message: 4.0.2
1870 | transitivePeerDependencies:
1871 | - supports-color
1872 |
1873 | hast-util-whitespace@3.0.0:
1874 | dependencies:
1875 | '@types/hast': 3.0.4
1876 |
1877 | html-url-attributes@3.0.1: {}
1878 |
1879 | inline-style-parser@0.2.4: {}
1880 |
1881 | is-alphabetical@2.0.1: {}
1882 |
1883 | is-alphanumerical@2.0.1:
1884 | dependencies:
1885 | is-alphabetical: 2.0.1
1886 | is-decimal: 2.0.1
1887 |
1888 | is-binary-path@2.1.0:
1889 | dependencies:
1890 | binary-extensions: 2.3.0
1891 |
1892 | is-core-module@2.16.1:
1893 | dependencies:
1894 | hasown: 2.0.2
1895 |
1896 | is-decimal@2.0.1: {}
1897 |
1898 | is-extglob@2.1.1: {}
1899 |
1900 | is-fullwidth-code-point@3.0.0: {}
1901 |
1902 | is-glob@4.0.3:
1903 | dependencies:
1904 | is-extglob: 2.1.1
1905 |
1906 | is-hexadecimal@2.0.1: {}
1907 |
1908 | is-number@7.0.0: {}
1909 |
1910 | is-plain-obj@4.1.0: {}
1911 |
1912 | isexe@2.0.0: {}
1913 |
1914 | jackspeak@3.4.3:
1915 | dependencies:
1916 | '@isaacs/cliui': 8.0.2
1917 | optionalDependencies:
1918 | '@pkgjs/parseargs': 0.11.0
1919 |
1920 | jiti@1.21.7: {}
1921 |
1922 | js-tokens@4.0.0: {}
1923 |
1924 | jsesc@3.1.0: {}
1925 |
1926 | json5@2.2.3: {}
1927 |
1928 | lilconfig@3.1.3: {}
1929 |
1930 | lines-and-columns@1.2.4: {}
1931 |
1932 | lodash.castarray@4.4.0: {}
1933 |
1934 | lodash.isplainobject@4.0.6: {}
1935 |
1936 | lodash.merge@4.6.2: {}
1937 |
1938 | longest-streak@3.1.0: {}
1939 |
1940 | loose-envify@1.4.0:
1941 | dependencies:
1942 | js-tokens: 4.0.0
1943 |
1944 | lru-cache@10.4.3: {}
1945 |
1946 | lru-cache@5.1.1:
1947 | dependencies:
1948 | yallist: 3.1.1
1949 |
1950 | lucide-react@0.358.0(react@18.3.1):
1951 | dependencies:
1952 | react: 18.3.1
1953 |
1954 | mdast-util-from-markdown@2.0.2:
1955 | dependencies:
1956 | '@types/mdast': 4.0.4
1957 | '@types/unist': 3.0.3
1958 | decode-named-character-reference: 1.0.2
1959 | devlop: 1.1.0
1960 | mdast-util-to-string: 4.0.0
1961 | micromark: 4.0.1
1962 | micromark-util-decode-numeric-character-reference: 2.0.2
1963 | micromark-util-decode-string: 2.0.1
1964 | micromark-util-normalize-identifier: 2.0.1
1965 | micromark-util-symbol: 2.0.1
1966 | micromark-util-types: 2.0.1
1967 | unist-util-stringify-position: 4.0.0
1968 | transitivePeerDependencies:
1969 | - supports-color
1970 |
1971 | mdast-util-mdx-expression@2.0.1:
1972 | dependencies:
1973 | '@types/estree-jsx': 1.0.5
1974 | '@types/hast': 3.0.4
1975 | '@types/mdast': 4.0.4
1976 | devlop: 1.1.0
1977 | mdast-util-from-markdown: 2.0.2
1978 | mdast-util-to-markdown: 2.1.2
1979 | transitivePeerDependencies:
1980 | - supports-color
1981 |
1982 | mdast-util-mdx-jsx@3.2.0:
1983 | dependencies:
1984 | '@types/estree-jsx': 1.0.5
1985 | '@types/hast': 3.0.4
1986 | '@types/mdast': 4.0.4
1987 | '@types/unist': 3.0.3
1988 | ccount: 2.0.1
1989 | devlop: 1.1.0
1990 | mdast-util-from-markdown: 2.0.2
1991 | mdast-util-to-markdown: 2.1.2
1992 | parse-entities: 4.0.2
1993 | stringify-entities: 4.0.4
1994 | unist-util-stringify-position: 4.0.0
1995 | vfile-message: 4.0.2
1996 | transitivePeerDependencies:
1997 | - supports-color
1998 |
1999 | mdast-util-mdxjs-esm@2.0.1:
2000 | dependencies:
2001 | '@types/estree-jsx': 1.0.5
2002 | '@types/hast': 3.0.4
2003 | '@types/mdast': 4.0.4
2004 | devlop: 1.1.0
2005 | mdast-util-from-markdown: 2.0.2
2006 | mdast-util-to-markdown: 2.1.2
2007 | transitivePeerDependencies:
2008 | - supports-color
2009 |
2010 | mdast-util-phrasing@4.1.0:
2011 | dependencies:
2012 | '@types/mdast': 4.0.4
2013 | unist-util-is: 6.0.0
2014 |
2015 | mdast-util-to-hast@13.2.0:
2016 | dependencies:
2017 | '@types/hast': 3.0.4
2018 | '@types/mdast': 4.0.4
2019 | '@ungap/structured-clone': 1.3.0
2020 | devlop: 1.1.0
2021 | micromark-util-sanitize-uri: 2.0.1
2022 | trim-lines: 3.0.1
2023 | unist-util-position: 5.0.0
2024 | unist-util-visit: 5.0.0
2025 | vfile: 6.0.3
2026 |
2027 | mdast-util-to-markdown@2.1.2:
2028 | dependencies:
2029 | '@types/mdast': 4.0.4
2030 | '@types/unist': 3.0.3
2031 | longest-streak: 3.1.0
2032 | mdast-util-phrasing: 4.1.0
2033 | mdast-util-to-string: 4.0.0
2034 | micromark-util-classify-character: 2.0.1
2035 | micromark-util-decode-string: 2.0.1
2036 | unist-util-visit: 5.0.0
2037 | zwitch: 2.0.4
2038 |
2039 | mdast-util-to-string@4.0.0:
2040 | dependencies:
2041 | '@types/mdast': 4.0.4
2042 |
2043 | merge2@1.4.1: {}
2044 |
2045 | micromark-core-commonmark@2.0.2:
2046 | dependencies:
2047 | decode-named-character-reference: 1.0.2
2048 | devlop: 1.1.0
2049 | micromark-factory-destination: 2.0.1
2050 | micromark-factory-label: 2.0.1
2051 | micromark-factory-space: 2.0.1
2052 | micromark-factory-title: 2.0.1
2053 | micromark-factory-whitespace: 2.0.1
2054 | micromark-util-character: 2.1.1
2055 | micromark-util-chunked: 2.0.1
2056 | micromark-util-classify-character: 2.0.1
2057 | micromark-util-html-tag-name: 2.0.1
2058 | micromark-util-normalize-identifier: 2.0.1
2059 | micromark-util-resolve-all: 2.0.1
2060 | micromark-util-subtokenize: 2.0.4
2061 | micromark-util-symbol: 2.0.1
2062 | micromark-util-types: 2.0.1
2063 |
2064 | micromark-factory-destination@2.0.1:
2065 | dependencies:
2066 | micromark-util-character: 2.1.1
2067 | micromark-util-symbol: 2.0.1
2068 | micromark-util-types: 2.0.1
2069 |
2070 | micromark-factory-label@2.0.1:
2071 | dependencies:
2072 | devlop: 1.1.0
2073 | micromark-util-character: 2.1.1
2074 | micromark-util-symbol: 2.0.1
2075 | micromark-util-types: 2.0.1
2076 |
2077 | micromark-factory-space@2.0.1:
2078 | dependencies:
2079 | micromark-util-character: 2.1.1
2080 | micromark-util-types: 2.0.1
2081 |
2082 | micromark-factory-title@2.0.1:
2083 | dependencies:
2084 | micromark-factory-space: 2.0.1
2085 | micromark-util-character: 2.1.1
2086 | micromark-util-symbol: 2.0.1
2087 | micromark-util-types: 2.0.1
2088 |
2089 | micromark-factory-whitespace@2.0.1:
2090 | dependencies:
2091 | micromark-factory-space: 2.0.1
2092 | micromark-util-character: 2.1.1
2093 | micromark-util-symbol: 2.0.1
2094 | micromark-util-types: 2.0.1
2095 |
2096 | micromark-util-character@2.1.1:
2097 | dependencies:
2098 | micromark-util-symbol: 2.0.1
2099 | micromark-util-types: 2.0.1
2100 |
2101 | micromark-util-chunked@2.0.1:
2102 | dependencies:
2103 | micromark-util-symbol: 2.0.1
2104 |
2105 | micromark-util-classify-character@2.0.1:
2106 | dependencies:
2107 | micromark-util-character: 2.1.1
2108 | micromark-util-symbol: 2.0.1
2109 | micromark-util-types: 2.0.1
2110 |
2111 | micromark-util-combine-extensions@2.0.1:
2112 | dependencies:
2113 | micromark-util-chunked: 2.0.1
2114 | micromark-util-types: 2.0.1
2115 |
2116 | micromark-util-decode-numeric-character-reference@2.0.2:
2117 | dependencies:
2118 | micromark-util-symbol: 2.0.1
2119 |
2120 | micromark-util-decode-string@2.0.1:
2121 | dependencies:
2122 | decode-named-character-reference: 1.0.2
2123 | micromark-util-character: 2.1.1
2124 | micromark-util-decode-numeric-character-reference: 2.0.2
2125 | micromark-util-symbol: 2.0.1
2126 |
2127 | micromark-util-encode@2.0.1: {}
2128 |
2129 | micromark-util-html-tag-name@2.0.1: {}
2130 |
2131 | micromark-util-normalize-identifier@2.0.1:
2132 | dependencies:
2133 | micromark-util-symbol: 2.0.1
2134 |
2135 | micromark-util-resolve-all@2.0.1:
2136 | dependencies:
2137 | micromark-util-types: 2.0.1
2138 |
2139 | micromark-util-sanitize-uri@2.0.1:
2140 | dependencies:
2141 | micromark-util-character: 2.1.1
2142 | micromark-util-encode: 2.0.1
2143 | micromark-util-symbol: 2.0.1
2144 |
2145 | micromark-util-subtokenize@2.0.4:
2146 | dependencies:
2147 | devlop: 1.1.0
2148 | micromark-util-chunked: 2.0.1
2149 | micromark-util-symbol: 2.0.1
2150 | micromark-util-types: 2.0.1
2151 |
2152 | micromark-util-symbol@2.0.1: {}
2153 |
2154 | micromark-util-types@2.0.1: {}
2155 |
2156 | micromark@4.0.1:
2157 | dependencies:
2158 | '@types/debug': 4.1.12
2159 | debug: 4.4.0
2160 | decode-named-character-reference: 1.0.2
2161 | devlop: 1.1.0
2162 | micromark-core-commonmark: 2.0.2
2163 | micromark-factory-space: 2.0.1
2164 | micromark-util-character: 2.1.1
2165 | micromark-util-chunked: 2.0.1
2166 | micromark-util-combine-extensions: 2.0.1
2167 | micromark-util-decode-numeric-character-reference: 2.0.2
2168 | micromark-util-encode: 2.0.1
2169 | micromark-util-normalize-identifier: 2.0.1
2170 | micromark-util-resolve-all: 2.0.1
2171 | micromark-util-sanitize-uri: 2.0.1
2172 | micromark-util-subtokenize: 2.0.4
2173 | micromark-util-symbol: 2.0.1
2174 | micromark-util-types: 2.0.1
2175 | transitivePeerDependencies:
2176 | - supports-color
2177 |
2178 | micromatch@4.0.8:
2179 | dependencies:
2180 | braces: 3.0.3
2181 | picomatch: 2.3.1
2182 |
2183 | minimatch@9.0.5:
2184 | dependencies:
2185 | brace-expansion: 2.0.1
2186 |
2187 | minipass@7.1.2: {}
2188 |
2189 | ms@2.1.3: {}
2190 |
2191 | mz@2.7.0:
2192 | dependencies:
2193 | any-promise: 1.3.0
2194 | object-assign: 4.1.1
2195 | thenify-all: 1.6.0
2196 |
2197 | nanoid@3.3.8: {}
2198 |
2199 | node-releases@2.0.19: {}
2200 |
2201 | normalize-path@3.0.0: {}
2202 |
2203 | normalize-range@0.1.2: {}
2204 |
2205 | object-assign@4.1.1: {}
2206 |
2207 | object-hash@3.0.0: {}
2208 |
2209 | package-json-from-dist@1.0.1: {}
2210 |
2211 | parse-entities@4.0.2:
2212 | dependencies:
2213 | '@types/unist': 2.0.11
2214 | character-entities-legacy: 3.0.0
2215 | character-reference-invalid: 2.0.1
2216 | decode-named-character-reference: 1.0.2
2217 | is-alphanumerical: 2.0.1
2218 | is-decimal: 2.0.1
2219 | is-hexadecimal: 2.0.1
2220 |
2221 | path-key@3.1.1: {}
2222 |
2223 | path-parse@1.0.7: {}
2224 |
2225 | path-scurry@1.11.1:
2226 | dependencies:
2227 | lru-cache: 10.4.3
2228 | minipass: 7.1.2
2229 |
2230 | picocolors@1.1.1: {}
2231 |
2232 | picomatch@2.3.1: {}
2233 |
2234 | pify@2.3.0: {}
2235 |
2236 | pirates@4.0.6: {}
2237 |
2238 | postcss-import@15.1.0(postcss@8.5.1):
2239 | dependencies:
2240 | postcss: 8.5.1
2241 | postcss-value-parser: 4.2.0
2242 | read-cache: 1.0.0
2243 | resolve: 1.22.10
2244 |
2245 | postcss-js@4.0.1(postcss@8.5.1):
2246 | dependencies:
2247 | camelcase-css: 2.0.1
2248 | postcss: 8.5.1
2249 |
2250 | postcss-load-config@4.0.2(postcss@8.5.1):
2251 | dependencies:
2252 | lilconfig: 3.1.3
2253 | yaml: 2.7.0
2254 | optionalDependencies:
2255 | postcss: 8.5.1
2256 |
2257 | postcss-nested@6.2.0(postcss@8.5.1):
2258 | dependencies:
2259 | postcss: 8.5.1
2260 | postcss-selector-parser: 6.1.2
2261 |
2262 | postcss-selector-parser@6.0.10:
2263 | dependencies:
2264 | cssesc: 3.0.0
2265 | util-deprecate: 1.0.2
2266 |
2267 | postcss-selector-parser@6.1.2:
2268 | dependencies:
2269 | cssesc: 3.0.0
2270 | util-deprecate: 1.0.2
2271 |
2272 | postcss-value-parser@4.2.0: {}
2273 |
2274 | postcss@8.5.1:
2275 | dependencies:
2276 | nanoid: 3.3.8
2277 | picocolors: 1.1.1
2278 | source-map-js: 1.2.1
2279 |
2280 | property-information@6.5.0: {}
2281 |
2282 | queue-microtask@1.2.3: {}
2283 |
2284 | react-dom@18.3.1(react@18.3.1):
2285 | dependencies:
2286 | loose-envify: 1.4.0
2287 | react: 18.3.1
2288 | scheduler: 0.23.2
2289 |
2290 | react-hot-toast@2.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
2291 | dependencies:
2292 | csstype: 3.1.3
2293 | goober: 2.1.16(csstype@3.1.3)
2294 | react: 18.3.1
2295 | react-dom: 18.3.1(react@18.3.1)
2296 |
2297 | react-markdown@9.0.3(@types/react@18.3.18)(react@18.3.1):
2298 | dependencies:
2299 | '@types/hast': 3.0.4
2300 | '@types/react': 18.3.18
2301 | devlop: 1.1.0
2302 | hast-util-to-jsx-runtime: 2.3.2
2303 | html-url-attributes: 3.0.1
2304 | mdast-util-to-hast: 13.2.0
2305 | react: 18.3.1
2306 | remark-parse: 11.0.0
2307 | remark-rehype: 11.1.1
2308 | unified: 11.0.5
2309 | unist-util-visit: 5.0.0
2310 | vfile: 6.0.3
2311 | transitivePeerDependencies:
2312 | - supports-color
2313 |
2314 | react-refresh@0.14.2: {}
2315 |
2316 | react@18.3.1:
2317 | dependencies:
2318 | loose-envify: 1.4.0
2319 |
2320 | read-cache@1.0.0:
2321 | dependencies:
2322 | pify: 2.3.0
2323 |
2324 | readdirp@3.6.0:
2325 | dependencies:
2326 | picomatch: 2.3.1
2327 |
2328 | remark-parse@11.0.0:
2329 | dependencies:
2330 | '@types/mdast': 4.0.4
2331 | mdast-util-from-markdown: 2.0.2
2332 | micromark-util-types: 2.0.1
2333 | unified: 11.0.5
2334 | transitivePeerDependencies:
2335 | - supports-color
2336 |
2337 | remark-rehype@11.1.1:
2338 | dependencies:
2339 | '@types/hast': 3.0.4
2340 | '@types/mdast': 4.0.4
2341 | mdast-util-to-hast: 13.2.0
2342 | unified: 11.0.5
2343 | vfile: 6.0.3
2344 |
2345 | resolve@1.22.10:
2346 | dependencies:
2347 | is-core-module: 2.16.1
2348 | path-parse: 1.0.7
2349 | supports-preserve-symlinks-flag: 1.0.0
2350 |
2351 | reusify@1.0.4: {}
2352 |
2353 | rollup@4.34.4:
2354 | dependencies:
2355 | '@types/estree': 1.0.6
2356 | optionalDependencies:
2357 | '@rollup/rollup-android-arm-eabi': 4.34.4
2358 | '@rollup/rollup-android-arm64': 4.34.4
2359 | '@rollup/rollup-darwin-arm64': 4.34.4
2360 | '@rollup/rollup-darwin-x64': 4.34.4
2361 | '@rollup/rollup-freebsd-arm64': 4.34.4
2362 | '@rollup/rollup-freebsd-x64': 4.34.4
2363 | '@rollup/rollup-linux-arm-gnueabihf': 4.34.4
2364 | '@rollup/rollup-linux-arm-musleabihf': 4.34.4
2365 | '@rollup/rollup-linux-arm64-gnu': 4.34.4
2366 | '@rollup/rollup-linux-arm64-musl': 4.34.4
2367 | '@rollup/rollup-linux-loongarch64-gnu': 4.34.4
2368 | '@rollup/rollup-linux-powerpc64le-gnu': 4.34.4
2369 | '@rollup/rollup-linux-riscv64-gnu': 4.34.4
2370 | '@rollup/rollup-linux-s390x-gnu': 4.34.4
2371 | '@rollup/rollup-linux-x64-gnu': 4.34.4
2372 | '@rollup/rollup-linux-x64-musl': 4.34.4
2373 | '@rollup/rollup-win32-arm64-msvc': 4.34.4
2374 | '@rollup/rollup-win32-ia32-msvc': 4.34.4
2375 | '@rollup/rollup-win32-x64-msvc': 4.34.4
2376 | fsevents: 2.3.3
2377 |
2378 | run-parallel@1.2.0:
2379 | dependencies:
2380 | queue-microtask: 1.2.3
2381 |
2382 | scheduler@0.23.2:
2383 | dependencies:
2384 | loose-envify: 1.4.0
2385 |
2386 | semver@6.3.1: {}
2387 |
2388 | shebang-command@2.0.0:
2389 | dependencies:
2390 | shebang-regex: 3.0.0
2391 |
2392 | shebang-regex@3.0.0: {}
2393 |
2394 | signal-exit@4.1.0: {}
2395 |
2396 | source-map-js@1.2.1: {}
2397 |
2398 | space-separated-tokens@2.0.2: {}
2399 |
2400 | string-width@4.2.3:
2401 | dependencies:
2402 | emoji-regex: 8.0.0
2403 | is-fullwidth-code-point: 3.0.0
2404 | strip-ansi: 6.0.1
2405 |
2406 | string-width@5.1.2:
2407 | dependencies:
2408 | eastasianwidth: 0.2.0
2409 | emoji-regex: 9.2.2
2410 | strip-ansi: 7.1.0
2411 |
2412 | stringify-entities@4.0.4:
2413 | dependencies:
2414 | character-entities-html4: 2.1.0
2415 | character-entities-legacy: 3.0.0
2416 |
2417 | strip-ansi@6.0.1:
2418 | dependencies:
2419 | ansi-regex: 5.0.1
2420 |
2421 | strip-ansi@7.1.0:
2422 | dependencies:
2423 | ansi-regex: 6.1.0
2424 |
2425 | style-to-object@1.0.8:
2426 | dependencies:
2427 | inline-style-parser: 0.2.4
2428 |
2429 | sucrase@3.35.0:
2430 | dependencies:
2431 | '@jridgewell/gen-mapping': 0.3.8
2432 | commander: 4.1.1
2433 | glob: 10.4.5
2434 | lines-and-columns: 1.2.4
2435 | mz: 2.7.0
2436 | pirates: 4.0.6
2437 | ts-interface-checker: 0.1.13
2438 |
2439 | supports-preserve-symlinks-flag@1.0.0: {}
2440 |
2441 | tailwindcss@3.4.17:
2442 | dependencies:
2443 | '@alloc/quick-lru': 5.2.0
2444 | arg: 5.0.2
2445 | chokidar: 3.6.0
2446 | didyoumean: 1.2.2
2447 | dlv: 1.1.3
2448 | fast-glob: 3.3.3
2449 | glob-parent: 6.0.2
2450 | is-glob: 4.0.3
2451 | jiti: 1.21.7
2452 | lilconfig: 3.1.3
2453 | micromatch: 4.0.8
2454 | normalize-path: 3.0.0
2455 | object-hash: 3.0.0
2456 | picocolors: 1.1.1
2457 | postcss: 8.5.1
2458 | postcss-import: 15.1.0(postcss@8.5.1)
2459 | postcss-js: 4.0.1(postcss@8.5.1)
2460 | postcss-load-config: 4.0.2(postcss@8.5.1)
2461 | postcss-nested: 6.2.0(postcss@8.5.1)
2462 | postcss-selector-parser: 6.1.2
2463 | resolve: 1.22.10
2464 | sucrase: 3.35.0
2465 | transitivePeerDependencies:
2466 | - ts-node
2467 |
2468 | thenify-all@1.6.0:
2469 | dependencies:
2470 | thenify: 3.3.1
2471 |
2472 | thenify@3.3.1:
2473 | dependencies:
2474 | any-promise: 1.3.0
2475 |
2476 | to-regex-range@5.0.1:
2477 | dependencies:
2478 | is-number: 7.0.0
2479 |
2480 | trim-lines@3.0.1: {}
2481 |
2482 | trough@2.2.0: {}
2483 |
2484 | ts-interface-checker@0.1.13: {}
2485 |
2486 | typescript@5.7.3: {}
2487 |
2488 | undici-types@6.19.8: {}
2489 |
2490 | unified@11.0.5:
2491 | dependencies:
2492 | '@types/unist': 3.0.3
2493 | bail: 2.0.2
2494 | devlop: 1.1.0
2495 | extend: 3.0.2
2496 | is-plain-obj: 4.1.0
2497 | trough: 2.2.0
2498 | vfile: 6.0.3
2499 |
2500 | unist-util-is@6.0.0:
2501 | dependencies:
2502 | '@types/unist': 3.0.3
2503 |
2504 | unist-util-position@5.0.0:
2505 | dependencies:
2506 | '@types/unist': 3.0.3
2507 |
2508 | unist-util-stringify-position@4.0.0:
2509 | dependencies:
2510 | '@types/unist': 3.0.3
2511 |
2512 | unist-util-visit-parents@6.0.1:
2513 | dependencies:
2514 | '@types/unist': 3.0.3
2515 | unist-util-is: 6.0.0
2516 |
2517 | unist-util-visit@5.0.0:
2518 | dependencies:
2519 | '@types/unist': 3.0.3
2520 | unist-util-is: 6.0.0
2521 | unist-util-visit-parents: 6.0.1
2522 |
2523 | update-browserslist-db@1.1.2(browserslist@4.24.4):
2524 | dependencies:
2525 | browserslist: 4.24.4
2526 | escalade: 3.2.0
2527 | picocolors: 1.1.1
2528 |
2529 | util-deprecate@1.0.2: {}
2530 |
2531 | vfile-message@4.0.2:
2532 | dependencies:
2533 | '@types/unist': 3.0.3
2534 | unist-util-stringify-position: 4.0.0
2535 |
2536 | vfile@6.0.3:
2537 | dependencies:
2538 | '@types/unist': 3.0.3
2539 | vfile-message: 4.0.2
2540 |
2541 | vite@5.4.14(@types/node@20.17.17):
2542 | dependencies:
2543 | esbuild: 0.21.5
2544 | postcss: 8.5.1
2545 | rollup: 4.34.4
2546 | optionalDependencies:
2547 | '@types/node': 20.17.17
2548 | fsevents: 2.3.3
2549 |
2550 | which@2.0.2:
2551 | dependencies:
2552 | isexe: 2.0.0
2553 |
2554 | wrap-ansi@7.0.0:
2555 | dependencies:
2556 | ansi-styles: 4.3.0
2557 | string-width: 4.2.3
2558 | strip-ansi: 6.0.1
2559 |
2560 | wrap-ansi@8.1.0:
2561 | dependencies:
2562 | ansi-styles: 6.2.1
2563 | string-width: 5.1.2
2564 | strip-ansi: 7.1.0
2565 |
2566 | yallist@3.1.1: {}
2567 |
2568 | yaml@2.7.0: {}
2569 |
2570 | zwitch@2.0.4: {}
2571 |
--------------------------------------------------------------------------------