From 49e8db97943b587b0faca5aa3f0addceb668cc1c Mon Sep 17 00:00:00 2001 From: leex279 Date: Sat, 8 Nov 2025 18:31:17 +0100 Subject: [PATCH] Remove Docusaurus documentation system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the standalone Docusaurus documentation website to simplify the project structure and reduce maintenance overhead. Changes: - Delete /docs directory (480MB freed) containing all Docusaurus files - Remove docker-compose.docs.yml (optional docs service) - Remove ARCHON_DOCS_PORT from .env.example - Update .github/workflows/release-notes.yml (remove docs section) - Update .github/test-release-notes.sh (remove docs section) Preserved: - Project documents feature (archon-ui-main/src/features/projects/documents/) - Backend document service (python/src/server/services/projects/document_service.py) - Project documents API endpoints (/api/projects/{id}/docs) Benefits: - Eliminates redundancy (content duplicated in /PRPs/ai_docs/) - Reduces complexity (removes 480MB dependencies and configuration) - Simplifies deployment (eliminates optional Docker service on port 3838) - Lowers maintenance burden (single documentation source) All validation tests passed: ✓ File system validation ✓ Backend imports verification ✓ Docker Compose integration testing ✓ CI/CD workflow validation ✓ Project documents API still functional 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .env.example | 1 - .github/test-release-notes.sh | 10 +- .github/workflows/release-notes.yml | 7 - docker-compose.docs.yml | 14 - docs/.gitignore | 20 - docs/Dockerfile | 13 - docs/README.md | 33 - docs/babel.config.js | 3 - docs/docs/README.md | 73 - docs/docs/agent-chat.mdx | 414 - docs/docs/agent-document.mdx | 261 - docs/docs/agent-rag.mdx | 323 - docs/docs/agent-task.mdx | 351 - docs/docs/agents-overview.mdx | 224 - docs/docs/api-reference.mdx | 2046 -- docs/docs/architecture.mdx | 158 - docs/docs/background-tasks.mdx | 320 - docs/docs/code-extraction-rules.mdx | 194 - docs/docs/coding-best-practices.mdx | 265 - docs/docs/configuration.mdx | 339 - docs/docs/crawling-configuration.mdx | 219 - docs/docs/deployment.mdx | 285 - docs/docs/getting-started.mdx | 410 - docs/docs/intro.mdx | 206 - docs/docs/knowledge-features.mdx | 285 - docs/docs/knowledge-overview.mdx | 209 - docs/docs/mcp-overview.mdx | 429 - docs/docs/mcp-server.mdx | 176 - docs/docs/mcp-tools.mdx | 499 - docs/docs/projects-features.mdx | 170 - docs/docs/projects-overview.mdx | 786 - docs/docs/rag.mdx | 396 - docs/docs/server-deployment.mdx | 718 - docs/docs/server-monitoring.mdx | 172 - docs/docs/server-overview.mdx | 119 - docs/docs/server-services.mdx | 484 - docs/docs/socketio.mdx | 457 - docs/docs/testing-python-strategy.mdx | 441 - docs/docs/testing-vitest-strategy.mdx | 912 - docs/docs/testing.mdx | 204 - docs/docs/ui-components.mdx | 404 - docs/docs/ui.mdx | 829 - docs/docusaurus.config.js | 189 - docs/package-lock.json | 18946 ---------------- docs/package.json | 40 - docs/sidebars.js | 69 - docs/src/css/custom.css | 1210 - docs/src/pages/index.js | 575 - docs/src/pages/index.module.css | 948 - docs/src/pages/markdown-page.md | 7 - docs/static/.nojekyll | 0 docs/static/img/Python-logo-notext.svg | 265 - docs/static/img/React-icon.svg | 9 - .../img/Visual_Studio_Code_1.35_icon.svg | 41 - docs/static/img/claude-logo.svg | 1 - docs/static/img/cursor.svg | 1 - docs/static/img/docusaurus.png | Bin 5142 -> 0 bytes docs/static/img/fastapi-seeklogo.svg | 8 - docs/static/img/favicon.ico | Bin 3626 -> 0 bytes docs/static/img/favicon.svg | 32 - docs/static/img/logo-neon.svg | 44 - docs/static/img/logo.svg | 1 - docs/static/img/mcp.svg | 1 - .../img/tutorial/docsVersionDropdown.png | Bin 25102 -> 0 bytes docs/static/img/tutorial/localeDropdown.png | Bin 30020 -> 0 bytes docs/static/img/windsurf-white-symbol.svg | 3 - docs/static/js/mermaid-rounded-corners.js | 155 - 67 files changed, 1 insertion(+), 36423 deletions(-) delete mode 100644 docker-compose.docs.yml delete mode 100644 docs/.gitignore delete mode 100644 docs/Dockerfile delete mode 100644 docs/README.md delete mode 100644 docs/babel.config.js delete mode 100644 docs/docs/README.md delete mode 100644 docs/docs/agent-chat.mdx delete mode 100644 docs/docs/agent-document.mdx delete mode 100644 docs/docs/agent-rag.mdx delete mode 100644 docs/docs/agent-task.mdx delete mode 100644 docs/docs/agents-overview.mdx delete mode 100644 docs/docs/api-reference.mdx delete mode 100644 docs/docs/architecture.mdx delete mode 100644 docs/docs/background-tasks.mdx delete mode 100644 docs/docs/code-extraction-rules.mdx delete mode 100644 docs/docs/coding-best-practices.mdx delete mode 100644 docs/docs/configuration.mdx delete mode 100644 docs/docs/crawling-configuration.mdx delete mode 100644 docs/docs/deployment.mdx delete mode 100644 docs/docs/getting-started.mdx delete mode 100644 docs/docs/intro.mdx delete mode 100644 docs/docs/knowledge-features.mdx delete mode 100644 docs/docs/knowledge-overview.mdx delete mode 100644 docs/docs/mcp-overview.mdx delete mode 100644 docs/docs/mcp-server.mdx delete mode 100644 docs/docs/mcp-tools.mdx delete mode 100644 docs/docs/projects-features.mdx delete mode 100644 docs/docs/projects-overview.mdx delete mode 100644 docs/docs/rag.mdx delete mode 100644 docs/docs/server-deployment.mdx delete mode 100644 docs/docs/server-monitoring.mdx delete mode 100644 docs/docs/server-overview.mdx delete mode 100644 docs/docs/server-services.mdx delete mode 100644 docs/docs/socketio.mdx delete mode 100644 docs/docs/testing-python-strategy.mdx delete mode 100644 docs/docs/testing-vitest-strategy.mdx delete mode 100644 docs/docs/testing.mdx delete mode 100644 docs/docs/ui-components.mdx delete mode 100644 docs/docs/ui.mdx delete mode 100644 docs/docusaurus.config.js delete mode 100644 docs/package-lock.json delete mode 100644 docs/package.json delete mode 100644 docs/sidebars.js delete mode 100644 docs/src/css/custom.css delete mode 100644 docs/src/pages/index.js delete mode 100644 docs/src/pages/index.module.css delete mode 100644 docs/src/pages/markdown-page.md delete mode 100644 docs/static/.nojekyll delete mode 100644 docs/static/img/Python-logo-notext.svg delete mode 100644 docs/static/img/React-icon.svg delete mode 100644 docs/static/img/Visual_Studio_Code_1.35_icon.svg delete mode 100644 docs/static/img/claude-logo.svg delete mode 100644 docs/static/img/cursor.svg delete mode 100644 docs/static/img/docusaurus.png delete mode 100644 docs/static/img/fastapi-seeklogo.svg delete mode 100644 docs/static/img/favicon.ico delete mode 100644 docs/static/img/favicon.svg delete mode 100644 docs/static/img/logo-neon.svg delete mode 100644 docs/static/img/logo.svg delete mode 100644 docs/static/img/mcp.svg delete mode 100644 docs/static/img/tutorial/docsVersionDropdown.png delete mode 100644 docs/static/img/tutorial/localeDropdown.png delete mode 100644 docs/static/img/windsurf-white-symbol.svg delete mode 100644 docs/static/js/mermaid-rounded-corners.js diff --git a/.env.example b/.env.example index 48f38e6b..1daa64bc 100644 --- a/.env.example +++ b/.env.example @@ -51,7 +51,6 @@ ARCHON_AGENTS_PORT=8052 # Leave unset or comment out if you don't plan to use agent work orders AGENT_WORK_ORDERS_PORT=8053 ARCHON_UI_PORT=3737 -ARCHON_DOCS_PORT=3838 # Agent Work Orders Feature (Optional) # Enable the agent work orders microservice for automated task execution diff --git a/.github/test-release-notes.sh b/.github/test-release-notes.sh index cdccd8c5..3c0ce3b6 100644 --- a/.github/test-release-notes.sh +++ b/.github/test-release-notes.sh @@ -113,7 +113,6 @@ FILES_CHANGED=$(git diff ${PREVIOUS_TAG}..${CURRENT_TAG} --stat | tail -1) # Detailed changes by component CHANGES_FRONTEND=$(git diff ${PREVIOUS_TAG}..${CURRENT_TAG} --stat -- archon-ui-main/ | head -20) CHANGES_BACKEND=$(git diff ${PREVIOUS_TAG}..${CURRENT_TAG} --stat -- python/ | head -20) -CHANGES_DOCS=$(git diff ${PREVIOUS_TAG}..${CURRENT_TAG} --stat -- '*.md' PRPs/ | head -10) FILE_CHANGES="### File Changes by Component @@ -121,10 +120,7 @@ FILE_CHANGES="### File Changes by Component $CHANGES_FRONTEND **Backend:** -$CHANGES_BACKEND - -**Documentation:** -$CHANGES_DOCS" +$CHANGES_BACKEND" echo -e "${GREEN}Files summary: $FILES_CHANGED${NC}" @@ -226,10 +222,6 @@ Generate comprehensive release notes following this structure: Thanks to everyone who contributed to this release: [List unique contributors with @ mentions] -## 📚 Documentation - -[If documentation changes, list them] - ## ⚠️ Breaking Changes [List any breaking changes - this is beta software, so breaking changes are expected] diff --git a/.github/workflows/release-notes.yml b/.github/workflows/release-notes.yml index 2ff06e4c..2fdc300a 100644 --- a/.github/workflows/release-notes.yml +++ b/.github/workflows/release-notes.yml @@ -85,8 +85,6 @@ jobs: echo "**Backend:**" >> changes.txt git diff ${PREVIOUS_TAG}..${CURRENT_TAG} --stat -- python/ | head -20 >> changes.txt echo "" >> changes.txt - echo "**Documentation:**" >> changes.txt - git diff ${PREVIOUS_TAG}..${CURRENT_TAG} --stat -- '*.md' PRPs/ | head -10 >> changes.txt - name: Get closed PRs id: prs @@ -190,10 +188,6 @@ jobs: Thanks to everyone who contributed to this release: [List unique contributors with @ mentions] - ## 📚 Documentation - - [If documentation changes, list them] - ## ⚠️ Breaking Changes [List any breaking changes - this is beta software, so breaking changes are expected] @@ -201,7 +195,6 @@ jobs: ## 🔗 Links - **Full Changelog:** https://github.com/${{ github.repository }}/compare/${{ steps.prev_tag.outputs.previous_tag }}...${{ steps.get_tag.outputs.tag }} - - **Installation Guide:** [Link to docs] --- diff --git a/docker-compose.docs.yml b/docker-compose.docs.yml deleted file mode 100644 index f0684c37..00000000 --- a/docker-compose.docs.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Optional Documentation Service -# Run with: docker-compose -f docker-compose.yml -f docker-compose.docs.yml up -d - -services: - # Documentation - docs: - build: - context: ./docs - dockerfile: Dockerfile - container_name: Archon-Docs - ports: - - "${ARCHON_DOCS_PORT:-3838}:80" - networks: - - app-network \ No newline at end of file diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index b2d6de30..00000000 --- a/docs/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# Dependencies -/node_modules - -# Production -/build - -# Generated files -.docusaurus -.cache-loader - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/docs/Dockerfile b/docs/Dockerfile deleted file mode 100644 index 060e82f9..00000000 --- a/docs/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -# Stage 1: build the Docusaurus site -FROM node:18-alpine AS builder -WORKDIR /app -COPY package*.json ./ -RUN npm install -COPY . . -RUN npm run build - -# Stage 2: serve with nginx -FROM nginx:alpine -COPY --from=builder /app/build /usr/share/nginx/html -EXPOSE 80 -CMD ["nginx", "-g", "daemon off;"] diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 55d0c3ef..00000000 --- a/docs/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Website - -This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. - -### Installation - -``` -$ yarn -``` - -### Local Development - -``` -$ yarn start -``` - -This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. - -### Build - -``` -$ yarn build -``` - -This command generates static content into the `build` directory and can be served using any static contents hosting service. - -### Deployment - -``` -$ GIT_USER= USE_SSH=true yarn deploy -``` - -If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/docs/babel.config.js b/docs/babel.config.js deleted file mode 100644 index e00595da..00000000 --- a/docs/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/docs/docs/README.md b/docs/docs/README.md deleted file mode 100644 index 431e624e..00000000 --- a/docs/docs/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# Documentation Structure - -## Overview - -The Archon documentation has been simplified to focus on developer-friendly reference material without excessive styling or marketing language. - -## Key Changes - -### Architecture Documentation -- Created `architecture.mdx` - Clear explanation of system design and our recent changes -- Shows how FastAPI uses services directly while MCP uses HTTP -- Includes code examples of correct patterns - -### Simplified Reference Section -- **server-overview.mdx** - Reduced from 278 to 120 lines, removed hero sections -- **server-services.mdx** - Replaced verbose cards with clean tables -- **mcp-server.mdx** - Emphasized HTTP-only architecture, simplified diagrams -- **api-reference.mdx** - Added new `DELETE /api/sources/{source_id}` endpoint - -### Consolidated Files -- Combined all testing docs into single `testing.mdx` -- Simplified sidebar structure from 4 levels to 2 levels -- Removed redundant MCP and agent documentation files - -## Documentation Principles - -1. **Reference = Facts Only** - No heroes, cards, or marketing -2. **Tables Over Prose** - Easy to scan information -3. **Code Examples** - Show correct usage patterns -4. **Clean Hierarchy** - Simple, logical organization -5. **No Duplication** - Say things once, clearly - -## File Structure - -``` -docs/ -├── intro.mdx # Marketing-friendly introduction -├── getting-started/ # Setup and configuration -├── features/ # Feature overviews -├── reference/ # Technical documentation (clean, no fluff) -│ ├── architecture.mdx # System design -│ ├── server-*.mdx # Server documentation -│ ├── api-reference.mdx # REST API endpoints -│ ├── mcp-server.mdx # MCP tools -│ └── socketio.mdx # Socket.IO events and real-time communication -└── guides/ # How-to guides -``` - -## Architecture Changes Documented - -### Delete Operation Fix -- FastAPI: `SourceManagementService.delete_source()` - Direct service usage -- API: `DELETE /api/sources/{source_id}` - New endpoint -- MCP: HTTP call to API endpoint - No direct imports - -### Crawl Operation Fix -- FastAPI: Uses `CrawlingService` directly with smart URL detection -- Progress callbacks for real-time updates -- Proper service separation maintained - -### Socket.IO Simplification (2025 Pattern) -- **Official Socket.IO 2025 pattern** - Removed complex namespace classes, using simple @sio.event decorators -- **Eliminated database polling** - Removed 2-second polling system for task/project changes -- **Direct Socket.IO emission** - Services emit events directly to rooms with `sio.emit()` -- **Root namespace only** - Everything runs on `/` namespace, no complex namespace management -- **Simple room management** - Direct `sio.enter_room()` and `sio.leave_room()` calls -- **Simplified flow**: MCP → HTTP API → Services → @sio.event → Rooms → UI - -The documentation now clearly reflects that: -- **Server contains ALL business logic** -- **MCP is HTTP-only** (no direct imports) -- **Services are the single source of truth** -- **Socket.IO follows official 2025 patterns** - Simple, clean, and maintainable \ No newline at end of file diff --git a/docs/docs/agent-chat.mdx b/docs/docs/agent-chat.mdx deleted file mode 100644 index 492877b9..00000000 --- a/docs/docs/agent-chat.mdx +++ /dev/null @@ -1,414 +0,0 @@ ---- -title: Agent Chat Panel -description: Real-time chat interface for AI agents with streaming responses -sidebar_position: 12 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# Agent Chat Panel - -## Overview - -The Agent Chat Panel provides a real-time interface for interacting with AI agents. It uses Socket.IO for reliable bidirectional communication and supports streaming responses from agents. - - -- **Real-time streaming**: See agent responses as they're generated -- **Socket.IO reliability**: Automatic reconnection and state management -- **Multiple agent types**: Support for RAG, Document, and Task agents -- **Session persistence**: Chat history maintained across connections -- **Simple architecture**: Socket.IO ↔ Server ↔ SSE ↔ Agents - - -## Architecture - -```mermaid -graph LR - UI[React UI] <--> |Socket.IO| Server[FastAPI Server] - Server --> |HTTP/SSE| Agents[PydanticAI Agents] - Agents --> |SSE Stream| Server - Server --> |Socket.IO Events| UI -``` - -### Communication Flow - -1. **UI to Server**: Socket.IO events and REST endpoints -2. **Server to Agents**: HTTP requests with SSE streaming responses -3. **Agents to Server**: Server-Sent Events (SSE) for streaming -4. **Server to UI**: Socket.IO events for real-time updates - -## Frontend Usage - - - - -```tsx -import { ArchonChatPanel } from '@/components/agent-chat/ArchonChatPanel'; - -function App() { - return ( -
- {/* Your main content */} -
- {/* ... */} -
- - {/* Chat Panel */} - -
- ); -} -``` - -
- - -```typescript -import { agentChatService } from '@/services/agentChatService'; - -// Create a chat session -const { session_id } = await agentChatService.createSession( - undefined, // project_id (optional) - 'rag' // agent_type: 'rag' | 'document' | 'task' -); - -// Connect WebSocket for real-time updates -await agentChatService.connectWebSocket( - session_id, - (message) => { - // Handle incoming messages - console.log('Agent:', message.content); - }, - (isTyping) => { - // Handle typing indicator - console.log('Agent is typing:', isTyping); - }, - (chunk) => { - // Handle streaming chunks - console.log('Chunk:', chunk); - }, - () => { - // Handle stream completion - console.log('Stream complete'); - } -); - -// Send a message -await agentChatService.sendMessage( - session_id, - 'What is Archon?', - { match_count: 5 } // Optional context -); -``` - - -
- -## Backend Implementation - -### Socket.IO Events - -The chat system uses Socket.IO events with room-based isolation: - - - - -```python -from ..socketio_app import get_socketio_instance -sio = get_socketio_instance() - -@sio.event -async def join_chat(sid, data): - """Join a chat room.""" - session_id = data.get('session_id') - await sio.enter_room(sid, f'chat_{session_id}') - -@sio.event -async def chat_message(sid, data): - """Handle incoming chat messages.""" - session_id = data.get('session_id') - message = data.get('message') - context = data.get('context', {}) - - # Process with agent - await process_agent_response(session_id, message, context) -``` - - - - -```python -async def process_agent_response(session_id: str, message: str, context: dict): - """Stream agent response via SSE and emit to Socket.IO.""" - room = f'chat_{session_id}' - - # Call agents service with SSE streaming - async with httpx.AsyncClient() as client: - async with client.stream( - "POST", - f"http://archon-agents:8052/agents/rag/stream", - json={ - "prompt": message, - "context": context - } - ) as response: - # Stream SSE chunks to Socket.IO - async for line in response.aiter_lines(): - if line.startswith("data: "): - chunk_data = json.loads(line[6:]) - - # Emit streaming chunk - await sio.emit('stream_chunk', { - "type": "stream_chunk", - "content": chunk_data.get('content', '') - }, room=room) -``` - - - - -### REST Endpoints - -Minimal REST endpoints for session management: - -| Endpoint | Method | Purpose | -|----------|--------|---------| -| `/api/agent-chat/sessions` | POST | Create chat session | -| `/api/agent-chat/sessions/{id}` | GET | Get session info | -| `/api/agent-chat/sessions/{id}/messages` | POST | Send message (triggers Socket.IO) | - -## Agent Types - -### RAG Agent -- **Purpose**: Knowledge base Q&A with context retrieval -- **Context**: `{ match_count: 5, source_filter: "docs.archon.com" }` -- **Best for**: Documentation queries, technical questions - -### Document Agent -- **Purpose**: Document analysis and content generation -- **Context**: `{ format: "markdown", style: "technical" }` -- **Best for**: Creating documentation, analyzing documents - -### Task Agent -- **Purpose**: Task decomposition and project planning -- **Context**: `{ project_id: "uuid", detail_level: "high" }` -- **Best for**: Breaking down features, planning implementation - -## Socket.IO Message Types - -### Client to Server - -| Event | Purpose | Data | -|-------|---------|------| -| `join_chat` | Join chat room | `{session_id: string}` | -| `chat_message` | Send message | `{session_id, message, context}` | -| `leave_chat` | Leave room | `{session_id: string}` | - -### Server to Client - -| Event | Purpose | Data | -|-------|---------|------| -| `connection_confirmed` | Confirm connection | `{session_id: string}` | -| `message` | Complete message | `{type: "message", data: ChatMessage}` | -| `stream_chunk` | Streaming chunk | `{type: "stream_chunk", content: string}` | -| `stream_complete` | Stream finished | `{type: "stream_complete"}` | -| `typing` | Typing indicator | `{type: "typing", is_typing: boolean}` | -| `error` | Error occurred | `{type: "error", error: string}` | - -## Error Handling - - -The chat service handles various connection scenarios: - -- **Automatic reconnection**: Socket.IO reconnects with exponential backoff -- **Session recovery**: Creates new session if old one is invalid -- **Error propagation**: Errors from agents are forwarded to UI -- **Graceful degradation**: Shows offline state when server unavailable - - -### Common Error Scenarios - -1. **Agent Service Unavailable** - ```json - { - "type": "error", - "error": "Agent service error: 503" - } - ``` - -2. **Invalid Session** - - Automatically creates new session - - Transfers handlers to new session - - Notifies UI of session change - -3. **Network Disconnection** - - Socket.IO handles reconnection - - UI shows "connecting" state - - Messages queued until reconnected - -## Best Practices - - - - -1. **Handle connection states** - ```typescript - agentChatService.onStatusChange(sessionId, (status) => { - switch(status) { - case 'online': showOnlineIndicator(); break; - case 'offline': showOfflineMessage(); break; - case 'connecting': showLoadingSpinner(); break; - } - }); - ``` - -2. **Clean up on unmount** - ```typescript - useEffect(() => { - return () => { - agentChatService.disconnectWebSocket(sessionId); - agentChatService.offStatusChange(sessionId); - }; - }, [sessionId]); - ``` - -3. **Handle streaming properly** - ```typescript - let accumulatedContent = ''; - - const onStreamChunk = (chunk: string) => { - accumulatedContent += chunk; - updateDisplay(accumulatedContent); - }; - ``` - - - - -1. **Use rooms for isolation** - ```python - # Always use room pattern - room = f'chat_{session_id}' - await sio.emit('message', data, room=room) - ``` - -2. **Handle SSE errors gracefully** - ```python - try: - async for line in response.aiter_lines(): - # Process line - except httpx.ReadTimeout: - await sio.emit('error', { - 'error': 'Agent response timeout' - }, room=room) - ``` - -3. **Clean up sessions periodically** - ```python - # Remove old sessions after 24 hours - for session_id, session in list(sessions.items()): - if is_expired(session['created_at']): - sessions.pop(session_id, None) - ``` - - - - -## Configuration - -### Environment Variables - -```bash -# Agent service configuration -AGENT_SERVICE_URL=http://archon-agents:8052 - -# Socket.IO configuration -SOCKETIO_PING_TIMEOUT=60 -SOCKETIO_PING_INTERVAL=25 - -# Session configuration -SESSION_TTL_HOURS=24 -MAX_MESSAGES_PER_SESSION=1000 -``` - -### Frontend Configuration - -```typescript -// Adjust WebSocket settings -const wsConfig = { - maxReconnectAttempts: 5, - reconnectInterval: 1000, - heartbeatInterval: 30000, - enableAutoReconnect: true, - enableHeartbeat: true, -}; -``` - -## Testing - -### Manual Testing -1. Open the UI and verify chat panel appears -2. Check connection status indicator -3. Send a test message -4. Verify streaming response appears -5. Test reconnection by restarting server - -### Integration Testing -```python -# Test Socket.IO events -async def test_chat_flow(): - # Create session - response = await client.post("/api/agent-chat/sessions") - session_id = response.json()["session_id"] - - # Connect Socket.IO - sio_client = socketio.AsyncClient() - await sio_client.connect("http://localhost:8080") - - # Join room - await sio_client.emit("join_chat", {"session_id": session_id}) - - # Send message - await sio_client.emit("chat_message", { - "session_id": session_id, - "message": "Hello", - "context": {} - }) - - # Verify response - # ... -``` - -## Troubleshooting - - - -**Chat shows "offline"** -- Check if agents container is running: `docker ps | grep agents` -- Verify server logs: `docker logs archon-server` -- Check Socket.IO connection in browser DevTools - -**Messages not streaming** -- Verify SSE endpoint is accessible -- Check agent logs for errors -- Ensure proper CORS configuration - -**Session errors** -- Sessions are in-memory and lost on server restart -- Frontend will create new session automatically -- Check session_id in requests matches server state - - - -## Summary - -The Agent Chat Panel provides a robust, real-time interface for AI agent interaction with: -- Socket.IO for reliable bidirectional communication -- SSE streaming for agent responses -- Simple session management -- Automatic error recovery -- Clean room-based isolation - -Total implementation: ~250 lines of elegant, maintainable code. \ No newline at end of file diff --git a/docs/docs/agent-document.mdx b/docs/docs/agent-document.mdx deleted file mode 100644 index 475aa19b..00000000 --- a/docs/docs/agent-document.mdx +++ /dev/null @@ -1,261 +0,0 @@ ---- -title: Document Agent -sidebar_position: 2 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# 📄 Document Agent - -
-
-

- **Intelligent document processing orchestration** using PydanticAI to coordinate document uploads, chunking, and organization through MCP tools. -

-
-
- -## 🎯 Overview - -The Document Agent is a PydanticAI-powered orchestrator that handles complex document processing workflows. It analyzes documents, determines optimal processing strategies, and coordinates multiple MCP tools to achieve the best results. - - -The Document Agent contains NO document processing logic. All actual processing is done by the Server service through MCP tool calls. - - -## 🤖 Capabilities - -### Document Analysis -- **Format Detection**: Identifies document type and structure -- **Content Analysis**: Determines optimal chunking strategy -- **Metadata Extraction**: Identifies key document properties -- **Processing Planning**: Creates multi-step processing workflows - -### Orchestration Patterns -- **Single Document**: Upload and process individual files -- **Batch Processing**: Handle multiple documents efficiently -- **Conditional Workflows**: Different strategies based on content -- **Error Recovery**: Intelligent retry and fallback strategies - -## 🔧 MCP Tools Used - -| Tool | Purpose | When Used | -|------|---------|-----------| -| `upload_document` | Upload and process single documents | Individual file processing | -| `store_documents` | Store multiple document chunks | After chunking large documents | -| `manage_document` | CRUD operations on project documents | Project documentation management | -| `manage_versions` | Version control for documents | When updating existing documents | -| `crawl_single_page` | Process web pages as documents | When URL provided instead of file | - -## 📊 Processing Workflows - -### Standard Document Upload -```mermaid -sequenceDiagram - participant User - participant DocAgent as Document Agent - participant MCP as MCP Tools - participant Server - - User->>DocAgent: Upload document request - DocAgent->>DocAgent: Analyze document type - DocAgent->>MCP: upload_document() - MCP->>Server: HTTP POST /api/documents/upload - Server->>Server: Process document - Server-->>MCP: Processing result - MCP-->>DocAgent: Tool result - DocAgent->>DocAgent: Evaluate result - DocAgent-->>User: Success with metadata -``` - -### Complex Document Processing -```mermaid -flowchart TD - A[Document Input] --> B{Analyze Document} - B -->|PDF| C[Extract with PyPDF2] - B -->|Word| D[Extract with python-docx] - B -->|Text| E[Direct Processing] - - C --> F[Check Size] - D --> F - E --> F - - F -->|Large| G[Smart Chunking Strategy] - F -->|Small| H[Single Chunk] - - G --> I[store_documents] - H --> J[upload_document] - - I --> K[Generate Embeddings] - J --> K - - K --> L[Store in Database] -``` - -## 💬 Example Interactions - -### Simple Upload -```python -# User request -"Upload this technical specification document" - -# Document Agent workflow -1. Analyze file: technical_spec.pdf -2. Detect: PDF format, 45 pages, technical content -3. Call: upload_document( - file_path="technical_spec.pdf", - doc_type="technical", - chunk_size=5000 -) -4. Monitor: Processing progress -5. Return: "Document uploaded successfully with 23 chunks created" -``` - -### Intelligent Processing -```python -# User request -"Process this large documentation folder" - -# Document Agent workflow -1. Scan folder structure -2. Identify: 15 markdown files, 3 PDFs, 2 Word docs -3. Plan: Batch processing strategy -4. Execute: - - Group markdown files for efficient processing - - Handle PDFs individually due to size - - Convert Word docs to markdown first -5. Coordinate: Multiple store_documents calls -6. Aggregate: Results from all operations -7. Return: "Processed 20 documents creating 145 searchable chunks" -``` - -## 🔍 Implementation Details - -### Agent Structure -```python -from pydantic_ai import Agent, RunContext -from typing import List, Dict, Any - -class DocumentAgent(Agent): - """Orchestrates document processing operations""" - - name = "document_processor" - description = "Handles document uploads and processing" - - tools = [ - "upload_document", - "store_documents", - "manage_document", - "manage_versions" - ] - - async def process_request( - self, - context: RunContext, - request: str - ) -> Dict[str, Any]: - # Analyze request and determine strategy - strategy = self.analyze_request(request) - - # Execute appropriate workflow - if strategy.type == "single_upload": - return await self.single_document_workflow(context, strategy) - elif strategy.type == "batch_process": - return await self.batch_workflow(context, strategy) - # ... more strategies -``` - -### Decision Making -The Document Agent makes intelligent decisions about: -1. **Chunk Size**: Based on document type and content -2. **Processing Order**: Prioritizes based on dependencies -3. **Parallelization**: When to process in parallel vs sequential -4. **Error Handling**: Retry strategies for failed operations - -## 📈 Performance Optimization - -### Batching Strategy -- Groups similar documents for efficient processing -- Minimizes API calls by batching operations -- Balances batch size with memory constraints - -### Caching Decisions -- Remembers processing strategies for similar documents -- Caches metadata extraction results -- Reuses successful workflow patterns - -## 🚨 Error Handling - -### Common Scenarios -1. **Large File Handling** - - Automatically switches to streaming mode - - Breaks into smaller chunks for processing - -2. **Format Issues** - - Falls back to text extraction - - Attempts multiple parsing strategies - -3. **Network Failures** - - Implements exponential backoff - - Saves progress for resume capability - -### Error Recovery Example -```python -# Workflow with error handling -try: - result = await upload_document(file_path) -except FileTooLargeError: - # Switch to chunked upload - chunks = await prepare_chunks(file_path) - results = [] - for chunk in chunks: - result = await store_documents([chunk]) - results.append(result) - return aggregate_results(results) -``` - -## 🔗 Integration Examples - -### With Project Management -```python -# Creating project documentation -"Create project documentation from these design files" - -# Agent coordinates: -1. manage_project() - Create or find project -2. upload_document() - Process each design file -3. manage_document() - Link to project -4. manage_versions() - Set up version tracking -``` - -### With Knowledge Base -```python -# Building knowledge base -"Add all our API documentation to the knowledge base" - -# Agent coordinates: -1. crawl_single_page() - For online docs -2. upload_document() - For local files -3. store_documents() - For processed content -4. Cross-reference with existing content -``` - -## 📊 Monitoring & Metrics - -### Key Metrics Tracked -- **Processing Time**: Per document and total -- **Chunk Count**: Documents to chunks ratio -- **Success Rate**: Successful vs failed uploads -- **Tool Usage**: Which MCP tools used most - -### Processing Traces -The Document Agent provides detailed processing traces showing document type, file size, and processing strategy for each operation. - -## 🔗 Related Documentation - -- [Agents Overview](./agents-overview) - Understanding the Agents service -- [Upload Document Tool](./mcp-tools#upload-document) - MCP tool details -- [Document Service](./server-services#document-service) - Backend implementation -- [Document Storage API](./api-reference#document-management-api) - REST endpoints \ No newline at end of file diff --git a/docs/docs/agent-rag.mdx b/docs/docs/agent-rag.mdx deleted file mode 100644 index 641bfcd8..00000000 --- a/docs/docs/agent-rag.mdx +++ /dev/null @@ -1,323 +0,0 @@ ---- -title: RAG Agent -sidebar_position: 3 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# 🧠 RAG Agent - -
-
-

- **Intelligent search orchestration** using PydanticAI to enhance queries, coordinate searches, and interpret results through MCP tools. -

-
-
- -## 🎯 Overview - -The RAG (Retrieval-Augmented Generation) Agent is a PydanticAI-powered orchestrator that enhances search capabilities by intelligently refining queries, coordinating multiple search strategies, and interpreting results for optimal relevance. - - -The RAG Agent contains NO embedding models or search logic. All actual search operations are performed by the Server service through MCP tool calls. - - -## 🤖 Capabilities - -### Query Enhancement -- **Intent Analysis**: Understands what the user is really looking for -- **Query Expansion**: Adds synonyms and related terms -- **Context Awareness**: Uses conversation history for better results -- **Multi-Query Strategy**: Breaks complex queries into sub-queries - -### Search Orchestration -- **Source Selection**: Chooses optimal sources to search -- **Result Aggregation**: Combines results from multiple searches -- **Relevance Filtering**: Removes low-quality matches -- **Answer Synthesis**: Creates coherent responses from fragments - -## 🔧 MCP Tools Used - -| Tool | Purpose | When Used | -|------|---------|-----------| -| `perform_rag_query` | Main semantic search | Primary search operations | -| `search_code_examples` | Code-specific search | When looking for code | -| `get_available_sources` | List searchable sources | To filter searches | -| `crawl_single_page` | Add new content | When current knowledge insufficient | -| `smart_crawl_url` | Crawl documentation sites | For comprehensive updates | - -## 📊 Search Workflows - -### Standard RAG Query -```mermaid -sequenceDiagram - participant User - participant RAGAgent as RAG Agent - participant MCP as MCP Tools - participant Server - - User->>RAGAgent: Search query - RAGAgent->>RAGAgent: Analyze intent - RAGAgent->>MCP: get_available_sources() - MCP-->>RAGAgent: Available sources - RAGAgent->>RAGAgent: Select relevant sources - RAGAgent->>MCP: perform_rag_query() - MCP->>Server: HTTP POST /api/rag/query - Server->>Server: Generate embeddings - Server->>Server: Vector search - Server-->>MCP: Search results - MCP-->>RAGAgent: Raw results - RAGAgent->>RAGAgent: Interpret & rank - RAGAgent-->>User: Enhanced results -``` - -### Multi-Strategy Search -```mermaid -flowchart TD - A[User Query] --> B{Analyze Query Type} - B -->|Technical| C[Documentation Search] - B -->|Code| D[Code Example Search] - B -->|Mixed| E[Combined Strategy] - - C --> F[perform_rag_query] - D --> G[search_code_examples] - E --> H[Both Searches] - - F --> I[Filter by Source] - G --> J[Extract Code Context] - H --> K[Merge Results] - - I --> L[Rank Results] - J --> L - K --> L - - L --> M[Synthesize Answer] -``` - -## 💬 Example Interactions - -### Simple Search -```python -# User request -"How do I implement authentication in React?" - -# RAG Agent workflow -1. Analyze: Technical query about React authentication -2. Check sources: Find React documentation available -3. Enhance query: Add terms like "login", "JWT", "auth context" -4. Call: perform_rag_query( - query="React authentication implementation login JWT", - source="react-docs", - match_count=10 -) -5. Filter: Remove generic authentication results -6. Return: Focused results with code examples -``` - -### Complex Multi-Source Search -```python -# User request -"Compare different state management solutions for React" - -# RAG Agent workflow -1. Identify: Comparison query requiring multiple sources -2. Break down: - - "Redux state management" - - "MobX state management" - - "Zustand state management" - - "React Context API" -3. Execute parallel searches: - - perform_rag_query(query="Redux", source="redux-docs") - - perform_rag_query(query="MobX", source="mobx-docs") - - search_code_examples(query="state management comparison") -4. Aggregate: Combine results from all queries -5. Synthesize: Create comparison table -6. Return: Structured comparison with pros/cons -``` - -## 🔍 Implementation Details - -### Agent Structure -```python -from pydantic_ai import Agent, RunContext -from typing import List, Dict, Any - -class RAGAgent(Agent): - """Orchestrates RAG search operations""" - - name = "rag_search" - description = "Enhances search queries and interprets results" - - tools = [ - "perform_rag_query", - "search_code_examples", - "get_available_sources", - "crawl_single_page" - ] - - async def search( - self, - context: RunContext, - query: str - ) -> Dict[str, Any]: - # Analyze query intent - intent = self.analyze_intent(query) - - # Get available sources - sources = await context.tools.get_available_sources() - - # Plan search strategy - strategy = self.plan_strategy(intent, sources) - - # Execute searches - results = await self.execute_strategy(context, strategy) - - # Synthesize response - return self.synthesize_answer(results) -``` - -### Query Enhancement Strategies - -#### Synonym Expansion -```python -# Original query -"fix bug in authentication" - -# Enhanced query -"fix bug error issue problem authentication login auth JWT session" -``` - -#### Contextual Enhancement -```python -# With context of previous React questions -"how to test it" - -# Enhanced with context -"React authentication testing unit test integration test Jest React Testing Library" -``` - -#### Technical Term Addition -```python -# User query -"make it faster" - -# Enhanced for technical search -"performance optimization speed improve fast efficient caching memoization" -``` - -## 📈 Search Optimization - -### Result Ranking Factors -1. **Semantic Similarity**: How closely content matches query -2. **Source Reliability**: Prefer official documentation -3. **Recency**: Newer content scored higher -4. **Code Presence**: Boost results with examples -5. **Context Relevance**: Match to conversation history - -### Caching Strategy -- Cache frequent queries for instant results -- Store query enhancement patterns -- Remember successful search strategies -- Cache source metadata for filtering - -## 🚨 Handling Edge Cases - -### No Results Found -```python -# Strategy when no results -1. Broaden search terms -2. Remove source filters -3. Try alternative phrasings -4. Suggest crawling new content -5. Provide helpful error message - -# Example -if not results: - # Try broader search - results = await perform_rag_query( - query=simplified_query, - source=None, # Search all sources - match_count=20 # Get more results - ) - - if still not results: - # Suggest adding content - return { - "message": "No results found. Would you like me to crawl relevant documentation?", - "suggestion": f"crawl_single_page('{suggested_url}')" - } -``` - -### Ambiguous Queries -```python -# Handle unclear intent -"How do I fix this?" - -# Agent response -1. Analyze context for clues -2. Ask clarifying questions -3. Provide multiple interpretations -4. Show results for each interpretation -``` - -## 🔗 Integration Patterns - -### With Document Processing -```python -# Enhancing knowledge base -"This documentation is missing, add it" - -# Agent coordinates: -1. Identify missing content area -2. Find relevant documentation URL -3. crawl_single_page() or smart_crawl_url() -4. Verify content was added -5. Test with sample query -``` - -### With Task Management -```python -# Finding task-related information -"What tasks are related to authentication?" - -# Agent coordinates: -1. search_code_examples(query="authentication") -2. Extract file paths and functions -3. Cross-reference with task descriptions -4. Return relevant tasks with context -``` - -## 📊 Performance Metrics - -### Key Metrics -- **Query Enhancement Rate**: How often queries are modified -- **Result Relevance**: User satisfaction with results -- **Search Latency**: Time from query to results -- **Cache Hit Rate**: Percentage served from cache - -### Search Monitoring -The RAG Agent automatically tracks search performance including original query, enhanced query, and sources searched for each operation. - -## 🎯 Best Practices - -### Query Optimization -1. **Be Specific**: Add technical context when possible -2. **Use Examples**: "like X but for Y" helps -3. **Specify Sources**: Filter when you know the source -4. **Iterate**: Refine based on initial results - -### Result Interpretation -1. **Check Scores**: Higher similarity scores = better matches -2. **Verify Sources**: Official docs > community content -3. **Look for Code**: Examples often clarify concepts -4. **Read Context**: Surrounding text provides clarity - -## 🔗 Related Documentation - -- [Agents Overview](./agents-overview) - Understanding the Agents service -- [RAG Query Tool](./mcp-tools#perform-rag-query) - MCP tool details -- [Search Service](./server-services#search-service) - Backend implementation -- [Knowledge Overview](./knowledge-overview) - Knowledge base features \ No newline at end of file diff --git a/docs/docs/agent-task.mdx b/docs/docs/agent-task.mdx deleted file mode 100644 index f11c6945..00000000 --- a/docs/docs/agent-task.mdx +++ /dev/null @@ -1,351 +0,0 @@ ---- -title: Task Agent -sidebar_position: 4 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# 📋 Task Agent - -
-
-

- **Intelligent task orchestration** using PydanticAI to break down complex work, manage dependencies, and coordinate project workflows through MCP tools. -

-
-
- -## 🎯 Overview - -The Task Agent is a PydanticAI-powered orchestrator that handles complex project and task management workflows. It can break down high-level requirements into actionable tasks, manage dependencies, and coordinate multiple operations to keep projects organized. - - -The Task Agent contains NO project management logic. All actual operations are performed by the Server service through MCP tool calls. - - -## 🤖 Capabilities - -### Task Analysis -- **Requirement Breakdown**: Converts high-level goals into specific tasks -- **Dependency Detection**: Identifies task relationships -- **Priority Assignment**: Determines task importance -- **Effort Estimation**: Suggests task complexity - -### Project Orchestration -- **Project Creation**: Sets up new projects with structure -- **Task Organization**: Creates and manages related tasks -- **Status Management**: Coordinates task state transitions -- **Team Coordination**: Assigns work to humans or AI agents - -## 🔧 MCP Tools Used - -| Tool | Purpose | When Used | -|------|---------|-----------| -| `manage_project` | Project CRUD operations | Project creation/updates | -| `manage_task` | Task lifecycle management | All task operations | -| `manage_document` | Project documentation | PRDs, specs, notes | -| `manage_versions` | Version control | Document updates | -| `get_project_features` | Feature retrieval | Planning workflows | - -## 📊 Task Workflows - -### Project Setup -```mermaid -sequenceDiagram - participant User - participant TaskAgent as Task Agent - participant MCP as MCP Tools - participant Server - - User->>TaskAgent: Create project request - TaskAgent->>TaskAgent: Analyze requirements - TaskAgent->>MCP: manage_project(action="create") - MCP->>Server: HTTP POST /api/projects - Server-->>MCP: Project created - TaskAgent->>TaskAgent: Plan initial tasks - TaskAgent->>MCP: manage_task(action="create") x N - MCP->>Server: Create multiple tasks - Server-->>MCP: Tasks created - TaskAgent-->>User: Project ready with tasks -``` - -### Task Breakdown -```mermaid -flowchart TD - A[High-Level Requirement] --> B{Analyze Complexity} - B -->|Simple| C[Single Task] - B -->|Complex| D[Break Down] - - D --> E[Identify Components] - E --> F[Create Parent Task] - F --> G[Create Related Tasks] - - G --> H{Dependencies?} - H -->|Yes| I[Set Order] - H -->|No| J[Parallel Tasks] - - I --> K[Assign Priorities] - J --> K - - K --> L[Set Assignees] - L --> M[Create in System] -``` - -## 💬 Example Interactions - -### Project Creation -```python -# User request -"Create a project for building a user authentication system" - -# Task Agent workflow -1. Create project: - manage_project( - action="create", - title="User Authentication System", - github_repo="https://github.com/team/auth-system" - ) - -2. Generate initial tasks: - - Design authentication flow - - Implement user model - - Create login API endpoint - - Build registration flow - - Add password reset - - Write tests - - Create documentation - -3. Create each task with relationships: - for task in generated_tasks: - manage_task( - action="create", - project_id=project.id, - title=task.title, - description=task.description, - assignee=task.suggested_assignee - ) - -4. Return: "Created project with 7 initial tasks" -``` - -### Complex Task Breakdown -```python -# User request -"Break down 'Implement login API endpoint' into smaller tasks" - -# Task Agent workflow -1. Analyze the main task -2. Identify components: - - Input validation - - Database query - - Password verification - - JWT generation - - Response formatting - - Error handling - -3. Create related tasks: - manage_task(action="create", project_id=project_id, ...) - -4. Set logical order and priorities: - - Input validation (priority: high) - - Database query (priority: high) - - Password verification (priority: high) - - JWT generation (priority: medium) - -5. Return: "Created 6 related tasks with appropriate priorities" -``` - -## 🔍 Implementation Details - -### Agent Structure -```python -from pydantic_ai import Agent, RunContext -from typing import List, Dict, Any - -class TaskAgent(Agent): - """Orchestrates task and project management""" - - name = "task_manager" - description = "Manages projects and tasks intelligently" - - tools = [ - "manage_project", - "manage_task", - "manage_document", - "manage_versions", - "get_project_features" - ] - - async def process_request( - self, - context: RunContext, - request: str - ) -> Dict[str, Any]: - # Understand the request - intent = self.analyze_intent(request) - - # Execute appropriate workflow - if intent.type == "create_project": - return await self.create_project_workflow(context, intent) - elif intent.type == "break_down_task": - return await self.breakdown_workflow(context, intent) - elif intent.type == "update_status": - return await self.status_workflow(context, intent) - # ... more workflows -``` - -### Intelligence Patterns - -#### Task Generation -```python -def generate_tasks_for_feature(feature_description: str) -> List[Task]: - """Generate tasks based on feature requirements""" - - # Analyze feature type - if "authentication" in feature_description: - return [ - Task("Design auth flow", "User", "high"), - Task("Implement auth service", "AI IDE Agent", "high"), - Task("Create login UI", "User", "medium"), - Task("Add tests", "AI IDE Agent", "high"), - Task("Document API", "Archon", "medium") - ] - # ... more patterns -``` - -#### Dependency Detection -```python -def detect_dependencies(tasks: List[Task]) -> List[Dependency]: - """Identify task relationships""" - - dependencies = [] - for task in tasks: - if "test" in task.title.lower(): - # Tests depend on implementation - impl_task = find_implementation_task(tasks, task) - if impl_task: - dependencies.append(Dependency(impl_task, task)) - - return dependencies -``` - -## 📈 Project Management Patterns - -### Sprint Planning -```python -# Organize tasks into sprints -"Plan the next sprint" - -# Agent workflow: -1. Get all pending tasks -2. Analyze task priorities and sizes -3. Group related tasks -4. Balance workload -5. Create sprint documentation -6. Update task assignments -``` - -### Progress Tracking -```python -# Monitor project progress -"Show me what's blocking progress" - -# Agent workflow: -1. Find all "blocked" status tasks -2. Analyze blocking reasons -3. Identify dependency chains -4. Suggest solutions -5. Return actionable report -``` - -## 🚨 Advanced Orchestration - -### Multi-Project Coordination -```python -# Handle cross-project dependencies -"The auth system needs the user service completed first" - -# Agent coordinates: -1. Identify both projects -2. Find related tasks -3. Create cross-project dependency -4. Adjust timelines -5. Notify relevant assignees -``` - -### Automated Status Updates -```python -# Intelligent status management -"Update all completed development tasks to review" - -# Agent workflow: -1. Find tasks with: - - Status: "doing" - - Assignee: "AI IDE Agent" - - Recent activity -2. Check completion criteria -3. Update status to "review" -4. Notify reviewers -``` - -## 🔗 Integration Examples - -### With Knowledge Base -```python -# Link tasks to documentation -"Find all tasks related to React hooks" - -# Agent coordinates: -1. perform_rag_query("React hooks") -2. Extract relevant file paths -3. Search tasks mentioning those files -4. Create task-knowledge links -5. Return related tasks -``` - -### With Document Management -```python -# Create project documentation -"Generate PRD for the authentication project" - -# Agent coordinates: -1. get_project_features(project_id) -2. Analyze existing tasks -3. Generate PRD structure -4. manage_document(action="add", content=prd) -5. Link to project -``` - -## 📊 Performance Metrics - -### Key Metrics -- **Task Creation Time**: Speed of generating tasks -- **Breakdown Accuracy**: Quality of task decomposition -- **Dependency Detection**: Correctly identified relationships -- **Assignment Distribution**: Balance across team - -### Performance Tracking -The Task Agent automatically tracks operation performance and provides detailed results for each orchestration workflow. - -## 🎯 Best Practices - -### Task Creation -1. **Clear Titles**: Actionable and specific -2. **Descriptions**: Include acceptance criteria -3. **Right-Sizing**: Not too big, not too small -4. **Assignments**: Match skills to assignees - -### Project Organization -1. **Feature Grouping**: Related tasks together -2. **Milestone Planning**: Clear project phases -3. **Documentation**: Keep PRDs updated -4. **Regular Reviews**: Adjust as needed - -## 🔗 Related Documentation - -- [Agents Overview](./agents-overview) - Understanding the Agents service -- [Project Management Tools](./mcp-tools#project-tools) - MCP tool details -- [Task Service](./server-services#task-service) - Backend implementation -- [Projects Overview](./projects-overview) - Project management features \ No newline at end of file diff --git a/docs/docs/agents-overview.mdx b/docs/docs/agents-overview.mdx deleted file mode 100644 index 2696659f..00000000 --- a/docs/docs/agents-overview.mdx +++ /dev/null @@ -1,224 +0,0 @@ ---- -title: Agents Overview -sidebar_position: 1 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# ⚙️ Agents Service Overview - -
-
-

- **PydanticAI-powered agents** that orchestrate complex operations by intelligently combining MCP tools. No business logic, pure AI orchestration. -

-
-
- - - -**The Agents service is purely an AI orchestration layer that:** -- Contains PydanticAI agent implementations -- Uses MCP tools for ALL operations -- Has NO direct database access -- Contains NO ML models or embeddings -- Performs NO data processing - -**All actual functionality comes from calling MCP tools, which in turn call the Server service.** - - - -## 🏗️ Architecture Overview - -The Agents Service (`archon-agents`) runs on port 8052 and contains three specialized PydanticAI agents: - -```mermaid -%%{init:{ - 'theme':'base', - 'themeVariables': { - 'primaryColor':'#1f2937', - 'primaryTextColor':'#ffffff', - 'primaryBorderColor':'#8b5cf6' - } -}}%% -graph TB - subgraph "Agents Service (Port 8052)" - DA[Document Agent] - RA[RAG Agent] - TA[Task Agent] - end - - subgraph "MCP Service (Port 8051)" - Tools[14 MCP Tools] - end - - subgraph "Server Service (Port 8080)" - BL[All Business Logic] - ML[ML Models] - DB[Database Operations] - end - - DA -->|Uses| Tools - RA -->|Uses| Tools - TA -->|Uses| Tools - - Tools -->|HTTP Calls| BL - Tools -->|HTTP Calls| ML - Tools -->|HTTP Calls| DB -``` - -## 🤖 Available Agents - -### 1. Document Agent -- **Purpose**: Orchestrates document processing workflows -- **Capabilities**: Intelligent document handling and organization -- **MCP Tools Used**: `upload_document`, `manage_document`, `store_documents` - -### 2. RAG Agent -- **Purpose**: Orchestrates knowledge retrieval and search refinement -- **Capabilities**: Query enhancement and result interpretation -- **MCP Tools Used**: `perform_rag_query`, `search_code_examples`, `get_available_sources` - -### 3. Task Agent -- **Purpose**: Orchestrates project and task management workflows -- **Capabilities**: Task breakdown and status management -- **MCP Tools Used**: `manage_project`, `manage_task`, `manage_versions` - -## 🎯 How Agents Work - -### PydanticAI Framework -All agents are built using the PydanticAI framework, which provides: -- Type-safe agent definitions -- Structured tool calling -- Context management -- Error handling - -### Agent Workflow Pattern -```python -# Conceptual flow (simplified) -class DocumentAgent: - async def process_document(self, file_path: str, doc_type: str): - # 1. Analyze document requirements - analysis = self.analyze_document_type(file_path) - - # 2. Call MCP tool to upload - result = await mcp_tools.upload_document( - file_path=file_path, - doc_type=doc_type, - metadata=analysis.metadata - ) - - # 3. Orchestrate additional processing - if analysis.needs_chunking: - await mcp_tools.store_documents(...) - - # 4. Return structured result - return ProcessingResult(...) -``` - -## 🔧 Technical Implementation - -### Service Configuration -- **Framework**: FastAPI for the HTTP server -- **Port**: 8052 -- **Dependencies**: PydanticAI, MCP client libraries -- **No Database**: All data operations via MCP tools - -### Communication Flow -1. **External Request** → Agents Service -2. **Agent Analysis** → Determines required operations -3. **MCP Tool Calls** → Multiple coordinated tool calls -4. **Server Processing** → Actual work done in Server service -5. **Result Aggregation** → Agent combines results -6. **Response** → Structured output to caller - -### Health Check -```bash -curl http://localhost:8052/health - -# Response -{ - "status": "healthy", - "service": "archon-agents", - "agents_available": ["document", "rag", "task"], - "mcp_connection": "active" -} -``` - -## 🚀 Docker Deployment - -```dockerfile -# Agents Service Dockerfile -FROM python:3.12-slim - -WORKDIR /app - -# Install dependencies -COPY requirements.txt . -RUN pip install -r requirements.txt - -# Copy agent implementations -COPY src/agents/ src/agents/ - -# Environment variables -ENV PYTHONPATH=/app/src -ENV MCP_SERVER_URL=http://archon-mcp:8051 - -# Run the service -CMD ["uvicorn", "src.agents.server:app", "--host", "0.0.0.0", "--port", "8052"] -``` - -## 📊 Monitoring - -### Logfire Integration -All agent operations are monitored with Logfire: -- Agent invocation tracking -- MCP tool call monitoring -- Performance metrics -- Error tracking - -### Key Metrics -- **Agent Response Time**: Time to complete orchestration -- **Tool Call Count**: Number of MCP tools used per request -- **Success Rate**: Percentage of successful operations -- **Error Types**: Common failure patterns - -## 🔗 Integration Points - -### API Endpoints -The Agents service is called by the Server service for complex operations: -- `POST /api/agent-chat/message` - Main chat interface -- `POST /agents/document/process` - Document processing -- `POST /agents/rag/search` - Enhanced search -- `POST /agents/task/manage` - Task orchestration - -### MCP Tool Usage -Agents can use all 14 MCP tools: -- 7 Knowledge Management tools -- 5 Project Management tools -- 2 System tools - -## 🎯 When to Use Agents - -### Use Agents When: -- Complex orchestration is needed -- Multiple MCP tools must be coordinated -- Intelligent decision-making is required -- Natural language processing helps - -### Direct MCP Tools When: -- Simple, single operations -- Performance is critical -- Deterministic behavior needed -- No orchestration required - -## 🔗 Related Documentation - -- [Agent Chat Panel](./agent-chat) - Real-time UI for interacting with agents -- [Document Agent](./agent-document) - Document processing orchestration -- [RAG Agent](./agent-rag) - Search and retrieval orchestration -- [Task Agent](./agent-task) - Project management orchestration -- [MCP Tools Reference](./mcp-tools) - Available MCP tools -- [Server Architecture](./server-overview) - Overall system design \ No newline at end of file diff --git a/docs/docs/api-reference.mdx b/docs/docs/api-reference.mdx deleted file mode 100644 index 5385830e..00000000 --- a/docs/docs/api-reference.mdx +++ /dev/null @@ -1,2046 +0,0 @@ ---- -title: API Reference -sidebar_position: 4 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# API Reference - -Archon provides a comprehensive REST API built with FastAPI for knowledge management, document processing, and project automation. This reference covers all endpoints with detailed examples, request/response schemas, and integration patterns. - -## 🌐 Base URL & Authentication - -**Base URL**: `http://localhost:8080` - -**Interactive Documentation**: -- Swagger UI: `http://localhost:8080/docs` -- ReDoc: `http://localhost:8080/redoc` - -**Authentication**: Currently API key-based through settings. Future versions will support JWT tokens. - -## 🏗️ Modular API Architecture - -Archon uses a modular FastAPI architecture with separate routers for different functionalities: - -- **`knowledge_api.py`**: Knowledge items, web crawling, and document management -- **`mcp_api.py`**: MCP server control and Socket.IO communications -- **`settings_api.py`**: Application settings and credential management -- **`projects_api.py`**: Project and task management (refactored with service layer) -- **`agent_chat_api.py`**: AI agent chat interface -- **`tests_api.py`**: Testing endpoints with real-time streaming - -All routers are mounted with the `/api` prefix and provide comprehensive OpenAPI documentation. - -## Endpoint Index -- [Knowledge Management](#knowledge-management-api) -- [Document Management](#document-management-api) -- [RAG API](#rag-retrieval-augmented-generation-api) -- [MCP Server](#mcp-server-management-api) -- [Project Management](#project-management-api) -- [Task Management](#task-management-api) -- [Settings](#settings-management-api) -- [Credentials](#credentials-api) -- [Agent Chat](#agent-chat-api) -- [Testing](#testing-api) -- [System Info](#system-information-api) - - -## 📚 Knowledge Management API - -### List Knowledge Items - -**GET** `/api/knowledge-items` - -Retrieve all knowledge items with optional filtering and pagination. - -#### Query Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `page` | integer | ❌ | Page number (default: 1) | -| `per_page` | integer | ❌ | Items per page (default: 20, max: 100) | -| `knowledge_type` | string | ❌ | Filter by knowledge type (`technical`, `business`, `general`) | -| `tags` | string[] | ❌ | Filter by tags | -| `status` | string | ❌ | Filter by status (`active`, `archived`) | -| `source_type` | string | ❌ | Filter by source type (`url`, `file`) | - -#### Example Request - -```bash -curl -X GET "http://localhost:8080/api/knowledge-items?page=1&per_page=10&knowledge_type=technical" \ - -H "Accept: application/json" -``` - -#### Example Response - -```json -{ - "items": [ - { - "id": 123, - "url": "https://docs.python.org/3/tutorial/", - "title": "Python Tutorial", - "content": "Python is an easy to learn, powerful programming language...", - "knowledge_type": "technical", - "tags": ["python", "tutorial", "programming"], - "metadata": { - "source_id": "docs.python.org", - "char_count": 5234, - "word_count": 1250, - "headers": ["Introduction", "Getting Started"] - }, - "created_at": "2024-01-15T10:30:00Z", - "updated_at": "2024-01-15T10:30:00Z" - } - ], - "pagination": { - "page": 1, - "per_page": 20, - "total": 156, - "total_pages": 8, - "has_next": true, - "has_prev": false - } -} -``` - -### Update Knowledge Item - -**PUT** `/api/knowledge-items/{source_id}` - -Update metadata for a knowledge item. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `source_id` | string | ✅ | Source identifier | - -#### Request Body - -```json -{ - "title": "Updated Title", - "knowledge_type": "technical", - "tags": ["python", "updated"], - "status": "active", - "update_frequency": 14 -} -``` - -#### Example Response - -```json -{ - "success": true, - "message": "Successfully updated knowledge item docs.python.org", - "source_id": "docs.python.org" -} -``` - -### Delete Knowledge Source - -**DELETE** `/api/knowledge-items/{source_id}` - -Delete all knowledge items from a specific source. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `source_id` | string | ✅ | Source identifier (URL domain or document name) | - -#### Example Request - -```bash -curl -X DELETE "http://localhost:8080/api/knowledge-items/docs.python.org" \ - -H "Accept: application/json" -``` - -#### Example Response - -```json -{ - "success": true, - "message": "Successfully deleted 45 items from source", - "deleted_count": 45, - "source_id": "docs.python.org" -} -``` - -### Smart Crawl Website - -**POST** `/api/knowledge-items/crawl` - -Initiate intelligent web crawling for a URL with automatic content type detection and real-time progress tracking. - -Archon automatically detects the content type and applies the appropriate crawling strategy: -- **Sitemap URLs** (ending in `sitemap.xml`): Extracts and crawls all URLs from the sitemap -- **Text Files** (`.txt` files): Downloads and processes the file directly -- **Regular Webpages**: Performs recursive crawling following internal links - -#### Request Body - -```json -{ - "url": "https://docs.python.org/3/tutorial/", - "knowledge_type": "technical", - "tags": ["python", "tutorial"], - "update_frequency": 7, - "max_depth": 2 -} -``` - -#### Request Schema - -| Field | Type | Required | Description | -|-------|------|----------|-------------| -| `url` | string | ✅ | Target URL to crawl (webpage, sitemap.xml, or .txt file) | -| `knowledge_type` | string | ✅ | Knowledge classification (`technical`, `business`, `general`) | -| `tags` | string[] | ❌ | Tags for categorization | -| `update_frequency` | integer | ❌ | How often to refresh content (days, default: 7) | -| `max_depth` | integer | ❌ | Maximum crawl depth (1-5, default: 2) | - -**Smart Crawling Behavior:** -- **Max Depth**: Configurable 1-5 levels for recursive webpage crawling -- **Max Concurrent**: 5 simultaneous crawl workers -- **Chunk Size**: 5000 characters per knowledge chunk -- **Automatic Detection**: Content type determined by URL pattern - -#### Example Request - -```bash -curl -X POST "http://localhost:8080/api/knowledge-items/crawl" \ - -H "Content-Type: application/json" \ - -d '{ - "url": "https://docs.python.org/3/tutorial/", - "knowledge_type": "technical", - "tags": ["python", "tutorial"], - "update_frequency": 7 - }' -``` - -#### Example Response - -```json -{ - "success": true, - "progress_id": "183e2615-fca4-4a71-a051-ab5a0292f9ff", - "message": "Crawling started", - "estimated_duration": "3-5 minutes" -} -``` - -### Socket.IO Knowledge Stream - -**Socket.IO Namespace** `/knowledge` - -Real-time updates for knowledge items changes. - -#### Connection Example - -```javascript -import { io } from 'socket.io-client'; - -// Connect to knowledge namespace -const socket = io('/knowledge'); - -// Handle source updates -socket.on('source_added', (data) => { - console.log('New source added:', data.source_id); -}); - -socket.on('source_updated', (data) => { - console.log('Source updated:', data.source_id); -}); -``` - -### Socket.IO Progress Tracking - -**Socket.IO Namespace** `/crawl` - -Real-time progress updates for crawling operations using Socket.IO for improved reliability and automatic reconnection. - -#### Connection Example - -```javascript -import { io } from 'socket.io-client'; - -// Connect to crawl namespace -const socket = io('/crawl'); - -// Subscribe to specific progress -const progressId = '183e2615-fca4-4a71-a051-ab5a0292f9ff'; -socket.emit('subscribe', { progress_id: progressId }); - -// Handle progress updates -socket.on('progress_update', (data) => { - console.log('Progress:', data.percentage + '%'); - console.log('Status:', data.status); - console.log('Logs:', data.logs); -}); - -// Handle completion -socket.on('progress_complete', (data) => { - console.log('Crawl completed!'); - console.log('Chunks stored:', data.chunksStored); - console.log('Word count:', data.wordCount); -}); - -// Handle errors -socket.on('progress_error', (data) => { - console.error('Crawl failed:', data.error); -}); -``` - -#### Progress Message Format - -**New Progress Features:** -- **📊 Smooth Progress**: Linear 0-100% progression across all document batches -- **📦 Detailed Batch Info**: "Batch 3/9: Processing items 31-45..." with accurate percentages -- **🔄 Real-Time Updates**: Socket.IO broadcasts for each processing step -- **⏱️ No Progress Jumps**: Progress bar advances smoothly without resetting - -```json -{ - "type": "crawl_progress", - "data": { - "progressId": "183e2615-fca4-4a71-a051-ab5a0292f9ff", - "status": "document_storage", - "percentage": 35, // Smooth progression, not jumping - "start_time": "2024-01-15T10:30:00Z", - "currentUrl": "https://docs.python.org/3/tutorial/", - "totalPages": 12, - "processedPages": 5, - "log": "Batch 3/9: Processing items 31-45 of 129", - "logs": [ - "Starting crawl...", - "Analyzing URL type: https://docs.python.org/3/tutorial/", - "Detected webpage, starting recursive crawl...", - "Processed 5/12 pages", - "Processing 129 pages into chunks...", - "Batch 1/9: Processing items 1-15 of 129", - "Batch 2/9: Processing items 16-30 of 129", - "Batch 3/9: Processing items 31-45 of 129" - ] - } -} -``` - -#### Progress Phases - -1. **`analyzing`** (0-5%): URL type detection and strategy selection -2. **`crawling`** (5-25%): Web page retrieval and content extraction -3. **`processing`** (25-30%): Document chunking and preparation -4. **`source_creation`** (30-35%): Creating source records in database -5. **`document_storage`** (35-90%): Batch processing with contextual embeddings - - Each batch shows: "Batch X/Y: Processing items..." - - Sub-steps: Creating embeddings → Storing in database -6. **`code_storage`** (90-95%): Extracting and storing code examples -7. **`finalization`** (95-100%): Completing crawl and cleanup - -## 📄 Document Management API - -### Upload Document - -**POST** `/api/documents/upload` - -Upload and process documents (PDF, Word, Markdown, Text). - -#### Request (Multipart Form) - -| Field | Type | Required | Description | -|-------|------|----------|-------------| -| `file` | file | ✅ | Document file to upload | -| `knowledge_type` | string | ❌ | Knowledge classification (default: "technical") | -| `tags` | string | ❌ | JSON array of tags | - -#### Supported File Types - -| Extension | MIME Type | Max Size | Processing Engine | -|-----------|-----------|----------|-------------------| -| `.pdf` | `application/pdf` | 50MB | PyPDF2 + pdfplumber | -| `.docx` | `application/vnd.openxmlformats-officedocument.wordprocessingml.document` | 25MB | python-docx | -| `.doc` | `application/msword` | 25MB | python-docx | -| `.md` | `text/markdown` | 10MB | Direct processing | -| `.txt` | `text/plain` | 10MB | Direct processing | - -#### Example Request - -```bash -curl -X POST "http://localhost:8080/api/documents/upload" \ - -F "file=@python-guide.pdf" \ - -F "knowledge_type=technical" \ - -F "tags=[\"python\", \"guide\", \"programming\"]" -``` - -#### Example Response - -```json -{ - "success": true, - "message": "Document uploaded and processed successfully", - "document": { - "id": 456, - "filename": "python-guide.pdf", - "knowledge_type": "technical", - "tags": ["python", "guide", "programming"], - "file_size": 2048576, - "chunks_created": 89, - "processing_time": 12.5, - "created_at": "2024-01-15T10:45:00Z" - } -} -``` - -## 🔍 RAG (Retrieval-Augmented Generation) API - -### Query Knowledge Base - -**POST** `/api/rag/query` - -Perform semantic search across the knowledge base. - -#### Request Body - -```json -{ - "query": "How to handle exceptions in Python?", - "source": "docs.python.org", - "match_count": 10 -} -``` - -#### Request Schema - -| Field | Type | Required | Description | -|-------|------|----------|-------------| -| `query` | string | ✅ | Search query text | -| `source` | string | ❌ | Filter by specific source domain | -| `match_count` | integer | ❌ | Maximum results (default: 5, max: 50) | - -#### Example Request - -```bash -curl -X POST "http://localhost:8080/api/rag/query" \ - -H "Content-Type: application/json" \ - -d '{ - "query": "How to handle exceptions in Python?", - "source": "docs.python.org", - "match_count": 5 - }' -``` - -#### Example Response - -```json -{ - "success": true, - "query": "How to handle exceptions in Python?", - "results": [ - { - "id": 789, - "title": "Python Exception Handling", - "content": "Python uses try-except blocks to handle exceptions. When an error occurs...", - "url": "https://docs.python.org/3/tutorial/errors.html", - "similarity_score": 0.92, - "metadata": { - "source_id": "docs.python.org", - "char_count": 450, - "word_count": 89, - "headers": ["Exception Handling", "Try-Except Blocks"] - } - } - ], - "total_results": 1, - "processing_time": 0.245 -} -``` - -### Get Available Sources - -**GET** `/api/rag/sources` - -Retrieve all available knowledge sources for filtering. - -#### Example Response - -```json -{ - "success": true, - "sources": [ - { - "source_id": "docs.python.org", - "title": "Python Official Documentation", - "description": "Official Python documentation and tutorials", - "created_at": "2024-01-10T00:00:00Z", - "last_updated": "2024-01-15T10:45:00Z" - }, - { - "source_id": "fastapi.tiangolo.com", - "title": "FastAPI Documentation", - "description": "FastAPI framework documentation", - "created_at": "2024-01-12T00:00:00Z", - "last_updated": "2024-01-14T08:30:00Z" - } - ], - "total_count": 2 -} -``` - -### Delete Source - -**DELETE** `/api/sources/{source_id}` - -Delete a source and all its associated data (crawled pages, code examples, embeddings). - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `source_id` | string | ✅ | Source identifier to delete | - -#### Example Request - -```bash -curl -X DELETE "http://localhost:8080/api/sources/docs.python.org" \ - -H "Accept: application/json" -``` - -#### Example Response - -```json -{ - "success": true, - "message": "Successfully deleted source docs.python.org", - "source_id": "docs.python.org", - "pages_deleted": 145, - "code_examples_deleted": 89, - "total_chunks_removed": 1450 -} -``` - -#### Error Response - -```json -{ - "error": "Source not found" -} -``` - -## 🔧 MCP Server Management API - -### Get MCP Server Status - -**GET** `/api/mcp/status` - -Retrieve current MCP Docker container status and health information. - -#### Example Response - -```json -{ - "status": "running", - "container_id": "a1b2c3d4e5f6", - "container_name": "Archon-MCP", - "uptime": 3600, - "start_time": "2024-01-15T09:44:30Z", - "health": { - "status": "healthy", - "port": 8051, - "transport": "sse" - } -} -``` - -### Start MCP Server - -**POST** `/api/mcp/start` - -Start the MCP Docker container. - - -The MCP server runs as a Docker container named `Archon-MCP`. Ensure Docker is running and the container exists (created by docker-compose). - - -#### Example Response - -```json -{ - "success": true, - "message": "MCP server started successfully", - "status": "running", - "container_id": "a1b2c3d4e5f6" -} -``` - -### Stop MCP Server - -**POST** `/api/mcp/stop` - -Stop the running MCP Docker container. - -#### Example Response - -```json -{ - "success": true, - "message": "MCP server stopped successfully", - "status": "stopped" -} -``` - -### Get MCP Logs - -**GET** `/api/mcp/logs` - -Retrieve recent MCP server logs. - -#### Query Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `limit` | integer | ❌ | Number of log entries (default: 100) | - -#### Example Response - -```json -{ - "logs": [ - { - "timestamp": "2024-01-15T10:45:30Z", - "level": "INFO", - "message": "MCP server started successfully" - }, - { - "timestamp": "2024-01-15T10:45:31Z", - "level": "INFO", - "message": "Registered 14 tools" - } - ] -} -``` - -### Clear MCP Logs - -**DELETE** `/api/mcp/logs` - -Clear the MCP server log buffer. - -#### Example Response - -```json -{ - "success": true, - "message": "Logs cleared successfully" -} -``` - -### Get MCP Configuration - -**GET** `/api/mcp/config` - -Retrieve MCP server configuration. - -#### Example Response - -```json -{ - "host": "localhost", - "port": 8051, - "transport": "sse", - "model_choice": "gpt-4o-mini", - "use_contextual_embeddings": false, - "use_hybrid_search": false, - "use_agentic_rag": false, - "use_reranking": false -} -``` - -### Save MCP Configuration - -**POST** `/api/mcp/config` - -Save MCP server configuration. - -#### Request Body - -```json -{ - "transport": "sse", - "host": "localhost", - "port": 8051 -} -``` - -#### Example Response - -```json -{ - "success": true, - "message": "Configuration saved" -} -``` - -### MCP Server Logs Stream - -**Socket.IO Namespace** `/logs` - -Real-time MCP server log streaming using Socket.IO. - -#### Connection Example - -```javascript -import { io } from 'socket.io-client'; - -// Connect to logs namespace -const socket = io('/logs'); - -// Handle connection -socket.on('connect', () => { - console.log('Connected to log stream'); -}); - -// Handle log entries -socket.on('log_entry', (data) => { - console.log(`[${data.timestamp}] ${data.level}: ${data.message}`); -}); - -// Handle batch logs -socket.on('log_batch', (logs) => { - logs.forEach(log => { - console.log(`[${log.timestamp}] ${log.level}: ${log.message}`); - }); -}); -``` - -### Get MCP Tools - -**GET** `/api/mcp/tools` - -Get list of available MCP tools. - -#### Example Response - -```json -{ - "tools": [ - { - "name": "perform_rag_query", - "description": "Search the knowledge base using semantic search", - "module": "rag", - "parameters": [ - {"name": "query", "type": "string", "required": true}, - {"name": "source", "type": "string", "required": false}, - {"name": "match_count", "type": "integer", "required": false} - ] - } - ], - "count": 14, - "server_running": true, - "source": "mcp_server" -} -``` - -### MCP Health Check - -**GET** `/api/mcp/health` - -Health check for MCP API module. - -#### Example Response - -```json -{ - "status": "healthy", - "service": "mcp" -} -``` - -## 📋 Project Management API - - -Projects in Archon use JSONB fields for flexible document storage: -- `prd`: Product Requirements Document -- `docs`: Array of project documents -- `features`: Array of feature specifications -- `data`: Custom project data - -**Service Layer Architecture:** -- **ProjectService**: Core CRUD operations for projects -- **TaskService**: Task management with archiving -- **ProjectCreationService**: AI-assisted project creation with GitHub integration -- **ProgressService**: Real-time progress tracking for long-running operations -- **SourceLinkingService**: Manages relationships between projects and knowledge sources - - -### List Projects - -**GET** `/api/projects` - -Retrieve all projects with associated knowledge sources. - -#### Query Parameters - -None - returns all projects. - -#### Example Response - -```json -[ - { - "id": "550e8400-e29b-41d4-a716-446655440000", - "title": "Archon Documentation", - "description": "Comprehensive API documentation project", - "github_repo": "https://github.com/user/archon", - "prd": { - "overview": "Documentation project", - "goals": ["Complete API docs", "Add examples"] - }, - "features": [], - "docs": [], - "technical_sources": [ - { - "source_id": "fastapi.tiangolo.com", - "title": "FastAPI Documentation" - } - ], - "business_sources": [], - "pinned": false, - "created_at": "2024-01-15T10:00:00Z", - "updated_at": "2024-01-15T10:45:00Z" - } -] -``` - -### Create Project - -**POST** `/api/projects` - -Create a new project with AI-assisted setup and optional GitHub repository processing. Returns immediately with a progress ID for real-time updates via Socket.IO. - -#### Request Body - -```json -{ - "title": "New Documentation Project", - "description": "A comprehensive documentation project", - "github_repo": "https://github.com/user/project", - "color": "blue", - "icon": "Briefcase", - "prd": { - "overview": "Project overview", - "goals": ["Goal 1", "Goal 2"], - "requirements": ["Requirement 1", "Requirement 2"] - }, - "features": [], - "technical_sources": ["fastapi.tiangolo.com"], - "business_sources": [], - "pinned": false -} -``` - -#### Request Schema - -| Field | Type | Required | Description | -|-------|------|----------|-------------| -| `title` | string | ✅ | Project title | -| `description` | string | ❌ | Project description | -| `github_repo` | string | ❌ | GitHub repository URL for processing | -| `color` | string | ❌ | Project color (default: 'blue') | -| `icon` | string | ❌ | Project icon (default: 'Briefcase') | -| `prd` | object | ❌ | Product Requirements Document | -| `features` | array | ❌ | Feature specifications | -| `technical_sources` | array | ❌ | Technical knowledge source IDs | -| `business_sources` | array | ❌ | Business knowledge source IDs | -| `pinned` | boolean | ❌ | Pin to top of project list | - -#### Example Response - -```json -{ - "progress_id": "a1b2c3d4e5f6789012345678", - "status": "started", - "message": "Project creation started. Connect to Socket.IO for progress updates." -} -``` - - -Connect to Socket.IO to receive real-time progress updates using the returned `progress_id`. The project creation process includes GitHub repository analysis, feature generation, and task creation. - - -### Get Project Details - -**GET** `/api/projects/{project_id}` - -Get detailed information about a specific project. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `project_id` | string | ✅ | Project UUID | - -#### Example Response - -```json -{ - "success": true, - "project": { - "id": "550e8400-e29b-41d4-a716-446655440000", - "title": "Archon Documentation", - "github_repo": "https://github.com/user/archon", - "prd": { - "overview": "Documentation project", - "goals": ["Complete API docs", "Add examples"] - }, - "features": [ - { - "id": "feat-001", - "name": "API Documentation", - "description": "Complete API reference" - } - ], - "docs": [ - { - "id": "doc-001", - "title": "Getting Started", - "type": "guide" - } - ], - "created_at": "2024-01-15T10:00:00Z", - "updated_at": "2024-01-15T10:45:00Z" - } -} -``` - -### Update Project - -**PUT** `/api/projects/{project_id}` - -Update project information. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `project_id` | string | ✅ | Project UUID | - -#### Request Body - -```json -{ - "title": "Updated Project Title", - "github_repo": "https://github.com/user/new-repo", - "prd": { - "overview": "Updated overview" - } -} -``` - -### Delete Project - -**DELETE** `/api/projects/{project_id}` - -Delete a project and all associated tasks. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `project_id` | string | ✅ | Project UUID | - -### Get Project Features - -**GET** `/api/projects/{project_id}/features` - -Retrieve features from a project's features JSONB field. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `project_id` | string | ✅ | Project UUID | - -#### Example Response - -```json -{ - "success": true, - "features": [ - { - "id": "feat-001", - "name": "User Authentication", - "description": "JWT-based auth system", - "priority": "high", - "status": "in_progress" - } - ] -} -``` - -### Get Project Tasks - -**GET** `/api/projects/{project_id}/tasks` - -Get all tasks for a specific project. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `project_id` | string | ✅ | Project UUID | - -### Health Check - -**GET** `/api/projects/health` - -Projects API health check. - -#### Example Response - -```json -{ - "status": "healthy", - "service": "projects" -} -``` - -### Socket.IO Real-time Updates - -**Socket.IO Connection** (Root namespace `/`) - - -Archon uses the simplified Socket.IO pattern with direct event handlers on the root namespace. No complex namespaces or classes are used for better performance and maintainability. - - -#### Connection Example - -```javascript -import { io } from 'socket.io-client'; - -// Connect to root namespace -const socket = io('http://localhost:8080'); - -socket.on('connect', () => { - console.log('Connected to Archon Socket.IO server'); - - // Join project room for updates - socket.emit('join_project', { project_id: 'your-project-id' }); - - // Join progress room for operation tracking - socket.emit('join_progress', { progress_id: 'your-progress-id' }); -}); -``` - -#### Progress Updates (Project Creation) - -```javascript -// Listen for progress updates during project creation -socket.on('progress_update', (data) => { - console.log(`Progress: ${data.percentage}% - ${data.status}`); - console.log(`Message: ${data.message}`); -}); - -socket.on('progress_complete', (data) => { - console.log('Operation completed:', data.result); -}); - -socket.on('progress_error', (data) => { - console.error('Operation failed:', data.error); -}); -``` - -#### Project and Task Updates - -```javascript -// Project-level updates (broadcasted to project room) -socket.on('project_updated', (project) => { - console.log('Project updated:', project.title); -}); - -socket.on('task_updated', (task) => { - console.log('Task updated:', task.title, 'Status:', task.status); -}); - -socket.on('projects_list_updated', () => { - console.log('Projects list has been updated, refresh your view'); -}); -``` - -#### Available Events - -| Event | Direction | Description | -|-------|-----------|-------------| -| `join_project` | Client → Server | Join project room for updates | -| `join_progress` | Client → Server | Join progress tracking room | -| `progress_update` | Server → Client | Progress percentage and status | -| `progress_complete` | Server → Client | Operation completed successfully | -| `progress_error` | Server → Client | Operation failed with error | -| `project_updated` | Server → Client | Project data changed | -| `task_updated` | Server → Client | Task data changed | -| `projects_list_updated` | Server → Client | Projects list changed | - -## 📝 Task Management API - -### List Tasks - -**GET** `/api/tasks` - -Retrieve tasks with filtering options. - -#### Query Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `project_id` | string | ❌ | Filter by project ID | -| `status` | string | ❌ | Filter by status (`todo`, `doing`, `review`, `done`) | -| `assignee` | string | ❌ | Filter by assignee | - -#### Example Response - -```json -{ - "success": true, - "tasks": [ - { - "id": "660e8400-e29b-41d4-a716-446655440001", - "project_id": "550e8400-e29b-41d4-a716-446655440000", - "title": "Write API documentation", - "description": "Create comprehensive API reference documentation", - "sources": [ - {"name": "FastAPI docs", "url": "https://fastapi.tiangolo.com"} - ], - "code_examples": [ - { - "language": "python", - "code": "@app.get('/api/example')\nasync def example():\n return {'message': 'Hello'}" - } - ], - "status": "doing", - "created_at": "2024-01-15T10:15:00Z", - "updated_at": "2024-01-15T10:30:00Z" - } - ], - "total_count": 1 -} -``` - -### Create Task - -**POST** `/api/tasks` - -Create a new task under a project. - -#### Request Body - -```json -{ - "project_id": "550e8400-e29b-41d4-a716-446655440000", - "title": "Implement user authentication", - "description": "Add JWT-based authentication to the API", - "sources": [ - {"name": "JWT Guide", "url": "https://jwt.io/introduction"} - ], - "code_examples": [], - "status": "todo" -} -``` - -### Get Task Details - -**GET** `/api/tasks/{task_id}` - -Get detailed information about a specific task. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `task_id` | string | ✅ | Task UUID | - -### Update Task - -**PUT** `/api/tasks/{task_id}` - -Update an existing task. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `task_id` | string | ✅ | Task UUID | - -#### Request Body - -```json -{ - "title": "Updated task title", - "description": "Updated description", - "status": "done", - "assignee": "User", - "sources": [ - {"name": "New source", "url": "https://example.com"} - ] -} -``` - -### Delete Task - -**DELETE** `/api/tasks/{task_id}` - -Delete a task. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `task_id` | string | ✅ | Task UUID | - - -### Update Task Status (MCP) - -**PUT** `/api/mcp/tasks/{task_id}/status` - -Update task status (MCP compatibility endpoint). - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `task_id` | string | ✅ | Task UUID | - -#### Request Body - -```json -{ - "status": "doing" -} -``` - -## ⚙️ Settings Management API - -### List All Credentials - -**GET** `/api/credentials` - -List all credentials and their metadata. - -#### Example Response - -```json -[ - { - "key": "OPENAI_API_KEY", - "value": "sk-proj-...", - "is_encrypted": true, - "category": "api_keys", - "description": "OpenAI API Key for embedding model" - } -] -``` - -### Get Specific Credential - -**GET** `/api/credentials/{key}` - -Get a specific credential by key. - -#### Example Response - -```json -{ - "key": "OPENAI_API_KEY", - "value": "sk-proj-...", - "is_encrypted": true -} -``` - -### Settings Health Check - -**GET** `/api/settings/health` - -Settings API health check. - -#### Example Response - -```json -{ - "status": "healthy", - "service": "settings" -} -``` - -## 🔐 Credentials API - -### List All Credentials - -**GET** `/api/credentials` - -Retrieve all stored credentials. - -#### Query Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `category` | string | ❌ | Filter by category | - -#### Example Response - -```json -[ - { - "key": "OPENAI_API_KEY", - "value": "***masked***", - "encrypted_value": null, - "is_encrypted": false, - "category": "api_keys", - "description": "OpenAI API key for embeddings" - }, - { - "key": "GITHUB_TOKEN", - "value": null, - "encrypted_value": "encrypted_base64_string", - "is_encrypted": true, - "category": "api_keys", - "description": "GitHub personal access token" - } -] -``` - -### Get Credentials by Category - -**GET** `/api/credentials/categories/{category}` - -Get all credentials for a specific category. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `category` | string | ✅ | Category name | - -#### Example Response - -```json -{ - "credentials": { - "OPENAI_API_KEY": "sk-proj-...", - "ANTHROPIC_API_KEY": "sk-ant-..." - } -} -``` - -### Create/Update Credential - -**POST** `/api/credentials` - -Create or update a credential. - -#### Request Body - -```json -{ - "key": "GITHUB_TOKEN", - "value": "ghp_...", - "is_encrypted": true, - "category": "api_keys", - "description": "GitHub personal access token" -} -``` - -#### Example Response - -```json -{ - "success": true, - "message": "Credential GITHUB_TOKEN encrypted and saved successfully" -} -``` - -### Get Specific Credential - -**GET** `/api/credentials/{key}` - -Get a specific credential by key. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `key` | string | ✅ | Credential key | - -#### Query Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `decrypt` | boolean | ❌ | Decrypt if encrypted (default: true) | - -#### Example Response - -```json -{ - "key": "GITHUB_TOKEN", - "value": "ghp_...", - "is_encrypted": true -} -``` - -### Update Credential - -**PUT** `/api/credentials/{key}` - -Update an existing credential. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `key` | string | ✅ | Credential key | - -#### Request Body - -```json -{ - "value": "new_value", - "is_encrypted": true, - "category": "api_keys", - "description": "Updated description" -} -``` - -### Delete Credential - -**DELETE** `/api/credentials/{key}` - -Delete a stored credential. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `key` | string | ✅ | Credential key | - -#### Example Response - -```json -{ - "success": true, - "message": "Credential GITHUB_TOKEN deleted successfully" -} -``` - -### Initialize Credentials - -**POST** `/api/credentials/initialize` - -Reload credentials from database. - -#### Example Response - -```json -{ - "success": true, - "message": "Credentials reloaded from database" -} -``` - -### RAG Settings - -**GET** `/api/credentials/categories/rag_strategy` - -Retrieve all RAG configuration settings including LLM provider options. - -#### Example Response - -```json -{ - "credentials": { - "MODEL_CHOICE": "gpt-4o-mini", - "USE_CONTEXTUAL_EMBEDDINGS": "true", - "USE_HYBRID_SEARCH": "true", - "USE_AGENTIC_RAG": "true", - "USE_RERANKING": "true", - "LLM_PROVIDER": "openai", - "LLM_BASE_URL": null, - "EMBEDDING_MODEL": null - } -} -``` - -#### Available Settings - -| Setting | Type | Description | -|---------|------|-------------| -| `LLM_PROVIDER` | string | Provider choice: `openai`, `ollama`, `google` | -| `LLM_BASE_URL` | string | Custom base URL (required for Ollama) | -| `EMBEDDING_MODEL` | string | Override default embedding model | -| `MODEL_CHOICE` | string | Chat model for summaries and contextual embeddings | - -## 💬 Agent Chat API - - -The Agent Chat API is currently being refactored to use HTTP calls to the separate Agents service. Some endpoints may be temporarily unavailable. - - -### Create Chat Session - -**POST** `/api/agent-chat/sessions` - -Create a new chat session. - -#### Request Body - -```json -{ - "agent_type": "rag", - "context": { - "project_id": "550e8400-e29b-41d4-a716-446655440000" - } -} -``` - -#### Example Response - -```json -{ - "success": true, - "session": { - "id": "chat-session-uuid", - "agent_type": "rag", - "created_at": "2024-01-15T10:45:00Z" - } -} -``` - -### Get Session Details - -**GET** `/api/agent-chat/sessions/{session_id}` - -Get chat session details and history. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `session_id` | string | ✅ | Session UUID | - -### Send Message - -**POST** `/api/agent-chat/sessions/{session_id}/messages` - -Send a message in a chat session. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `session_id` | string | ✅ | Session UUID | - -#### Request Body - -```json -{ - "message": "Help me implement authentication in my API" -} -``` - -#### Example Response - -```json -{ - "success": true, - "message": { - "id": "msg-uuid", - "role": "assistant", - "content": "I'll help you implement authentication. Based on your project, here's what I recommend...", - "metadata": { - "sources_used": [ - { - "title": "JWT Authentication Guide", - "url": "https://jwt.io/introduction", - "relevance": 0.92 - } - ], - "processing_time": 1.234 - }, - "created_at": "2024-01-15T10:45:30Z" - } -} -``` - -### Socket.IO Chat - -**Socket.IO Namespace** `/chat` - -Real-time chat communication. - -#### Connection Example - -```javascript -import { io } from 'socket.io-client'; - -// Connect to chat namespace -const socket = io('/chat'); - -// Join session -const sessionId = 'session-uuid'; -socket.emit('join_session', { session_id: sessionId }); - -ws.onmessage = function(event) { - const data = JSON.parse(event.data); - if (data.type === 'message') { - console.log('Agent:', data.content); - } else if (data.type === 'thinking') { - console.log('Agent is thinking...'); - } -}; - -// Send message -ws.send(JSON.stringify({ - type: 'message', - content: 'Help me with authentication' -})); -``` - -### Agent Status - -**GET** `/api/agent-chat/status` - -Get agent chat service status. - -#### Example Response - -```json -{ - "status": "healthy", - "active_sessions": 3, - "available_agents": ["rag", "document", "task"], - "total_messages_processed": 1250 -} -``` - -### Debug Token Usage - -**GET** `/api/agent-chat/debug/token-usage` - -Get token usage statistics for debugging. - -#### Example Response - -```json -{ - "total_tokens_used": 125000, - "sessions": [ - { - "session_id": "session-uuid", - "tokens_used": 5000, - "messages_count": 10 - } - ] -} -``` - -## 🧪 Testing API - -### Run MCP Tests - -**POST** `/api/tests/mcp/run` - -Run MCP integration tests. - -#### Request Body - -```json -{ - "test_filter": "test_rag_query", - "verbose": true -} -``` - -#### Example Response - -```json -{ - "success": true, - "execution_id": "test-exec-uuid", - "message": "MCP tests started", - "test_count": 5 -} -``` - -### Run UI Tests - -**POST** `/api/tests/ui/run` - -Run UI component tests. - -#### Request Body - -```json -{ - "test_filter": "KnowledgeTable", - "coverage": true -} -``` - -### Get Test Status - -**GET** `/api/tests/status/{execution_id}` - -Get test execution status. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `execution_id` | string | ✅ | Test execution UUID | - -#### Example Response - -```json -{ - "execution_id": "test-exec-uuid", - "status": "completed", - "start_time": "2024-01-15T10:00:00Z", - "end_time": "2024-01-15T10:01:30Z", - "duration": 90.5, - "test_type": "mcp", - "results": { - "total": 5, - "passed": 4, - "failed": 1, - "skipped": 0 - } -} -``` - -### Get Test History - -**GET** `/api/tests/history` - -Get test execution history. - -#### Query Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `limit` | integer | ❌ | Maximum results (default: 20) | -| `test_type` | string | ❌ | Filter by test type (mcp/ui) | - -### Delete Test Execution - -**DELETE** `/api/tests/execution/{execution_id}` - -Delete test execution records. - -#### Path Parameters - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `execution_id` | string | ✅ | Test execution UUID | - -### Socket.IO Test Stream - -**Socket.IO Namespace** `/tests` - -Real-time test execution output streaming. - -## 🔍 System Information API - -### Health Check - -**GET** `/health` - -System health and status check. - -#### Example Response - -```json -{ - "status": "healthy", - "service": "archon-backend", - "timestamp": "2024-01-15T10:45:00Z" -} -``` - -### Database Metrics - -**GET** `/api/database/metrics` - -Get database statistics and health information. - -#### Example Response - -```json -{ - "status": "healthy", - "database": "supabase", - "tables": { - "projects": 5, - "tasks": 42, - "crawled_pages": 1250, - "credentials": 8 - }, - "total_records": 1305, - "timestamp": "2024-01-15T10:45:00Z" -} -``` - -### API Health Check - -**GET** `/api/health` - -General API health check endpoint. - -#### Example Response - -```json -{ - "status": "healthy", - "service": "knowledge-api", - "timestamp": "2024-01-15T10:45:00Z" -} -``` - -## 🚨 Error Handling - -### Standard Error Response Format - -All API errors follow a consistent format: - -```json -{ - "success": false, - "error": "Invalid request parameters", - "details": { - "field": "knowledge_type", - "message": "Must be one of: technical, business, general" - }, - "timestamp": "2024-01-15T10:45:00Z" -} -``` - -### Common Error Codes - -| HTTP Status | Error Type | Description | -|-------------|------------|-------------| -| 400 | `Bad Request` | Invalid request parameters | -| 404 | `Not Found` | Resource not found | -| 422 | `Unprocessable Entity` | Validation error | -| 500 | `Internal Server Error` | Server error | - -## 📊 Rate Limiting - -### Default Limits - -| Endpoint Category | Rate Limit | Window | -|------------------|------------|--------| -| Document Upload | 10 requests | 1 minute | -| RAG Queries | 100 requests | 1 minute | -| Crawling | 5 requests | 5 minutes | -| General API | 1000 requests | 1 hour | - -## 🔧 SDK & Integration Examples - -### Python SDK Example - -```python -import requests -import json -from typing import List, Dict, Any - -class ArchonClient: - def __init__(self, base_url: str = "http://localhost:8080"): - self.base_url = base_url - self.session = requests.Session() - - def upload_document(self, file_path: str, knowledge_type: str, tags: List[str] = None) -> Dict[str, Any]: - """Upload a document to Archon""" - with open(file_path, 'rb') as f: - files = {'file': f} - data = { - 'knowledge_type': knowledge_type, - 'tags': json.dumps(tags or []) - } - response = self.session.post(f"{self.base_url}/api/documents/upload", files=files, data=data) - response.raise_for_status() - return response.json() - - def query_knowledge(self, query: str, source: str = None, match_count: int = 5) -> Dict[str, Any]: - """Query the knowledge base""" - payload = { - "query": query, - "source": source, - "match_count": match_count - } - response = self.session.post(f"{self.base_url}/api/rag/query", json=payload) - response.raise_for_status() - return response.json() - - def start_crawl(self, url: str, knowledge_type: str, tags: List[str] = None, update_frequency: int = 7) -> Dict[str, Any]: - """Start smart crawling a website""" - payload = { - "url": url, - "knowledge_type": knowledge_type, - "tags": tags or [], - "update_frequency": update_frequency - } - response = self.session.post(f"{self.base_url}/api/knowledge-items/crawl", json=payload) - response.raise_for_status() - return response.json() - -# Usage example -client = ArchonClient() - -# Upload a document -result = client.upload_document( - file_path="./python-guide.pdf", - knowledge_type="technical", - tags=["python", "programming"] -) -print(f"Document uploaded: {result['document']['id']}") - -# Start smart crawling -crawl_result = client.start_crawl( - url="https://docs.python.org/3/tutorial/", - knowledge_type="technical", - tags=["python", "tutorial"], - update_frequency=7 -) -print(f"Crawling started with progress ID: {crawl_result['progress_id']}") - -# Query knowledge -results = client.query_knowledge( - query="How to handle exceptions in Python?", - source="docs.python.org" -) -print(f"Found {len(results['results'])} relevant documents") -``` - -### JavaScript/Node.js Example - -```javascript -class ArchonClient { - constructor(baseUrl = 'http://localhost:8080') { - this.baseUrl = baseUrl; - } - - async uploadDocument(file, knowledgeType, tags = []) { - const formData = new FormData(); - formData.append('file', file); - formData.append('knowledge_type', knowledgeType); - formData.append('tags', JSON.stringify(tags)); - - const response = await fetch(`${this.baseUrl}/api/documents/upload`, { - method: 'POST', - body: formData - }); - - if (!response.ok) { - throw new Error(`Upload failed: ${response.statusText}`); - } - - return response.json(); - } - - async queryKnowledge(query, source = null, matchCount = 5) { - const payload = { - query, - source, - match_count: matchCount - }; - - const response = await fetch(`${this.baseUrl}/api/rag/query`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - }); - - if (!response.ok) { - throw new Error(`Query failed: ${response.statusText}`); - } - - return response.json(); - } - - async startCrawl(url, knowledgeType, tags = [], updateFrequency = 7) { - const payload = { - url, - knowledge_type: knowledgeType, - tags, - update_frequency: updateFrequency - }; - - const response = await fetch(`${this.baseUrl}/api/knowledge-items/crawl`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - }); - - if (!response.ok) { - throw new Error(`Crawl failed: ${response.statusText}`); - } - - return response.json(); - } - - // Socket.IO connection for real-time updates - connectToProgress(progressId, onMessage) { - import { io } from 'socket.io-client'; - const socket = io('/crawl'); - - // Subscribe to progress updates - socket.emit('subscribe', { progress_id: progressId }); - - socket.on('progress_update', (data) => { - onMessage(data); - }); - - socket.on('crawl_completed', (data) => { - onMessage(data); - }); - - socket.on('connect_error', (error) => { - console.error('Socket.IO error:', error); - }; - - return socket; - } -} - -// Usage example -const client = new ArchonClient(); - -// Start smart crawling -client.startCrawl('https://docs.python.org/3/tutorial/', 'technical', ['python', 'tutorial'], 7) - .then(result => { - console.log('Crawl started:', result.progress_id); - - // Connect to progress updates - const ws = client.connectToProgress(result.progress_id, (progress) => { - console.log(`Progress: ${progress.percentage}% - ${progress.currentUrl}`); - console.log(`Status: ${progress.status} - ${progress.log}`); - - if (progress.status === 'completed') { - console.log(`Crawl completed! Stored ${progress.chunksStored} chunks`); - ws.close(); - } - }); - }); -``` - ---- - -**Next Steps**: -- Explore [MCP Integration](./mcp-overview) to connect AI clients -- Learn about [RAG Strategies](./rag) for optimal search performance -- Check [Socket.IO Communication](./websockets) for real-time features -- Review [Testing Guide](./testing) for API testing examples \ No newline at end of file diff --git a/docs/docs/architecture.mdx b/docs/docs/architecture.mdx deleted file mode 100644 index ba1ff42c..00000000 --- a/docs/docs/architecture.mdx +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: Architecture -sidebar_position: 2 ---- - -# Architecture - -## System Overview - -Archon uses a microservices architecture with clear separation of concerns: - -``` -Frontend (React) AI Clients (Cursor/Windsurf) - | | - v v -Server API (FastAPI:8080) MCP Server (:8051) - | | - | v - | HTTP Calls - | | - v v -Service Layer <----------------------+ - | - v -Database (Supabase/pgvector) -``` - -## Core Principles - -1. **Server contains ALL business logic** - Services, ML models, data operations -2. **MCP is HTTP-only** - Makes HTTP calls to Server, no direct imports -3. **FastAPI uses services directly** - For performance, no intermediate layers -4. **No cross-dependencies** - Each layer only knows about the layer below - -## Service Architecture - -### Service Layer Organization - -| Service Category | Services | Purpose | -|-----------------|----------|---------| -| **RAG Services** | `CrawlingService` | Web crawling operations | -| **Storage Services** | `DocumentStorageService`
`BaseStorageService` | Document storage and processing | -| **Search Services** | `SearchService` | Vector search and RAG queries | -| **Core Services** | `SourceManagementService` | Knowledge source management | -| **Project Services** | `ProjectService`
`TaskService`
`DocumentService`
`VersioningService` | Project management | -| **Core Services** | `CredentialService`
`PromptService`
`ThreadingService` | System utilities | -| **Storage Services** | `add_documents_to_supabase`
`extract_code_blocks`
`add_code_examples_to_supabase` | Data persistence | -| **Embedding Services** | `create_embeddings_batch`
`generate_contextual_embedding` | Vector operations | - -### Access Patterns - -```python -# FastAPI Endpoint - Direct Service Usage -from ..services.source_management_service import SourceManagementService - -@router.delete("/sources/{source_id}") -async def delete_source(source_id: str): - service = SourceManagementService(get_supabase_client()) - success, result = service.delete_source(source_id) - return {"success": success, **result} -``` - -```python -# MCP Tool - HTTP Call to Server -import httpx - -@mcp.tool() -async def delete_source(ctx: Context, source: str) -> str: - async with httpx.AsyncClient() as client: - response = await client.delete(f"{API_URL}/api/sources/{source}") - return response.json() -``` - -## Key Components - -### Server Service (Port 8080) -- FastAPI application -- REST API endpoints -- Socket.IO real-time communication -- Direct service layer access -- Business logic implementation - -### MCP Service (Port 8051) -- MCP protocol server -- 14 tools (7 RAG + 7 Project) -- HTTP client for Server API -- No business logic -- SSE transport for AI clients - -### Service Layer -- Modular service classes -- Shared by FastAPI endpoints -- Contains all business logic -- Database operations -- ML model integration - -## Data Flow Examples - -### Delete Source Operation -``` -1. User clicks delete in UI -2. UI calls DELETE /api/knowledge-items/{id} -3. FastAPI endpoint uses SourceManagementService.delete_source() from `/services/` -4. Service deletes from database -5. Response sent to UI - -OR - -1. AI client calls MCP delete_source tool -2. MCP makes HTTP DELETE to /api/sources/{id} -3. Server endpoint uses SourceManagementService.delete_source() from `/services/` -4. Service deletes from database -5. Response sent through MCP to AI client -``` - -### Smart Crawl Operation (Simplified Socket.IO) -``` -1. User initiates crawl -2. UI calls POST /api/knowledge-items/crawl -3. FastAPI endpoint: - - Uses CrawlingService to detect URL type - - Calls appropriate crawl method - - Services emit Socket.IO progress directly to rooms - - Uses DocumentStorageService from `/services/storage/` for chunking -4. UI listens to Socket.IO room for real-time updates -``` - -### Task Update Flow (Simplified) -``` -1. MCP tool calls POST /api/tasks -2. API endpoint creates task using TaskService -3. TaskService emits Socket.IO event directly to project room -4. UI subscribed to project room receives update immediately -5. No database polling needed -``` - -## Simplified Real-Time Architecture - -### Simplified Socket.IO (2025 Pattern) -``` -MCP Tools → HTTP API → Services → @sio.event → Rooms → UI -``` - -Key improvements: -- **No database polling** - Eliminated 2-second polling system -- **Simple @sio.event handlers** - Official Socket.IO 2025 pattern -- **Direct room management** - `sio.enter_room()` and `sio.emit()` calls -- **No namespace classes** - Removed complex abstraction layers -- **Single root namespace** - Everything on `/` namespace for simplicity - -## Important Notes - -- **No MCP imports in FastAPI** - Services only -- **No direct DB access in MCP** - HTTP only -- **Services are the single source of truth** - All logic here -- **Simple @sio.event handlers** - Official Socket.IO 2025 pattern -- **Root namespace only** - No complex namespace management -- **Direct room management** - Simple `sio.enter_room()` and `sio.emit()` calls \ No newline at end of file diff --git a/docs/docs/background-tasks.mdx b/docs/docs/background-tasks.mdx deleted file mode 100644 index 307a3865..00000000 --- a/docs/docs/background-tasks.mdx +++ /dev/null @@ -1,320 +0,0 @@ ---- -sidebar_position: 25 -sidebar_label: Background Tasks ---- - -# Background Tasks Architecture - -## Overview - -This document describes the architecture for handling long-running operations in Archon without blocking the FastAPI/Socket.IO event loop. The key insight is that browser-based operations (crawling) must remain in the main event loop, while only CPU-intensive operations should be offloaded to threads. - -## Architecture Principles - -1. **Keep async I/O operations in the main event loop** - Browser automation, database operations, and network requests must stay async -2. **Only offload CPU-intensive work to threads** - Text processing, chunking, and synchronous API calls can run in ThreadPoolExecutor -3. **Use asyncio.create_task for background async work** - Don't block the event loop, but keep async operations async -4. **Maintain single event loop** - Never create new event loops in threads - -## Architecture Diagram - -```mermaid -graph TB - subgraph "Main Event Loop" - API[FastAPI Endpoint] - SIO[Socket.IO Handler] - BGTask[Background Async Task] - Crawler[AsyncWebCrawler] - DB[Database Operations] - Progress[Progress Updates] - end - - subgraph "ThreadPoolExecutor" - Chunk[Text Chunking] - Embed[Embedding Generation] - Summary[Summary Extraction] - CodeExt[Code Extraction] - end - - API -->|asyncio.create_task| BGTask - BGTask -->|await| Crawler - BGTask -->|await| DB - BGTask -->|run_in_executor| Chunk - BGTask -->|run_in_executor| Embed - BGTask -->|run_in_executor| Summary - BGTask -->|run_in_executor| CodeExt - BGTask -->|emit| Progress - Progress -->|websocket| SIO - - classDef async fill:#e1f5fe,stroke:#01579b,stroke-width:2px - classDef sync fill:#fff3e0,stroke:#e65100,stroke-width:2px - - class API,SIO,BGTask,Crawler,DB,Progress async - class Chunk,Embed,Summary,CodeExt sync -``` - -## Core Components - -### CrawlOrchestrationService - -The orchestration service manages the entire crawl workflow while keeping the main event loop responsive: - -```python -class CrawlOrchestrationService: - def __init__(self, crawler, supabase_client, progress_id=None): - self.crawler = crawler - self.supabase_client = supabase_client - self.progress_id = progress_id - self.active_tasks = {} - # Thread pool for CPU-intensive operations only - self.executor = ThreadPoolExecutor(max_workers=4) - - async def orchestrate_crawl(self, request: Dict[str, Any]) -> Dict[str, Any]: - """Start crawl operation as background task""" - url = str(request.get('url', '')) - - # Create background task in the SAME event loop - task = asyncio.create_task( - self._async_orchestrate_crawl(request) - ) - - # Store task reference - self.active_tasks[self.progress_id] = task - - # Return immediately - return { - "task_id": self.progress_id, - "status": "started", - "message": f"Crawl operation started for {url}" - } - - async def _async_orchestrate_crawl(self, request: Dict[str, Any]): - """Background async task - runs in main event loop""" - try: - url = request.get('url', '') - - # Emit initial progress - await self._emit_progress({ - 'status': 'analyzing', - 'percentage': 0, - 'currentUrl': url, - 'log': f'Analyzing URL type for {url}' - }) - - # Step 1: Crawl URLs (MUST stay async in main loop) - crawl_results = await self._crawl_urls_async(url, request) - - # Step 2: Process documents (CPU-intensive, can go to thread) - loop = asyncio.get_event_loop() - doc_results = await loop.run_in_executor( - self.executor, - self._process_documents_sync, # Sync version - crawl_results, request - ) - - # Step 3: Store in database (MUST stay async in main loop) - await self._store_documents_async(doc_results) - - # Step 4: Generate embeddings (CPU-intensive, can go to thread) - await loop.run_in_executor( - self.executor, - self._generate_embeddings_sync, - doc_results - ) - - # Step 5: Extract code (CPU-intensive, can go to thread) - code_count = await loop.run_in_executor( - self.executor, - self._extract_code_sync, - crawl_results - ) - - # Complete - await self._emit_progress({ - 'status': 'complete', - 'percentage': 100, - 'log': 'Crawl operation completed successfully' - }) - - except Exception as e: - logger.error(f"Crawl orchestration error: {e}") - await self._emit_progress({ - 'status': 'error', - 'percentage': -1, - 'error': str(e) - }) - - async def _emit_progress(self, update: Dict[str, Any]): - """Emit progress via Socket.IO""" - if self.progress_id: - await update_crawl_progress(self.progress_id, update) -``` - -### Sync Functions for Thread Execution - -Only CPU-intensive operations should have sync versions for thread execution: - -```python -def _process_documents_sync(self, crawl_results, request): - """Sync version for thread execution - CPU-intensive text processing""" - all_chunks = [] - for doc in crawl_results: - # Text chunking is CPU-intensive - chunks = self.chunk_text(doc['markdown']) - all_chunks.extend(chunks) - return { - 'chunks': all_chunks, - 'chunk_count': len(all_chunks) - } - -def _generate_embeddings_sync(self, doc_results): - """Sync version - uses synchronous OpenAI client""" - client = openai.Client() # Sync client - embeddings = [] - - for chunk in doc_results['chunks']: - # CPU-intensive: preparing embedding request - response = client.embeddings.create( - input=chunk, - model="text-embedding-3-small" - ) - embeddings.append(response.data[0].embedding) - - return embeddings - -def _extract_code_sync(self, crawl_results): - """Sync version - CPU-intensive regex and parsing""" - code_examples = [] - for doc in crawl_results: - # Extract code blocks with regex - code_blocks = self.extract_code_blocks(doc['markdown']) - code_examples.extend(code_blocks) - return len(code_examples) -``` - -### Socket.IO Integration - -Socket.IO handlers remain in the main event loop: - -```python -# socketio_handlers.py - -async def update_crawl_progress(progress_id: str, data: dict): - """Emit progress updates to connected clients""" - # Check if room has subscribers - room_sids = [] - if hasattr(sio.manager, 'rooms'): - namespace_rooms = sio.manager.rooms.get('/', {}) - room_sids = list(namespace_rooms.get(progress_id, [])) - - if not room_sids: - logger.warning(f"No subscribers in room {progress_id}") - return - - # Emit progress - data['progressId'] = progress_id - await sio.emit('crawl_progress', data, room=progress_id) - -@sio.event -async def subscribe_to_progress(sid, data): - """Client subscribes to progress updates""" - progress_id = data.get('progressId') - if progress_id: - sio.enter_room(sid, progress_id) - # Send current status if task is running - orchestrator = get_orchestrator_for_progress(progress_id) - if orchestrator and progress_id in orchestrator.active_tasks: - await sio.emit('crawl_progress', { - 'progressId': progress_id, - 'status': 'running', - 'message': 'Reconnected to running task' - }, to=sid) -``` - -### API Endpoint Pattern - -FastAPI endpoints start background tasks and return immediately: - -```python -# knowledge_api.py - -@router.post("/knowledge/add") -async def add_knowledge_item(request: KnowledgeAddRequest): - """Start crawl operation - returns immediately""" - # Generate progress ID - progress_id = str(uuid.uuid4()) - - # Create orchestrator - orchestrator = CrawlOrchestrationService( - crawler=await crawler_manager.get_crawler(), - supabase_client=supabase_client, - progress_id=progress_id - ) - - # Start background task - result = await orchestrator.orchestrate_crawl(request.dict()) - - # Return task info immediately - return { - "success": True, - "task_id": result["task_id"], - "progress_id": progress_id, - "message": "Crawl started in background" - } - -@router.get("/knowledge/status/{task_id}") -async def get_task_status(task_id: str): - """Check status of background task""" - orchestrator = get_orchestrator_for_task(task_id) - if not orchestrator: - raise HTTPException(404, "Task not found") - - task = orchestrator.active_tasks.get(task_id) - if not task: - raise HTTPException(404, "Task not found") - - return { - "task_id": task_id, - "done": task.done(), - "cancelled": task.cancelled() - } -``` - -## Key Patterns - -### What Stays Async (Main Loop) -- Browser automation (crawling) -- Database operations -- Network requests -- Socket.IO communications -- Task coordination - -### What Goes to Threads -- Text chunking -- Markdown parsing -- Code extraction -- Embedding preparation -- CPU-intensive calculations - -### Progress Updates -- Use asyncio.Queue for async tasks -- Regular python Queue for thread tasks -- Always emit from main event loop -- Include detailed status information - -## Common Pitfalls to Avoid - -1. **Don't create new event loops in threads** - Database connections won't work -2. **Don't run browser automation in threads** - It needs the main event loop -3. **Don't block the main loop** - Use asyncio.create_task for background work -4. **Don't mix async and sync incorrectly** - Keep clear boundaries -5. **Don't forget progress updates** - Users need feedback - -## Testing Guidelines - -1. Test with long-running crawls (100+ pages) -2. Verify Socket.IO doesn't disconnect -3. Check database operations work correctly -4. Monitor memory usage in threads -5. Test task cancellation -6. Verify progress accuracy \ No newline at end of file diff --git a/docs/docs/code-extraction-rules.mdx b/docs/docs/code-extraction-rules.mdx deleted file mode 100644 index 2163c168..00000000 --- a/docs/docs/code-extraction-rules.mdx +++ /dev/null @@ -1,194 +0,0 @@ -# Code Extraction Rules - -This document outlines the sophisticated rules and algorithms used by Archon's code extraction service to identify, extract, and validate code examples from various sources. - -## Overview - -The code extraction service intelligently extracts meaningful code examples from crawled documents while filtering out non-code content like diagrams, prose, and malformed snippets. It uses dynamic thresholds, language-specific patterns, and quality validation to ensure high-quality code examples. - -## Key Features - -### 1. Dynamic Minimum Length Calculation - -Instead of using a fixed minimum length, the service calculates appropriate thresholds based on: - -- **Language characteristics**: Different languages have different verbosity levels -- **Context clues**: Words like "example", "snippet", "implementation" adjust expectations -- **Base thresholds by language**: - - JSON/YAML/XML: 100 characters - - HTML/CSS/SQL: 150 characters - - Python/Go: 200 characters - - JavaScript/TypeScript/Rust/C: 250 characters - - Java/C++: 300 characters - -### 2. Complete Code Block Detection - -The service extends code blocks to natural boundaries rather than cutting off at arbitrary character limits: - -- Looks for closing braces, parentheses, or language-specific patterns -- Extends up to 5000 characters to find complete functions/classes -- Uses language-specific block end patterns (e.g., unindented line for Python) -- Recognizes common code boundaries like double newlines or next function declarations - -### 3. HTML Span Handling - -Sophisticated handling of syntax-highlighted code from various documentation sites: - -- Detects when spans are used for syntax highlighting (no spaces between ``) -- Preserves code structure while removing HTML markup -- Handles various highlighting libraries: Prism.js, highlight.js, Shiki, CodeMirror, Monaco -- Special extraction for complex editors like CodeMirror that use nested divs - -### 4. Enhanced Quality Validation - -Multi-layer validation ensures only actual code is extracted: - -#### Exclusion Filters -- Diagram languages (Mermaid, PlantUML, GraphViz) -- Prose detection (>15% prose indicators like "the", "this", "however") -- Excessive comments (>70% comment lines) -- Malformed code (concatenated keywords, unresolved HTML entities) - -#### Inclusion Requirements -- Minimum 3 code indicators from: - - Function calls: `function()` - - Assignments: `var = value` - - Control flow: `if`, `for`, `while` - - Declarations: `class`, `function`, `const` - - Imports: `import`, `require` - - Operators and brackets -- Language-specific indicators (at least 2 required) -- Reasonable structure (3+ non-empty lines, reasonable line lengths) - -### 5. Language-Specific Patterns - -Tailored extraction patterns for major languages: - -```javascript -// TypeScript/JavaScript -{ - block_start: /^\s*(export\s+)?(class|interface|function|const|type|enum)\s+\w+/, - block_end: /^\}(\s*;)?$/, - min_indicators: [':', '{', '}', '=>', 'function', 'class'] -} - -// Python -{ - block_start: /^\s*(class|def|async\s+def)\s+\w+/, - block_end: /^\S/, // Unindented line - min_indicators: ['def', ':', 'return', 'self', 'import', 'class'] -} -``` - -### 6. Context-Aware Extraction - -The service considers surrounding context to make intelligent decisions: - -- Adjusts minimum length based on context words ("example" → shorter, "implementation" → longer) -- Uses context to detect language when not explicitly specified -- Preserves 1000 characters of context before/after for better summarization - -## Extraction Sources - -### HTML Code Blocks - -Supports extraction from 30+ different HTML patterns including: - -- GitHub/GitLab highlight blocks -- Docusaurus code blocks -- VitePress/Astro documentation -- Raw `
` blocks
-- Standalone `` tags (if multiline)
-
-### Plain Text Files
-
-Special handling for `.txt` and `.md` files:
-
-- Triple backtick blocks with language specifiers
-- Language-labeled sections (e.g., "TypeScript:", "Python example:")
-- Consistently indented blocks (4+ spaces)
-
-### Markdown Content
-
-Falls back to markdown extraction when HTML extraction fails:
-
-- Standard markdown code blocks
-- Handles corrupted markdown (e.g., entire file wrapped in backticks)
-
-## Code Cleaning Pipeline
-
-1. **HTML Entity Decoding**: Converts `<`, `>`, etc. to actual characters
-2. **Tag Removal**: Strips HTML tags while preserving code structure
-3. **Spacing Fixes**: Repairs concatenated keywords from span removal
-4. **Backtick Removal**: Removes wrapping backticks if present
-5. **Indentation Preservation**: Maintains original code formatting
-
-## Quality Metrics
-
-The service logs detailed metrics for monitoring:
-
-- Number of code blocks found per document
-- Validation pass/fail reasons
-- Language detection results
-- Extraction source types (HTML vs markdown vs text)
-- Character counts before/after cleaning
-
-## Best Practices for Content Creators
-
-To ensure your code examples are properly extracted:
-
-1. **Use standard markdown code blocks** with language specifiers
-2. **Include complete, runnable code examples** rather than fragments
-3. **Avoid mixing code with extensive inline comments**
-4. **Ensure proper HTML structure** if using custom syntax highlighting
-5. **Keep examples focused** - not too short (under 100 chars) or too long (over 5000 chars)
-
-## Configuration
-
-The extraction behavior can be tuned through the Settings page in the UI:
-
-### Available Settings
-
-#### Length Settings
-- **MIN_CODE_BLOCK_LENGTH**: Base minimum length for code blocks (default: 250 chars)
-- **MAX_CODE_BLOCK_LENGTH**: Maximum length before stopping extension (default: 5000 chars)
-- **CONTEXT_WINDOW_SIZE**: Characters of context before/after code blocks (default: 1000)
-
-#### Detection Features
-- **ENABLE_COMPLETE_BLOCK_DETECTION**: Extend code blocks to natural boundaries (default: true)
-- **ENABLE_LANGUAGE_SPECIFIC_PATTERNS**: Use language-specific patterns (default: true)
-- **ENABLE_CONTEXTUAL_LENGTH**: Adjust minimum length based on context (default: true)
-
-#### Content Filtering
-- **ENABLE_PROSE_FILTERING**: Filter out documentation text (default: true)
-- **MAX_PROSE_RATIO**: Maximum allowed prose percentage (default: 0.15)
-- **MIN_CODE_INDICATORS**: Minimum required code patterns (default: 3)
-- **ENABLE_DIAGRAM_FILTERING**: Filter out diagram languages (default: true)
-
-#### Processing Settings
-- **CODE_EXTRACTION_MAX_WORKERS**: Parallel workers for code summaries (default: 3)
-- **ENABLE_CODE_SUMMARIES**: Generate AI summaries for code examples (default: true)
-
-### How Settings Work
-
-1. **Dynamic Loading**: Settings are loaded from the database on demand, not cached as environment variables
-2. **Real-time Updates**: Changes take effect on the next extraction run without server restart
-3. **Graceful Fallbacks**: If settings can't be loaded, sensible defaults are used
-4. **Type Safety**: Settings are validated and converted to appropriate types
-
-### Best Practices
-
-- **Start with defaults**: The default values work well for most content
-- **Adjust gradually**: Make small changes and test the results
-- **Monitor logs**: Check extraction logs to see how settings affect results
-- **Language-specific tuning**: Different content types may need different settings
-
-## Future Enhancements
-
-Potential improvements under consideration:
-
-- Machine learning-based code detection
-- Support for notebook formats (Jupyter, Observable)
-- API response extraction from documentation
-- Multi-file code example correlation
-- Language-specific AST validation
\ No newline at end of file
diff --git a/docs/docs/coding-best-practices.mdx b/docs/docs/coding-best-practices.mdx
deleted file mode 100644
index f9f58d3e..00000000
--- a/docs/docs/coding-best-practices.mdx
+++ /dev/null
@@ -1,265 +0,0 @@
----
-title: Coding Best Practices
-description: Practical patterns and anti-patterns from real-world Archon development
-sidebar_position: 15
----
-
-# Coding Best Practices
-
-Essential patterns and pitfalls to avoid when developing Archon.
-
-## Async/Await Patterns
-
-### ❌ DON'T: Lambda Functions Returning Unawaited Coroutines
-
-```python
-# This will break - the coroutine is never awaited
-progress_callback=lambda data: update_progress(progress_id, data)
-```
-
-### ✅ DO: Use asyncio.create_task for Async Callbacks
-
-```python
-# Properly schedule async function execution
-progress_callback=lambda data: asyncio.create_task(update_progress(progress_id, data))
-```
-
-### ❌ DON'T: Call Sync Functions from Async Context
-
-```python
-# This causes "event loop already running" errors
-async def process_data():
-    embeddings = create_embeddings_batch(texts)  # Sync function in async context
-```
-
-### ✅ DO: Use Async Versions in Async Context
-
-```python
-async def process_data():
-    embeddings = await create_embeddings_batch_async(texts)
-```
-
-## Socket.IO Best Practices
-
-### Room-Based Broadcasting
-
-Always broadcast to specific rooms, not all clients:
-
-```python
-# ✅ Good - targeted broadcast
-await sio.emit('crawl_progress', data, room=progress_id)
-
-# ❌ Bad - broadcasts to everyone
-await sio.emit('crawl_progress', data)
-```
-
-### Simple Event Handlers
-
-Keep Socket.IO handlers simple and direct:
-
-```python
-# ✅ Good - simple, clear purpose
-@sio.event
-async def crawl_subscribe(sid, data):
-    progress_id = data.get('progress_id')
-    if progress_id:
-        await sio.enter_room(sid, progress_id)
-        await sio.emit('crawl_subscribe_ack', {'status': 'subscribed'}, to=sid)
-```
-
-## Service Layer Patterns
-
-### Progress Callbacks
-
-When services need progress callbacks, ensure proper async handling:
-
-```python
-# ✅ Good - service accepts optional async callback
-async def process_with_progress(data, progress_callback=None):
-    if progress_callback:
-        await progress_callback({'status': 'processing', 'percentage': 50})
-```
-
-### Error Handling in Services
-
-Always provide fallbacks for external service failures:
-
-```python
-# ✅ Good - graceful degradation
-try:
-    embeddings = await create_embeddings_batch_async(texts)
-except Exception as e:
-    logger.warning(f"Embedding creation failed: {e}")
-    # Return zero embeddings as fallback
-    return [[0.0] * 1536 for _ in texts]
-```
-
-## Common Pitfalls
-
-### Event Loop Issues
-
-**Problem**: "This event loop is already running"
-
-**Solution**: Check if you're in an async context before using sync functions:
-
-```python
-try:
-    loop = asyncio.get_running_loop()
-    # Already in async context - use async version
-    result = await async_function()
-except RuntimeError:
-    # No event loop - safe to use sync version
-    result = sync_function()
-```
-
-### Socket.IO Progress Updates
-
-**Problem**: Progress updates not reaching the UI
-
-**Solution**: Ensure the client is in the correct room and progressId is included:
-
-```python
-# Always include progressId in the data
-data['progressId'] = progress_id
-await sio.emit('crawl_progress', data, room=progress_id)
-```
-
-### Embedding Service Optimization
-
-**Problem**: Synchronous embedding calls blocking async operations
-
-**Solution**: Always use async versions and batch operations:
-
-```python
-# Process in batches with rate limiting
-async def create_embeddings_for_documents(documents):
-    batch_size = 20  # OpenAI limit
-    for i in range(0, len(documents), batch_size):
-        batch = documents[i:i + batch_size]
-        embeddings = await create_embeddings_batch_async(batch)
-        await asyncio.sleep(0.5)  # Rate limiting
-```
-
-## Testing Async Code
-
-### Mock Async Functions Properly
-
-```python
-# ✅ Good - proper async mock
-mock_update = AsyncMock()
-with patch('module.update_progress', mock_update):
-    await function_under_test()
-    mock_update.assert_called_once()
-```
-
-### Test Socket.IO Events
-
-```python
-# ✅ Good - test room management
-@patch('src.server.socketio_app.sio')
-async def test_subscribe_joins_room(mock_sio):
-    await crawl_subscribe('sid-123', {'progress_id': 'progress-456'})
-    mock_sio.enter_room.assert_called_with('sid-123', 'progress-456')
-```
-
-## React/Frontend Best Practices
-
-### Performance Anti-Patterns to Avoid
-
-#### ❌ DON'T: Update State on Every Keystroke Without Debouncing
-```typescript
-// This causes excessive re-renders
- setFormData({ ...formData, title: e.target.value })}
-/>
-```
-
-#### ✅ DO: Use Debounced Inputs or Local State
-```typescript
-// Use a debounced input component
-
-```
-
-#### ❌ DON'T: Create New Functions in Render
-```typescript
-// Creates new function every render
-
-```
-
-#### ✅ DO: Use useCallback for Stable References
-```typescript
-const handleClick = useCallback((id) => {
-  handleAction(id);
-}, []);
-
-
-```
-
-### Socket.IO Client-Side Patterns
-
-#### Room Subscription Pattern
-```typescript
-useEffect(() => {
-  const ws = createWebSocketService();
-  
-  const connect = async () => {
-    await ws.connect('/'); // Always default namespace
-    
-    // Join room
-    ws.send({ 
-      type: 'join_project', 
-      data: { project_id: projectId } 
-    });
-    
-    // Handle messages
-    ws.addMessageHandler('task_updated', handleTaskUpdate);
-  };
-  
-  connect();
-  return () => ws.disconnect();
-}, [projectId]);
-```
-
-### State Management Patterns
-
-#### Batch Updates
-```typescript
-// ✅ Good - Single render
-setState(prev => ({
-  ...prev,
-  field1: value1,
-  field2: value2,
-  field3: value3
-}));
-
-// ❌ Bad - Three renders
-setField1(value1);
-setField2(value2);
-setField3(value3);
-```
-
-#### Local State for Transient Values
-```typescript
-// Keep form inputs local until save
-const [localTitle, setLocalTitle] = useState(title);
-
-const handleSave = () => {
-  onSave({ title: localTitle });
-};
-```
-
-## Key Takeaways
-
-1. **Always await async functions** - Never let coroutines go unawaited
-2. **Use rooms for Socket.IO** - Target specific audiences, not everyone
-3. **Handle async boundaries** - Know when you're in an async context
-4. **Fail gracefully** - Always have fallbacks for external services
-5. **Test async code properly** - Use AsyncMock and proper async test patterns
-6. **Optimize React renders** - Use memo, useCallback, and debouncing
-7. **Batch state updates** - Minimize renders with single setState calls
-8. **Use local state** - Keep transient values local to components
\ No newline at end of file
diff --git a/docs/docs/configuration.mdx b/docs/docs/configuration.mdx
deleted file mode 100644
index e4fc371a..00000000
--- a/docs/docs/configuration.mdx
+++ /dev/null
@@ -1,339 +0,0 @@
----
-title: Configuration
-description: Essential configuration for Archon
-sidebar_position: 3
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-import Admonition from '@theme/Admonition';
-
-# Configuration
-
-## Docker Microservices Architecture
-
-
-Archon uses a microservices architecture with three separate services. All services run in Docker containers and communicate via the `app-network` bridge network using service names, not localhost. Real-time features use Socket.IO for reliable real-time communication.
-
-
-```mermaid
-graph TB
-    subgraph "Docker Network: app-network"
-        subgraph "Archon-Server"
-            API[FastAPI
:8080] - SIO[Socket.IO
:8080] - end - - subgraph "archon-mcp" - MCP[MCP Server
:8051] - end - - subgraph "archon-agents" - Agents[AI Agents
:8052] - end - - subgraph "frontend" - Vite[Vite Dev Server
:5173] - end - - subgraph "docs" - Docusaurus[Docusaurus
:80] - end - end - - subgraph "Host Machine" - Browser[Browser] - IDE[VS Code/Cursor/Windsurf] - end - - subgraph "External Services" - Supabase[(Supabase)] - OpenAI[OpenAI API] - end - - Browser -->|3737| Vite - Browser -->|3838| Docusaurus - IDE -->|8051| MCP - - Vite -->|proxy| API - Vite -.->|Socket.IO| SIO - API --> Supabase - API --> OpenAI - API --> Agents - MCP --> Supabase - MCP --> API - Agents --> Supabase - Agents --> OpenAI - - style API fill:#1a1a2e,stroke:#00d4ff,stroke-width:2px,color:#fff - style SIO fill:#1a1a2e,stroke:#4ecdc4,stroke-width:2px,color:#fff - style MCP fill:#1a1a2e,stroke:#00d4ff,stroke-width:2px,color:#fff - style Agents fill:#1a1a2e,stroke:#ff6b6b,stroke-width:2px,color:#fff - style Vite fill:#1a1a2e,stroke:#00d4ff,stroke-width:2px,color:#fff -``` - -### Port Mappings - -| Service | Container Name | Container Port | Host Port | Purpose | -|---------|----------------|----------------|-----------|---------| -| Frontend | archon-frontend | 5173 | 3737 | React UI | -| Server | Archon-Server | 8080 | 8080 | FastAPI + Socket.IO | -| MCP Server | archon-mcp | 8051 | 8051 | AI Agent connections | -| AI Agents | archon-agents | 8052 | 8052 | AI processing service | -| Documentation | archon-docs | 80 | 3838 | This documentation | - -## Essential Configuration - -### 1. Environment Variables - -Create a `.env` file in the root directory: - -```bash -# Required - Get from supabase.com dashboard -SUPABASE_URL=https://your-project.supabase.co -SUPABASE_SERVICE_KEY=eyJ0eXAi... - -# Optional - Set via UI Settings page -# OPENAI_API_KEY=sk-... - -# Unified Logging Configuration (Optional) -LOGFIRE_ENABLED=false # true=Logfire logging, false=standard logging -# LOGFIRE_TOKEN=pylf_... # Only required when LOGFIRE_ENABLED=true - -# Service Discovery (automatically set for Docker) -# SERVICE_DISCOVERY_MODE=docker_compose -``` - - -- **API Keys**: Set through the Settings page UI instead of environment variables -- **Logging**: Use `LOGFIRE_ENABLED=true/false` to toggle between standard and enhanced logging -- **Zero Setup**: Standard logging works perfectly without any additional configuration - - -### Unified Logging Architecture - -Archon includes a unified logging system that works seamlessly with or without Logfire: - -```bash -# Standard Logging (Default - Zero Setup) -LOGFIRE_ENABLED=false - -# Enhanced Logging with Logfire -LOGFIRE_ENABLED=true -LOGFIRE_TOKEN=your_token -``` - -**Key Benefits:** -- 🔄 **Single Toggle**: One environment variable controls everything -- 🛡️ **Always Works**: Graceful fallback to standard Python logging -- 📊 **Consistent**: Same log format and structure in both modes -- 🚀 **Zero Dependencies**: Standard logging requires no external services - -### LLM Provider Configuration - -Archon supports multiple LLM providers through the Settings UI: - -- **OpenAI** (default) - Uses your existing OpenAI API key -- **Google Gemini** - Google's latest models -- **Ollama** - Run models locally (free) - -Configure in **Settings → RAG Settings → LLM Provider** - - -- **API Keys**: Add provider-specific keys in Settings → API Keys -- **Ollama**: Requires local installation and custom base URL -- **Models**: Each provider has different model naming conventions - - -### Socket.IO Configuration - -Archon uses Socket.IO for all real-time features. The default configuration works out of the box: - -```python -# Backend Socket.IO settings (socketio_app.py) -sio = socketio.AsyncServer( - async_mode='asgi', - cors_allowed_origins="*", # Allow all origins for development - ping_timeout=60, - ping_interval=25 -) -``` - -**Key Features:** -- **Automatic reconnection** with exponential backoff -- **Namespace-based** organization for different features -- **Room-based** broadcasting for targeted updates -- **Built-in** heartbeat and connection monitoring - -### 2. Database Setup - - - - -1. Create a Supabase project at [supabase.com](https://supabase.com) -2. Copy credentials from Settings → API -3. Tables are auto-created on first run - - - - -Run this SQL in Supabase to completely reset: - -```sql --- Run migration/RESET_DB.sql --- This removes ALL data and tables -``` - -Then restart the backend to recreate tables. - - - - -### 3. Starting the Application - -```bash -# Start all services -docker compose up -d - -# Check status -docker compose ps - -# View logs -docker compose logs -f -``` - -## Docker Networking - - -Inside Docker containers, services communicate using container names, not `localhost`: -- Frontend → Server: `http://Archon-Server:8080` -- API → MCP: `http://archon-mcp:8051` -- API → Agents: `http://archon-agents:8052` -- Never use `localhost` in container-to-container communication - - -### Common Issues - - - - -**Problem**: Frontend can't connect to backend - -**Solution**: Check `vite.config.ts` uses correct service name: -```typescript -proxy: { - '/api': { - target: 'http://Archon-Server:8080', - ws: true - } -} -``` - - - - -**Problem**: Socket.IO connection issues - -**Solution**: Ensure proper proxy configuration in `vite.config.ts`: -```typescript -proxy: { - '/api': { - target: 'http://Archon-Server:8080', - changeOrigin: true, - ws: true - }, - '/socket.io': { - target: 'http://Archon-Server:8080', - changeOrigin: true, - ws: true - } -} -``` - -Socket.IO namespaces: -- Chat: `/chat` -- Crawl Progress: `/crawl` -- Task Updates: `/tasks` -- Project Creation: `/project` - - - - -## Quick Reference - -### Health Checks - -```bash -# API Service -curl http://localhost:8080/health - -# MCP Server (checks socket connectivity) -curl http://localhost:8051/sse - -# AI Agents Service -curl http://localhost:8052/health - -# Frontend -curl http://localhost:3737 -``` - -#### Frontend Health Check Configuration - -The frontend performs automatic health checks to detect server disconnections. Configuration: - -- **Check Interval**: 30 seconds (defined in `HEALTH_CHECK_INTERVAL_MS` constant) -- **Timeout**: 10 seconds per health check request -- **Disconnect Threshold**: 2 missed checks (60 seconds total) -- **Location**: `archon-ui-main/src/services/serverHealthService.ts` - -To adjust the health check interval, modify the constant at the top of the file: -```typescript -const HEALTH_CHECK_INTERVAL_MS = 30000; // 30 seconds (default) -``` - -### Container Management - -```bash -# Restart a specific service -docker compose restart archon-server - -# Rebuild after code changes -docker compose build archon-server -docker compose up -d archon-server - -# View real-time logs for a service -docker compose logs -f archon-server - -# View all service logs -docker compose logs -f -``` - -### Service Discovery - -Archon includes automatic service discovery that works across environments: - -```python -from src.config.service_discovery import discovery - -# Automatically detects environment -api_url = discovery.get_service_url("api") -# Docker: http://Archon-Server:8080 -# Local: http://localhost:8080 -``` - -## Next Steps - -Once configured and running: - -- **Web Interface**: Access at `http://localhost:3737` -- **API Documentation**: Available at `http://localhost:8080/docs` -- **MCP Connection**: Use `http://localhost:8051/sse` in your IDE -- **AI Agents API**: Available at `http://localhost:8052/docs` - - -- All settings are stored in the Supabase database -- API keys can be configured through the web interface -- Knowledge base content can be managed through the web interface -- MCP clients connect automatically once configured -- Each service can be scaled independently for better performance - \ No newline at end of file diff --git a/docs/docs/crawling-configuration.mdx b/docs/docs/crawling-configuration.mdx deleted file mode 100644 index f7faceac..00000000 --- a/docs/docs/crawling-configuration.mdx +++ /dev/null @@ -1,219 +0,0 @@ ---- -title: Crawling Configuration Guide -sidebar_position: 12 ---- - -import Admonition from '@theme/Admonition'; - -# Crawling Configuration Guide - -This guide explains how to configure and optimize the Archon crawling system powered by Crawl4AI. - -## Overview - -Archon uses [Crawl4AI](https://github.com/unclecode/crawl4ai) for web crawling, which provides powerful features for extracting content from various types of websites. The system automatically detects content types and applies appropriate crawling strategies. - -## Basic Configuration - -### Default Settings - -The crawling service uses simple, reliable defaults: - -```python -CrawlerRunConfig( - cache_mode=CacheMode.BYPASS, # Fresh content - stream=False, # Complete pages - markdown_generator=DefaultMarkdownGenerator() -) -``` - - -The default configuration works well for most sites. Only add complexity when needed. - - -## Content Type Detection - -The system automatically detects and handles three main content types: - -### 1. Text Files (.txt) -- Direct content extraction -- No HTML parsing needed -- Fast and efficient - -### 2. Sitemaps (sitemap.xml) -- Parses XML structure -- Extracts all URLs -- Batch crawls pages in parallel - -### 3. Web Pages (HTML) -- Recursive crawling to specified depth -- Follows internal links -- Extracts structured content - -## Code Extraction Configuration - -### Minimum Length Setting - -Code blocks must meet a minimum length to be extracted: - -```bash -# Environment variable (optional) -CODE_BLOCK_MIN_LENGTH=1000 # Default: 1000 characters -``` - -This prevents extraction of small snippets and ensures only substantial code examples are indexed. - -### Supported Code Formats - -1. **Markdown Code Blocks** - ````markdown - ```language - // Code here (must be ≥ 1000 chars) - ``` - ```` - -2. **HTML Code Elements** - ```html -

-   // Code here
-   
- ``` - -## Advanced Configuration - -### When to Use Advanced Features - - -Advanced features like `wait_for` and `js_code` can cause timeouts and should only be used when absolutely necessary. - - -### JavaScript Execution - -For sites that require JavaScript interaction: - -```python -# Only if content doesn't load otherwise -js_code = [ - "window.scrollTo(0, document.body.scrollHeight);", - "document.querySelector('.load-more')?.click();" -] -``` - -### Wait Conditions - -For dynamic content loading: - -```python -# CSS selector format -wait_for = "css:.content-loaded" - -# JavaScript condition -wait_for = "js:() => document.querySelectorAll('.item').length > 10" -``` - -## Performance Optimization - -### Batch Crawling - -For multiple URLs, use batch processing: - -```python -dispatcher = MemoryAdaptiveDispatcher( - memory_threshold_percent=70.0, - check_interval=1.0, - max_session_permit=10 # Concurrent sessions -) -``` - -### Caching Strategy - -- **CacheMode.ENABLED**: Use for development/testing -- **CacheMode.BYPASS**: Use for production (fresh content) - -## Troubleshooting Common Issues - -### JavaScript-Heavy Sites - -**Problem**: Content not loading on React/Vue/Angular sites - -**Solution**: The default configuration should work. If not: -1. Check if content is server-side rendered -2. Verify the page loads without JavaScript in a browser -3. Consider if the content is behind authentication - -### Timeouts - -**Problem**: Crawling times out on certain pages - -**Solution**: -1. Remove `wait_for` conditions -2. Simplify or remove `js_code` -3. Reduce `page_timeout` for faster failures - -### Code Not Extracted - -**Problem**: Code blocks aren't being found - -**Solution**: -1. Check code block length (≥ 1000 chars) -2. Verify markdown formatting (triple backticks) -3. Check logs for `backtick_count` -4. Ensure markdown generator is using correct settings - -## Best Practices - -1. **Start Simple**: Use default configuration first -2. **Monitor Logs**: Check for extraction counts and errors -3. **Test Incrementally**: Crawl single pages before batch/recursive -4. **Respect Rate Limits**: Don't overwhelm target servers -5. **Cache Wisely**: Use caching during development - -## Configuration Examples - -### Documentation Site - -```python -# Handles most documentation sites well -config = CrawlerRunConfig( - cache_mode=CacheMode.BYPASS, - stream=False, - markdown_generator=DefaultMarkdownGenerator() -) -``` - -### Blog with Code Examples - -```python -# Ensures code extraction works properly -config = CrawlerRunConfig( - cache_mode=CacheMode.BYPASS, - stream=False, - markdown_generator=DefaultMarkdownGenerator( - content_source="cleaned_html", - options={ - "mark_code": True, - "handle_code_in_pre": True, - "body_width": 0 - } - ) -) -``` - -### Dynamic SPA (Use Cautiously) - -```python -# Only if content doesn't load otherwise -config = CrawlerRunConfig( - cache_mode=CacheMode.BYPASS, - stream=False, - wait_for="css:.main-content", - js_code=["window.scrollTo(0, 1000);"], - page_timeout=30000 -) -``` - -## Related Documentation - -- [Knowledge Features](./knowledge-features) - Overview of knowledge management -- [Server Services](./server-services) - Technical service details -- [API Reference](./api-reference#knowledge-management-api) - API endpoints \ No newline at end of file diff --git a/docs/docs/deployment.mdx b/docs/docs/deployment.mdx deleted file mode 100644 index 9384781a..00000000 --- a/docs/docs/deployment.mdx +++ /dev/null @@ -1,285 +0,0 @@ ---- -title: Deployment -description: Quick start guide for running Archon -sidebar_position: 10 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# Deployment - -## Quick Start - - -- Docker and Docker Compose installed -- Supabase account (free tier works) -- Git for cloning the repository - - -### 1. Clone & Setup - -```bash -# Clone repository -git clone -cd archon - -# Create environment file -cp .env.example .env -``` - -### 2. Configure - -Edit `.env` with your credentials: - -```bash -SUPABASE_URL=https://your-project.supabase.co -SUPABASE_SERVICE_KEY=eyJ0eXAi... -``` - -### 3. Launch - -```bash -# Start all services -docker-compose up -d - -# Check status -docker-compose ps -``` - -### 4. Access - -- **UI**: http://localhost:3737 -- **API Docs**: http://localhost:8080/docs -- **Documentation**: http://localhost:3838 - -## Hot Module Reload (HMR) - - -Archon automatically includes Hot Module Reload for both Python server and React UI. Code changes are reflected immediately without container rebuilds. - - -### What Changes Without Rebuild - - - - -**✅ No Rebuild Required:** -- Python source code changes (`.py` files) -- Configuration changes in code -- Business logic updates -- API endpoint modifications -- Socket.IO event handlers -- Service layer changes - -**❌ Rebuild Required:** -- New pip dependencies in `requirements.*.txt` -- System package installations -- Dockerfile modifications -- Environment variable changes in docker-compose - - - - -**✅ No Rebuild Required:** -- React components (`.tsx`, `.jsx`) -- CSS/Tailwind styles -- TypeScript code -- Static assets in `public/` -- Vite configuration (most changes) - -**❌ Rebuild Required:** -- New npm dependencies in `package.json` -- Node version changes -- Build tool configurations -- Environment variable changes - - - - -### How HMR Works - -**Python Server:** -- Uses `uvicorn --reload` -- Watches file changes automatically -- Restarts on save -- WebSocket connections re-establish after reload - -**React UI:** -- Vite's built-in HMR -- Component state preserved when possible -- CSS updates without page reload -- Fast refresh for React components - -### Tips - -1. **Monitor Logs**: Watch for reload messages - ```bash - docker logs -f Archon-Server - ``` - -2. **Handle Disconnects**: The UI shows a disconnect screen during server reload - -3. **State Persistence**: Server state resets on reload, but database state persists - - -The MCP service doesn't support hot reload. Restart manually after changes: -```bash -docker-compose restart archon-mcp -``` - - -## Service Architecture - -```mermaid -graph LR - subgraph "Your Computer" - Browser[Web Browser
localhost:3737] - IDE[VS Code/Cursor
localhost:8051] - end - - subgraph "Docker Containers" - Frontend[archon-frontend
React UI] - API[Archon-Server
FastAPI + Socket.IO] - MCP[archon-mcp
MCP Server] - Agents[archon-agents
AI Processing] - Docs[archon-docs
Documentation] - end - - subgraph "Cloud Services" - Supabase[Supabase
Database] - OpenAI[OpenAI
AI Models] - end - - Browser --> Frontend - IDE --> MCP - Frontend --> API - API --> MCP - API --> Agents - API --> Supabase - Agents --> OpenAI - MCP --> Supabase - - style Frontend fill:#1a1a2e,stroke:#00d4ff,stroke-width:2px,color:#fff - style API fill:#1a1a2e,stroke:#00d4ff,stroke-width:2px,color:#fff - style MCP fill:#1a1a2e,stroke:#00d4ff,stroke-width:2px,color:#fff - style Agents fill:#1a1a2e,stroke:#ff6b6b,stroke-width:2px,color:#fff - style Supabase fill:#16213e,stroke:#00ff88,stroke-width:2px,color:#fff -``` - -## Common Commands - - - - -```bash -# Start services -docker-compose up -d - -# Stop services -docker-compose down - -# View logs -docker-compose logs -f - -# Restart a service -docker-compose restart archon-frontend -``` - - - - -```bash -# Check container status -docker ps - -# View service logs -docker logs archon-server -docker logs archon-mcp -docker logs archon-agents - -# Rebuild after changes -docker-compose build -docker-compose up -d - -# Complete reset -docker-compose down -v -docker-compose up -d --build -``` - - - - -## Advanced Configuration - - -For team deployments, consider: -- Using a reverse proxy (nginx/Caddy) for multiple users -- Setting up SSL certificates for secure connections -- Configuring resource limits based on usage -- Using managed Supabase instances - - -## Database Management - -### Reset Database - - -This will delete ALL data in your database! - - -```sql --- Run in Supabase SQL editor --- migration/RESET_DB.sql -``` - -### Backup Data - -```bash -# Export data before reset -pg_dump -h your-db-host -U postgres -d postgres > backup.sql -``` - -## Monitoring - -### Health Checks - -```bash -# API Health -curl http://localhost:8080/health - -# Check all services -echo "Frontend: http://localhost:3737" -curl -s http://localhost:3737 > /dev/null && echo "✓ Running" || echo "✗ Not running" - -echo "API: http://localhost:8080/health" -curl -s http://localhost:8080/health | jq '.status' || echo "✗ Not running" - -echo "MCP: http://localhost:8051/sse" -curl -s http://localhost:8051/sse > /dev/null && echo "✓ Running" || echo "✗ Not running" - -echo "Agents: http://localhost:8052/health" -curl -s http://localhost:8052/health | jq '.status' || echo "✗ Not running" -``` - -### Container Resources - -```bash -# View resource usage -docker stats - -# Check disk usage -docker system df -``` - -## Next Steps - - -Your Archon instance is now running. Next: - -1. **Set up API keys** in Settings -2. **Configure MCP** for AI agents -3. **Start crawling** knowledge sources -4. **Create projects** and tasks - \ No newline at end of file diff --git a/docs/docs/getting-started.mdx b/docs/docs/getting-started.mdx deleted file mode 100644 index dfedaf7c..00000000 --- a/docs/docs/getting-started.mdx +++ /dev/null @@ -1,410 +0,0 @@ ---- -title: 🚀 Getting Started -sidebar_position: 2 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - - -# 🚀 Getting Started with Archon - -
-
-

- **Build Your AI's Knowledge Base** - From zero to operational in under 10 minutes -

-
-
- -

- Quick Start • - What's Included • - Next Steps • - Documentation Guide -

- ---- - -By the end of this guide, you'll have a **fully operational Archon system** with: -- ✅ **14 MCP tools** enabled and working -- 🧠 **RAG system** for intelligent knowledge retrieval -- 🌐 **Archon UI** Command Center for knowledge, projects, and tasks -- 🔥 **Real-time Logfire monitoring** and debugging -- 🌐 **Modern UI** for project and task management - ---- -## 🎯 What is Archon? - -Archon is a **Model Context Protocol (MCP) server** that creates a centralized knowledge base for your AI coding assistants. Connect Cursor, Windsurf, or Claude Desktop to give your AI agents access to: - -- **Your documentation** (crawled websites, uploaded PDFs/docs) -- **Smart search capabilities** with advanced RAG strategies -- **Task management** integrated with your knowledge base -- **Real-time updates** as you add new content - -## ⚡ Quick Start - -### Prerequisites -- [Docker Desktop](https://www.docker.com/products/docker-desktop/) installed and running -- [Supabase](https://supabase.com/) account (free tier works) -- [OpenAI API key](https://platform.openai.com/api-keys) for embeddings - -### 1. Clone & Setup - -```bash -git clone https://github.com/coleam00/archon.git -cd archon - -# Create environment file -cp .env.example .env -``` - -### 2. Configure Environment - -Edit `.env` and add your credentials: - -```bash -# Required -SUPABASE_URL=https://your-project.supabase.co -SUPABASE_SERVICE_KEY=your-service-key-here - -# Optional (but recommended for monitoring) -OPENAI_API_KEY=sk-proj-your-openai-key -# Unified Logging Configuration (Optional) -LOGFIRE_ENABLED=false # true=Logfire logging, false=standard logging -LOGFIRE_TOKEN=your-logfire-token-here # Only required when LOGFIRE_ENABLED=true -``` - -### 3. Set Up Database - - -Create a new [Supabase project](https://supabase.com/dashboard), then follow these setup steps in order: - - -#### Step 1: Initial Setup - Enable RAG Crawl and Document Upload -**Run `migration/1_initial_setup.sql`** - Creates vector database, settings, and core tables - -#### Step 2: Install Projects Module -**Run `migration/2_archon_projects.sql`** - Creates project and task management tables - -#### Step 3: Enable MCP Client Management (Optional) -**Run `migration/3_mcp_client_management.sql`** - Adds MCP client connection management features - -#### 🔄 Database Reset (Optional) -**Run `migration/RESET_DB.sql`** - ⚠️ **Completely resets database (deletes ALL data!)** - -
-🔍 **How to run SQL scripts in Supabase** - -1. Go to your [Supabase Dashboard](https://supabase.com/dashboard) -2. Select your project -3. Navigate to **SQL Editor** in the left sidebar -4. Click **"New Query"** -5. Copy the contents of each migration file from your local files -6. Paste and click **"Run"** -7. Run each script in order: Step 1 → Step 2 → Step 3 (optional) - -**For database reset:** -1. Run `RESET_DB.sql` first to clean everything -2. Then run migrations 1, 2, 3 in order to rebuild - -
- -### 4. Start Archon - -```bash -# Build and start all services -docker compose up --build -d - -# View logs (optional) -docker compose logs -f -``` - - -Archon includes Hot Module Reload (HMR) for both Python and React code. Changes to source files automatically reload without container rebuilds. - -**No rebuild needed for:** -- Python code changes (`.py` files) -- React components (`.tsx`, `.jsx`) -- CSS/Tailwind styles -- Most configuration changes - -**Rebuild required for:** -- New dependencies (`requirements.txt`, `package.json`) -- Dockerfile changes -- Environment variables - - -### 5. Access & Configure - -| Service | URL | Purpose | -|---------|-----|---------| -| **🌐 Web Interface** | http://localhost:3737 | Main dashboard and controls | -| **📚 Documentation** | http://localhost:3838 | Complete setup and usage guides | -| **⚡ API Docs** | http://localhost:8080/docs | FastAPI documentation | - -**Initial Configuration:** -1. Open the **Web Interface** (http://localhost:3737) -2. Go to **Settings** and add your OpenAI API key -3. Start the MCP server from the **MCP Dashboard** -4. Get connection details for your AI client - - -Your Archon system is now running with **14 MCP tools** available. Your AI agents can now access your knowledge base! - - -## 🛠️ What's Included - -When you run `docker compose up -d`, you get: - -### Microservices Architecture -- **Frontend** (Port 3737): React dashboard for managing knowledge and tasks -- **API Service** (Port 8080): FastAPI server with Socket.IO for real-time features -- **MCP Service** (Port 8051): Model Context Protocol server for AI clients -- **Agents Service** (Port 8052): AI processing service for document analysis -- **Documentation** (Port 3838): Complete Docusaurus documentation site - -### Key Features -- **Smart Web Crawling**: Automatically detects sitemaps, text files, or webpages -- **Document Processing**: Upload PDFs, Word docs, markdown, and text files -- **AI Integration**: Connect any MCP-compatible client (Cursor, Windsurf, etc.) -- **Real-time Updates**: Socket.IO-based live progress tracking -- **Task Management**: Organize projects and tasks with AI agent integration - -### Architecture Overview - -```mermaid -%%{init:{ - 'theme':'base', - 'themeVariables': { - 'primaryColor':'#1f2937', - 'primaryTextColor':'#ffffff', - 'primaryBorderColor':'#8b5cf6', - 'lineColor':'#a855f7', - 'textColor':'#ffffff', - 'fontFamily':'Inter', - 'fontSize':'14px', - 'background':'#000000', - 'mainBkg':'#1f2937', - 'secondBkg':'#111827', - 'borderColor':'#8b5cf6', - 'clusterBkg':'#111827', - 'clusterBorder':'#8b5cf6' - } -}}%% -graph TB - subgraph "🚀 Docker Microservices Stack" - Frontend["🌐 Frontend Container
React + Vite
archon-frontend
Port 3737"] - API["⚡ Server Container
FastAPI + Socket.IO
Archon-Server
Port 8080"] - MCP["🔧 MCP Server
14 MCP Tools
archon-mcp
Port 8051"] - Agents["🤖 Agents Service
AI Processing
archon-agents
Port 8052"] - Docs["📚 Documentation
Docusaurus
archon-docs
Port 3838"] - end - - subgraph "☁️ External Services" - Supabase["🗄️ Supabase
PostgreSQL + pgvector"] - OpenAI["🤖 OpenAI API
Embeddings + Chat"] - Logfire["🔥 Logfire
Real-time Monitoring"] - end - - Frontend --> API - API --> MCP - API --> Agents - API --> Supabase - API --> OpenAI - MCP --> Logfire - API --> Logfire - Agents --> Logfire - MCP --> Supabase - Agents --> Supabase -``` - -## ⚡ Quick Test - -Once everything is running: - -1. **Test Document Upload**: Go to http://localhost:3737 → Documents → Upload a PDF -2. **Test Web Crawling**: Knowledge Base → "Crawl Website" → Enter a docs URL -3. **Test AI Integration**: MCP Dashboard → Copy connection config for your AI client - -## 🔌 Connecting to Cursor IDE - -To connect Cursor to your Archon MCP server, add this configuration: - - - - -**File**: `~/.cursor/mcp.json` - -```json -{ - "mcpServers": { - "archon": { - "command": "docker", - "args": [ - "exec", - "-i", - "-e", "TRANSPORT=stdio", - "-e", "HOST=localhost", - "-e", "PORT=8051", - "archon-mcp", - "python", "src/mcp_server.py" - ] - } - } -} -``` - - - - -**For Windsurf, Claude Desktop, or other MCP clients:** - -Check the **[MCP Overview](./mcp-overview)** for specific connection instructions for your AI client. - - - - -## 🎯 Next Steps - -### Immediate Actions -1. **📚 [Build Your Knowledge Base](#building-your-knowledge-base)** - Start crawling and uploading content -2. **🔌 [Connect Your AI Client](./mcp-overview)** - Set up Cursor, Windsurf, or Claude Desktop -3. **📊 [Monitor Performance](./configuration.mdx)** - Set up Logfire for real-time debugging - -### Building Your Knowledge Base - - - - -**Crawl Documentation Sites:** -1. Go to **Knowledge Base** in the web interface -2. Click **"Crawl Website"** -3. Enter a documentation URL (e.g., `https://docs.python.org`) -4. Monitor progress in real-time - -**Pro Tips:** -- Start with well-structured documentation sites -- Use sitemap URLs when available (e.g., `sitemap.xml`) -- Monitor crawl progress via Socket.IO updates - - - - -**Upload Documents:** -1. Go to **Documents** in the web interface -2. Click **"Upload Document"** -3. Select PDFs, Word docs, or text files -4. Add tags for better organization - -**Supported Formats:** -- PDF files -- Word documents (.docx) -- Markdown files (.md) -- Plain text files (.txt) - - - - -### Advanced Setup - -For production deployments and advanced features: - -- **[Deployment Guide](./deployment.mdx)** - Production deployment strategies -- **[RAG Configuration](./rag.mdx)** - Advanced search and retrieval optimization -- **[Configuration Guide](./configuration.mdx)** - Comprehensive setup and monitoring -- **[API Reference](./api-reference.mdx)** - Complete REST API documentation - -## 📖 Documentation Guide - -This documentation is organized for different use cases: - -### 🚀 Getting Started (You Are Here) -**QuickStart guide** to get Archon running in minutes - -### 🔌 MCP Integration -**[MCP Overview](./mcp-overview)** - Connect Cursor, Windsurf, Claude Desktop, and other MCP clients - -### 🧠 RAG & Search -**[RAG Strategies](./rag.mdx)** - Configure intelligent search and retrieval for optimal AI responses - -### 📊 Configuration & Monitoring -**[Configuration Guide](./configuration.mdx)** - Setup, monitoring, and Logfire integration - -### 🚀 Production Deployment -**[Deployment Guide](./deployment.mdx)** - Scale Archon for team and production use - -### 🛠️ Development -**[API Reference](./api-reference.mdx)** - REST API endpoints and development guides -**[Testing Guide](./testing.mdx)** - Development setup and testing procedures - -## 🔧 Troubleshooting - -
-**🐳 Container Issues** - -```bash -# Check Docker status -docker --version -docker compose version - -# Rebuild containers -docker compose down -docker compose up --build -d - -# Check container logs -docker compose logs archon-server -docker compose logs archon-mcp -docker compose logs archon-agents -``` - -
- -
-**🔌 Connection Issues** - -```bash -# Verify environment variables -docker compose exec archon-server env | grep -E "(SUPABASE|OPENAI)" - -# Check MCP server health -curl http://localhost:8051/sse - -# Check API health -curl http://localhost:8080/health - -# Check Agents service health -curl http://localhost:8052/health -``` - -
- -
-**🧠 Empty RAG Results** - -```bash -# Check available sources -curl http://localhost:8080/api/sources - -# Test basic query -curl -X POST http://localhost:8080/api/rag/query \ - -H "Content-Type: application/json" \ - -d '{"query": "test", "match_count": 1}' -``` - -
- -## 💬 Getting Help - -- **📖 [Complete Documentation](http://localhost:3838)** - Comprehensive guides -- **🐛 [GitHub Issues](https://github.com/coleam00/archon/issues)** - Bug reports and feature requests -- **📊 [Logfire Dashboard](https://logfire.pydantic.dev/)** - Optional enhanced logging (when `LOGFIRE_ENABLED=true`) - ---- - -

- Supercharging AI IDE's with knowledge and tasks
- Transform your AI coding experience with Archon -

\ No newline at end of file diff --git a/docs/docs/intro.mdx b/docs/docs/intro.mdx deleted file mode 100644 index 8f3c7b6b..00000000 --- a/docs/docs/intro.mdx +++ /dev/null @@ -1,206 +0,0 @@ ---- -title: Welcome to Archon -sidebar_position: 1 ---- - -
-
-

Archon

-

Supercharge your AI development workflow. Plug Claude Code, Cursor, Windsurf, or any AI IDE into Archon to unlock instant access to your business knowledge, technical docs, project requirements, and development tasks. Your AI gets smarter, your code gets better.

- -
-
- -## 🎯 What is Archon? - -Archon is a powerful knowledge engine that integrates the [Model Context Protocol (MCP)](https://modelcontextprotocol.io) with [Crawl4AI](https://crawl4ai.com) and [Supabase](https://supabase.com/) to create a centralized knowledge base for your AI agents and coding assistants. - -**Connect your Cursor or Windsurf agents to Archon** and give them access to: -- Your technical documentation -- Your business/project documentation -- Any website content you've crawled -- Uploaded documents (PDFs, Word docs, markdown files) -- A searchable knowledge base with advanced RAG capabilities - -With Archon's web interface, you can **manage all your knowledge in one place** - crawl websites, upload documents, organize by type, and even chat with your knowledge base to test queries before your AI agents use them. - -## ✨ Core Features - -
-
-
-
-

🧠 Archon Knowledge

-
-
-

- Build your AI's memory bank with powerful knowledge management: -

-
    -
  • 📚 Crawl entire documentation sites automatically
  • -
  • 📄 Upload PDFs, Word docs, and markdown files
  • -
  • 🔍 Semantic search with AI-enhanced results
  • -
  • 💻 Code example extraction and indexing
  • -
  • 🎯 Source filtering for precise queries
  • -
- - Explore Archon Knowledge → - -
-
-
-
-
-
-

📊 Archon Projects

-
-
-

- AI-powered project management integrated with your workflow: -

-
    -
  • 📋 Hierarchical task management
  • -
  • 🤖 AI agents can create and update tasks
  • -
  • 📝 Rich document editing with version control
  • -
  • 🔗 GitHub repository integration
  • -
  • 📈 Kanban and table views
  • -
- - Explore Archon Projects → - -
-
-
-
- -## 🔌 Universal AI Integration - -
-
-
- Cursor -

Cursor IDE

-

One-click setup with deeplink support

-
-
-
-
- Windsurf -

Windsurf

-

Native MCP integration

-
-
-
-
- Claude -

Claude Code

-

Full MCP tool support

-
-
-
- -## 🚀 Quick Start - -Ready to get started? Follow our comprehensive setup guide: - -👉 **[Getting Started Guide](./getting-started)** - Complete setup from installation to first knowledge base - -## 📚 Documentation Sections - -| Section | Description | -|---------|-------------| -| **[Getting Started](./getting-started)** | Complete setup guide from prerequisites to first crawl | -| **[Configuration](./configuration)** | Environment variables, database setup, and service configuration | -| **[MCP Integration](./mcp-overview)** | Connect AI clients like Cursor, Windsurf, Claude Desktop | -| **[API Reference](./api-reference)** | Complete REST API documentation with examples | -| **[Socket.IO Communication](./websockets)** | Real-time updates, progress tracking, and troubleshooting | -| **[RAG Strategies](./rag)** | Configure advanced retrieval strategies for optimal performance | -| **[Task Management](./tasks)** | Organize projects and tasks with AI agent integration | -| **[Web Interface](./ui)** | Comprehensive guide to the React frontend | -| **[Server Architecture](./server)** | Technical details about the backend and MCP server | -| **[Testing](./testing)** | Testing strategies and troubleshooting guides | -| **[Deployment](./deployment)** | Production deployment with Docker and scaling | - -## 🛠️ Architecture Overview - -```mermaid -%%{init:{ - 'theme':'base', - 'themeVariables': { - 'primaryColor':'#1f2937', - 'primaryTextColor':'#ffffff', - 'primaryBorderColor':'#8b5cf6', - 'lineColor':'#a855f7', - 'textColor':'#ffffff', - 'fontFamily':'Inter', - 'fontSize':'14px', - 'background':'#000000', - 'mainBkg':'#1f2937', - 'secondBkg':'#111827', - 'borderColor':'#8b5cf6', - 'clusterBkg':'#111827', - 'clusterBorder':'#8b5cf6' - } -}}%% -graph TB - subgraph "AI Clients" - Cursor(Cursor IDE) - Windsurf(Windsurf IDE) - Claude(Claude Desktop) - end - - subgraph "Archon Microservices" - UI["Frontend Service
archon-frontend
Port 3737"] - API["Server Service
Archon-Server
Port 8080"] - MCP["MCP Service
archon-mcp
Port 8051"] - Agents["Agents Service
archon-agents
Port 8052"] - Docs["Documentation
archon-docs
Port 3838"] - end - - subgraph "External Services" - Supabase["Supabase
PostgreSQL + Vector DB"] - OpenAI["OpenAI API
Embeddings"] - end - - Cursor -.->|MCP Protocol| MCP - Windsurf -.->|MCP Protocol| MCP - Claude -.->|MCP Protocol| MCP - - UI --> API - MCP --> API - API --> Agents - API --> Supabase - Agents --> OpenAI - MCP --> Supabase -``` - -## 🔮 Real-Time Features - -Archon implements comprehensive real-time communication: - -- **🔄 Live Progress Tracking**: Real-time updates during crawling operations -- **📡 Server Log Streaming**: Socket.IO-based log streaming from MCP server to UI -- **🎯 Progress Callbacks**: Business logic reports progress via callbacks to Socket.IO broadcasts -- **🔗 Auto-Reconnection**: Robust connection handling with automatic reconnect on failures -- **📱 Responsive UI Updates**: Instant feedback without polling or page refreshes - -📋 **[Complete Socket.IO Guide](./server#socket-io-communication)** - Implementation patterns and best practices - -## 🎯 Next Steps - -1. **[Set up Archon](./getting-started)** - Get your knowledge engine running -2. **[Connect your AI client](./mcp-overview)** - Integrate with Cursor, Windsurf, or Claude Desktop -3. **[Build your knowledge base](./getting-started#building-your-knowledge-base)** - Start crawling and uploading content -4. **[Optimize for your use case](./rag)** - Configure RAG strategies -5. **[Deploy to production](./deployment)** - Scale for team or enterprise use - ---- - -**Transform your AI coding experience with Archon** - *Build once, query everywhere* \ No newline at end of file diff --git a/docs/docs/knowledge-features.mdx b/docs/docs/knowledge-features.mdx deleted file mode 100644 index f3e73d69..00000000 --- a/docs/docs/knowledge-features.mdx +++ /dev/null @@ -1,285 +0,0 @@ ---- -title: Archon Knowledge Features -sidebar_position: 2 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# 🧠 Archon Knowledge: Complete Feature Reference - -
-
-

- Everything you can do with Archon Knowledge - from web crawling to semantic search, document processing to code extraction. -

-
-
- -## 🎯 Core Knowledge Management Features - -### Content Acquisition -- **Smart Web Crawling**: Intelligent crawling with automatic content type detection -- **Document Upload**: Support for PDF, Word, Markdown, and text files -- **Sitemap Processing**: Crawl entire documentation sites efficiently -- **Recursive Crawling**: Follow links to specified depth -- **Batch Processing**: Handle multiple URLs simultaneously - -### Content Processing -- **Smart Chunking**: Intelligent text splitting preserving context -- **Contextual Embeddings**: Enhanced embeddings for better retrieval -- **Code Extraction**: Automatic detection and indexing of code examples - - Only extracts substantial code blocks (≥ 1000 characters by default) - - Supports markdown code blocks (triple backticks) - - Falls back to HTML extraction for `
` and `` tags
-  - Generates AI summaries for each code example
-- **Metadata Extraction**: Headers, sections, and document structure
-- **Source Management**: Track and manage content sources
-
-### Search & Retrieval
-- **Semantic Search**: Vector similarity search with pgvector
-- **Code Search**: Specialized search for code examples
-- **Source Filtering**: Search within specific sources
-- **Result Reranking**: Optional ML-based result reranking
-- **Hybrid Search**: Combine keyword and semantic search
-
-## 🤖 AI Integration Features
-
-### MCP Tools Available
-
-
-
-
-
-

Knowledge Tools

-
-
-
    -
  • perform_rag_query - Semantic search
  • -
  • search_code_examples - Code-specific search
  • -
  • crawl_single_page - Index one page
  • -
  • smart_crawl_url - Intelligent crawling
  • -
  • get_available_sources - List sources
  • -
  • upload_document - Process documents
  • -
  • delete_source - Remove content
  • -
-
-
-
-
-
-
-

AI Capabilities

-
-
-
    -
  • AI can search your entire knowledge base
  • -
  • Automatic query refinement for better results
  • -
  • Context-aware answer generation
  • -
  • Code example recommendations
  • -
  • Source citation in responses
  • -
-
-
-
-
- -## 🎨 User Interface Features - -### Knowledge Table View -- **Source Overview**: See all indexed sources at a glance -- **Document Count**: Track content volume per source -- **Last Updated**: Monitor content freshness -- **Quick Actions**: Delete or refresh sources -- **Search Interface**: Test queries directly in UI - -### Upload Interface -- **Drag & Drop**: Easy file uploads -- **Progress Tracking**: Real-time processing status -- **Batch Upload**: Multiple files simultaneously -- **Format Detection**: Automatic file type handling - -### Crawl Interface -- **URL Input**: Simple URL entry with validation -- **Crawl Options**: Configure depth, filters -- **Progress Monitoring**: Live crawl status via Socket.IO -- **Stop Functionality**: Cancel crawls immediately with proper cleanup -- **Result Preview**: See crawled content immediately - -## 🔧 Technical Capabilities - -### Backend Services - -#### RAG Services -- **Crawling Service**: Web page crawling and parsing -- **Document Storage Service**: Chunking and storage -- **Search Service**: Query processing and retrieval -- **Source Management Service**: Source metadata handling - -#### Embedding Services -- **Embedding Service**: OpenAI embeddings with rate limiting -- **Contextual Embedding Service**: Context-aware embeddings - -#### Storage Services -- **Document Storage Service**: Parallel document processing -- **Code Storage Service**: Code extraction and indexing - -### Processing Pipeline -1. **Content Acquisition**: Crawl or upload -2. **Text Extraction**: Parse HTML/PDF/DOCX -3. **Smart Chunking**: Split into optimal chunks -4. **Embedding Generation**: Create vector embeddings -5. **Storage**: Save to Supabase with pgvector -6. **Indexing**: Update search indices - -### Performance Features -- **Rate Limiting**: 200k tokens/minute OpenAI limit -- **Parallel Processing**: ThreadPoolExecutor optimization -- **Batch Operations**: Process multiple documents efficiently -- **Socket.IO Progress**: Real-time status updates -- **Caching**: Intelligent result caching - -### Crawl Cancellation -- **Immediate Response**: Stop button provides instant UI feedback -- **Proper Cleanup**: Cancels both orchestration service and asyncio tasks -- **State Persistence**: Uses localStorage to prevent zombie crawls on refresh -- **Socket.IO Events**: Real-time cancellation status via `crawl:stopping` and `crawl:stopped` -- **Resource Management**: Ensures all server resources are properly released - -## 🚀 Advanced Features - -### Content Types - -#### Web Crawling -- **Sitemap Support**: Process sitemap.xml files -- **Text File Support**: Direct .txt file processing -- **Markdown Support**: Native .md file handling -- **Dynamic Content**: JavaScript-rendered pages -- **Authentication**: Basic auth support - -#### Document Processing -- **PDF Extraction**: Full text and metadata -- **Word Documents**: .docx and .doc support -- **Markdown Files**: Preserve formatting -- **Plain Text**: Simple text processing -- **Code Files**: Syntax-aware processing - -### Search Features -- **Query Enhancement**: Automatic query expansion -- **Contextual Results**: Include surrounding context -- **Code Highlighting**: Syntax highlighting in results -- **Similarity Scoring**: Relevance scores for ranking -- **Faceted Search**: Filter by metadata - -### Monitoring & Analytics -- **Logfire Integration**: Real-time performance monitoring -- **Search Analytics**: Track popular queries -- **Content Analytics**: Usage patterns -- **Performance Metrics**: Query times, throughput - -### Debugging Tips - -#### Code Extraction Not Working? -1. **Check code block size**: Only blocks ≥ 1000 characters are extracted -2. **Verify markdown format**: Code must be in triple backticks (```) -3. **Check crawl results**: Look for `backtick_count` in logs -4. **HTML fallback**: System will try HTML if markdown has no code blocks - -#### Crawling Issues? -1. **Timeouts**: The system uses simple crawling without complex waits -2. **JavaScript sites**: Content should render without special interactions -3. **Progress stuck**: Check logs for batch processing updates -4. **Different content types**: - - `.txt` files: Direct text extraction - - `sitemap.xml`: Batch crawl all URLs - - Regular URLs: Recursive crawl with depth limit - -## 📊 Usage Examples - -### Crawling Documentation -``` -AI Assistant: "Crawl the React documentation" -``` -The system will: -1. Detect it's a documentation site -2. Find and process the sitemap -3. Crawl all pages with progress updates -4. Extract code examples -5. Create searchable chunks - -### Searching Knowledge -``` -AI Assistant: "Find information about React hooks" -``` -The search will: -1. Generate embeddings for the query -2. Search across all React documentation -3. Return relevant chunks with context -4. Include code examples -5. Provide source links - -### Document Upload -``` -User uploads "system-design.pdf" -``` -The system will: -1. Extract text from PDF -2. Identify sections and headers -3. Create smart chunks -4. Generate embeddings -5. Make searchable immediately - -## 🔗 Real-time Features - -### Socket.IO Progress -- **Crawl Progress**: Percentage completion with smooth updates -- **Current URL**: What's being processed in real-time -- **Batch Updates**: Processing batches with accurate progress -- **Stop Support**: Cancel crawls with immediate feedback -- **Error Reporting**: Failed URLs with detailed errors -- **Completion Status**: Final statistics and results - -### Live Updates -```javascript -// Connect to Socket.IO and subscribe to progress -import { io } from 'socket.io-client'; - -const socket = io('/crawl'); -socket.emit('subscribe', { progress_id: 'uuid' }); - -// Handle progress updates -socket.on('progress_update', (data) => { - console.log(`Progress: ${data.percentage}%`); - console.log(`Status: ${data.status}`); - console.log(`Current URL: ${data.currentUrl}`); - console.log(`Pages: ${data.processedPages}/${data.totalPages}`); -}); - -// Handle completion -socket.on('progress_complete', (data) => { - console.log('Crawl completed!'); - console.log(`Chunks stored: ${data.chunksStored}`); - console.log(`Word count: ${data.wordCount}`); -}); - -// Stop a crawl -socket.emit('crawl_stop', { progress_id: 'uuid' }); - -// Handle stop events -socket.on('crawl:stopping', (data) => { - console.log('Crawl is stopping...'); -}); - -socket.on('crawl:stopped', (data) => { - console.log('Crawl cancelled successfully'); -}); -``` - -## 🔗 Related Documentation - -- [Knowledge Overview](./knowledge-overview) - High-level introduction -- [API Reference](./api-reference#knowledge-management-api) - Detailed API documentation -- [MCP Tools Reference](./mcp-tools#knowledge-tools) - MCP tool specifications -- [RAG Agent Documentation](./agent-rag) - How the AI searches knowledge -- [Server Services](./server-services#rag-services) - Technical service details \ No newline at end of file diff --git a/docs/docs/knowledge-overview.mdx b/docs/docs/knowledge-overview.mdx deleted file mode 100644 index d92d0a59..00000000 --- a/docs/docs/knowledge-overview.mdx +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: Archon Knowledge Overview -sidebar_position: 1 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# 🧠 Archon Knowledge: Your AI's Memory Bank - -
-
-

- **Build a powerful knowledge base** for your AI assistants. Crawl websites, upload documents, and give your AI instant access to all your technical and business information. -

-
-
- -Archon Knowledge transforms your documentation, websites, and files into a searchable knowledge base that your AI coding assistants can instantly access. Never explain the same concept twice - your AI remembers everything. - - -The RAG system is **now fully functional** with 14 MCP tools enabled, comprehensive error handling, and threading optimizations for high performance. - - -## 🏗️ How RAG Works - -```mermaid -%%{init:{ - 'theme':'base', - 'themeVariables': { - 'primaryColor':'#1f2937', - 'primaryTextColor':'#ffffff', - 'primaryBorderColor':'#8b5cf6', - 'lineColor':'#a855f7', - 'textColor':'#ffffff', - 'fontFamily':'Inter', - 'fontSize':'14px', - 'background':'#000000', - 'mainBkg':'#1f2937', - 'secondBkg':'#111827', - 'borderColor':'#8b5cf6' - } -}}%% -flowchart TD - A[🤖 AI Agent Query] --> B[🧠 Generate Embeddings] - B --> C[🔍 Vector Search] - C --> D[📄 Matching Documents] - D --> E[⚡ Filter & Rank] - E --> F[📋 Return Results] -``` - -## ⚡ Performance Features - -Archon Knowledge is optimized for speed and efficiency: - -- **Smart Concurrency**: Adaptive processing based on system resources -- **Batch Processing**: Processes multiple documents efficiently -- **Rate Limiting**: Respects API limits while maximizing throughput -- **Memory Management**: Automatically adjusts to available system memory - -## 🔍 Using the Knowledge Base - -### Basic Search - -The `perform_rag_query` tool is the primary interface for semantic search across your knowledge base: - -```javascript title="Basic RAG Query" -// Simple search across all sources -await mcp.callTool('perform_rag_query', { - query: "authentication best practices", - match_count: 5 // Optional, defaults to 5 -}); -``` - -### Filtered Search by Source - -Filter results to specific domains or sources: - -```javascript title="Source-Filtered Search" -// Search only within a specific domain -await mcp.callTool('perform_rag_query', { - query: "MCP session management", - source: "modelcontextprotocol.io", // Filter by domain - match_count: 10 -}); - -// Get available sources first -const sources = await mcp.callTool('get_available_sources', {}); -// Returns: ["ai.pydantic.dev", "modelcontextprotocol.io", ...] -``` - -### Advanced Usage Examples - - - - -```javascript -// Search for technical implementation details -await mcp.callTool('perform_rag_query', { - query: "SSE transport implementation MCP protocol", - source: "modelcontextprotocol.io", - match_count: 5 -}); - -// Response includes: -// - Matched content chunks -// - Source URLs -// - Similarity scores -// - Metadata (headers, context) -``` - - - - -```javascript -// Search for code examples -await mcp.callTool('search_code_examples', { - query: "React hooks useState useEffect", - source_id: "react.dev", // Optional source filter - match_count: 10 -}); - -// Returns: -// - Code snippets with syntax highlighting -// - AI-generated summaries -// - Full context (before/after code) -// - Source file information -``` - - - - -```javascript -// Search across all indexed sources -const results = await mcp.callTool('perform_rag_query', { - query: "best practices for API design REST GraphQL", - // No source filter - searches everything - match_count: 15 -}); - -// Group results by source -const groupedResults = results.reduce((acc, result) => { - const source = result.metadata.source; - if (!acc[source]) acc[source] = []; - acc[source].push(result); - return acc; -}, {}); -``` - - - - -## 🔧 Advanced Features - -- **Contextual Embeddings**: Enhanced understanding through document context -- **Source Filtering**: Search within specific domains or documentation sources -- **Code Search**: Specialized search for code examples and implementations -- **Multi-Source**: Search across all your indexed knowledge sources simultaneously - -## ⚡ Performance - - -- **Average Query Time**: 200-300ms -- **Optimized Processing**: Smart batching and concurrency -- **Memory Adaptive**: Automatically adjusts to system resources -- **Rate Limited**: Respects API limits for reliable operation - - -## 📊 Real-Time Progress - -When processing large amounts of content, Archon provides real-time progress updates via Socket.IO: - -- **Smooth Progress**: Linear progression from 0-100% -- **Batch Details**: Clear information about processing status -- **Real-Time Updates**: Live updates as documents are processed -- **Memory Awareness**: Automatically adjusts based on system resources - -## 🗄️ Data Storage - -Archon uses a vector database to store and search your knowledge: - -- **Vector Embeddings**: Content is converted to high-dimensional vectors for semantic search -- **Source Tracking**: Each document is linked to its original source -- **Code Examples**: Special handling for code snippets with language detection -- **Metadata Storage**: Additional context and headers are preserved - -## 🔧 Common Issues - -### Performance -- **Slow searches**: Usually due to large document sets - the system automatically optimizes batch sizes -- **Memory usage**: Adaptive processing automatically adjusts based on available system memory -- **Rate limiting**: Built-in rate limiting prevents API quota issues - -### Search Quality -- **Poor results**: Try different search terms or use source filtering to narrow results -- **Missing content**: Ensure documents are properly crawled and indexed -- **Code examples**: Use the specialized `search_code_examples` tool for better code results - -## 🚀 Getting Started - -1. **Add Knowledge Sources**: Use MCP tools to crawl websites and upload documents -2. **Search Your Knowledge**: Use `perform_rag_query` to find relevant information -3. **Filter by Source**: Search within specific domains when you need focused results -4. **Find Code Examples**: Use `search_code_examples` for code-specific searches - -## 🔮 What's Next - -Future enhancements include multi-model processing, hybrid search combining vector and keyword search, and advanced neural reranking for even better results. \ No newline at end of file diff --git a/docs/docs/mcp-overview.mdx b/docs/docs/mcp-overview.mdx deleted file mode 100644 index 8fca5e5f..00000000 --- a/docs/docs/mcp-overview.mdx +++ /dev/null @@ -1,429 +0,0 @@ ---- -title: 🔌 Model Context Protocol (MCP) Overview -sidebar_position: 5 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# Model Context Protocol (MCP) Overview - - - -**Archon's MCP implementation follows a clear separation of concerns:** -- The **Server service** contains ALL business logic, ML models, and data operations -- The **MCP service** is a lightweight HTTP-based wrapper that exposes Server functionality as MCP tools -- **MCP communicates with Server exclusively via HTTP APIs** - maintaining true microservices separation - - - -## What is MCP? - -The Model Context Protocol (MCP) is an open standard that enables AI applications to securely access external data sources and tools. Archon implements both sides of MCP: - -- **MCP Server**: Exposes 14 tools following action-based patterns for knowledge management and task organization -- **MCP Client**: Universal SSE-based client for connecting to any MCP server using Streamable HTTP transport - -
-
-
-
-

MCP Server

-
-
-

Archon as an MCP Server - Expose your knowledge base to AI clients

-
    -
  • 14 comprehensive tools using flexible action-based patterns
  • -
  • Real-time Logfire monitoring of all tool calls
  • -
  • Compatible with Cursor, Windsurf, Claude Desktop
  • -
  • SSE transport for all clients (stdio via docker exec)
  • -
- - MCP Server Documentation - -
-
-
-
-
-
-

MCP Client

-
-
-

Universal MCP Client - Connect to any SSE-based MCP server from Archon's UI

-
    -
  • Connect to any MCP server using Streamable HTTP (SSE) transport
  • -
  • Interactive tool testing with real-time results
  • -
  • Socket.IO real-time updates for collaborative workflows
  • -
  • Simple configuration - just provide the SSE endpoint URL
  • -
- - MCP Client Documentation - -
-
-
-
- -## Archon MCP Architecture - -```mermaid -%%{init:{ - 'theme':'base', - 'themeVariables': { - 'primaryColor':'#1f2937', - 'primaryTextColor':'#ffffff', - 'primaryBorderColor':'#8b5cf6', - 'lineColor':'#a855f7', - 'textColor':'#ffffff', - 'fontFamily':'Inter', - 'fontSize':'14px', - 'background':'#000000', - 'mainBkg':'#1f2937', - 'secondBkg':'#111827', - 'borderColor':'#8b5cf6', - 'clusterBkg':'#111827', - 'clusterBorder':'#8b5cf6' - } -}}%% -graph TB - subgraph "🤖 External AI Clients" - Cursor["💻 Cursor IDE
connects via stdio"] - Windsurf["🏄 Windsurf IDE
connects via stdio"] - Claude["🧠 Claude Desktop
connects via stdio"] - Other["🔧 Other MCP Clients
connects via SSE"] - end - - subgraph "🏰 Archon Instance" - subgraph "🔌 Universal MCP Client (Port 3737)" - ClientUI["🎨 Client UI
Tool Testing & Management"] - ClientWS["📡 Socket.IO Real-time Updates"] - end - - subgraph "🛠️ Archon MCP Server (Port 8051)" - MCPCore["⚡ MCP Core Server
+ Logfire Monitoring"] - Tools["🛠️ 14 MCP Tools"] - Health["🏥 Health & Session"] - end - - subgraph "🏗️ Backend Services (Port 8080)" - RAGModule["🧠 RAG Module
7 tools"] - ProjectModule["📊 Project Module
5 consolidated tools"] - FastAPI["⚡ FastAPI Backend"] - Supabase["🗄️ Supabase Database
pgvector"] - Logfire["🔥 Logfire Dashboard
Real-time Monitoring"] - end - end - - subgraph "🌐 External MCP Servers" - ExtMCP1["🔧 Brave Search MCP"] - ExtMCP2["📁 Filesystem MCP"] - ExtMCP3["🐙 GitHub MCP"] - end - - %% External clients to Archon MCP Server - Cursor -.->|JSON-RPC
stdio| MCPCore - Windsurf -.->|JSON-RPC
stdio| MCPCore - Claude -.->|JSON-RPC
stdio| MCPCore - Other -.->|SSE| MCPCore - - %% Archon's Universal Client to external servers - ClientUI -.->|JSON-RPC
Various Transports| ExtMCP1 - ClientUI -.->|JSON-RPC
Various Transports| ExtMCP2 - ClientUI -.->|JSON-RPC
Various Transports| ExtMCP3 - - %% Archon's Client can also connect to its own server - ClientUI -.->|JSON-RPC
SSE| MCPCore - - %% Internal connections - MCPCore --> Tools - MCPCore --> Health - Tools --> RAGModule - Tools --> ProjectModule - RAGModule --> FastAPI - ProjectModule --> FastAPI - FastAPI --> Supabase - MCPCore --> Logfire - RAGModule --> Logfire - ProjectModule --> Logfire - ClientWS --> FastAPI -``` - -## Quick Start Guide - - - - -Connect your AI client to Archon's knowledge base: - -1. Start Archon (Docker or local) -2. Configure your AI client (Cursor, Windsurf, etc.) -3. Begin using 14 comprehensive tools - -**For Cursor:** -```json title="MCP Settings" -{ - "mcpServers": { - "archon": { - "uri": "http://localhost:8051/sse" - } - } -} -``` - -**For Claude Code:** -```bash -claude mcp add --transport sse archon http://localhost:8051/sse -``` - -**For Windsurf:** -```json -{ - "mcp.servers": { - "archon": { - "uri": "http://localhost:8051/sse" - } - } -} -``` - -**Available capabilities:** -- RAG queries across your crawled knowledge -- Create and manage tasks/projects -- Search code examples with AI summaries -- Document management with versioning - - - - -Connect to any MCP server from Archon's UI: - -1. Open Archon UI → Navigate to MCP Client tab -2. Add MCP servers (Brave Search, GitHub, Filesystem, etc.) -3. Test tools interactively with real-time results -4. Monitor all connections with Socket.IO updates - -**Connect to Popular MCP Servers:** -- **Brave Search**: Web search capabilities -- **GitHub**: Repository management -- **Filesystem**: Local file operations -- **Archon**: Your own knowledge base -- **Custom**: Any MCP-compatible server - - - - -## 📊 Tool Distribution - - - -**Archon provides 14 comprehensive MCP tools following modern patterns:** - - - -| Category | Tools | Description | Key Features | -|----------|-------|-------------|--------------| -| **🧠 RAG & Knowledge Management** | 7 tools | Search, crawl, and manage knowledge | RAG queries, web crawling, document upload, code search, source management | -| **📊 Project & Task Management** | 5 tools | Complete project lifecycle management | Consolidated action-based patterns for projects, tasks, documents, and versions | -| **🏥 System Health** | 2 tools | Health monitoring and diagnostics | Comprehensive system status and session management | - -### Tool Categories Deep Dive - -
-
-
-
-

🧠 **RAG & Knowledge Tools (7)**

-
-
-
    -
  • `perform_rag_query` - Semantic search
  • -
  • `search_code_examples` - Code-specific search
  • -
  • `crawl_single_page` - Web page indexing
  • -
  • `smart_crawl_url` - Intelligent crawling
  • -
  • `upload_document` - Document processing
  • -
  • `get_available_sources` - Source management
  • -
  • `delete_source` - Source cleanup
  • -
-
-
-
-
-
-
-

📊 **Project Tools (5)**

-
-
-
    -
  • `manage_project` - Create, list, get, delete projects
  • -
  • `manage_task` - Create, list, get, update, delete, archive tasks
  • -
  • `manage_document` - Add, list, get, update, delete documents
  • -
  • `manage_versions` - Create, list, get, restore versions
  • -
  • `get_project_features` - Retrieve project features
  • -
-
-
-
-
-
-
-

🏥 **System & Monitoring (2)**

-
-
-
    -
  • `health_check` - System health diagnostics
  • -
  • `session_info` - Session management info
  • -
  • **Real-time Logfire tracing** for all tools
  • -
  • **Performance metrics** and timing
  • -
  • **Client identification** (Cursor, Windsurf, etc.)
  • -
  • **Error tracking** and debugging
  • -
-
-
-
-
- -## 🔥 Why Choose Archon's MCP Implementation? - -### 🏆 Industry-Leading Features - -
-
-
-
-

⚡ **Performance & Reliability**

-
-
-
    -
  • 🚀 **Sub-second response times** for most queries
  • -
  • 🔄 **Automatic reconnection** and error recovery
  • -
  • 📊 **Comprehensive monitoring** with Logfire
  • -
  • 🏥 **Health checks** and system diagnostics
  • -
  • ⚖️ **Load balancing** for high-volume usage
  • -
-
-
-
-
-
-
-

🛡️ **Security & Scalability**

-
-
-
    -
  • 🔐 **Encrypted credential storage** in Supabase
  • -
  • 🌐 **Multi-transport support** (stdio, SSE)
  • -
  • 🔄 **Real-time synchronization** across clients
  • -
  • 📈 **Horizontal scaling** ready
  • -
  • 🎯 **Rate limiting** and abuse protection
  • -
-
-
-
-
- -### 🔧 Developer Experience - - - -**Archon's MCP implementation prioritizes developer experience with comprehensive tooling, detailed documentation, and real-time debugging capabilities.** - - - -- **📝 Extensive Documentation**: Every tool documented with examples -- **🧪 Interactive Testing**: Test tools directly in the UI -- **🔍 Real-time Debugging**: Logfire traces for every operation -- **⚡ Hot Reloading**: Development-friendly configuration -- **🌐 Universal Compatibility**: Works with any MCP client - -## 📚 Documentation Structure - -### 📖 Detailed Guides - -| Document | Purpose | Audience | -|----------|---------|----------| -| **[🛠️ MCP Server Guide](/mcp-server)** | Complete server setup, configuration, and troubleshooting | Developers using Archon as an MCP server | -| **[🔌 MCP Client Guide](/mcp-client)** | Universal client usage, server connections, and testing | Developers connecting to MCP servers | - -### 🎯 Quick Navigation - -
-
-
-
-

🚀 **Getting Started**

-
-
-
    -
  • [Server Setup](/mcp-server#setup)
  • -
  • [Client Configuration](/mcp-client#configuration)
  • -
  • [First Tool Call](/mcp-server#first-tool-call)
  • -
-
-
-
-
-
-
-

🔧 **Troubleshooting**

-
-
-
    -
  • [Server Issues](/mcp-server#troubleshooting)
  • -
  • [Client Problems](/mcp-client#troubleshooting)
  • -
  • [Environment Variables](/mcp-server#environment-setup)
  • -
-
-
-
-
-
-
-

📊 **Advanced Usage**

-
-
-
    -
  • [Tool Development](/mcp-server#custom-tools)
  • -
  • [Performance Tuning](/mcp-server#performance)
  • -
  • [Monitoring Setup](/mcp-server#monitoring)
  • -
-
-
-
-
- -## 🎉 Ready to Get Started? - -Choose your path based on how you want to use Archon's MCP capabilities: - - - - -**You want to connect external AI clients (Cursor, Windsurf, etc.) to Archon's knowledge base** - -👉 **[Start with MCP Server Documentation](/mcp-server)** - - - - -**You want to use Archon's UI to connect to and test various MCP servers** - -👉 **[Start with MCP Client Documentation](/mcp-client)** - - - - -**You want to use Archon as both a server and client for maximum functionality** - -👉 **Start with [MCP Server](/mcp-server), then [MCP Client](/mcp-client)** - - - - ---- - -
-

🔥 Ready to experience the most powerful MCP implementation available?

-

Join thousands of developers already using Archon's MCP tools to supercharge their AI workflows!

-
\ No newline at end of file diff --git a/docs/docs/mcp-server.mdx b/docs/docs/mcp-server.mdx deleted file mode 100644 index 944dde64..00000000 --- a/docs/docs/mcp-server.mdx +++ /dev/null @@ -1,176 +0,0 @@ ---- -title: MCP Server -sidebar_position: 6 ---- - -# MCP Server - -The MCP service provides a Model Context Protocol interface for AI clients to access Archon's functionality via HTTP. - -## Architecture - -MCP is a **protocol adapter** that: -1. Receives MCP tool calls from AI clients -2. Translates them to HTTP requests to the Server API -3. Returns formatted responses to AI clients - -``` -AI Client (Cursor/Windsurf) → MCP Protocol → MCP Server → HTTP → Server API -``` - -## Available Tools - -### RAG Tools (7) - -| Tool | Purpose | Server Endpoint | -|------|---------|----------------| -| `perform_rag_query` | Semantic search | `POST /api/rag/query` | -| `search_code_examples` | Code search | `POST /api/rag/code-search` | -| `crawl_single_page` | Crawl one URL | `POST /api/knowledge-items/crawl` | -| `smart_crawl_url` | Smart crawling | `POST /api/knowledge-items/crawl` | -| `get_available_sources` | List sources | `GET /api/rag/sources` | -| `upload_document` | Upload docs | `POST /api/documents/upload` | -| `delete_source` | Delete source | `DELETE /api/sources/{id}` | - -### Project Tools (5) - -| Tool | Actions | Description | -|------|---------|-------------| -| `manage_project` | create, list, get, delete | Project CRUD operations | -| `manage_task` | create, list, get, update, delete, archive | Task management | -| `manage_document` | add, list, get, update, delete | Document management | -| `manage_versions` | create, list, get, restore | Version control | -| `get_project_features` | - | Get project features | - -### System Tools (2) - -| Tool | Purpose | -|------|---------| -| `health_check` | System health status | -| `session_info` | Active session info | - -## Implementation Pattern - -All MCP tools follow the same pattern: - -```python -@mcp.tool() -async def delete_source(ctx: Context, source: str) -> str: - """Delete a source via HTTP call to Server API""" - client = get_mcp_service_client() - async with httpx.AsyncClient() as http: - response = await http.delete( - f"{client.api_url}/api/sources/{source}", - headers=client._get_headers() - ) - return json.dumps(response.json()) -``` - -## Configuration - -### Environment Variables - -```bash -# Server connection -API_BASE_URL=http://archon-server:8080 -AGENTS_BASE_URL=http://archon-agents:8052 - -# Authentication -MCP_SERVICE_KEY=your-service-key - -# Unified Logging Configuration (Optional) -LOGFIRE_ENABLED=false # true=Logfire logging, false=standard logging -LOGFIRE_TOKEN=your-logfire-token # Only required when LOGFIRE_ENABLED=true -``` - -### Docker Service - -```yaml -archon-mcp: - build: ./python - ports: - - "8051:8000" - environment: - - API_BASE_URL=http://archon-server:8080 - command: ["python", "-m", "src.mcp.mcp_server"] -``` - -## Client Configuration - -Archon MCP server uses **SSE (Server-Sent Events) transport only**. - -### Cursor IDE - -Add to MCP settings: - -```json -{ - "mcpServers": { - "archon": { - "uri": "http://localhost:8051/sse" - } - } -} -``` - -### Claude Code - -```bash -claude mcp add --transport sse archon http://localhost:8051/sse -``` - -### Windsurf IDE - -Add to settings: - -```json -{ - "mcp.servers": { - "archon": { - "uri": "http://localhost:8051/sse" - } - } -} -``` - -## Tool Usage Examples - -### RAG Query -```typescript -const results = await mcp.perform_rag_query({ - query: "How to implement authentication", - source: "fastapi.tiangolo.com", - match_count: 5 -}); -``` - -### Create Project -```typescript -const project = await mcp.manage_project({ - action: "create", - title: "New AI Project", - github_repo: "https://github.com/user/repo" -}); -``` - -### Delete Source -```typescript -const result = await mcp.delete_source({ - source: "outdated-docs.com" -}); -``` - -## Monitoring - -All MCP operations are tracked in Logfire: -- Tool invocation metrics -- HTTP request/response times -- Error rates and debugging -- Session management - -## Important Notes - -- **No business logic** - MCP only translates protocols -- **HTTP-only communication** - No direct database access -- **Stateless operations** - Each tool call is independent -- **Full observability** - Every operation is logged \ No newline at end of file diff --git a/docs/docs/mcp-tools.mdx b/docs/docs/mcp-tools.mdx deleted file mode 100644 index 524fad20..00000000 --- a/docs/docs/mcp-tools.mdx +++ /dev/null @@ -1,499 +0,0 @@ ---- -title: MCP Tools Reference -sidebar_position: 3 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# 🛠️ MCP Tools Reference - -
-
-

- Complete reference for all 14 MCP tools available in Archon, with parameters, return types, and usage examples. -

-
-
- - - -Archon provides 14 MCP tools organized into three categories: -- **🧠 RAG & Knowledge Management** (7 tools) -- **📊 Project & Task Management** (5 tools) -- **🏥 System & Monitoring** (2 tools) - -All tools communicate with the Server service via HTTP APIs. - - - -## 🧠 RAG & Knowledge Management Tools - -### perform_rag_query - -**Purpose**: Perform semantic search across your knowledge base - -**Parameters**: -| Name | Type | Required | Description | -|------|------|----------|-------------| -| `query` | `string` | ✅ | Search query text | -| `source` | `string` | ❌ | Filter by source domain | -| `match_count` | `integer` | ❌ | Max results (default: 5) | - -**Returns**: -```json -{ - "results": [ - { - "id": 123, - "content": "Matched content...", - "url": "https://source.com/page", - "title": "Page Title", - "similarity_score": 0.92, - "metadata": { - "source_id": "source.com", - "headers": ["Section 1", "Section 2"] - } - } - ], - "query": "original query", - "total_results": 5 -} -``` - -**Example Usage**: -``` -"Search for React hooks documentation" - -Tool call: -perform_rag_query( - query="React hooks useState useEffect", - source="react-docs", - match_count=10 -) -``` - -### search_code_examples - -**Purpose**: Search for code examples with AI-generated summaries - -**Parameters**: -| Name | Type | Required | Description | -|------|------|----------|-------------| -| `query` | `string` | ✅ | Code search query | -| `source_id` | `string` | ❌ | Filter by source | -| `match_count` | `integer` | ❌ | Max results (default: 5) | - -**Returns**: -```json -{ - "results": [ - { - "id": 456, - "code": "const [state, setState] = useState(initialValue);", - "language": "javascript", - "file_path": "hooks/useState.js", - "summary": "React useState hook initialization", - "url": "https://source.com/examples", - "similarity_score": 0.89 - } - ], - "total_results": 3 -} -``` - -### crawl_single_page - -**Purpose**: Crawl and index a single web page - -**Parameters**: -| Name | Type | Required | Description | -|------|------|----------|-------------| -| `url` | `string` | ✅ | URL to crawl | -| `chunk_size` | `integer` | ❌ | Chunk size (default: 5000) | - -**Returns**: -```json -{ - "success": true, - "url": "https://example.com/page", - "title": "Page Title", - "chunks_created": 12, - "content_length": 45000, - "metadata": { - "crawled_at": "2024-01-15T10:30:00Z", - "processing_time": 2.5 - } -} -``` - -### smart_crawl_url - -**Purpose**: Intelligently crawl based on URL type (sitemap, text file, or webpage) - -**Parameters**: -| Name | Type | Required | Description | -|------|------|----------|-------------| -| `url` | `string` | ✅ | URL to crawl | -| `max_depth` | `integer` | ❌ | Max crawl depth (default: 3) | -| `chunk_size` | `integer` | ❌ | Chunk size (default: 5000) | - -**Returns**: -```json -{ - "success": true, - "crawl_type": "sitemap", - "urls_processed": 150, - "chunks_created": 1250, - "errors": [], - "duration": 180.5, - "source_id": "docs.example.com" -} -``` - -**Crawl Types**: -- **Sitemap**: Automatically detects and processes sitemap.xml -- **Text File**: Direct processing of .txt files -- **Webpage**: Recursive crawling following links - -### get_available_sources - -**Purpose**: List all indexed sources in the knowledge base - -**Parameters**: None - -**Returns**: -```json -{ - "sources": [ - { - "source_id": "react-docs", - "title": "React Documentation", - "description": "Official React documentation", - "url": "https://react.dev", - "document_count": 450, - "last_updated": "2024-01-14T08:00:00Z", - "tags": ["react", "javascript", "frontend"] - } - ], - "total_count": 12 -} -``` - -### upload_document - -**Purpose**: Upload and process documents (PDF, Word, Markdown, Text) - -**Parameters**: -| Name | Type | Required | Description | -|------|------|----------|-------------| -| `filename` | `string` | ✅ | Name of the document | -| `content` | `string` | ✅ | Document content (base64 for binary) | -| `doc_type` | `string` | ❌ | Type: general/technical/business | - -**Returns**: -```json -{ - "success": true, - "document": { - "id": 789, - "filename": "architecture.pdf", - "doc_type": "technical", - "chunks_created": 45, - "processing_time": 5.2, - "file_size": 2048576 - } -} -``` - -### delete_source - -**Purpose**: Remove all content from a specific source - -**Parameters**: -| Name | Type | Required | Description | -|------|------|----------|-------------| -| `source` | `string` | ✅ | Source identifier to delete | - -**Returns**: -```json -{ - "success": true, - "source": "old-docs.com", - "documents_deleted": 125, - "chunks_deleted": 890, - "code_examples_deleted": 45 -} -``` - -## 📊 Project & Task Management Tools - -### manage_project - -**Purpose**: Unified project management with action-based patterns - -**Parameters**: -| Name | Type | Required | Description | -|------|------|----------|-------------| -| `action` | `string` | ✅ | Action: create/list/get/delete | -| `project_id` | `string` | Conditional | Required for get/delete | -| `title` | `string` | Conditional | Required for create | -| `prd` | `object` | ❌ | Product requirements document | -| `github_repo` | `string` | ❌ | GitHub repository URL | - -**Actions & Returns**: - - - - -```json -// Request -{ - "action": "create", - "title": "Authentication System", - "github_repo": "https://github.com/team/auth" -} - -// Response -{ - "success": true, - "project": { - "id": "550e8400-e29b-41d4-a716-446655440000", - "title": "Authentication System", - "github_repo": "https://github.com/team/auth", - "created_at": "2024-01-15T10:00:00Z" - } -} -``` - - - - -```json -// Request -{ - "action": "list" -} - -// Response -{ - "success": true, - "projects": [ - { - "id": "550e8400-e29b-41d4-a716-446655440000", - "title": "Authentication System", - "updated_at": "2024-01-15T10:00:00Z" - } - ], - "total_count": 5 -} -``` - - - - -```json -// Request -{ - "action": "get", - "project_id": "550e8400-e29b-41d4-a716-446655440000" -} - -// Response -{ - "success": true, - "project": { - "id": "550e8400-e29b-41d4-a716-446655440000", - "title": "Authentication System", - "prd": {...}, - "features": [...], - "docs": [...] - } -} -``` - - - - -```json -// Request -{ - "action": "delete", - "project_id": "550e8400-e29b-41d4-a716-446655440000" -} - -// Response -{ - "success": true, - "message": "Project deleted successfully" -} -``` - - - - -### manage_task - -**Purpose**: Complete task lifecycle management - -**Parameters**: -| Name | Type | Required | Description | -|------|------|----------|-------------| -| `action` | `string` | ✅ | Action: create/list/get/update/delete/archive | -| `task_id` | `string` | Conditional | Required for get/update/delete/archive | -| `project_id` | `string` | Conditional | Required for create, optional for list | -| `filter_by` | `string` | ❌ | Filter: status/project | -| `filter_value` | `string` | ❌ | Value for filter | -| `title` | `string` | Conditional | Required for create | -| `description` | `string` | ❌ | Task description | -| `assignee` | `string` | ❌ | User/Archon/AI IDE Agent | -| `update_fields` | `object` | Conditional | Fields to update | - -**Example Task Creation**: -```json -{ - "action": "create", - "project_id": "550e8400-e29b-41d4-a716-446655440000", - "title": "Implement login endpoint", - "description": "Create POST /api/auth/login endpoint", - "assignee": "AI IDE Agent", - "sources": [ - {"name": "Auth Spec", "url": "https://docs/auth"} - ] -} -``` - -### manage_document - -**Purpose**: Document management within projects - -**Parameters**: -| Name | Type | Required | Description | -|------|------|----------|-------------| -| `action` | `string` | ✅ | Action: add/list/get/update/delete | -| `project_id` | `string` | ✅ | Project UUID | -| `doc_id` | `string` | Conditional | Required for get/update/delete | -| `document_type` | `string` | Conditional | Required for add | -| `title` | `string` | Conditional | Required for add | -| `content` | `object` | ❌ | Document content | -| `metadata` | `object` | ❌ | Tags, status, version | - -### manage_versions - -**Purpose**: Document version control - -**Parameters**: -| Name | Type | Required | Description | -|------|------|----------|-------------| -| `action` | `string` | ✅ | Action: create/list/get/restore | -| `project_id` | `string` | ✅ | Project UUID | -| `field_name` | `string` | ✅ | Field to version | -| `version_number` | `integer` | Conditional | For get/restore | -| `content` | `object` | Conditional | For create | -| `change_summary` | `string` | ❌ | Version description | - -### get_project_features - -**Purpose**: Retrieve features from a project - -**Parameters**: -| Name | Type | Required | Description | -|------|------|----------|-------------| -| `project_id` | `string` | ✅ | Project UUID | - -**Returns**: -```json -{ - "success": true, - "features": [ - { - "id": "feat-001", - "name": "User Authentication", - "description": "Login/logout functionality", - "priority": "high", - "tasks": ["task-001", "task-002"] - } - ] -} -``` - -## 🏥 System & Monitoring Tools - -### health_check - -**Purpose**: Check system health and service status - -**Parameters**: None - -**Returns**: -```json -{ - "status": "healthy", - "services": { - "server": "running", - "database": "connected", - "mcp": "active" - }, - "tools_available": 14, - "version": "2.0.0", - "uptime": "5:23:45", - "last_error": null -} -``` - -### session_info - -**Purpose**: Get MCP session information - -**Parameters**: None - -**Returns**: -```json -{ - "current_session": { - "id": "abc-123-def", - "created_at": "2024-01-15T10:00:00Z", - "last_activity": "2024-01-15T10:45:00Z", - "client_type": "cursor" - }, - "active_sessions": 3, - "total_tool_calls": 1250, - "uptime_seconds": 19425 -} -``` - -## 🎯 Best Practices - -### Error Handling -All tools return consistent error responses: -```json -{ - "success": false, - "error": "Error message", - "error_type": "ValidationError", - "details": { - "field": "url", - "message": "Invalid URL format" - } -} -``` - -### Performance Tips -1. **Use source filters** when searching to improve speed -2. **Batch operations** when possible (e.g., multiple task creates) -3. **Set appropriate chunk_size** for your content type -4. **Use match_count** wisely - more results = slower - -### Tool Selection -- Use `perform_rag_query` for general searches -- Use `search_code_examples` specifically for code -- Use `smart_crawl_url` for unknown URL types -- Use `manage_*` tools for CRUD operations - -## 🔗 Related Documentation - -- [MCP Server Setup](./mcp-server) - Configure MCP server -- [MCP Overview](./mcp-overview) - Architecture overview -- [API Reference](./api-reference) - REST API details -- [Agent Documentation](./agents-overview) - How agents use tools \ No newline at end of file diff --git a/docs/docs/projects-features.mdx b/docs/docs/projects-features.mdx deleted file mode 100644 index b5d82ba4..00000000 --- a/docs/docs/projects-features.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: Archon Projects Features -sidebar_position: 2 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# 📊 Archon Projects: Complete Feature Reference - -
-
-

- Everything you can do with Archon Projects - from simple task tracking to complex project orchestration with AI assistance. -

-
-
- -## 🎯 Core Project Management Features - -### Project Organization -- **Organized Structure**: Projects contain tasks, documents, and features -- **GitHub Integration**: Link projects to repositories for seamless context -- **PRD Management**: Store and version Product Requirements Documents -- **Feature Tracking**: Organize work by features with associated tasks - -### Task Management -- **Status Workflow**: Todo → Doing → Review → Done -- **Task Organization**: Group related tasks together -- **Task Assignment**: Assign to User, Archon, or AI IDE Agent -- **Priority Levels**: High, Medium, Low priority organization -- **Archive Support**: Soft delete with recovery options - -### Document Management -- **Multiple Document Types**: PRDs, specs, notes, documentation -- **Version Control**: Automatic versioning with restore capabilities -- **Rich Text Editing**: BlockNote editor for formatted content -- **Metadata Tracking**: Tags, status, author information - -## 🤖 AI Integration Features - -### MCP Tools Available - -
-
-
-
-

Project Tools

-
-
-
    -
  • manage_project - Create, list, get, delete projects
  • -
  • manage_task - Full task lifecycle management
  • -
  • manage_document - Document CRUD operations
  • -
  • manage_versions - Version control operations
  • -
  • get_project_features - Retrieve project features
  • -
-
-
-
-
-
-
-

AI Capabilities

-
-
-
    -
  • AI can create projects from requirements
  • -
  • Automatic task breakdown from descriptions
  • -
  • Smart task prioritization
  • -
  • Context-aware task suggestions
  • -
  • Automated status updates
  • -
-
-
-
-
- -## 🎨 User Interface Features - -### Views Available -1. **Board View**: Kanban-style task organization -2. **Table View**: Spreadsheet-like task management -3. **Project Dashboard**: Overview with tabs for Docs, Features, Data - -### Interactive Elements -- **Drag & Drop**: Move tasks between status columns -- **Quick Actions**: Single-click status updates -- **Real-time Updates**: Socket.IO powered live synchronization -- **Search & Filter**: Find tasks by status, assignee, or text - -## 🔧 Technical Capabilities - -### Backend Services -- **Project Service**: Core project operations -- **Task Service**: Task management logic -- **Document Service**: Document handling -- **Versioning Service**: Version control system - -### Database Schema -- **Projects Table**: Stores project metadata and JSONB fields -- **Tasks Table**: Task storage with project relationships -- **Project Versions**: Complete version history - -### API Endpoints -- `POST /api/projects` - Create new project -- `GET /api/projects` - List all projects -- `GET /api/projects/:id` - Get project details -- `DELETE /api/projects/:id` - Delete project -- `GET /api/tasks` - List tasks with filters -- `POST /api/tasks` - Create new task -- `PATCH /api/tasks/:id` - Update task -- `POST /api/tasks/:id/archive` - Archive task - -## 🚀 Advanced Features - -### Workflow Automation -- **Smart Task Creation**: AI analyzes requirements and creates tasks -- **Automatic Linking**: Connect tasks to code examples and documentation -- **Progress Tracking**: Real-time progress updates via Socket.IO - -### Integration Points -- **Knowledge Base**: Link tasks to documentation -- **Code Examples**: Attach relevant code snippets -- **Source References**: Connect to crawled content - -### Collaboration Features -- **Multi-Agent Support**: Multiple AI assistants can work on tasks -- **Activity Tracking**: See who (human or AI) did what -- **Comment System**: Discussion threads on tasks - -## 📊 Usage Examples - -### Creating a Project with AI -``` -AI Assistant: "Create a new project for building a user authentication system" -``` -The AI will: -1. Create the project with appropriate metadata -2. Generate initial tasks based on common patterns -3. Set up a basic PRD structure -4. Link to relevant documentation - -### Task Breakdown -``` -AI Assistant: "Break down the 'Implement login form' task into smaller tasks" -``` -The AI will create: -- Design login UI component -- Implement form validation -- Add authentication API call -- Handle error states -- Write unit tests - -### Smart Status Updates -``` -AI Assistant: "Update all testing tasks to 'In Progress'" -``` -The AI will: -- Find all tasks with "test" in the title -- Update their status appropriately -- Add notes about the changes - -## 🔗 Related Documentation - -- [Projects Overview](./projects-overview) - High-level introduction -- [API Reference](./api-reference#project-management-api) - Detailed API documentation -- [MCP Tools Reference](./mcp-tools#project-tools) - MCP tool specifications -- [Task Agent Documentation](./agent-task) - How the AI manages tasks \ No newline at end of file diff --git a/docs/docs/projects-overview.mdx b/docs/docs/projects-overview.mdx deleted file mode 100644 index 0d615fc8..00000000 --- a/docs/docs/projects-overview.mdx +++ /dev/null @@ -1,786 +0,0 @@ ---- -title: Archon Projects Overview -sidebar_position: 1 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# 📊 Archon Projects: AI-Powered Project Management - -
-
-

- **Manage your development projects** with AI assistance. Track tasks, organize documentation, and connect your entire workflow with Cursor, Windsurf, and other AI coding assistants. -

-
-
- -Archon Projects brings intelligent project management to your AI development workflow. Your AI assistants can understand project context, create and update tasks, manage documentation, and help you stay organized while you code. - -## 🎯 Overview - -The Archon task management system provides: - -- **Project Organization**: Structured project management with PRDs, features, and documentation -- **Task Organization**: Organize and group related tasks -- **Status Tracking**: Todo, Doing, Review, Done status management -- **MCP Integration**: AI agents can create, update, and query tasks autonomously -- **Reference Management**: Link tasks to code examples and documentation sources -- **GitHub Integration**: Connect projects to repositories for context - -## 🏗️ System Architecture - -```mermaid -%%{init:{ - 'theme':'base', - 'themeVariables': { - 'primaryColor':'#1f2937', - 'primaryTextColor':'#ffffff', - 'primaryBorderColor':'#8b5cf6', - 'lineColor':'#a855f7', - 'textColor':'#ffffff', - 'fontFamily':'Inter', - 'fontSize':'14px', - 'background':'#000000', - 'mainBkg':'#1f2937', - 'secondBkg':'#111827', - 'borderColor':'#8b5cf6', - 'clusterBkg':'#111827', - 'clusterBorder':'#8b5cf6' - } -}}%% -graph TB - subgraph "Frontend (React)" - TaskUI(Project Management UI) - ProjectUI(Project Dashboard) - end - - subgraph "Backend API" - ProjectAPI["Projects API
Service Layer"] - TaskAPI["Task Management
Endpoints"] - MCPTools["MCP Project Tools
5 consolidated tools"] - end - - subgraph "Service Layer" - ProjectService["ProjectService
Project operations"] - TaskService["TaskService
Task operations"] - DocumentService["DocumentService
Document operations"] - VersioningService["VersioningService
Version control"] - end - - subgraph "Database (Supabase)" - ProjectsTable(("projects table")) - TasksTable(("tasks table")) - VersionsTable(("document_versions")) - end - - subgraph "AI Clients" - Cursor(Cursor IDE) - Windsurf(Windsurf IDE) - Claude(Claude Code) - end - - TaskUI --> ProjectAPI - ProjectUI --> ProjectAPI - - ProjectAPI --> ProjectService - ProjectAPI --> TaskService - ProjectAPI --> DocumentService - - MCPTools --> ProjectService - MCPTools --> TaskService - MCPTools --> DocumentService - MCPTools --> VersioningService - - ProjectService --> ProjectsTable - TaskService --> TasksTable - DocumentService --> ProjectsTable - VersioningService --> VersionsTable - - Cursor --> MCPTools - Windsurf --> MCPTools - Claude --> MCPTools -``` - -## 📊 Data Structure - -Archon uses a simple but flexible data structure: - -- **Projects**: Main containers with title, description, PRD, features, and GitHub integration -- **Tasks**: Organized under projects with logical grouping -- **Documents**: JSONB-based document storage for PRDs, specs, and other project docs -- **Status Tracking**: Simple workflow - Todo → Doing → Review → Done - -## 🚀 Getting Started - -### Creating Your First Project - -#### Via Web Interface - -1. **Open Archon**: Navigate to http://localhost:3737 -2. **Go to Projects**: Click the "Projects" tab in the navigation -3. **Create Project**: Click "New Project" -4. **Fill Details**: - - **Title**: "My Documentation Project" - - **Description**: Brief project overview - - **GitHub Repo**: (optional) Repository URL -5. **Save Project**: Click "Create" - -#### Via API - -```bash -curl -X POST "http://localhost:8080/api/projects" \ - -H "Content-Type: application/json" \ - -d '{ - "title": "API Documentation Overhaul", - "prd": { - "overview": "Improve API documentation for better developer experience", - "goals": [ - "Add comprehensive examples", - "Improve navigation structure", - "Add interactive API explorer" - ], - "success_criteria": [ - "Reduce support tickets by 30%", - "Increase API adoption by 50%" - ] - }, - "github_repo": "https://github.com/company/api-docs" - }' -``` - -#### Via MCP (AI Agent) - -AI agents can autonomously create projects: - -``` -User: "I need to start a new project to improve our API documentation" -AI: [Uses create_project MCP tool] - "I've created a new project 'API Documentation Improvement' with a comprehensive PRD..." -``` - -### Creating Tasks - -#### Via Web Interface - -1. **Select Project**: Choose your project from the project list -2. **Add Task**: Click "New Task" -3. **Fill Details**: - - **Title**: Clear, actionable task name - - **Description**: Detailed requirements - - **Status**: Initial status (usually "todo") - - **Assignee**: Choose from User, Archon, or AI IDE Agent - - **Sources**: Add reference documentation - - **Code Examples**: Add relevant code snippets -4. **Save Task**: Click "Create" - -#### Via API - -```bash -curl -X POST "http://localhost:8080/api/tasks" \ - -H "Content-Type: application/json" \ - -d '{ - "project_id": "550e8400-e29b-41d4-a716-446655440000", - "title": "Create authentication examples", - "description": "Write comprehensive examples showing how to implement JWT authentication with our API, including token generation, validation, and error handling.", - "assignee": "Archon", - "sources": [ - { - "name": "JWT.io Introduction", - "url": "https://jwt.io/introduction/", - "description": "Basic JWT concepts and structure" - }, - { - "name": "FastAPI Security", - "url": "https://fastapi.tiangolo.com/tutorial/security/", - "description": "FastAPI authentication patterns" - } - ], - "code_examples": [ - { - "language": "python", - "description": "JWT token generation", - "code": "import jwt\nfrom datetime import datetime, timedelta\n\ndef create_token(user_id: str) -> str:\n payload = {\n 'user_id': user_id,\n 'exp': datetime.utcnow() + timedelta(hours=24)\n }\n return jwt.encode(payload, SECRET_KEY, algorithm='HS256')" - } - ], - "status": "todo" - }' -``` - -## 🔧 Task Management Features - -### Task Organization - -Break down complex work into manageable tasks: - - - - -```bash -# Create main task -curl -X POST "http://localhost:8080/api/tasks" \ - -H "Content-Type: application/json" \ - -d '{ - "project_id": "550e8400-e29b-41d4-a716-446655440000", - "title": "Implement user authentication system", - "description": "Complete authentication system with JWT tokens", - "status": "todo" - }' - -# Create related tasks -curl -X POST "http://localhost:8080/api/tasks" \ - -H "Content-Type: application/json" \ - -d '{ - "project_id": "550e8400-e29b-41d4-a716-446655440000", - "title": "Design JWT token structure", - "description": "Define token payload and expiration strategy", - "status": "todo", - "feature": "Authentication" - }' -``` - - - - -``` -User: "Break down the authentication task into smaller pieces" -AI: [Uses create_task MCP tool multiple times] - "I've broken down your authentication task into 5 related tasks: - 1. Design JWT token structure - 2. Implement token generation - 3. Create middleware for validation - 4. Add authentication endpoints - 5. Write comprehensive tests" -``` - - - - -### Status Management - -Update task status as work progresses: - - - - -```bash -# Update task status -curl -X PATCH "http://localhost:8080/api/tasks/task-uuid-here" \ - -H "Content-Type: application/json" \ - -d '{ - "status": "doing", - "description": "Started implementing JWT token generation. Updated payload structure to include user roles and permissions." - }' -``` - - - - -``` -User: "I finished implementing the authentication middleware" -AI: [Uses update_task_status MCP tool] - "Great! I've updated the authentication middleware task to 'done' and added your completion notes." -``` - - - - -#### Status Workflow - -```mermaid -%%{init:{ - 'theme':'base', - 'themeVariables': { - 'primaryColor':'#1f2937', - 'primaryTextColor':'#ffffff', - 'primaryBorderColor':'#8b5cf6', - 'lineColor':'#a855f7', - 'textColor':'#ffffff', - 'fontFamily':'Inter', - 'fontSize':'14px', - 'background':'#000000', - 'mainBkg':'#1f2937', - 'secondBkg':'#111827', - 'borderColor':'#8b5cf6' - } -}}%% -flowchart TD - A["Task Created"] --> B["todo"] - B --> C{"Dependencies Met?"} - C -->|Yes| D["doing"] - C -->|No| E["review"] - E --> F{"Dependencies Resolved?"} - F -->|Yes| D - F -->|No| E - D --> G{"Work Complete?"} - G -->|Yes| H["done"] - G -->|No| I{"Blocked?"} - I -->|Yes| E - I -->|No| D -``` - -### Task Filtering and Queries - -#### Get Tasks by Status - -```bash -# Get all "doing" tasks -curl "http://localhost:8080/api/tasks?status=doing" - -# Get all tasks for a project -curl "http://localhost:8080/api/tasks?project_id=550e8400-e29b-41d4-a716-446655440000" - -# Get tasks by feature -curl "http://localhost:8080/api/tasks?project_id=550e8400-e29b-41d4-a716-446655440000&feature=Authentication" -``` - -#### Advanced Filtering - -```bash -# Get tasks by status with project filter -curl "http://localhost:8080/api/tasks?project_id=550e8400-e29b-41d4-a716-446655440000&status=review" -``` - -## 🤖 MCP Integration - -AI coding assistants can autonomously manage tasks through MCP tools: - -### Available MCP Tools (5 Consolidated Tools) - - - Following MCP best practices, we've consolidated 22 individual tools into 5 flexible, action-based tools. This provides better performance, easier maintenance, and more intuitive usage for AI agents. - - -#### Consolidated Project & Task Tools - -| Tool | Actions | Description | Parameters | -|------|---------|-------------|------------| -| **`manage_project`** | `create`, `list`, `get`, `delete` | Complete project lifecycle | `action`, `project_id`, `title`, `prd`, `github_repo` | -| **`manage_task`** | `create`, `list`, `get`, `update`, `delete`, `archive` | All task operations | `action`, `task_id`, `project_id`, `filter_by`, `filter_value`, `update_fields` | -| **`manage_document`** | `add`, `list`, `get`, `update`, `delete` | Document management *(Not yet implemented)* | `action`, `project_id`, `doc_id`, `document_type`, `title`, `content`, `metadata` | -| **`manage_versions`** | `create`, `list`, `get`, `restore` | Version control *(Not yet implemented)* | `action`, `project_id`, `field_name`, `version_number`, `content` | -| **`get_project_features`** | *(query only)* | Retrieve features | `project_id` | - - - The `manage_document` and `manage_versions` tools are defined in the MCP module but require corresponding Server API endpoints to be implemented. Currently, these tools will return "not yet implemented" errors. The other tools (`manage_project`, `manage_task`, and `get_project_features`) are fully functional. - - -#### Action Patterns - - - - -```python -# Create a new project -result = await manage_project( - action="create", - title="AI Documentation System", - prd={"overview": "Automated docs generation", "goals": ["Generate API docs", "Maintain accuracy"]}, - github_repo="https://github.com/user/ai-docs" -) - -# List all projects -projects = await manage_project(action="list") - -# Get specific project -project = await manage_project( - action="get", - project_id="550e8400-e29b-41d4-a716-446655440000" -) -``` - - - - -```python -# Create a task -task = await manage_task( - action="create", - project_id="project-uuid", - title="Implement JWT authentication", - description="Add JWT-based auth to all API endpoints", - assignee="Archon" -) - -# Update task status -await manage_task( - action="update", - task_id="task-uuid", - update_fields={"status": "done", "description": "Completed with tests"} -) - -# List tasks by status -tasks = await manage_task( - action="list", - filter_by="status", - filter_value="doing", - project_id="project-uuid" -) - -# Get tasks by feature -tasks = await manage_task( - action="list", - project_id="project-uuid", - feature="Authentication" -) -``` - - - - -```python -# Add a document (MUST use clean MCP format) -doc = await manage_document( - action="add", - project_id="project-uuid", - document_type="prd", - title="System Architecture Document", - content={ - "project_overview": { - "description": "Microservices architecture", - "target_completion": "Q2 2024" - }, - "architecture": { - "frontend": ["React", "TypeScript"], - "backend": ["FastAPI", "PostgreSQL"] - } - }, - metadata={ - "tags": ["architecture", "technical"], - "author": "System Architect" - } -) - -# Update document -await manage_document( - action="update", - project_id="project-uuid", - doc_id="doc-uuid", - content={ - "project_overview": { - "description": "Updated microservices architecture with event sourcing" - } - } -) -``` - - - - - - When using `manage_document` with `add` or `update` actions, the `content` field MUST follow the structured MCP format. The UI will automatically convert this to editable blocks. Do not use flat text or unstructured data. - - -### AI-Driven Task Management Examples - -#### Scenario 1: Project Planning - -**User Prompt**: -``` -I need to plan a new feature for user profile management. -Create a project and break it down into tasks. -``` - -**AI Actions**: -1. `manage_project` with `action="create"` - Creates "User Profile Management" project with comprehensive PRD -2. `perform_rag_query` - Finds existing user management patterns in knowledge base -3. `manage_task` with `action="create"` (multiple calls) - Creates structured task breakdown: - - Design user profile schema - - Implement profile CRUD endpoints - - Add profile validation - - Create profile UI components - - Write integration tests -4. Links relevant documentation in task sources - -#### Scenario 2: Progress Tracking - -**User Prompt**: -``` -I just finished implementing the user registration endpoint. -Update my tasks and suggest what to work on next. -``` - -**AI Actions**: -1. `manage_task` with `action="list"` and `filter_by="project"` - Gets current project tasks -2. `manage_task` with `filter_by="status"` and `filter_value="doing"` - Finds active tasks -3. `manage_task` with `action="update"` - Marks registration task as "done" -4. `manage_task` with `filter_by="status"` and `filter_value="todo"` - Finds next tasks -5. Provides recommendations for next priority tasks - -#### Scenario 3: Code Review Integration - -**User Prompt**: -``` -Review this authentication code and create tasks for any improvements needed: -[code snippet] -``` - -**AI Actions**: -1. `perform_rag_query` - Finds coding standards and security patterns -2. Analyzes code against documented best practices -3. `manage_task` with `action="create"` - Creates improvement tasks: - - Add input validation - - Implement rate limiting - - Add comprehensive error handling - - Improve test coverage -4. `manage_document` with `action="add"` - Documents findings -5. Sets appropriate priorities and dependencies - -## 📊 Project Management Patterns - -### PRD (Product Requirements Document) Structure - -When creating projects, Archon automatically generates a structured PRD: - -```json -{ - "prd": { - "overview": "Clear description of what we're building and why", - "problem_statement": "What problem are we solving?", - "goals": [ - "Specific, measurable objectives", - "User experience improvements", - "Technical achievements" - ], - "success_criteria": [ - "Quantifiable success metrics", - "User satisfaction targets", - "Performance benchmarks" - ], - "scope": { - "in_scope": ["Features to include"], - "out_of_scope": ["Features explicitly excluded"] - }, - "technical_requirements": [ - "Performance requirements", - "Security requirements", - "Scalability requirements" - ], - "stakeholders": [ - { - "name": "Product Manager", - "role": "Requirements owner", - "contact": "pm@company.com" - } - ] - } -} -``` - -### Document Management - -Projects can contain various types of documents: - -- **PRD (Product Requirements Document)**: Project overview, goals, and technical requirements -- **Technical Specs**: Detailed implementation plans and architecture -- **Feature Plans**: Feature breakdowns and user stories -- **Meeting Notes**: Team discussions and decisions - -Documents are stored in a structured format that works well with AI agents while providing rich editing through the BlockNote editor. - -### Feature Tracking - -Track feature development progress: - -```json -{ - "features": [ - { - "name": "User Authentication", - "status": "done", - "priority": "high", - "effort_estimate": "5 days", - "actual_effort": "4 days", - "dependencies": [], - "tasks": [ - "660e8400-e29b-41d4-a716-446655440001", - "660e8400-e29b-41d4-a716-446655440002" - ] - }, - { - "name": "User Profile Management", - "status": "in_progress", - "priority": "medium", - "effort_estimate": "8 days", - "dependencies": ["User Authentication"], - "blockers": [] - } - ] -} -``` - -## 🎨 Frontend Integration - -The React frontend (`ProjectPage.tsx` - 593 lines) provides intuitive task management interfaces: - -### Project Dashboard Features - -- **Project Overview**: Title, description, GitHub integration -- **Task Summary**: Status breakdown, progress indicators -- **Document Management**: PRD viewer, document creation -- **Feature Tracking**: Feature status and dependencies - -### Task Management Interface - -- **Task List**: Filterable by status, searchable -- **Task Details**: Full task information, sources, code examples -- **Status Updates**: Drag-and-drop status changes -- **Task Grouping**: Organize tasks by feature or category - -### Real-time Updates - -The frontend receives real-time updates via Socket.IO connections when: -- Tasks are created or updated by AI agents -- Project status changes -- Documents are added or modified - -## 📈 Progress Tracking - -Archon provides built-in progress tracking: - -- **Project completion percentage** based on completed tasks -- **Task velocity** showing development pace over time -- **Status distribution** showing work distribution across todo/doing/review/done -- **Real-time updates** via Socket.IO when AI agents or users update tasks - -## 🔍 Best Practices - -### Task Writing Guidelines - -#### Good Task Examples - -✅ **Good**: "Implement JWT authentication middleware for FastAPI" -- Specific technology mentioned -- Clear deliverable -- Actionable - -✅ **Good**: "Write unit tests for user registration endpoint covering happy path and validation errors" -- Specific scope -- Clear acceptance criteria -- Testable outcome - -#### Poor Task Examples - -❌ **Poor**: "Fix authentication" -- Too vague -- No clear scope -- Not actionable - -❌ **Poor**: "Make the app better" -- No specific deliverable -- Subjective criteria -- Not measurable - -### Project Organization - -#### Recommended Project Structure - -``` -Project: "User Management System" -├── Epic: "Authentication" -│ ├── Task: "Design JWT token structure" -│ ├── Task: "Implement login endpoint" -│ ├── Task: "Implement logout endpoint" -│ └── Task: "Add authentication middleware" -├── Epic: "User Profiles" -│ ├── Task: "Design user profile schema" -│ ├── Task: "Implement profile CRUD endpoints" -│ └── Task: "Add profile validation" -└── Epic: "Testing & Documentation" - ├── Task: "Write integration tests" - ├── Task: "Update API documentation" - └── Task: "Create user guides" -``` - -### Status Management Best Practices - -#### When to Use Each Status - -- **Todo**: Task is ready to start, all dependencies met -- **Doing**: Work is actively in progress -- **Blocked**: Cannot proceed due to external dependencies -- **Done**: Task is completed and verified - -#### Status Transition Guidelines - -```mermaid -flowchart TD - A["Task Created"] --> B["todo"] - B --> C{"Dependencies Met?"} - C -->|Yes| D["doing"] - C -->|No| E["review"] - E --> F{"Dependencies Resolved?"} - F -->|Yes| D - F -->|No| E - D --> G{"Work Complete?"} - G -->|Yes| H["done"] - G -->|No| I{"Blocked?"} - I -->|Yes| E - I -->|No| D -``` - -## 🚀 Integration Examples - -### Cursor IDE Integration - -Example of AI-assisted task management in Cursor: - -``` -User: "I need to implement user authentication for our API" - -AI Response: -I'll help you plan the authentication implementation. Let me create a project and break this down into manageable tasks. - -[AI uses MCP tools to:] -1. manage_project(action="create") with authentication project details -2. perform_rag_query("FastAPI authentication JWT") -3. manage_task(action="create") for each implementation step -4. Link relevant documentation from knowledge base - -I've created a project "User Authentication System" with the following tasks: - -1. ✅ Design JWT token structure - - Status: todo - - Sources: FastAPI Security docs, JWT.io guide - - Code examples: Token generation and validation - -2. ✅ Implement authentication middleware - - Status: todo - - Sources: FastAPI middleware documentation - - Code examples: Dependency injection patterns - -3. ✅ Create login/logout endpoints - - Status: todo - - Sources: FastAPI routing documentation - - Code examples: Request/response models - -4. ✅ Add password hashing - - Status: todo - - Sources: Security best practices - - Code examples: bcrypt implementation - -5. ✅ Write authentication tests - - Status: todo - - Sources: FastAPI testing guide - - Code examples: Test fixtures and mocks - -Would you like me to start with any specific task? -``` - -### GitHub Integration - -Projects can be linked to GitHub repositories for context. Future versions will include bidirectional sync with GitHub issues and pull requests. - -## 🔮 What's Next - -Upcoming features include time tracking, task templates, team collaboration, and enhanced GitHub integration. - ---- - -**Next Steps**: -- Learn about [RAG System](./rag) for knowledge-driven task creation -- Explore [User Interface](./ui) for task management workflows -- Check [API Reference](./api-reference) for programmatic task management -- Review [MCP Integration](./mcp-overview) for AI client setup \ No newline at end of file diff --git a/docs/docs/rag.mdx b/docs/docs/rag.mdx deleted file mode 100644 index 82866e2a..00000000 --- a/docs/docs/rag.mdx +++ /dev/null @@ -1,396 +0,0 @@ ---- -title: 🧠 RAG Configuration & Strategies -sidebar_position: 4 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# 🧠 RAG Configuration & Strategies - -
-
-

- **Configure intelligent search and retrieval** for optimal AI responses using advanced RAG strategies -

-
-
- -## 🎯 Overview - -Archon's RAG (Retrieval-Augmented Generation) system provides configurable search strategies to optimize how your AI agents find and use information from your knowledge base. This guide covers configuration options and optimization strategies. - - -Access RAG settings in the **Web Interface** → **Settings** → **RAG Settings** for easy configuration without code changes. - - -## 🛠️ RAG Configuration Options - -### Core Settings - -| Setting | Description | Default | Impact | -|---------|-------------|---------|--------| -| **MODEL_CHOICE** | Chat model for query enhancement | `gpt-4o-mini` | Response quality | -| **EMBEDDING_MODEL** | Model for vector embeddings | `text-embedding-3-small` | Search accuracy | -| **LLM_PROVIDER** | Provider (openai/google/ollama/) | `openai` | Model availability | - -### Advanced Strategies - -| Strategy | Purpose | Performance Impact | Use Cases | -|----------|---------|-------------------|-----------| -| **Contextual Embeddings** | Enhanced embeddings with context | +30% accuracy, +2x time | Technical docs, code | -| **Hybrid Search** | Vector + keyword combination | +20% accuracy, +50% time | Mixed content types | -| **Agentic RAG** | AI-powered query enhancement | +40% accuracy, +3x time | Complex queries | -| **Reranking** | AI-powered result reordering | +25% accuracy, +2x time | High-precision needs | - -## ⚙️ Configuration Strategies - -### 1. Basic Configuration (Fastest) -**Best for**: General documentation, simple queries -```bash -# Minimal settings for speed -USE_CONTEXTUAL_EMBEDDINGS=false -USE_HYBRID_SEARCH=false -USE_AGENTIC_RAG=false -USE_RERANKING=false -``` - -### 2. Balanced Configuration (Recommended) -**Best for**: Most production use cases -```bash -# Balanced performance and accuracy -USE_CONTEXTUAL_EMBEDDINGS=true -CONTEXTUAL_EMBEDDINGS_MAX_WORKERS=3 -USE_HYBRID_SEARCH=true -USE_AGENTIC_RAG=false -USE_RERANKING=false -``` - -### 3. High-Accuracy Configuration -**Best for**: Critical applications, complex technical docs -```bash -# Maximum accuracy (slower) -USE_CONTEXTUAL_EMBEDDINGS=true -CONTEXTUAL_EMBEDDINGS_MAX_WORKERS=3 -USE_HYBRID_SEARCH=true -USE_AGENTIC_RAG=true -USE_RERANKING=true -``` - -## 🔍 RAG Strategies Explained - -### Contextual Embeddings -**Enhances embeddings with surrounding document context** - - - - -```python -# Standard embedding -"authentication" → [0.1, 0.3, 0.7, ...] - -# Contextual embedding (with document context) -"authentication in React components using JWT tokens" → [0.2, 0.4, 0.8, ...] -``` - -**Benefits:** -- Better understanding of domain-specific terms -- Improved accuracy for technical content -- Context-aware search results - - - - -```bash -# Enable contextual embeddings -USE_CONTEXTUAL_EMBEDDINGS=true - -# Control API rate limiting (1-20 workers) -CONTEXTUAL_EMBEDDINGS_MAX_WORKERS=3 -``` - -**Performance Tuning:** -- **Workers = 1**: Slowest, no rate limiting issues -- **Workers = 3**: Balanced speed and reliability -- **Workers = 8+**: Fastest, may hit OpenAI rate limits - - - - -### Hybrid Search -**Combines vector similarity with keyword matching** - - - - -```mermaid -flowchart LR - A[User Query] --> B[Vector Search] - A --> C[Keyword Search] - B --> D[Vector Results] - C --> E[Keyword Results] - D --> F[Combine & Rank] - E --> F - F --> G[Final Results] -``` - -**Use Cases:** -- Mixed content (docs + code + APIs) -- Exact term matching needed -- Better coverage of rare terms - - - - -**Query**: "React authentication JWT" - -**Vector Search Results:** -- Authentication patterns in React -- JWT token handling best practices -- Security considerations for SPAs - -**Keyword Search Results:** -- Exact matches for "JWT" -- Code examples with "React" + "auth" -- API documentation mentioning tokens - -**Combined Results:** -- Higher relevance through multiple signals -- Better coverage of technical terms -- Reduced false negatives - - - - -### Agentic RAG -**AI-powered query enhancement and result interpretation** - - - - -```mermaid -sequenceDiagram - participant User - participant Agent as RAG Agent - participant Search as Search Engine - - User->>Agent: "How to fix auth bug?" - Agent->>Agent: Analyze intent - Agent->>Agent: Enhance query - Note over Agent: "React authentication debugging
JWT token validation errors
login session issues" - Agent->>Search: Enhanced multi-query - Search-->>Agent: Raw results - Agent->>Agent: Interpret & synthesize - Agent-->>User: Contextual answer -``` - -
- - -**Query Enhancement:** -- Intent analysis and clarification -- Synonym expansion and context addition -- Multi-query strategy for complex questions - -**Result Processing:** -- Relevance filtering and ranking -- Answer synthesis from multiple sources -- Code example extraction and formatting - -**Adaptive Learning:** -- Learns from successful query patterns -- Adapts to user terminology and context -- Improves over time with usage - - -
- -### Reranking -**AI-powered result reordering for optimal relevance** - - - - -```python -# Initial search results (vector similarity) -results = [ - {"content": "JWT basics", "score": 0.85}, - {"content": "React auth patterns", "score": 0.83}, - {"content": "Token validation", "score": 0.81} -] - -# AI reranking (considering query context) -reranked = [ - {"content": "React auth patterns", "score": 0.95}, # ↑ More relevant - {"content": "Token validation", "score": 0.88}, # ↑ Contextually better - {"content": "JWT basics", "score": 0.78} # ↓ Too generic -] -``` - - - - -**Improved Relevance:** -- Context-aware ranking beyond similarity -- Understands query intent and user needs -- Reduces noise from generic results - -**Better User Experience:** -- Most relevant results appear first -- Reduced time to find information -- Higher satisfaction with search results - - - - -## 📊 Performance Optimization - -### Speed vs Accuracy Trade-offs - -```mermaid -graph LR - A[Basic RAG
~200ms] --> B[+ Contextual
~600ms] - B --> C[+ Hybrid
~800ms] - C --> D[+ Agentic
~2000ms] - D --> E[+ Reranking
~3000ms] - - style A fill:#e1f5fe - style B fill:#f3e5f5 - style C fill:#fff3e0 - style D fill:#ffebee - style E fill:#fce4ec -``` - -### Recommended Configurations by Use Case - -#### Development & Testing -```bash -# Fast iteration, basic accuracy -USE_CONTEXTUAL_EMBEDDINGS=false -USE_HYBRID_SEARCH=false -USE_AGENTIC_RAG=false -USE_RERANKING=false -# ~200ms average query time -``` - -#### Production Documentation -```bash -# Balanced performance -USE_CONTEXTUAL_EMBEDDINGS=true -CONTEXTUAL_EMBEDDINGS_MAX_WORKERS=3 -USE_HYBRID_SEARCH=true -USE_AGENTIC_RAG=false -USE_RERANKING=false -# ~800ms average query time -``` - -#### Mission-Critical Applications -```bash -# Maximum accuracy -USE_CONTEXTUAL_EMBEDDINGS=true -CONTEXTUAL_EMBEDDINGS_MAX_WORKERS=2 # Conservative for reliability -USE_HYBRID_SEARCH=true -USE_AGENTIC_RAG=true -USE_RERANKING=true -# ~3000ms average query time -``` - -## 🔧 Provider-Specific Configuration - -### OpenAI (Recommended) -```bash -LLM_PROVIDER=openai -MODEL_CHOICE=gpt-4o-mini -EMBEDDING_MODEL=text-embedding-3-small -# Pros: Best accuracy, reliable API -# Cons: Cost per query -``` - -### Google Gemini -```bash -LLM_PROVIDER=google -LLM_BASE_URL=https://generativelanguage.googleapis.com/v1beta -MODEL_CHOICE=gemini-2.5-flash -EMBEDDING_MODEL=text-embedding-004 -# Pros: Good performance, competitive pricing -# Cons: Different API patterns -``` - -### Ollama (Local/Private) -```bash -LLM_PROVIDER=ollama -LLM_BASE_URL=http://host.docker.internal:11434/v1 -MODEL_CHOICE=llama2 -EMBEDDING_MODEL=nomic-embed-text -# Pros: Privacy, no API costs -# Cons: Local compute requirements -``` - -## 📈 Monitoring & Analytics - -### Key Metrics to Track - -```bash -# Query Performance -- Average response time -- Cache hit rate -- Error rate by strategy - -# Search Quality -- Result relevance scores -- User interaction patterns -- Query refinement frequency - -# System Health -- API rate limit usage -- Embedding generation time -- Memory usage patterns -``` - -### Optimization Recommendations - -#### If Queries Are Too Slow: -1. Reduce `CONTEXTUAL_EMBEDDINGS_MAX_WORKERS` -2. Disable `USE_AGENTIC_RAG` for simple queries -3. Implement result caching -4. Use lighter embedding models - -#### If Results Are Inaccurate: -1. Enable `USE_CONTEXTUAL_EMBEDDINGS` -2. Add `USE_HYBRID_SEARCH` for mixed content -3. Consider `USE_RERANKING` for critical applications -4. Improve source document quality - -#### If Hitting Rate Limits: -1. Reduce max workers: `CONTEXTUAL_EMBEDDINGS_MAX_WORKERS=1` -2. Implement exponential backoff -3. Use caching more aggressively -4. Consider switching to local models (Ollama) - -## 🎯 Best Practices - -### Content Optimization -1. **Document Structure**: Use clear headings and sections -2. **Code Examples**: Include working code snippets -3. **Context**: Provide sufficient surrounding context -4. **Tags**: Use descriptive tags for better categorization - -### Query Optimization -1. **Be Specific**: "React authentication with JWT" vs "auth" -2. **Use Technical Terms**: Include framework/library names -3. **Provide Context**: Mention your specific use case -4. **Iterate**: Refine queries based on initial results - -### System Tuning -1. **Start Simple**: Begin with basic configuration -2. **Measure Impact**: Enable one strategy at a time -3. **Monitor Performance**: Track both speed and accuracy -4. **User Feedback**: Collect feedback on result quality - -## 🔗 Related Documentation - -- [RAG Agent](./agent-rag) - AI agent that orchestrates RAG searches -- [MCP Tools](./mcp-tools) - RAG-related MCP tools and endpoints -- [Knowledge Features](./knowledge-features) - Knowledge base management -- [Configuration Guide](./configuration) - Complete system configuration \ No newline at end of file diff --git a/docs/docs/server-deployment.mdx b/docs/docs/server-deployment.mdx deleted file mode 100644 index 65e3c30c..00000000 --- a/docs/docs/server-deployment.mdx +++ /dev/null @@ -1,718 +0,0 @@ ---- -title: Server Deployment -sidebar_position: 5 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import Admonition from '@theme/Admonition'; - -# 🐳 Server Deployment & Configuration - -
-
-

- Deploy Archon with Docker: **Production-ready microservices** with health checks, scaling, and monitoring -

-
-
- -This guide covers deploying Archon's server architecture using Docker and Docker Compose, including configuration, scaling, and production best practices. - -## 📁 Project Structure - -
-📂 **Click to expand complete project structure** - -``` -archon/ -├── python/ # Python backend microservices -│ ├── src/ # Main application source -│ │ ├── main.py # FastAPI application entry point -│ │ ├── socketio_app.py # Socket.IO configuration -│ │ ├── mcp_server.py # MCP server implementation -│ │ ├── config.py # Configuration management -│ │ ├── utils.py # Utility functions (compatibility layer) -│ │ ├── logfire_config.py # Unified logging configuration -│ │ ├── api/ # 🎯 Modular API routers (6 modules) -│ │ │ ├── knowledge_api.py # Knowledge & crawling endpoints -│ │ │ ├── mcp_api.py # MCP server control & monitoring -│ │ │ ├── settings_api.py # Settings & credential management -│ │ │ ├── projects_api.py # Project & task management -│ │ │ ├── agent_chat_api.py# AI agent chat interface -│ │ │ └── tests_api.py # Test execution with streaming -│ │ ├── agents/ # 🤖 AI agent microservice -│ │ │ ├── server.py # Agents service FastAPI app -│ │ │ ├── base_agent.py # Base agent class -│ │ │ ├── document_agent.py# Documentation processing agent -│ │ │ └── rag_agent.py # RAG operations agent -│ │ ├── config/ # 🔧 Service configuration -│ │ │ ├── __init__.py # Config module init -│ │ │ └── service_discovery.py # Inter-service communication -│ │ ├── modules/ # 📦 MCP tool modules (14 total tools) -│ │ │ ├── models.py # Pydantic data models -│ │ │ ├── rag_module.py # RAG functionality (7 MCP tools) -│ │ │ └── project_module.py# Project & task management (7 MCP tools) -│ │ ├── services/ # 🔧 Modular service layer (20+ services) -│ │ │ ├── embeddings/ # Embedding operations -│ │ │ │ ├── embedding_service.py # OpenAI embeddings with rate limiting -│ │ │ │ └── contextual_embedding_service.py # Contextual embeddings -│ │ │ ├── storage/ # Storage operations -│ │ │ │ ├── document_storage_service.py # Document storage with parallel processing -│ │ │ │ └── code_storage_service.py # Code example extraction & storage -│ │ │ ├── search/ # Search operations -│ │ │ │ └── vector_search_service.py # Vector similarity search -│ │ │ ├── projects/ # Project management services -│ │ │ │ ├── project_service.py # Core project operations -│ │ │ │ ├── task_service.py # Task management operations -│ │ │ │ ├── document_service.py # Document operations -│ │ │ │ └── versioning_service.py# Version control operations -│ │ │ ├── rag/ # RAG services -│ │ │ │ ├── crawling_service.py # Web crawling functionality -│ │ │ │ ├── document_storage_service.py # RAG document storage -│ │ │ │ ├── search_service.py # RAG search & reranking -│ │ │ │ └── source_management_service.py# Source management -│ │ │ ├── client_manager.py # Database client management -│ │ │ ├── credential_service.py # Credential management (in services/) -│ │ │ ├── source_management_service.py # Source metadata management -│ │ │ ├── threading_service.py # Thread pool & rate limiting -│ │ │ ├── mcp_service_client.py # MCP HTTP client -│ │ │ ├── mcp_session_manager.py # MCP session handling -│ │ │ └── prompt_service.py # Prompt management -│ │ └── models/ # 📊 Data models -│ ├── Dockerfile.server # Server service container -│ ├── Dockerfile.mcp # MCP service container -│ ├── Dockerfile.agents # Agents service container -│ ├── pyproject.toml # Python project configuration -│ └── uv.lock # Dependency lock file -├── archon-ui-main/ # React frontend application -│ ├── src/ # Frontend source code -│ │ ├── components/ # React components -│ │ ├── pages/ # Page components -│ │ ├── services/ # API service layer -│ │ └── types/ # TypeScript definitions -│ ├── Dockerfile # Frontend container -│ └── vite.config.ts # Vite configuration -├── docs/ # Docusaurus documentation -├── migration/ # Database migration scripts -├── docker-compose.yml # Container orchestration -└── .env # Environment configuration -``` - -
- -## 🐳 Docker Deployment - -### Microservices Configuration - - - - -```yaml title="docker-compose.yml" -services: - # Server Service (FastAPI + Socket.IO) - archon-server: - build: - context: ./python - dockerfile: Dockerfile.server - container_name: Archon-Server - ports: - - "8080:8080" - environment: - - SUPABASE_URL=${SUPABASE_URL} - - SUPABASE_SERVICE_KEY=${SUPABASE_SERVICE_KEY} - - OPENAI_API_KEY=${OPENAI_API_KEY:-} - - LOGFIRE_TOKEN=${LOGFIRE_TOKEN:-} - - SERVICE_DISCOVERY_MODE=docker_compose - - LOG_LEVEL=${LOG_LEVEL:-INFO} - volumes: - - ./python/src:/app/src:ro - networks: - - app-network - healthcheck: - test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8080/health')"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 40s - - # MCP Server Service - archon-mcp: - build: - context: ./python - dockerfile: Dockerfile.mcp - container_name: archon-mcp - ports: - - "8051:8051" - environment: - - SUPABASE_URL=${SUPABASE_URL} - - SUPABASE_SERVICE_KEY=${SUPABASE_SERVICE_KEY} - - OPENAI_API_KEY=${OPENAI_API_KEY:-} - - LOGFIRE_TOKEN=${LOGFIRE_TOKEN:-} - - SERVICE_DISCOVERY_MODE=docker_compose - - TRANSPORT=sse - - LOG_LEVEL=${LOG_LEVEL:-INFO} - volumes: - - ./python/src:/app/src:ro - networks: - - app-network - healthcheck: - test: ["CMD", "python", "-c", "import socket; s=socket.socket(); s.connect(('localhost', 8051)); s.close()"] - interval: 30s - timeout: 10s - retries: 3 - - # AI Agents Service - archon-agents: - build: - context: ./python - dockerfile: Dockerfile.agents - container_name: archon-agents - ports: - - "8052:8052" - environment: - - SUPABASE_URL=${SUPABASE_URL} - - SUPABASE_SERVICE_KEY=${SUPABASE_SERVICE_KEY} - - OPENAI_API_KEY=${OPENAI_API_KEY:-} - - LOGFIRE_TOKEN=${LOGFIRE_TOKEN:-} - - SERVICE_DISCOVERY_MODE=docker_compose - - LOG_LEVEL=${LOG_LEVEL:-INFO} - volumes: - - ./python/src:/app/src:ro - networks: - - app-network - healthcheck: - test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8052/health')"] - interval: 30s - timeout: 10s - retries: 3 - - # Frontend - frontend: - build: ./archon-ui-main - container_name: archon-frontend - ports: - - "3737:5173" - environment: - - VITE_API_URL=http://localhost:8080 - networks: - - app-network - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:5173"] - interval: 30s - timeout: 10s - retries: 3 - volumes: - - ./archon-ui-main/src:/app/src - - ./archon-ui-main/public:/app/public - depends_on: - - archon-server - - # Documentation - docs: - build: - context: ./docs - dockerfile: Dockerfile - container_name: archon-docs - ports: - - "3838:80" - networks: - - app-network - depends_on: - - archon-server - - frontend - -networks: - app-network: - driver: bridge -``` - - - - -#### Server Service Dockerfile - -```dockerfile title="Dockerfile.server" -# Multi-stage build for smaller image size -FROM python:3.12-slim AS builder - -WORKDIR /app - -# Install system dependencies -RUN apt-get update && apt-get install -y \ - curl \ - git \ - build-essential \ - && rm -rf /var/lib/apt/lists/* - -# Install uv for faster dependency installation -RUN pip install --no-cache-dir uv - -# Copy dependency files -COPY pyproject.toml uv.lock ./ - -# Install dependencies -RUN uv sync --all-extras - -# Copy application files -COPY src/ src/ - -# Compile Python files for faster startup -RUN python -m compileall src/ - -# Runtime stage -FROM python:3.12-slim - -WORKDIR /app - -# Copy virtual environment from builder -COPY --from=builder /app/.venv /app/.venv -COPY --from=builder /app/src /app/src - -# Set environment variables -ENV PATH="/app/.venv/bin:$PATH" -ENV PYTHONPATH="/app/src:$PYTHONPATH" -ENV PYTHONUNBUFFERED=1 - -# Expose port -EXPOSE 8080 - -# Run the FastAPI application with Socket.IO -CMD ["python", "-m", "uvicorn", "src.main:socket_app", "--host", "0.0.0.0", "--port", "8080", "--workers", "1"] -``` - -#### MCP Service Dockerfile - -```dockerfile title="Dockerfile.mcp" -FROM python:3.12-slim AS builder - -WORKDIR /app - -# Install system dependencies -RUN apt-get update && apt-get install -y \ - curl \ - git \ - build-essential \ - && rm -rf /var/lib/apt/lists/* - -# Install uv -RUN pip install --no-cache-dir uv - -# Copy dependency files -COPY pyproject.toml uv.lock ./ - -# Install dependencies -RUN uv sync --all-extras - -# Copy application files -COPY src/ src/ - -# Compile Python files -RUN python -m compileall src/ - -# Runtime stage -FROM python:3.12-slim - -WORKDIR /app - -# Copy virtual environment from builder -COPY --from=builder /app/.venv /app/.venv -COPY --from=builder /app/src /app/src - -# Set environment variables -ENV PATH="/app/.venv/bin:$PATH" -ENV PYTHONPATH="/app/src:$PYTHONPATH" -ENV PYTHONUNBUFFERED=1 - -# Default to SSE transport -ENV TRANSPORT=sse -ENV MCP_PORT=8051 - -# Expose port -EXPOSE 8051 - -# Run the MCP server -CMD ["python", "src/mcp_server.py"] -``` - -#### Agents Service Dockerfile - -```dockerfile title="Dockerfile.agents" -FROM python:3.12-slim AS builder - -WORKDIR /app - -# Install system dependencies -RUN apt-get update && apt-get install -y \ - curl \ - git \ - build-essential \ - && rm -rf /var/lib/apt/lists/* - -# Install uv -RUN pip install --no-cache-dir uv - -# Copy dependency files -COPY pyproject.toml uv.lock ./ - -# Install dependencies -RUN uv sync --all-extras - -# Copy application files -COPY src/ src/ - -# Compile Python files -RUN python -m compileall src/ - -# Runtime stage -FROM python:3.12-slim - -WORKDIR /app - -# Copy virtual environment from builder -COPY --from=builder /app/.venv /app/.venv -COPY --from=builder /app/src /app/src - -# Set environment variables -ENV PATH="/app/.venv/bin:$PATH" -ENV PYTHONPATH="/app/src:$PYTHONPATH" -ENV PYTHONUNBUFFERED=1 - -# Expose port -EXPOSE 8052 - -# Run the Agents service -CMD ["python", "-m", "uvicorn", "src.agents.server:app", "--host", "0.0.0.0", "--port", "8052"] -``` - - - - -## ⚙️ Environment Configuration - -### Required Environment Variables - -Create a `.env` file in the project root: - -```bash title=".env" -# Database Configuration -SUPABASE_URL=https://your-project.supabase.co -SUPABASE_SERVICE_KEY=your-service-key-here - -# OpenAI Configuration -OPENAI_API_KEY=sk-your-openai-api-key - -# Unified Logging Configuration -LOGFIRE_ENABLED=false # true=Logfire logging, false=standard logging -LOGFIRE_TOKEN=your-logfire-token # Only required when LOGFIRE_ENABLED=true - -# Service Configuration -SERVICE_DISCOVERY_MODE=docker_compose -LOG_LEVEL=INFO - -# Optional: Custom Ports -API_PORT=8080 -MCP_PORT=8051 -AGENTS_PORT=8052 -FRONTEND_PORT=3737 -DOCS_PORT=3838 -``` - -### Environment Variable Reference - -| Variable | Required | Default | Description | -|----------|----------|---------|-------------| -| `SUPABASE_URL` | ✅ | - | Supabase project URL | -| `SUPABASE_SERVICE_KEY` | ✅ | - | Supabase service role key | -| `OPENAI_API_KEY` | ✅ | - | OpenAI API key for embeddings | -| `LOGFIRE_ENABLED` | ❌ | `false` | Enable unified Logfire logging (`true`/`false`) | -| `LOGFIRE_TOKEN` | ❌ | - | Logfire token (only required when enabled) | -| `SERVICE_DISCOVERY_MODE` | ❌ | `local` | Service discovery mode (`docker_compose` or `local`) | -| `LOG_LEVEL` | ❌ | `INFO` | Logging level (`DEBUG`, `INFO`, `WARNING`, `ERROR`) | -| `TRANSPORT` | ❌ | `sse` | MCP transport mode (`sse`, `stdio`, `websocket`) | - -## 🚀 Quick Start - -1. **Clone the repository** - ```bash - git clone https://github.com/archon/archon.git - cd archon - ``` - -2. **Set up environment variables** - ```bash - cp .env.example .env - # Edit .env with your credentials - ``` - -3. **Start all services** - ```bash - docker compose up -d - ``` - -4. **Verify services are running** - ```bash - docker compose ps - # All services should show as "healthy" - ``` - -5. **Access the application** - - Web UI: http://localhost:3737 - - API Docs: http://localhost:8080/docs - - MCP Connection: http://localhost:8051/sse - - Agents API: http://localhost:8052/docs - - Documentation: http://localhost:3838 - -## 📈 Performance Optimization - -### Service-Specific Optimizations - -1. **Server Service** - - Connection pooling for database - - Request caching with Redis - - Async request handling - -2. **MCP Service** - - Tool execution timeout management - - Connection recycling - - Memory-efficient streaming - -3. **Agents Service** - - PydanticAI agent orchestration - - MCP tool call optimization - - Intelligent request routing to appropriate tools - -### Resource Limits - -Add resource limits for production deployments: - -```yaml title="docker-compose.prod.yml" -services: - archon-server: - deploy: - resources: - limits: - cpus: '2' - memory: 4G - reservations: - cpus: '1' - memory: 2G - - archon-mcp: - deploy: - resources: - limits: - cpus: '1' - memory: 2G - reservations: - cpus: '0.5' - memory: 1G - - archon-agents: - deploy: - resources: - limits: - cpus: '2' - memory: 4G - reservations: - cpus: '1' - memory: 2G -``` - -## 🔄 Scaling Services - -Each microservice can be scaled independently: - -```bash -# Scale the Agents service for more processing power -docker compose up -d --scale archon-agents=3 - -# Scale the Server service for more concurrent requests -docker compose up -d --scale archon-server=2 - -# MCP typically doesn't need scaling as it's connection-based -``` - -### Load Balancing - -For production deployments with multiple instances, use a load balancer: - -```yaml title="docker-compose.lb.yml" -services: - nginx: - image: nginx:alpine - ports: - - "80:80" - volumes: - - ./nginx.conf:/etc/nginx/nginx.conf:ro - depends_on: - - archon-server - networks: - - app-network -``` - -## 🔒 Security Best Practices - -### 1. Use Docker Secrets - -```yaml title="docker-compose.secrets.yml" -services: - archon-server: - environment: - - OPENAI_API_KEY_FILE=/run/secrets/openai_key - secrets: - - openai_key - -secrets: - openai_key: - file: ./secrets/openai_key.txt -``` - -### 2. Network Isolation - -```yaml -networks: - frontend-network: - driver: bridge - backend-network: - driver: bridge - internal: true -``` - -### 3. Read-Only Volumes - -Mount source code as read-only in production: - -```yaml -volumes: - - ./python/src:/app/src:ro -``` - -## 🛠️ Development Mode - -For local development with hot reloading: - -```yaml title="docker-compose.dev.yml" -services: - archon-server: - command: ["python", "-m", "uvicorn", "src.main:socket_app", "--host", "0.0.0.0", "--port", "8080", "--reload"] - volumes: - - ./python/src:/app/src - environment: - - LOG_LEVEL=DEBUG -``` - -## 📊 Monitoring & Health Checks - -### Service Health Endpoints - -- **Server**: `http://localhost:8080/health` -- **MCP**: `http://localhost:8051/sse` (SSE endpoint) -- **Agents**: `http://localhost:8052/health` - -### Docker Health Checks - -All services include health checks that: -- Run every 30 seconds -- Timeout after 10 seconds -- Retry 3 times before marking unhealthy -- Wait 40 seconds before first check - -### Monitoring Commands - -```bash -# View service logs -docker compose logs -f archon-server - -# Check service health -docker inspect archon-server | grep -A 5 Health - -# Monitor resource usage -docker stats - -# View running processes -docker compose top -``` - -## 🔧 Troubleshooting - -### Common Issues - -#### Services Not Starting - -```bash -# Check logs for specific service -docker compose logs archon-server - -# Verify environment variables -docker compose config - -# Rebuild images -docker compose build --no-cache -``` - -#### Database Connection Issues - -```bash -# Test database connectivity -docker exec archon-server python -c " -from src.services.client_manager import get_supabase_client -client = get_supabase_client() -print('Database connected successfully') -" -``` - -#### Port Conflicts - -```bash -# Check for port usage -lsof -i :8080 -netstat -tulpn | grep 8080 - -# Use alternative ports in .env -API_PORT=8090 -MCP_PORT=8061 -``` - -## 🚢 Production Deployment - -### 1. Use Production Images - -```bash -# Build optimized images -docker compose -f docker-compose.yml -f docker-compose.prod.yml build - -# Push to registry -docker tag archon-server:latest your-registry/archon-server:v1.0.0 -docker push your-registry/archon-server:v1.0.0 -``` - -### 2. Enable Swarm Mode - -```bash -# Initialize swarm -docker swarm init - -# Deploy stack -docker stack deploy -c docker-compose.yml archon -``` - -### 3. Configure Logging - -```yaml -services: - archon-server: - logging: - driver: "json-file" - options: - max-size: "10m" - max-file: "3" -``` - ---- - -**Next Steps**: -- Learn about [Server Monitoring](./server-monitoring) with Logfire -- Review [Server Services](./server-services) documentation -- Explore the [API Reference](./api-reference) for endpoints -- Check [MCP Server Setup](./mcp-server) for AI client integration \ No newline at end of file diff --git a/docs/docs/server-monitoring.mdx b/docs/docs/server-monitoring.mdx deleted file mode 100644 index bd22d9c1..00000000 --- a/docs/docs/server-monitoring.mdx +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: Server Monitoring -sidebar_position: 6 ---- - -import Admonition from '@theme/Admonition'; - -# 📊 Server Monitoring & Health - -
-
-

- **Monitor your Archon services**: Health checks, performance metrics, and troubleshooting tools -

-
-
- -Archon provides built-in monitoring and health checking across all services to help you maintain optimal performance and quickly troubleshoot issues. - -## 🏥 Health Checks - -### API Health Endpoints - -Each service provides health check endpoints: - -```bash -# Server API health -curl http://localhost:8080/api/projects/health -curl http://localhost:8080/api/settings/health - -# MCP Server health -curl http://localhost:8051/health - -# Database health -curl http://localhost:8080/api/database/metrics -``` - -### Service Status - -Monitor the status of all Archon services: - -| Service | Port | Health Endpoint | Purpose | -|---------|------|----------------|---------| -| **Server** | 8080 | `/api/projects/health` | Main API status | -| **MCP** | 8051 | `/health` | MCP server status | -| **Frontend** | 3737 | Direct access | Web UI availability | -| **Docs** | 3838 | Direct access | Documentation site | - -## 📈 Performance Monitoring - -### Key Metrics - -Archon tracks important performance metrics: - -- **RAG Query Performance**: Average search times and accuracy -- **Database Performance**: Connection pool health and query times -- **Memory Usage**: Adaptive processing based on available resources -- **API Response Times**: Endpoint performance across all services - -### Real-Time Updates - -Socket.IO connections provide real-time monitoring: - -- **Progress Tracking**: Live updates during document processing -- **Connection Health**: Automatic reconnection handling -- **Service Communication**: Inter-service request monitoring - -## 🔧 Troubleshooting - - -Use the health endpoints and browser developer tools to quickly diagnose issues with your Archon installation. - - -### Common Issues - -| Symptom | Likely Cause | Solution | -|---------|--------------|----------| -| Slow search responses | High memory usage | System automatically adjusts batch sizes | -| Connection errors | Service startup order | Restart services with `docker-compose restart` | -| Missing search results | Database connection | Check Supabase configuration | -| UI not loading | Frontend build issues | Check frontend service logs | - -### Docker Logs - -Monitor service logs: - -```bash -# All services -docker-compose logs -f - -# Specific service -docker-compose logs -f archon-server -docker-compose logs -f archon-mcp -``` - -### Database Monitoring - -Check database health and metrics: - -```bash -# Database metrics -curl http://localhost:8080/api/database/metrics - -# Returns: -# - Table record counts -# - Connection status -# - Performance indicators -``` - -## 🛠️ Configuration - -### Environment Monitoring - -Monitor key environment variables: - -```bash -# Database connectivity -SUPABASE_URL=your_supabase_url -SUPABASE_SERVICE_KEY=your_service_key - -# AI services -OPENAI_API_KEY=your_openai_key - -# Unified Logging Configuration -LOGFIRE_ENABLED=false # true=Logfire logging, false=standard logging -LOGFIRE_TOKEN=your_logfire_token # Only required when LOGFIRE_ENABLED=true - -# Service communication -API_BASE_URL=http://archon-server:8080 -``` - -### Unified Logging System - -Archon includes a unified logging system with optional [Logfire](https://logfire.pydantic.dev/) integration: - -**Standard Logging (Default)**: -```bash -LOGFIRE_ENABLED=false -``` -- Uses Python's standard logging framework -- Logs to console with structured format -- Perfect for development and basic monitoring -- Zero external dependencies - -**Enhanced Logging with Logfire**: -```bash -LOGFIRE_ENABLED=true -LOGFIRE_TOKEN=your_logfire_token # Get from logfire.pydantic.dev -``` -- Real-time traces and performance monitoring -- Advanced debugging for RAG queries and MCP tool calls -- Automatic request/response tracking -- Visual dashboards and analytics - -**Key Benefits**: -- 🔄 **Seamless Toggle**: Switch between modes with a single environment variable -- 🛡️ **Graceful Fallback**: Always works even without Logfire -- 📊 **Consistent Format**: Same log structure in both modes -- 🚀 **Zero Setup**: Standard logging works out of the box - -### Resource Management - -Archon automatically manages resources: - -- **Memory Adaptive Processing**: Adjusts concurrency based on available memory -- **Rate Limiting**: Prevents API quota exhaustion -- **Connection Pooling**: Optimizes database performance -- **Batch Processing**: Efficiently handles large document sets - ---- - -**Need Help?** Check the [Troubleshooting Guide](./troubleshooting) for detailed debugging steps. \ No newline at end of file diff --git a/docs/docs/server-overview.mdx b/docs/docs/server-overview.mdx deleted file mode 100644 index d18ef371..00000000 --- a/docs/docs/server-overview.mdx +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Server Overview -sidebar_position: 3 ---- - -# Server Overview - -The Server service is the core of Archon, containing all business logic, services, and data operations. - -## Architecture - -### Service Responsibilities - -| Service | Port | Purpose | Contains | -|---------|------|---------|----------| -| **Server** | 8080 | Core API & business logic | Services, ML models, data operations | -| **MCP** | 8051 | Protocol adapter for AI clients | HTTP client, MCP tool definitions | -| **Agents** | 8052 | AI processing | PydanticAI agents only | -| **Frontend** | 3737 | Web UI | React application | -| **Docs** | 3838 | Documentation | Docusaurus site | - -### Communication Flow - -``` -Frontend → Server API ← MCP (via HTTP) ← AI Clients - ↓ - Services - ↓ - Database -``` - -## Docker Services - -```yaml -services: - archon-server: # FastAPI + Socket.IO (port 8080) - archon-mcp: # MCP Server (port 8051) - archon-agents: # AI Agents (port 8052) - archon-frontend: # React UI (port 3737) - archon-docs: # Documentation (port 3838) -``` - -## Key Components - -### FastAPI Application -- REST API endpoints -- Socket.IO server for real-time communication -- Service layer integration - -### Service Layer -All business logic is organized into service modules: -- **RAG Services**: Crawling, search, document storage -- **Project Services**: Project and task management -- **Core Services**: Authentication, configuration -- **Storage Services**: Database operations -- **Embedding Services**: Vector generation - -### External Services -- **Supabase**: PostgreSQL + pgvector for data storage -- **OpenAI API**: Embeddings generation - -## API Structure - -| Router | Path | Purpose | -|--------|------|---------| -| `knowledge_api.py` | `/api/knowledge-items` | Knowledge management, crawling | -| `projects_api.py` | `/api/projects` | Project and task management | -| `mcp_api.py` | `/api/mcp` | MCP server control | -| `settings_api.py` | `/api/settings` | Configuration management | -| `agent_chat_api.py` | `/api/agent-chat` | AI agent interactions | - -## Environment Configuration - -Key environment variables: - -```bash -# Database -SUPABASE_URL=your_supabase_url -SUPABASE_SERVICE_KEY=your_service_key - -# AI Services -OPENAI_API_KEY=your_openai_key - -# Unified Logging Configuration (Optional) -LOGFIRE_ENABLED=false # true=Logfire logging, false=standard logging -LOGFIRE_TOKEN=your_logfire_token # Only required when LOGFIRE_ENABLED=true - -# Service URLs (for inter-service communication) -API_BASE_URL=http://archon-server:8080 -AGENTS_BASE_URL=http://archon-agents:8052 -``` - -## Development Setup - -1. **Clone repository** - ```bash - git clone https://github.com/ArchonInnovations/archon.git - cd archon - ``` - -2. **Start services** - ```bash - docker-compose up - ``` - -3. **Access services** - - API Docs: http://localhost:8080/docs - - Frontend: http://localhost:3737 - - Documentation: http://localhost:3838 - -## Monitoring - -Logfire provides real-time observability: -- Request/response tracking -- Performance metrics -- Error monitoring -- Service health checks - -Access your Logfire dashboard to monitor all services in real-time. \ No newline at end of file diff --git a/docs/docs/server-services.mdx b/docs/docs/server-services.mdx deleted file mode 100644 index 13e4c70f..00000000 --- a/docs/docs/server-services.mdx +++ /dev/null @@ -1,484 +0,0 @@ ---- -title: Server Services -sidebar_position: 4 ---- - -import Admonition from '@theme/Admonition'; - -# Server Services - -The Server's business logic is organized into modular service classes and functions. - -## Service Organization - -### Storage Services (`/services/storage/`) - -| Service/Module | Purpose | Key Components | -|---------|---------|-------------| -| **BaseStorageService** | Abstract base class for storage operations | `smart_chunk_text()`, `extract_metadata()`, `batch_process_with_progress()` | -| **storage_services.py** | Contains DocumentStorageService class | `upload_document()`, `store_documents()`, `process_document()` | -| **document_storage_service.py** | Storage utility functions | `add_documents_to_supabase()`, `add_documents_to_supabase_parallel()` | -| **code_storage_service.py** | Code extraction utilities | `extract_code_blocks()`, `generate_code_example_summary()`, `add_code_examples_to_supabase()` | - - -The storage module has both service classes and utility functions: -- **storage_services.py** contains the `DocumentStorageService` class that extends `BaseStorageService` -- **document_storage_service.py** and **code_storage_service.py** contain standalone utility functions -- This separation allows both object-oriented and functional approaches as needed - - -### Search Services (`/services/search/`) - -| Service/Module | Purpose | Key Components | -|---------|---------|-------------| -| **search_services.py** | Contains SearchService class | `perform_rag_query()`, `search_code_examples_service()`, `rerank_results()` | -| **vector_search_service.py** | Vector search utilities | `search_documents()`, `search_code_examples()`, `search_documents_async()` | - - -- **search_services.py** contains the `SearchService` class for high-level search operations -- **vector_search_service.py** contains low-level vector search utility functions -- The SearchService uses vector search utilities internally - - -### RAG Services (`/services/rag/`) - -| Service | Purpose | Key Methods | -|---------|---------|-------------| -| **CrawlingService** | Web crawling operations | `crawl_single_page()`, `crawl_batch_with_progress()`, `crawl_recursive_with_progress()` | - -### Knowledge Services (`/services/knowledge/`) - -**Recent Refactoring**: The Knowledge API was refactored from a 1,076-line monolith to a 550-line API layer (49% reduction) by extracting business logic into specialized services. - -| Service | Purpose | Key Methods | -|---------|---------|-------------| -| **CrawlOrchestrationService** | Orchestrates entire crawl workflow | `orchestrate_crawl()`, `set_progress_id()`, `cancel()`, `is_cancelled()` | -| **KnowledgeItemService** | CRUD operations for knowledge items | `list_items()`, `update_item()`, `get_available_sources()` | -| **CodeExtractionService** | Code block extraction and processing | `extract_and_store_code_examples()`, `extract_code_blocks_from_html()` | -| **DatabaseMetricsService** | Database statistics and metrics | `get_metrics()` | - -**Service Layer Benefits:** -- **Separation of Concerns**: Business logic separated from API routing -- **Testability**: Services can be unit tested without Socket.IO dependencies -- **Reusability**: Services used by both API endpoints and MCP tools -- **Progress Tracking**: Integrated with ProgressTracker utility - -### Project Services (`/services/projects/`) - -**Recent Refactoring**: The Projects API was refactored from a monolithic 1,690-line file to a clean service layer architecture, reducing the main API file to 868 lines (42% reduction) while extracting business logic into specialized services. - -| Service | File | Purpose | Key Methods | -|---------|------|---------|-------------| -| **ProjectService** | `project_service.py` | Core project CRUD operations | `create_project()`, `get_project()`, `update_project()`, `delete_project()`, `list_projects()` | -| **TaskService** | `task_service.py` | Task lifecycle management | `create_task()`, `update_task()`, `archive_task()`, `list_tasks()` | -| **ProjectCreationService** | `project_creation_service.py` | AI-assisted project creation workflow | `create_project_with_ai()`, `generate_features()`, `process_github_repo()` | -| **SourceLinkingService** | `source_linking_service.py` | Project-knowledge source relationships | `update_project_sources()`, `format_projects_with_sources()` | -| **ProgressService** | `progress_service.py` | Real-time operation tracking via Socket.IO | `start_operation()`, `update_progress()`, `complete_operation()`, `error_operation()` | -| **DocumentService** | `document_service.py` | Project document management | `add_document()`, `get_documents()`, `update_document()` | -| **VersioningService** | `versioning_service.py` | JSONB field version control | `create_version()`, `get_versions()`, `restore_version()` | - -**Service Layer Benefits:** -- **Separation of Concerns**: Business logic separated from API routing -- **Reusability**: Services can be used by multiple API endpoints and MCP tools -- **Testability**: Each service can be unit tested independently -- **Socket.IO Integration**: Real-time updates handled at the service layer - -**Example Service Coordination:** -```python -# projects_api.py - Thin API layer -@router.post("/projects") -async def create_project(request: CreateProjectRequest): - progress_id = secrets.token_hex(16) - - # Start progress tracking - progress_service.start_operation(progress_id, 'project_creation') - - # Background task coordinates multiple services - asyncio.create_task(_create_project_with_ai(progress_id, request)) - - return {"progress_id": progress_id} - -# Background workflow using multiple services -async def _create_project_with_ai(progress_id: str, request: CreateProjectRequest): - creation_service = ProjectCreationService() - - # AI-assisted creation with real-time updates - success, result = await creation_service.create_project_with_ai( - progress_id=progress_id, - title=request.title, - github_repo=request.github_repo - ) - - if success: - # Broadcast update to Socket.IO clients - await broadcast_project_update() - await progress_service.complete_operation(progress_id, result) -``` - -### Core Services (`/services/`) - -| Service | Purpose | Key Methods | -|---------|---------|-------------| -| **SourceManagementService** | Manage knowledge sources | `get_available_sources()`, `delete_source()`, `update_source_metadata()` | -| **CredentialService** | Secure credential storage | `get_credential()`, `set_credential()` | -| **PromptService** | AI prompt management | `get_prompt()`, `reload_prompts()` | -| **ThreadingService** | Threading & rate limiting | `batch_process()`, `rate_limited_operation()` | -| **MCPServiceClient** | HTTP client for MCP | `crawl_url()`, `search()`, `delete_source()` | -| **ClientManager** | Database client management | `get_supabase_client()` | -| **MCPSessionManager** | MCP session management | `create_session()`, `validate_session()`, `cleanup_expired()` | -| **CrawlerManager** | Global crawler instance management | `get_crawler()`, `initialize()`, `cleanup()` | -| **LLMProviderService** | Multi-provider LLM support | `get_llm_client()`, `get_llm_client_sync()`, `get_embedding_model()` | - -### Modular Architecture Pattern - -The services follow a clear architectural pattern: - -- **Utility Modules**: Low-level functions for specific operations - - `vector_search_service.py` - Vector database operations - - `document_storage_service.py` - Document storage functions - - `code_storage_service.py` - Code extraction functions - -- **Service Classes**: High-level orchestration of utilities - - `SearchService` in `search_services.py` - - `DocumentStorageService` in `storage_services.py` - - Knowledge services in `/services/knowledge/` - - Project services in `/services/projects/` - -- **Base Classes**: Abstract implementations for extensibility - - `BaseStorageService` - Common storage patterns - -- **Manager Classes**: Singleton instances for global resources - - `CrawlerManager` - Global crawler instance - - `MCPSessionManager` - Session management - -- **Single Responsibility**: Each module has one focused purpose - -### Embedding Services (`/services/embeddings/`) - -| Module | Purpose | Key Functions | -|--------|---------|---------------| -| **embedding_service.py** | OpenAI embedding creation | `create_embeddings_batch()`, `create_embeddings_batch_async()` | -| **contextual_embedding_service.py** | Context-aware embeddings | `generate_contextual_embedding()`, `generate_contextual_embeddings_batch()` | - -### Utility Classes (`/utils/progress/`) - -| Utility | Purpose | Key Methods | -|---------|---------|-------------| -| **ProgressTracker** | Consolidated Socket.IO progress tracking | `start()`, `update()`, `complete()`, `error()`, `update_batch_progress()`, `update_crawl_stats()` | - - -The embedding service provides both sync and async versions: -- Use `create_embeddings_batch_async()` in async contexts (recommended) -- Sync versions exist for backward compatibility but will return zero embeddings if called from async context -- Always prefer async versions for better performance and proper event loop handling - - -## Service Usage Patterns - -### Direct Service Usage (FastAPI) -```python -# Import from new locations -from ..services.source_management_service import SourceManagementService -from ..services.storage import DocumentStorageService -from ..services.search import SearchService -from ..services.knowledge import CrawlOrchestrationService, KnowledgeItemService -from ..services.crawler_manager import get_crawler - -# Example: Knowledge item crawling -@router.post("/knowledge-items/crawl") -async def crawl_knowledge_item(request: KnowledgeItemRequest): - crawler = await get_crawler() - orchestration_service = CrawlOrchestrationService(crawler, get_supabase_client()) - result = await orchestration_service.orchestrate_crawl(request.dict()) - return result - -# Example: Crawl cancellation -@router.post("/knowledge-items/stop/{progress_id}") -async def stop_crawl_task(progress_id: str): - # Cancel orchestration service - orchestration = get_active_orchestration(progress_id) - if orchestration: - orchestration.cancel() - - # Cancel asyncio task - if progress_id in active_crawl_tasks: - task = active_crawl_tasks[progress_id] - if not task.done(): - task.cancel() - try: - await asyncio.wait_for(task, timeout=2.0) - except (asyncio.CancelledError, asyncio.TimeoutError): - pass - del active_crawl_tasks[progress_id] - - # Emit Socket.IO events - await sio.emit('crawl:stopped', { - 'progressId': progress_id, - 'status': 'cancelled', - 'message': 'Crawl cancelled by user' - }, room=progress_id) - - return {'success': True} - -# Example: Source deletion -@router.delete("/sources/{source_id}") -async def delete_source(source_id: str): - service = SourceManagementService(get_supabase_client()) - success, result = service.delete_source(source_id) - return {"success": success, **result} -``` - -### HTTP Service Usage (MCP) -```python -async def delete_source(ctx: Context, source: str) -> str: - async with httpx.AsyncClient() as client: - response = await client.delete(f"{API_URL}/api/sources/{source}") - return response.json() -``` - -### Simplified Socket.IO Emission Pattern (2025) -```python -from ..socketio_app import get_socketio_instance - -# Get Socket.IO instance -sio = get_socketio_instance() - -async def crawl_with_progress(url: str, progress_id: str): - crawling_service = CrawlingService(crawler, supabase_client) - - # Simple direct emission - no complex utils - await sio.emit('progress_update', { - 'status': 'crawling', - 'percentage': 10, - 'log': f'Starting crawl of {url}' - }, room=progress_id) - - results = await crawling_service.crawl_batch_with_progress(urls=[url]) - return results -``` - -### ProgressTracker Utility Pattern -```python -from ..utils.progress import ProgressTracker - -# Create tracker for an operation -tracker = ProgressTracker(sio, progress_id, 'crawl') - -# Start tracking -await tracker.start({ - 'currentUrl': url, - 'totalPages': 0, - 'processedPages': 0 -}) - -# Update progress -await tracker.update('crawling', 25, 'Processing page 1 of 4') -await tracker.update_crawl_stats(1, 4, 'https://example.com/page1') - -# Complete or error -await tracker.complete({ - 'chunksStored': 150, - 'wordCount': 5000 -}) -# OR -await tracker.error('Failed to crawl: Network timeout') -``` - -## Key Service Features - -### Simplified Real-Time Communication (2025 Pattern) - -**Architecture Changes:** -- **No database polling** - Eliminated 2-second polling system that checked for task/project changes -- **Simple @sio.event handlers** - Uses official Socket.IO 2025 documentation pattern -- **No namespace classes** - Removed complex `TasksNamespace` and `ProjectNamespace` classes -- **Root namespace only** - Everything runs on `/` namespace for simplicity -- **Direct room management** - Simple `sio.enter_room()` and `sio.emit()` calls - -**Simplified Socket.IO Integration:** -```python -# Services import and use Socket.IO directly -from ..socketio_app import get_socketio_instance - -sio = get_socketio_instance() - -# Simple emission to rooms - no namespace complexity -await sio.emit('task_updated', task_data, room=project_id) -await sio.emit('progress_update', {'status': 'processing', 'percentage': 50}, room=progress_id) - -# Event handlers use simple @sio.event decorators -@sio.event -async def join_project(sid, data): - await sio.enter_room(sid, data['project_id']) - tasks = get_tasks_for_project(data['project_id']) - await sio.emit('initial_tasks', tasks, to=sid) -``` - -### Threading Service -- Rate limiting for OpenAI API (200k tokens/min) -- Thread pools for CPU and I/O operations -- Socket.IO-safe batch processing -- System metrics monitoring - -### Credential Service -- Encrypted credential storage -- Category-based organization -- Runtime caching for performance -- Environment variable compatibility - -### Document Storage -- Parallel document processing -- Progress reporting via callbacks -- Automatic embedding generation -- Batch operations for efficiency - -### Crawler Manager -- Singleton pattern for global crawler instance -- Automatic Docker environment detection -- Proper initialization and cleanup -- Prevents circular imports - -### LLM Provider Service -- Supports multiple providers: OpenAI, Google Gemini, Ollama -- OpenAI-compatible interface for all providers -- Automatic provider detection from environment -- Both async and sync client creation - -## Service Dependencies - -**Refactored Architecture (2025):** - -``` -FastAPI Endpoints (projects_api.py) - ↓ -Socket.IO Handlers (socketio_handlers.py) - ↓ -Service Classes (ProjectService, TaskService, etc.) - ↓ -Service Functions (add_documents_to_supabase, etc.) - ↓ -Database (Supabase) / External APIs (OpenAI) -``` - -**Key Architectural Changes:** -- **Extracted Socket.IO Handlers**: Moved from embedded namespace classes to dedicated `socketio_handlers.py` file (~225 lines) -- **Service Layer Separation**: Business logic now in separate service classes instead of embedded in API routes -- **Simplified Socket.IO**: Eliminated complex namespace hierarchy in favor of simple `@sio.event` decorators -- **Progress Tracking**: Centralized in `ProgressService` with real-time Socket.IO broadcasting - -## Architecture Benefits - -### Improved Code Organization -- **Clear Separation**: Utilities vs. service classes are clearly separated -- **Single Responsibility**: Each module has one focused purpose -- **Reduced Duplication**: Common functionality in base classes -- **Better Maintainability**: Easy to find and update specific functionality -- **Service Layers**: Business logic separated from API routing (knowledge, projects) - -### Enhanced Extensibility -- **Base Classes**: New storage services can extend `BaseStorageService` -- **Modular Design**: Easy to add new search algorithms or storage backends -- **Service Composition**: Services can be composed for complex operations -- **Provider Flexibility**: Easy to add new LLM providers via LLMProviderService - -### Testing & Development -- **Isolated Testing**: Each service can be unit tested independently -- **Mock Injection**: Services accept clients via dependency injection -- **Clear Interfaces**: Well-defined service contracts -- **Progress Tracking**: Centralized progress management via ProgressTracker - -## Service Directory Summary - -Complete listing of all service modules organized by functionality: - -``` -services/ -├── storage/ # Document and code storage -│ ├── base_storage_service.py # Abstract base class -│ ├── storage_services.py # DocumentStorageService class -│ ├── document_storage_service.py # Storage utilities -│ └── code_storage_service.py # Code extraction utilities -├── search/ # Search and retrieval -│ ├── search_services.py # SearchService class -│ └── vector_search_service.py # Vector search utilities -├── knowledge/ # Knowledge management (refactored) -│ ├── crawl_orchestration_service.py -│ ├── knowledge_item_service.py -│ ├── code_extraction_service.py -│ └── database_metrics_service.py -├── projects/ # Project management (refactored) -│ ├── project_service.py -│ ├── task_service.py -│ ├── project_creation_service.py -│ ├── source_linking_service.py -│ ├── progress_service.py -│ ├── document_service.py -│ └── versioning_service.py -├── rag/ # RAG operations -│ └── crawling_service.py # Web crawling -├── embeddings/ # Embedding generation -│ ├── embedding_service.py -│ └── contextual_embedding_service.py -└── (core services) # Infrastructure services - ├── client_manager.py # Database client - ├── crawler_manager.py # Crawler instance - ├── credential_service.py # Credentials - ├── prompt_service.py # Prompts - ├── threading_service.py # Threading/rate limiting - ├── mcp_service_client.py # MCP HTTP client - ├── mcp_session_manager.py # MCP sessions - ├── source_management_service.py # Sources - └── llm_provider_service.py # LLM providers -``` - -## Configuration - -Services are configured via environment variables: -- `SUPABASE_URL` - Database URL -- `SUPABASE_SERVICE_KEY` - Database service key -- `OPENAI_API_KEY` - For embeddings (or other provider keys) -- `LLM_PROVIDER` - LLM provider selection (openai, google, ollama) -- `CODE_BLOCK_MIN_LENGTH` - Minimum code block length in characters (default: 1000) -- `USE_CONTEXTUAL_EMBEDDINGS` - Enable contextual embeddings -- `USE_HYBRID_SEARCH` - Enable hybrid search mode -- `USE_RERANKING` - Enable search result reranking - -All services use dependency injection for testability and flexibility. - -## Troubleshooting - -### Code Extraction Issues - -If code blocks are not being extracted properly: - -1. **Check the minimum length**: The default `CODE_BLOCK_MIN_LENGTH` is 1000 characters. This ensures only substantial code blocks are extracted, not small snippets. - -2. **Verify markdown format**: Code blocks must be wrapped in triple backticks (```) to be recognized. - -3. **HTML fallback**: If markdown doesn't contain code blocks, the system will try to extract from HTML using `
` and `` tags.
-
-### Crawling Performance
-
-The crawling service uses simple configurations for reliability:
-
-- No complex JavaScript waiting by default
-- No forced element clicking
-- Straightforward markdown extraction
-
-If you need advanced crawling features for specific sites:
-
-1. Consider implementing site-specific handlers
-2. Use the `js_code` parameter only when necessary
-3. Avoid `wait_for` selectors unless you're certain the elements exist
-
-### Progress Tracking
-
-Progress updates during crawling:
-
-- **0-45%**: Crawling pages
-- **45-50%**: Processing crawl results  
-- **50-75%**: Storing documents with real-time batch updates
-- **75-90%**: Extracting and storing code examples
-- **90-100%**: Finalizing and cleanup
-
-If progress appears stuck, check the logs for batch processing updates.
\ No newline at end of file
diff --git a/docs/docs/socketio.mdx b/docs/docs/socketio.mdx
deleted file mode 100644
index ab895588..00000000
--- a/docs/docs/socketio.mdx
+++ /dev/null
@@ -1,457 +0,0 @@
----
-title: Real-time Communication (Socket.IO)
-description: Simple Socket.IO implementation for real-time features
-sidebar_position: 9
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-import Admonition from '@theme/Admonition';
-
-# Real-time Communication with Socket.IO
-
-## Overview
-
-Archon uses **Socket.IO** for real-time communication between the frontend and backend. We follow 2025 best practices - all events on the default namespace with room-based organization.
-
-
-- **Default namespace only**: Everything on root `/` namespace
-- **Room-based organization**: Projects, progress tracking, and features use rooms
-- **Simple events**: Clear event names with `@sio.event` decorators
-- **Automatic reconnection**: Socket.IO handles connection reliability
-- **~100 lines total**: For the entire real-time system
-
-
-## Socket.IO Rooms Architecture
-
-Rooms provide isolated communication channels within the default namespace:
-
-### Room Types
-
-| Room Pattern | Purpose | Example Room ID | Members |
-|--------------|---------|-----------------|---------|
-| `project_list` | Project list updates | `project_list` | Users viewing project dashboard |
-| `{project_id}` | Project-specific updates | `abc123-def456` | Users viewing that project |
-| `{progress_id}` | Progress tracking | `progress_789` | Users tracking creation/crawl progress |
-| `chat_{session_id}` | Agent chat sessions | `chat_session_123` | Individual chat participants |
-
-## Socket.IO Events
-
-All events use simple names on the root namespace:
-
-| Event | Direction | Purpose | Data Format |
-|-------|-----------|---------|-------------|
-| `connect` | Server→Client | Connection established | `{sid: string}` |
-| `disconnect` | Server→Client | Connection closed | None |
-| `join_project` | Client→Server | Join project room for task updates | `{project_id: string}` |
-| `leave_project` | Client→Server | Leave project room | `{project_id: string}` |
-| `subscribe_projects` | Client→Server | Subscribe to project list updates | None |
-| `unsubscribe_projects` | Client→Server | Unsubscribe from project list | None |
-| `subscribe_progress` | Client→Server | Subscribe to creation progress | `{progress_id: string}` |
-| `unsubscribe_progress` | Client→Server | Unsubscribe from progress | `{progress_id: string}` |
-| `crawl_subscribe` | Client→Server | Subscribe to crawl progress | `{progress_id: string}` |
-| `crawl_unsubscribe` | Client→Server | Unsubscribe from crawl | `{progress_id: string}` |
-| `crawl_stop` | Client→Server | Stop an active crawl | `{progress_id: string}` |
-
-## Broadcast Events
-
-These are emitted by the server to rooms:
-
-| Event | Purpose | Room | Data |
-|-------|---------|------|------|
-| `task_created` | New task created | project_id | Task object |
-| `task_updated` | Task modified | project_id | Task object |
-| `task_deleted` | Task removed | project_id | `{task_id: string}` |
-| `projects_update` | Project list changed | 'project_list' | `{projects: Array}` |
-| `project_progress` | Creation progress | progress_id | Progress data |
-| `crawl_progress` | Crawl progress | progress_id | Progress data |
-| `crawl:stopping` | Crawl is stopping | progress_id | `{progressId, status, message}` |
-| `crawl:stopped` | Crawl has stopped | progress_id | `{progressId, status, message, timestamp}` |
-
-## Frontend Usage
-
-
-
-
-```typescript
-import { createWebSocketService } from './services/webSocketService';
-
-// Always connect to default namespace
-const ws = createWebSocketService();
-await ws.connect('/');
-
-// Join specific rooms via events
-ws.send({ 
-  type: 'join_project', 
-  data: { project_id: 'abc123' } 
-});
-
-// Subscribe to project list room
-ws.send({ type: 'subscribe_projects' });
-
-// Listen for room-specific updates
-ws.addMessageHandler('task_created', (message) => {
-  console.log('New task in project room:', message.data);
-});
-
-ws.addMessageHandler('projects_update', (message) => {
-  console.log('Project list updated:', message.data.projects);
-});
-```
-
-
-
-
-```typescript
-// Subscribe to progress room
-ws.send({ 
-  type: 'subscribe_progress', 
-  data: { progress_id: progressId }
-});
-
-// Handle progress updates from room
-ws.addMessageHandler('project_progress', (message) => {
-  const { percentage, status, step } = message.data;
-  updateProgress(percentage, status, step);
-});
-
-// Unsubscribe from progress room
-ws.send({
-  type: 'unsubscribe_progress',
-  data: { progress_id: progressId }
-});
-```
-
-
-
-
-```typescript
-class ProjectProgressService {
-  private wsService: WebSocketService | null = null;
-  
-  async streamProgress(progressId: string, onMessage: (data: any) => void) {
-    this.wsService = createWebSocketService();
-    
-    // Always connect to default namespace
-    await this.wsService.connect('/');
-    
-    // Subscribe to progress room
-    this.wsService.send({
-      type: 'subscribe_progress',
-      data: { progress_id: progressId }
-    });
-    
-    // Handle room messages
-    this.wsService.addMessageHandler('project_progress', (message) => {
-      onMessage(message.data);
-    });
-  }
-  
-  disconnect() {
-    if (this.wsService) {
-      // Rooms are cleaned up automatically
-      this.wsService.disconnect();
-    }
-  }
-}
-```
-
-
-
-
-## Backend Implementation
-
-All Socket.IO code lives in `projects_api.py`:
-
-
-
-
-```python
-# Get Socket.IO instance
-from ..socketio_app import get_socketio_instance
-sio = get_socketio_instance()
-
-# Simple event handlers
-@sio.event
-async def connect(sid, environ):
-    print(f'Client connected: {sid}')
-
-@sio.event
-async def join_project(sid, data):
-    project_id = data.get('project_id')
-    if project_id:
-        await sio.enter_room(sid, project_id)
-        # Send initial tasks
-        tasks = await get_project_tasks(project_id)
-        await sio.emit('initial_tasks', tasks, to=sid)
-
-@sio.event
-async def subscribe_projects(sid):
-    await sio.enter_room(sid, 'project_list')
-    # Send current projects
-    projects = await get_all_projects()
-    await sio.emit('projects_update', {'projects': projects}, to=sid)
-
-@sio.event
-async def crawl_subscribe(sid, data):
-    progress_id = data.get('progress_id')
-    if progress_id:
-        await sio.enter_room(sid, progress_id)
-```
-
-
-
-
-```python
-# Simple broadcast helpers
-async def broadcast_task_update(project_id: str, event_type: str, task_data: dict):
-    """Broadcast task updates to project room."""
-    await sio.emit(event_type, task_data, room=project_id)
-
-async def broadcast_project_update():
-    """Broadcast project list to subscribers."""
-    projects = await get_all_projects()
-    await sio.emit('projects_update', {'projects': projects}, room='project_list')
-
-async def broadcast_crawl_progress(progress_id: str, data: dict):
-    """Broadcast crawl progress to subscribers."""
-    # Include the progress_id in data for client-side filtering
-    data['progressId'] = progress_id
-    await sio.emit('crawl_progress', data, room=progress_id)
-
-# Usage in services
-await broadcast_task_update(project_id, 'task_created', new_task)
-await broadcast_crawl_progress(progress_id, {'percentage': 50, 'status': 'crawling'})
-```
-
-
-
-
-## Server Configuration
-
-The Socket.IO server is configured in `socketio_app.py`:
-
-```python
-import socketio
-
-# Create server with simple settings
-sio = socketio.AsyncServer(
-    async_mode='asgi',
-    cors_allowed_origins="*",
-    logger=False,
-    engineio_logger=False,
-    max_http_buffer_size=1000000,  # 1MB
-    ping_timeout=60,
-    ping_interval=25
-)
-
-# Wrap with FastAPI
-def create_socketio_app(app: FastAPI):
-    return socketio.ASGIApp(sio, other_asgi_app=app)
-```
-
-## Best Practices
-
-
-1. **Default namespace only** - Never use custom namespaces like `/chat` or `/project`
-2. **Rooms for isolation** - Use rooms to group related clients
-3. **Clear room naming** - Use IDs like `project_abc123` or descriptive names like `project_list`
-4. **Join on connect** - Add clients to appropriate rooms immediately after connection
-5. **Leave on disconnect** - Socket.IO handles room cleanup automatically
-6. **Broadcast to rooms** - Target specific audiences with `room=room_id`
-
-
-### Room Management Best Practices
-
-
-
-
-```python
-@sio.event
-async def join_project(sid, data):
-    """Join a project room for real-time updates."""
-    project_id = data.get('project_id')
-    if project_id:
-        # Join the project-specific room
-        await sio.enter_room(sid, project_id)
-        
-        # Send current state to the new member
-        tasks = await get_project_tasks(project_id)
-        await sio.emit('initial_tasks', tasks, to=sid)
-        
-        logger.info(f"Client {sid} joined project room {project_id}")
-
-@sio.event  
-async def subscribe_projects(sid, data=None):
-    """Subscribe to project list updates."""
-    await sio.enter_room(sid, 'project_list')
-    
-    # Send current project list
-    projects = await get_all_projects()
-    await sio.emit('projects_update', {'projects': projects}, to=sid)
-```
-
-
-
-
-```python
-async def broadcast_task_update(project_id: str, event_type: str, task_data: dict):
-    """Broadcast task updates to all project members."""
-    await sio.emit(event_type, task_data, room=project_id)
-
-async def broadcast_project_list_update():
-    """Notify all project list subscribers."""
-    projects = await get_all_projects()
-    await sio.emit('projects_update', {'projects': projects}, room='project_list')
-
-async def broadcast_progress_update(progress_id: str, progress_data: dict):
-    """Update progress subscribers."""
-    await sio.emit('progress_update', progress_data, room=progress_id)
-```
-
-
-
-
-```python
-@sio.event
-async def leave_project(sid, data):
-    """Leave a project room."""
-    project_id = data.get('project_id')
-    if project_id:
-        await sio.leave_room(sid, project_id)
-        logger.info(f"Client {sid} left project room {project_id}")
-
-@sio.event
-async def disconnect(sid):
-    """Handle client disconnection."""
-    # Socket.IO automatically removes client from all rooms
-    logger.info(f"Client {sid} disconnected")
-```
-
-
-
-
-
-- **Don't use namespaces** - Stick to the default `/` namespace
-- **Don't broadcast to all** - Use rooms to target specific audiences  
-- **Don't forget room cleanup** - Let Socket.IO handle it automatically
-- **Don't create custom reconnection logic** - Socket.IO handles it
-
-
-## Common Patterns
-
-### Task Updates
-```python
-# In task service
-async def create_task(...):
-    task = await db.create_task(...)
-    await broadcast_task_update(task.project_id, 'task_created', task)
-    return task
-```
-
-### Progress Tracking
-```python
-# In crawl service
-async def update_progress(progress_id: str, percentage: int):
-    await broadcast_crawl_progress(progress_id, {
-        'percentage': percentage,
-        'status': 'crawling',
-        'timestamp': datetime.now().isoformat()
-    })
-```
-
-### Crawl Cancellation
-```python
-# Client-side stop request
-ws.send({
-    type: 'crawl_stop',
-    data: { progress_id: progressId }
-});
-
-# Server-side handler
-@sio.event
-async def crawl_stop(sid, data):
-    progress_id = data.get('progress_id')
-    
-    # Emit immediate feedback
-    await sio.emit('crawl:stopping', {
-        'progressId': progress_id,
-        'status': 'stopping',
-        'message': 'Stopping crawl operation...'
-    }, room=progress_id)
-    
-    # Cancel orchestration and asyncio task
-    orchestration = get_active_orchestration(progress_id)
-    if orchestration:
-        orchestration.cancel()
-    
-    # Cancel asyncio task if exists
-    if progress_id in active_crawl_tasks:
-        task = active_crawl_tasks[progress_id]
-        if not task.done():
-            task.cancel()
-    
-    # Emit completion
-    await sio.emit('crawl:stopped', {
-        'progressId': progress_id,
-        'status': 'cancelled',
-        'message': 'Crawl operation cancelled',
-        'timestamp': datetime.utcnow().isoformat()
-    }, room=progress_id)
-```
-
-### Async Progress Callbacks
-
-
-When passing progress callbacks to services, ensure proper async handling:
-
-```python
-# ❌ WRONG - Creates unawaited coroutine
-progress_callback=lambda data: update_crawl_progress(progress_id, data)
-
-# ✅ CORRECT - Properly schedules async execution
-progress_callback=lambda data: asyncio.create_task(update_crawl_progress(progress_id, data))
-```
-
-This pattern is essential when services need to report progress through async Socket.IO broadcasts.
-
-
-## Room-Based Architecture Summary
-
-
-Archon follows modern Socket.IO patterns with:
-- **Default namespace only** - No custom namespaces like `/chat` or `/project`
-- **Room-based isolation** - Each feature uses specific rooms for targeted communication
-- **Automatic cleanup** - Socket.IO handles room membership and reconnection
-- **Simple event names** - Clear, descriptive event names for better debugging
-
-
-### Key Benefits
-
-1. **Scalability**: Rooms allow targeting specific user groups without broadcasting to all
-2. **Isolation**: Project updates don't affect users in other projects
-3. **Reliability**: Socket.IO handles reconnection and room re-joining automatically
-4. **Simplicity**: No namespace complexity, just rooms within the default namespace
-5. **Performance**: Targeted broadcasts reduce unnecessary network traffic
-
-### Architecture Diagram
-
-```mermaid
-graph TB
-    Client1[Client 1] --> Namespace[Default Namespace '/']
-    Client2[Client 2] --> Namespace
-    Client3[Client 3] --> Namespace
-    
-    Namespace --> ProjectRoom[Project Room 'abc123']
-    Namespace --> ListRoom[Project List Room 'project_list']
-    Namespace --> ProgressRoom[Progress Room 'progress_789']
-    
-    ProjectRoom --> Client1
-    ListRoom --> Client1
-    ListRoom --> Client2
-    ProgressRoom --> Client3
-```
-
-## That's It!
-
-No namespaces. No complex patterns. Room-based organization within the default namespace. Simple events with clear targeting. Total complexity: ~100 lines of Socket.IO code for a production-ready real-time system.
\ No newline at end of file
diff --git a/docs/docs/testing-python-strategy.mdx b/docs/docs/testing-python-strategy.mdx
deleted file mode 100644
index 1290c85f..00000000
--- a/docs/docs/testing-python-strategy.mdx
+++ /dev/null
@@ -1,441 +0,0 @@
----
-title: Python Testing Strategy
-sidebar_position: 9
----
-
-# Python Testing Strategy with pytest
-
-This document outlines Archon's Python testing strategy for our multi-container architecture, emphasizing simplicity and effectiveness.
-
-## 🎯 Testing Philosophy
-
-Our Python testing follows these core principles:
-
-1. **Fast Tests**: Each test runs in milliseconds, entire suite in <30 seconds
-2. **Simple Names**: `test___` pattern
-3. **Independent Tests**: No shared state, each test is self-contained
-4. **Minimal Fixtures**: Only essential mocks, no complex hierarchies
-5. **Container Isolation**: Test each container's boundaries separately
-
-## 📁 Multi-Container Test Structure
-
-```
-python/tests/
-├── conftest.py              # Minimal shared fixtures
-├── pytest.ini               # Simple pytest configuration
-├── server/                  # Server container tests (FastAPI + Socket.IO)
-│   ├── test_api.py         # API endpoint tests
-│   ├── test_services.py    # Service layer tests
-│   └── test_socketio.py    # Socket.IO event tests
-├── mcp/                     # MCP container tests
-│   ├── test_server.py      # MCP server lifecycle
-│   └── test_tools.py       # Tool execution tests
-├── agents/                  # Agents container tests
-│   ├── test_rag.py         # RAG agent tests
-│   └── test_document.py    # Document agent tests
-└── integration/             # Cross-container tests
-    └── test_workflows.py   # End-to-end scenarios
-```
-
-## 🔧 Minimal Configuration
-
-### pytest.ini
-
-```ini
-[pytest]
-testpaths = tests
-python_files = test_*.py
-python_functions = test_*
-addopts = -v --tb=short --strict-markers
-markers =
-    server: Server container tests
-    mcp: MCP container tests
-    agents: Agents container tests
-    integration: Cross-container tests
-    slow: Slow tests (skip with -m "not slow")
-asyncio_mode = auto
-```
-
-### pyproject.toml
-
-```toml
-[project.optional-dependencies]
-test = [
-    "pytest>=8.0.0",
-    "pytest-asyncio>=0.21.0",
-    "pytest-mock>=3.12.0",
-    "httpx>=0.24.0",
-    "pytest-cov>=4.1.0",
-]
-
-[tool.pytest.ini_options]
-testpaths = ["tests"]
-addopts = [
-    "-v",
-    "--tb=short",
-    "--cov=src",
-    "--cov-report=term-missing:skip-covered",
-    "--cov-fail-under=80"
-]
-
-[tool.coverage.run]
-source = ["src"]
-omit = ["*/tests/*", "*/__init__.py"]
-```
-
-## 🧪 Container-Specific Testing Patterns
-
-### 1. Server Container Tests (FastAPI + Socket.IO)
-
-```python
-# tests/server/test_api.py
-import pytest
-from httpx import AsyncClient
-
-@pytest.mark.server
-class TestKnowledgeAPI:
-    """API contract tests - verify endpoint behavior without implementation details."""
-    
-    async def test_upload_document_returns_success(self, client: AsyncClient):
-        """Upload endpoint should return 200 with document_id."""
-        # Arrange
-        files = {"file": ("test.pdf", b"PDF content", "application/pdf")}
-        
-        # Act
-        response = await client.post("/api/documents/upload", files=files)
-        
-        # Assert
-        assert response.status_code == 200
-        assert "document_id" in response.json()
-    
-    async def test_upload_invalid_file_returns_400(self, client: AsyncClient):
-        """Upload endpoint should reject invalid files."""
-        # Arrange
-        files = {"file": ("test.exe", b"EXE content", "application/x-executable")}
-        
-        # Act
-        response = await client.post("/api/documents/upload", files=files)
-        
-        # Assert
-        assert response.status_code == 400
-```
-
-```python
-# tests/server/test_socketio.py
-import pytest
-from unittest.mock import AsyncMock, patch
-
-@pytest.mark.server
-class TestSocketIO:
-    """Test Socket.IO events with focus on room management and broadcasting."""
-    
-    @patch('src.server.socketio_app.sio')
-    async def test_crawl_subscribe_joins_room(self, mock_sio):
-        """crawl_subscribe should add client to progress room."""
-        # Arrange
-        sid = "test-sid-123"
-        progress_id = "progress-456"
-        
-        # Act
-        from src.server.fastapi.socketio_handlers import crawl_subscribe
-        await crawl_subscribe(sid, {"progress_id": progress_id})
-        
-        # Assert
-        mock_sio.enter_room.assert_called_once_with(sid, progress_id)
-```
-
-### 2. MCP Container Tests
-
-```python
-# tests/mcp/test_tools.py
-import pytest
-import json
-
-@pytest.mark.mcp
-class TestMCPTools:
-    """Test MCP tools with focus on input/output contracts."""
-    
-    async def test_health_check_returns_status(self, mcp_server):
-        """health_check tool should return system status."""
-        # Act
-        result = await mcp_server.call_tool("health_check", {})
-        
-        # Assert
-        assert len(result) > 0
-        data = json.loads(result[0].text)
-        assert data["status"] in ["healthy", "degraded", "unhealthy"]
-    
-    async def test_manage_project_creates_project(self, mcp_server):
-        """manage_project with action=create should return project."""
-        # Arrange
-        params = {
-            "action": "create",
-            "title": "Test Project"
-        }
-        
-        # Act
-        result = await mcp_server.call_tool("manage_project", params)
-        
-        # Assert
-        data = json.loads(result[0].text)
-        assert data["success"] is True
-        assert "project_id" in data
-```
-
-### 3. Agents Container Tests
-
-```python
-# tests/agents/test_rag.py
-import pytest
-
-@pytest.mark.agents
-class TestRAGAgent:
-    """Test RAG agent query/response functionality."""
-    
-    async def test_rag_query_returns_results(self, rag_agent_client):
-        """RAG query should return relevant documents."""
-        # Arrange
-        query = "How to implement authentication?"
-        
-        # Act
-        response = await rag_agent_client.post("/query", json={"query": query})
-        
-        # Assert
-        assert response.status_code == 200
-        data = response.json()
-        assert "results" in data
-        assert len(data["results"]) > 0
-```
-
-### 4. Integration Tests
-
-```python
-# tests/integration/test_workflows.py
-import pytest
-
-@pytest.mark.integration
-class TestCrossContainerWorkflows:
-    """Test complete workflows across containers."""
-    
-    async def test_crawl_to_query_workflow(self, server_client, mcp_client):
-        """Test full crawl -> store -> query workflow."""
-        # Step 1: Start crawl via Server
-        crawl_response = await server_client.post("/api/knowledge/crawl", json={
-            "url": "https://example.com"
-        })
-        assert crawl_response.status_code == 200
-        progress_id = crawl_response.json()["progress_id"]
-        
-        # Step 2: Wait for completion (simplified)
-        await asyncio.sleep(2)
-        
-        # Step 3: Query via MCP
-        result = await mcp_client.call_tool("perform_rag_query", {
-            "query": "What is example.com about?",
-            "source": "example.com"
-        })
-        
-        # Assert
-        assert len(result) > 0
-        data = json.loads(result[0].text)
-        assert data["success"] is True
-```
-
-## 🔧 Minimal Fixtures
-
-```python
-# tests/conftest.py - Keep it simple!
-import pytest
-from httpx import AsyncClient, ASGITransport
-from unittest.mock import AsyncMock
-
-@pytest.fixture
-async def server_client():
-    """Test client for Server container."""
-    from src.server.main import app
-    transport = ASGITransport(app=app)
-    async with AsyncClient(transport=transport, base_url="http://test") as client:
-        yield client
-
-@pytest.fixture
-async def mcp_server():
-    """Mock MCP server for testing tools."""
-    from src.mcp.mcp_server import ArchonMCPServer
-    server = ArchonMCPServer()
-    # Mock dependencies
-    server.supabase_client = AsyncMock()
-    server.supabase_client.from_.return_value.select.return_value.execute.return_value.data = []
-    return server
-
-@pytest.fixture
-def mock_supabase():
-    """Simple Supabase mock."""
-    mock = AsyncMock()
-    mock.from_.return_value.select.return_value.execute.return_value.data = []
-    mock.from_.return_value.insert.return_value.execute.return_value.data = [{"id": "test-123"}]
-    return mock
-
-# That's it! No complex factories, no session management, just the basics.
-```
-
-## 🚀 Testing Commands
-
-### Running Tests
-
-```bash
-# Run all tests
-pytest
-
-# Run with coverage
-pytest --cov=src --cov-report=html
-
-# Run specific test categories
-pytest -m unit              # Unit tests only
-pytest -m integration       # Integration tests only
-pytest -m "not slow"       # Skip slow tests
-
-# Run specific test file or directory
-pytest tests/unit/test_services/
-pytest tests/unit/test_services/test_project_service.py::TestProjectService::test_create_project_with_valid_data_should_succeed
-
-# Run with different verbosity
-pytest -v     # Verbose output
-pytest -vv    # Very verbose output
-pytest -q     # Quiet mode
-
-# Run tests in parallel
-pytest -n auto  # Requires pytest-xdist
-
-# Run with specific Python warnings
-pytest -W error  # Treat warnings as errors
-```
-
-### Debugging Tests
-
-```bash
-# Drop into debugger on failure
-pytest --pdb
-
-# Show local variables on failure
-pytest -l
-
-# Show full diff on assertion failure
-pytest -vv
-
-# Run only last failed tests
-pytest --lf
-
-# Run failed tests first, then others
-pytest --ff
-```
-
-## 📊 Code Coverage
-
-### Coverage Requirements
-
-- **Overall Coverage**: Minimum 80%
-- **Critical Paths**: 95%+ (authentication, payments, data operations)
-- **New Code**: 90%+ coverage required for all PRs
-
-### Coverage Reports
-
-```bash
-# Generate HTML coverage report
-pytest --cov=src --cov-report=html
-# Open htmlcov/index.html in browser
-
-# Generate terminal report
-pytest --cov=src --cov-report=term-missing
-
-# Generate XML for CI/CD
-pytest --cov=src --cov-report=xml
-
-# Check coverage thresholds
-pytest --cov=src --cov-fail-under=80
-```
-
-## 🔄 CI/CD Integration
-
-### GitHub Actions Workflow
-
-```yaml
-name: Python Tests
-
-on:
-  push:
-    branches: [main, develop]
-  pull_request:
-    branches: [main]
-
-jobs:
-  test:
-    runs-on: ubuntu-latest
-    strategy:
-      matrix:
-        python-version: ["3.11", "3.12"]
-
-    steps:
-    - uses: actions/checkout@v4
-    
-    - name: Set up Python
-      uses: actions/setup-python@v4
-      with:
-        python-version: ${{ matrix.python-version }}
-    
-    - name: Install dependencies
-      run: |
-        python -m pip install --upgrade pip
-        pip install -e ".[test]"
-    
-    - name: Run tests with coverage
-      run: |
-        pytest --cov=src --cov-report=xml --cov-report=term
-    
-    - name: Upload coverage to Codecov
-      uses: codecov/codecov-action@v3
-      with:
-        file: ./coverage.xml
-        fail_ci_if_error: true
-```
-
-## 🎯 Testing Checklist
-
-### For New Features
-
-- [ ] Write unit tests for all new functions/methods
-- [ ] Write integration tests for API endpoints
-- [ ] Add edge case tests
-- [ ] Add error handling tests
-- [ ] Update or add fixtures as needed
-- [ ] Ensure 90%+ coverage for new code
-- [ ] Run full test suite locally
-- [ ] Update documentation
-
-### For Bug Fixes
-
-- [ ] Write a failing test that reproduces the bug
-- [ ] Fix the bug
-- [ ] Ensure test now passes
-- [ ] Add regression tests
-- [ ] Check for similar issues elsewhere
-- [ ] Run related test suites
-
-## 📚 Best Practices Summary
-
-1. **Use Descriptive Test Names**: Test names should describe what is being tested and expected outcome
-2. **Follow AAA Pattern**: Arrange, Act, Assert for clear test structure
-3. **One Assertion Per Test**: Keep tests focused on single behavior
-4. **Use Fixtures Wisely**: Share setup code but avoid over-coupling
-5. **Mock External Dependencies**: Keep tests fast and deterministic
-6. **Parameterize Similar Tests**: Use `@pytest.mark.parametrize` for test variations
-7. **Test Edge Cases**: Include boundary conditions and error scenarios
-8. **Keep Tests Fast**: Aim for entire suite to run in under 5 minutes
-9. **Use Markers**: Organize tests with markers for selective execution
-10. **Continuous Improvement**: Regularly review and refactor tests
-
----
-
-For more details, see:
-- [Testing Overview](./testing) - General testing documentation
-- [Vitest Strategy](./testing-vitest-strategy) - Frontend testing with Vitest
-- [API Reference](./api-reference) - API endpoint documentation
\ No newline at end of file
diff --git a/docs/docs/testing-vitest-strategy.mdx b/docs/docs/testing-vitest-strategy.mdx
deleted file mode 100644
index 1c304080..00000000
--- a/docs/docs/testing-vitest-strategy.mdx
+++ /dev/null
@@ -1,912 +0,0 @@
----
-title: Vitest Testing Strategy
-sidebar_position: 10
----
-
-# Vitest Testing Strategy for React & TypeScript
-
-This document outlines Archon's comprehensive frontend testing strategy using Vitest with React and TypeScript, incorporating the latest best practices and our current implementation.
-
-## 🎯 Testing Philosophy
-
-Our frontend testing follows these core principles:
-
-1. **User-Centric Testing**: Test behavior from the user's perspective, not implementation details
-2. **Component Isolation**: Each component test should be independent
-3. **TypeScript Safety**: Leverage TypeScript for type-safe tests
-4. **Fast Feedback**: Vitest's speed enables rapid test-driven development
-5. **Meaningful Coverage**: Focus on critical user paths over coverage numbers
-6. **Socket.IO Safety**: Never create real Socket.IO connections in tests
-
-## 📁 Current Project Structure
-
-```
-archon-ui-main/
-├── vitest.config.ts          # Vitest configuration with coverage
-├── vite.config.ts            # Dev server with test endpoints
-├── test/
-│   ├── setup.ts              # Enhanced test setup with comprehensive mocks
-│   ├── README_TEST_GUIDE.md  # Comprehensive testing guide
-│   ├── TEST_STRUCTURE.md     # File structure documentation
-│   ├── components/           # Component tests (68 files planned)
-│   │   ├── ui/               # UI component tests (8 files)
-│   │   ├── layouts/          # Layout component tests (3 files)
-│   │   ├── mcp/              # MCP component tests (3 files)
-│   │   ├── settings/         # Settings component tests (5 files)
-│   │   ├── project-tasks/    # Project task component tests (10 files)
-│   │   ├── knowledge-base/   # Knowledge component tests (1 file)
-│   │   └── animations/       # Animation component tests (1 file)
-│   ├── services/             # Service layer tests (12 files)
-│   ├── pages/                # Page component tests (5 files)
-│   ├── hooks/                # Custom hook tests (2 files)
-│   ├── contexts/             # Context provider tests (3 files)
-│   ├── lib/                  # Utility function tests (2 files)
-│   ├── integration/          # Integration tests (8 files)
-│   ├── e2e/                  # End-to-end tests (5 files)
-│   ├── performance/          # Performance tests (3 files)
-│   ├── fixtures/             # Test data and mocks
-│   └── utils/                # Test utilities
-└── coverage/                 # Generated coverage reports
-    ├── index.html            # HTML coverage report
-    ├── coverage-summary.json # Coverage summary for UI
-    └── test-results.json     # Test execution results
-```
-
-## 🔧 Configuration
-
-### vitest.config.ts
-
-```typescript
-import { defineConfig } from 'vitest/config'
-import react from '@vitejs/plugin-react'
-import { resolve } from 'path'
-
-export default defineConfig({
-  plugins: [react()],
-  resolve: {
-    alias: {
-      '@': resolve(__dirname, './src'),
-      '@test': resolve(__dirname, './test'),
-    },
-  },
-  test: {
-    globals: true,
-    environment: 'jsdom',
-    setupFiles: './test/setup.ts',
-    include: ['test/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
-    exclude: ['node_modules', 'dist', '.git', '.cache'],
-    reporters: ['default', 'json'],
-    outputFile: { 
-      json: './coverage/test-results.json' 
-    },
-    coverage: {
-      provider: 'v8',
-      reporter: [
-        'text-summary', 
-        'html', 
-        'json', 
-        'json-summary',
-        'lcov'
-      ],
-      reportsDirectory: './coverage',
-      thresholds: {
-        global: {
-          statements: 70,
-          branches: 65,
-          functions: 70,
-          lines: 70,
-        },
-        'src/services/**/*.ts': {
-          statements: 80,
-          branches: 75,
-          functions: 80,
-          lines: 80,
-        }
-      },
-      exclude: [
-        'src/**/*.d.ts',
-        'src/env.d.ts',
-        'src/types/**',
-        'test/**/*',
-        'node_modules/**',
-      ],
-    },
-    // Improve test performance
-    pool: 'forks',
-    poolOptions: {
-      forks: {
-        singleFork: true,
-      },
-    },
-  },
-})
-```
-
-### Enhanced Test Setup (test/setup.ts)
-
-```typescript
-import '@testing-library/jest-dom'
-import { cleanup } from '@testing-library/react'
-import { afterEach, beforeAll, afterAll, vi } from 'vitest'
-import React from 'react'
-
-// Clean up after each test
-afterEach(() => {
-  cleanup()
-  vi.clearAllMocks()
-})
-
-// Comprehensive Lucide React icon mocks (170+ icons)
-vi.mock('lucide-react', () => ({
-  // Core UI icons
-  Settings: ({ className, ...props }: any) => 
-    React.createElement('span', { 
-      className, 
-      'data-testid': 'settings-icon',
-      'data-lucide': 'Settings',
-      ...props 
-    }, 'Settings'),
-  
-  User: ({ className, ...props }: any) => 
-    React.createElement('span', { 
-      className, 
-      'data-testid': 'user-icon',
-      'data-lucide': 'User',
-      ...props 
-    }, 'User'),
-  
-  Bot: ({ className, ...props }: any) => 
-    React.createElement('span', { 
-      className, 
-      'data-testid': 'bot-icon',
-      'data-lucide': 'Bot',
-      ...props 
-    }, 'Bot'),
-  
-  // Action icons
-  Play: ({ className, ...props }: any) => 
-    React.createElement('span', { 
-      className, 
-      'data-testid': 'play-icon',
-      'data-lucide': 'Play',
-      ...props 
-    }, 'Play'),
-  
-  Pause: ({ className, ...props }: any) => 
-    React.createElement('span', { 
-      className, 
-      'data-testid': 'pause-icon',
-      'data-lucide': 'Pause',
-      ...props 
-    }, 'Pause'),
-  
-  // Navigation icons
-  ChevronRight: ({ className, ...props }: any) => 
-    React.createElement('span', { 
-      className, 
-      'data-testid': 'chevron-right-icon',
-      'data-lucide': 'ChevronRight',
-      ...props 
-    }, 'ChevronRight'),
-  
-  // ... and 164+ more icon mocks for complete coverage
-}))
-
-// Enhanced Socket.IO mocking with lifecycle simulation
-export class MockSocketIO {
-  static CONNECTING = 0
-  static OPEN = 1
-  static CLOSING = 2
-  static CLOSED = 3
-
-  url: string
-  readyState: number = MockSocketIO.CONNECTING
-  onopen: ((event: Event) => void) | null = null
-  onclose: ((event: CloseEvent) => void) | null = null
-  onmessage: ((event: MessageEvent) => void) | null = null
-  onerror: ((event: Event) => void) | null = null
-
-  constructor(url: string) {
-    this.url = url
-    // Simulate connection opening asynchronously
-    setTimeout(() => {
-      this.readyState = MockSocketIO.OPEN
-      if (this.onopen) {
-        this.onopen(new Event('open'))
-      }
-    }, 0)
-  }
-
-  send = vi.fn()
-  close = vi.fn(() => {
-    this.readyState = MockSocketIO.CLOSED
-    if (this.onclose) {
-      this.onclose(new CloseEvent('close'))
-    }
-  })
-
-  addEventListener = vi.fn()
-  removeEventListener = vi.fn()
-  dispatchEvent = vi.fn()
-}
-
-// Replace global Socket.IO with mock
-global.io = () => new MockSocketIO('') as any
-
-// Enhanced Socket.IO service mock
-vi.mock('@/services/websocketService', () => ({
-  websocketService: {
-    connect: vi.fn().mockResolvedValue(undefined),
-    disconnect: vi.fn(),
-    subscribe: vi.fn().mockReturnValue(vi.fn()),
-    send: vi.fn(),
-    getConnectionState: vi.fn().mockReturnValue('connected'),
-    waitForConnection: vi.fn().mockResolvedValue(undefined),
-    isConnected: vi.fn().mockReturnValue(true),
-    reconnect: vi.fn().mockResolvedValue(undefined)
-  }
-}))
-
-// Mock window.matchMedia
-Object.defineProperty(window, 'matchMedia', {
-  writable: true,
-  value: vi.fn().mockImplementation(query => ({
-    matches: false,
-    media: query,
-    onchange: null,
-    addListener: vi.fn(),
-    removeListener: vi.fn(),
-    addEventListener: vi.fn(),
-    removeEventListener: vi.fn(),
-    dispatchEvent: vi.fn(),
-  })),
-})
-
-// Mock IntersectionObserver
-global.IntersectionObserver = vi.fn().mockImplementation(() => ({
-  observe: vi.fn(),
-  unobserve: vi.fn(),
-  disconnect: vi.fn(),
-}))
-
-// Mock ResizeObserver
-global.ResizeObserver = vi.fn().mockImplementation(() => ({
-  observe: vi.fn(),
-  unobserve: vi.fn(),
-  disconnect: vi.fn(),
-}))
-
-// Mock scrollIntoView
-Element.prototype.scrollIntoView = vi.fn()
-```
-
-## 🧪 Testing Patterns
-
-### 1. Component Testing
-
-```typescript
-// test/components/settings/TestStatus.test.tsx
-import { describe, it, expect, vi, beforeEach } from 'vitest'
-import { render, screen, waitFor } from '@testing-library/react'
-import userEvent from '@testing-library/user-event'
-import { TestStatus } from '@/components/settings/TestStatus'
-import { testService } from '@/services/testService'
-
-// Mock the test service
-vi.mock('@/services/testService')
-
-describe('TestStatus', () => {
-  beforeEach(() => {
-    vi.clearAllMocks()
-  })
-
-  it('should show Test Results button after successful test run', async () => {
-    // Arrange
-    const mockCoverageData = {
-      total: { statements: { pct: 85 }, branches: { pct: 80 } }
-    }
-    const mockTestResults = {
-      numTotalTests: 10,
-      numPassedTests: 8,
-      numFailedTests: 2
-    }
-    
-    vi.mocked(testService.hasTestResults).mockReturnValue(true)
-    vi.mocked(testService.getCoverageData).mockResolvedValue(mockCoverageData)
-    vi.mocked(testService.getTestResults).mockResolvedValue(mockTestResults)
-    
-    // Act
-    render()
-    
-    // Assert
-    await waitFor(() => {
-      expect(screen.getByText('Test Results')).toBeInTheDocument()
-    })
-  })
-
-  it('should hide Test Results button when no test results exist', () => {
-    // Arrange
-    vi.mocked(testService.hasTestResults).mockReturnValue(false)
-    
-    // Act
-    render()
-    
-    // Assert
-    expect(screen.queryByText('Test Results')).not.toBeInTheDocument()
-  })
-
-  it('should open Test Results Modal when button is clicked', async () => {
-    // Arrange
-    const user = userEvent.setup()
-    vi.mocked(testService.hasTestResults).mockReturnValue(true)
-    
-    render()
-    
-    // Act
-    const button = screen.getByText('Test Results')
-    await user.click(button)
-    
-    // Assert
-    await waitFor(() => {
-      expect(screen.getByText('Test Health Score')).toBeInTheDocument()
-    })
-  })
-})
-```
-
-### 2. Service Testing with Socket.IO Safety
-
-```typescript
-// test/services/websocketService.test.ts
-import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
-import { websocketService } from '@/services/websocketService'
-
-// CRITICAL: Always mock Socket.IO service
-vi.mock('@/services/websocketService', () => ({
-  websocketService: {
-    connect: vi.fn(),
-    disconnect: vi.fn(),
-    subscribe: vi.fn(),
-    send: vi.fn(),
-    getConnectionState: vi.fn()
-  }
-}))
-
-describe('Socket.IO Service (Mocked)', () => {
-  beforeEach(() => {
-    vi.clearAllMocks()
-  })
-
-  afterEach(() => {
-    // Critical: Clean up any subscriptions
-    vi.restoreAllMocks()
-  })
-
-  it('should handle connection lifecycle', async () => {
-    // Arrange
-    const mockCallback = vi.fn()
-    vi.mocked(websocketService.connect).mockResolvedValue(undefined)
-    vi.mocked(websocketService.subscribe).mockReturnValue(vi.fn())
-    
-    // Act
-    await websocketService.connect('/test-endpoint')
-    const unsubscribe = websocketService.subscribe('test-channel', mockCallback)
-    
-    // Assert
-    expect(websocketService.connect).toHaveBeenCalledWith('/test-endpoint')
-    expect(websocketService.subscribe).toHaveBeenCalledWith('test-channel', mockCallback)
-    expect(typeof unsubscribe).toBe('function')
-  })
-
-  it('should handle message subscription', () => {
-    // Arrange
-    const mockHandler = vi.fn()
-    const mockUnsubscribe = vi.fn()
-    vi.mocked(websocketService.subscribe).mockReturnValue(mockUnsubscribe)
-    
-    // Act
-    const unsubscribe = websocketService.subscribe('progress', mockHandler)
-    
-    // Assert
-    expect(websocketService.subscribe).toHaveBeenCalledWith('progress', mockHandler)
-    expect(unsubscribe).toBe(mockUnsubscribe)
-  })
-})
-```
-
-### 3. Hook Testing
-
-```typescript
-// test/hooks/useNeonGlow.test.ts
-import { renderHook, act } from '@testing-library/react'
-import { describe, it, expect, vi, beforeEach } from 'vitest'
-import { useNeonGlow } from '@/hooks/useNeonGlow'
-
-describe('useNeonGlow', () => {
-  beforeEach(() => {
-    vi.clearAllMocks()
-  })
-
-  it('should initialize with default glow state', () => {
-    // Act
-    const { result } = renderHook(() => useNeonGlow())
-    
-    // Assert
-    expect(result.current.isGlowing).toBe(false)
-    expect(typeof result.current.startGlow).toBe('function')
-    expect(typeof result.current.stopGlow).toBe('function')
-  })
-
-  it('should handle glow activation', () => {
-    // Arrange
-    const { result } = renderHook(() => useNeonGlow())
-    
-    // Act
-    act(() => {
-      result.current.startGlow()
-    })
-    
-    // Assert
-    expect(result.current.isGlowing).toBe(true)
-  })
-
-  it('should handle glow deactivation', () => {
-    // Arrange
-    const { result } = renderHook(() => useNeonGlow())
-    
-    // Act
-    act(() => {
-      result.current.startGlow()
-    })
-    act(() => {
-      result.current.stopGlow()
-    })
-    
-    // Assert
-    expect(result.current.isGlowing).toBe(false)
-  })
-})
-```
-
-### 4. Integration Testing
-
-```typescript
-// test/integration/test-results-flow.test.tsx
-import { describe, it, expect, beforeEach } from 'vitest'
-import { render, screen, waitFor } from '@testing-library/react'
-import userEvent from '@testing-library/user-event'
-import { SettingsPage } from '@/pages/SettingsPage'
-import { testService } from '@/services/testService'
-
-vi.mock('@/services/testService')
-
-describe('Test Results Integration Flow', () => {
-  beforeEach(() => {
-    vi.clearAllMocks()
-  })
-
-  it('should show complete test results workflow', async () => {
-    // Arrange
-    const user = userEvent.setup()
-    const mockCoverageData = {
-      total: { 
-        statements: { pct: 85 }, 
-        branches: { pct: 80 },
-        functions: { pct: 90 },
-        lines: { pct: 85 }
-      }
-    }
-    const mockTestResults = {
-      numTotalTests: 20,
-      numPassedTests: 18,
-      numFailedTests: 2,
-      testResults: [
-        { 
-          name: 'Component Tests', 
-          status: 'passed',
-          numPassedTests: 15,
-          numFailedTests: 0
-        },
-        { 
-          name: 'Service Tests', 
-          status: 'failed',
-          numPassedTests: 3,
-          numFailedTests: 2
-        }
-      ]
-    }
-    
-    vi.mocked(testService.hasTestResults).mockReturnValue(true)
-    vi.mocked(testService.getCoverageData).mockResolvedValue(mockCoverageData)
-    vi.mocked(testService.getTestResults).mockResolvedValue(mockTestResults)
-    
-    // Act
-    render()
-    
-    // Navigate to test results
-    const testResultsButton = await screen.findByText('Test Results')
-    await user.click(testResultsButton)
-    
-    // Assert modal appears with comprehensive data
-    await waitFor(() => {
-      expect(screen.getByText('Test Health Score')).toBeInTheDocument()
-      expect(screen.getByText('90%')).toBeInTheDocument() // Health score
-      expect(screen.getByText('18 Passed')).toBeInTheDocument()
-      expect(screen.getByText('2 Failed')).toBeInTheDocument()
-      expect(screen.getByText('Statements: 85%')).toBeInTheDocument()
-      expect(screen.getByText('Component Tests')).toBeInTheDocument()
-      expect(screen.getByText('Service Tests')).toBeInTheDocument()
-    })
-  })
-})
-```
-
-## 🎯 UI Test Runner Integration
-
-Archon includes a sophisticated UI test runner accessible from the Settings page:
-
-### Test Results Modal Features
-
-```typescript
-// Example of testing the Test Results Modal
-describe('TestResultsModal', () => {
-  it('should display comprehensive test health information', async () => {
-    const mockData = {
-      testHealthScore: 90,
-      testSummary: {
-        totalTests: 20,
-        passedTests: 18,
-        failedTests: 2,
-        duration: 15.5
-      },
-      coverage: {
-        statements: 85,
-        branches: 80,
-        functions: 90,
-        lines: 85
-      },
-      testSuites: [
-        { name: 'Components', status: 'passed', passed: 15, failed: 0 },
-        { name: 'Services', status: 'failed', passed: 3, failed: 2 }
-      ]
-    }
-
-    render()
-
-    expect(screen.getByText('Test Health Score: 90%')).toBeInTheDocument()
-    expect(screen.getByText('18 Passed, 2 Failed')).toBeInTheDocument()
-    expect(screen.getByText('Duration: 15.5s')).toBeInTheDocument()
-    
-    // Coverage progress bars
-    expect(screen.getByText('Statements: 85%')).toBeInTheDocument()
-    expect(screen.getByText('Branches: 80%')).toBeInTheDocument()
-    
-    // Individual test suites
-    expect(screen.getByText('Components')).toBeInTheDocument()
-    expect(screen.getByText('Services')).toBeInTheDocument()
-  })
-})
-```
-
-## 🚀 Quick Start
-
-### Running Tests
-
-```bash
-# Navigate to frontend directory
-cd archon-ui-main
-
-# Run all tests
-npm test
-
-# Run tests with coverage and results generation
-npm run test:coverage
-
-# Run tests in watch mode
-npm test -- --watch
-
-# Run tests with UI interface
-npm run test:ui
-
-# Run specific test file
-npm test -- TestStatus.test.tsx
-
-# Run tests matching pattern
-npm test -- --grep "should handle"
-
-# Run tests for specific directory
-npm test -- test/components/settings/
-```
-
-### Test Development Workflow
-
-```bash
-# 1. Create test file alongside component
-touch test/components/ui/NewComponent.test.tsx
-
-# 2. Run test in watch mode during development
-npm test -- --watch NewComponent.test.tsx
-
-# 3. Check coverage for the specific component
-npm run test:coverage -- --reporter=text NewComponent.test.tsx
-
-# 4. Run all tests before committing
-npm run test:coverage
-```
-
-## 📊 Coverage Analysis
-
-### Current Coverage Goals
-
-```typescript
-// vitest.config.ts coverage thresholds
-coverage: {
-  thresholds: {
-    global: {
-      statements: 70,
-      branches: 65,
-      functions: 70,
-      lines: 70,
-    },
-    'src/services/**/*.ts': {
-      statements: 80,
-      branches: 75,
-      functions: 80,
-      lines: 80,
-    }
-  }
-}
-```
-
-### Coverage Reports Generated
-
-1. **HTML Report**: `coverage/index.html` - Interactive coverage browser
-2. **JSON Summary**: `coverage/coverage-summary.json` - For UI integration
-3. **LCOV**: `coverage/lcov.info` - For CI/CD integration
-4. **Text Summary**: Console output during test runs
-
-### Using Coverage Data in UI
-
-```typescript
-// Example of how Test Results Modal consumes coverage data
-const TestResultsModal = () => {
-  const [coverageData, setCoverageData] = useState(null)
-  
-  useEffect(() => {
-    const loadCoverageData = async () => {
-      try {
-        const data = await testService.getCoverageData()
-        setCoverageData(data)
-      } catch (error) {
-        console.error('Failed to load coverage data:', error)
-      }
-    }
-    
-    loadCoverageData()
-  }, [])
-
-  const calculateHealthScore = (testResults, coverage) => {
-    const testSuccessRate = (testResults.numPassedTests / testResults.numTotalTests) * 100
-    const avgCoverage = (coverage.statements + coverage.branches + coverage.functions + coverage.lines) / 4
-    return Math.round((testSuccessRate + avgCoverage) / 2)
-  }
-  
-  // ... render logic
-}
-```
-
-## 🛠️ Socket.IO Testing Best Practices
-
-### ⚠️ Critical Safety Rules
-
-1. **NEVER create real Socket.IO connections in tests**
-2. **ALWAYS mock the websocketService module**
-3. **NEVER include Socket.IO functions in useCallback dependencies**
-4. **ALWAYS clean up subscriptions in afterEach**
-
-### Safe Socket.IO Testing Pattern
-
-```typescript
-// ✅ CORRECT: Always mock the service
-vi.mock('@/services/websocketService', () => ({
-  websocketService: {
-    connect: vi.fn().mockResolvedValue(undefined),
-    disconnect: vi.fn(),
-    subscribe: vi.fn().mockReturnValue(vi.fn()),
-    send: vi.fn(),
-    getConnectionState: vi.fn().mockReturnValue('connected')
-  }
-}))
-
-// ✅ CORRECT: Test Socket.IO interactions safely
-it('should handle Socket.IO message updates', async () => {
-  const mockCallback = vi.fn()
-  let capturedCallback: Function
-
-  vi.mocked(websocketService.subscribe).mockImplementation((channel, callback) => {
-    capturedCallback = callback
-    return vi.fn() // unsubscribe function
-  })
-
-  render()
-
-  // Simulate Socket.IO message
-  act(() => {
-    capturedCallback!({ type: 'progress', data: { percent: 50 } })
-  })
-
-  await waitFor(() => {
-    expect(screen.getByText('Progress: 50%')).toBeInTheDocument()
-  })
-})
-
-// ❌ WRONG: Never create real Socket.IO connections
-it('should connect to real Socket.IO', () => {
-  const socket = io('http://localhost:8080') // DON'T DO THIS
-  // This will break tests and potentially affect running services
-})
-```
-
-## 🎯 Test Implementation Status
-
-### Completed Tests ✅
-
-- `test/App.test.tsx` - Basic app rendering
-- `test/services/api.test.ts` - API service functionality
-- `test/services/mcpService.test.ts` - MCP service operations
-- `test/services/knowledgeBaseService.test.ts` - Knowledge base operations
-- `test/pages/MCPPage.test.tsx` - MCP page rendering
-- `test/pages/KnowledgeBasePage.test.tsx` - Knowledge base page
-- `test/pages/CrawlingProgress.test.tsx` - Crawling progress page
-
-### High Priority (Next Phase) 📝
-
-1. **Services Layer** (Critical)
-   - `socketioService.test.ts` - Socket.IO connection management
-   - `projectService.test.ts` - Project CRUD operations
-   - `testService.test.ts` - Test execution and results
-   - `credentialsService.test.ts` - Credentials management
-
-2. **Settings Components** (High)
-   - `TestStatus.test.tsx` - Test Results Modal integration
-   - `APIKeysSection.test.tsx` - API key management
-   - `FeaturesSection.test.tsx` - Feature toggles
-   - `RAGSettings.test.tsx` - RAG configuration
-
-3. **Project Components** (High)
-   - `TasksTab.test.tsx` - Task management interface
-   - `TaskTableView.test.tsx` - Task table functionality
-   - `TaskBoardView.test.tsx` - Kanban board interface
-
-### Coverage Progress
-
-- **Total Files Planned**: 68 test files
-- **Currently Implemented**: 7 files (10%)
-- **Target Coverage**: 80% overall, 90% for critical paths
-- **Current Coverage**: ~15% overall
-
-## 🔄 CI/CD Integration
-
-### GitHub Actions Workflow
-
-```yaml
-name: Frontend Tests
-
-on:
-  push:
-    branches: [main, develop]
-  pull_request:
-    branches: [main]
-
-jobs:
-  test:
-    runs-on: ubuntu-latest
-    
-    steps:
-    - uses: actions/checkout@v4
-    
-    - name: Setup Node.js
-      uses: actions/setup-node@v4
-      with:
-        node-version: '20'
-        cache: 'npm'
-        cache-dependency-path: archon-ui-main/package-lock.json
-    
-    - name: Install dependencies
-      working-directory: ./archon-ui-main
-      run: npm ci
-    
-    - name: Type check
-      working-directory: ./archon-ui-main
-      run: npm run type-check
-    
-    - name: Run tests with coverage
-      working-directory: ./archon-ui-main
-      run: npm run test:coverage
-    
-    - name: Upload coverage reports
-      uses: codecov/codecov-action@v3
-      with:
-        file: ./archon-ui-main/coverage/coverage-final.json
-        flags: frontend
-        fail_ci_if_error: true
-```
-
-## 📚 Best Practices Checklist
-
-### Before Writing Tests
-- [ ] Component/service is implemented and working
-- [ ] Identify critical user paths to test
-- [ ] Plan test scenarios (happy path, error cases, edge cases)
-- [ ] Ensure Socket.IO mocking is in place if needed
-
-### Writing Tests
-- [ ] Use descriptive test names (`should do X when Y happens`)
-- [ ] Follow AAA pattern (Arrange, Act, Assert)
-- [ ] Test user behavior, not implementation details
-- [ ] Mock external dependencies appropriately
-- [ ] Use proper TypeScript types in tests
-
-### After Writing Tests
-- [ ] Tests pass consistently
-- [ ] Coverage meets threshold requirements
-- [ ] No console errors or warnings
-- [ ] Tests run quickly (under 100ms per test ideally)
-- [ ] Clean up resources in afterEach hooks
-
-### Socket.IO-Specific Checklist
-- [ ] Socket.IO service is mocked, never real connections
-- [ ] Subscription cleanup is handled
-- [ ] No function references in useCallback dependencies
-- [ ] Connection state changes are tested
-- [ ] Error scenarios are covered
-
-## 🛠️ Troubleshooting Common Issues
-
-### Test Environment Issues
-
-```typescript
-// Issue: Icons not rendering in tests
-// Solution: Comprehensive Lucide React mocking in setup.ts
-
-// Issue: Socket.IO connection errors in tests
-// Solution: Always mock websocketService module
-
-// Issue: Async timing issues
-// Solution: Use waitFor and findBy queries
-await waitFor(() => {
-  expect(screen.getByText('Expected text')).toBeInTheDocument()
-})
-
-// Issue: State update warnings
-// Solution: Wrap state updates in act()
-act(() => {
-  // state updates
-})
-```
-
-### Coverage Issues
-
-```bash
-# Issue: Low coverage on specific files
-# Solution: Check what's not covered
-npm run test:coverage -- --reporter=text-summary
-
-# Issue: Coverage threshold failures
-# Solution: Either improve tests or adjust thresholds in vitest.config.ts
-```
-
-## 🔗 Related Documentation
-
-- **[Testing Overview](./testing)** - General testing strategy and architecture
-- **[Python Testing Strategy](./testing-python-strategy)** - Backend testing guide
-- **[Socket.IO Documentation](./socketio)** - Real-time communication patterns
-- **[UI Documentation](./ui)** - Component design and usage guidelines
-
----
-
-**Quick Navigation:**
-- 🚀 [Quick Start](#quick-start) - Get started with testing immediately
-- 🎯 [UI Test Runner Integration](#ui-test-runner-integration) - Use the Settings page test runner
-- 🛠️ [Socket.IO Testing](#socketio-testing-best-practices) - Safe Socket.IO testing patterns
-- 📊 [Coverage Analysis](#coverage-analysis) - Understanding and improving coverage
\ No newline at end of file
diff --git a/docs/docs/testing.mdx b/docs/docs/testing.mdx
deleted file mode 100644
index bed2058b..00000000
--- a/docs/docs/testing.mdx
+++ /dev/null
@@ -1,204 +0,0 @@
----
-title: Testing
-sidebar_position: 7
----
-
-# Testing
-
-Archon uses a comprehensive testing strategy across all services.
-
-## Testing Stack
-
-| Service | Framework | Test Types | Coverage Target |
-|---------|-----------|------------|-----------------|
-| **Frontend** | Vitest + React Testing Library | Unit, Component, Integration | 80% |
-| **Server** | Pytest + FastAPI TestClient | Unit, Integration, E2E | 85% |
-| **MCP** | Pytest | Unit, Protocol | 80% |
-| **Agents** | Pytest + PydanticAI | Unit, Agent behavior | 75% |
-
-## Running Tests
-
-### All Services
-```bash
-# Run all tests
-./scripts/test-all.sh
-
-# With coverage
-./scripts/test-all.sh --coverage
-```
-
-### Frontend Tests
-```bash
-cd ui
-npm test                 # Run tests
-npm run test:coverage    # With coverage
-npm run test:watch      # Watch mode
-```
-
-### Python Tests
-```bash
-cd python
-pytest                          # All tests
-pytest tests/test_server.py     # Specific file
-pytest -k "test_delete_source"  # Specific test
-pytest --cov=src               # With coverage
-```
-
-## Test Organization
-
-### Frontend Structure
-```
-ui/
-├── src/
-│   ├── components/
-│   │   ├── Button.tsx
-│   │   └── Button.test.tsx
-│   └── hooks/
-│       ├── useAuth.ts
-│       └── useAuth.test.ts
-└── tests/
-    ├── setup.ts
-    └── e2e/
-```
-
-### Python Structure
-```
-python/
-├── src/
-│   └── server/
-│       └── services/
-└── tests/
-    ├── conftest.py
-    ├── test_server.py
-    ├── test_services.py
-    └── fixtures/
-```
-
-## Key Testing Patterns
-
-### FastAPI Testing
-```python
-from fastapi.testclient import TestClient
-from src.server.main import app
-
-client = TestClient(app)
-
-def test_delete_source():
-    response = client.delete("/api/sources/test-source")
-    assert response.status_code == 200
-    assert response.json()["success"] is True
-```
-
-### Service Testing
-```python
-import pytest
-from src.server.services.source_management_service import SourceManagementService
-
-@pytest.fixture
-def source_service(mock_supabase):
-    return SourceManagementService(mock_supabase)
-
-def test_delete_source_success(source_service):
-    success, result = source_service.delete_source("test-id")
-    assert success is True
-    assert result["source_id"] == "test-id"
-```
-
-### React Component Testing
-```typescript
-import { render, screen, fireEvent } from '@testing-library/react';
-import { DeleteButton } from './DeleteButton';
-
-test('calls onDelete when clicked', () => {
-  const handleDelete = jest.fn();
-  render();
-  
-  fireEvent.click(screen.getByRole('button'));
-  expect(handleDelete).toHaveBeenCalledTimes(1);
-});
-```
-
-## Mocking Strategies
-
-### Mock Supabase
-```python
-@pytest.fixture
-def mock_supabase():
-    client = Mock()
-    client.table.return_value.delete.return_value.eq.return_value.execute.return_value = Mock(data=[])
-    return client
-```
-
-### Mock HTTP Calls
-```python
-@pytest.fixture
-def mock_httpx():
-    with patch('httpx.AsyncClient') as mock:
-        yield mock
-```
-
-### Mock Socket.IO
-```python
-@pytest.fixture
-async def websocket_client():
-    async with TestClient(app).websocket_connect("/ws") as ws:
-        yield ws
-```
-
-## CI/CD Integration
-
-### GitHub Actions
-```yaml
-name: Tests
-on: [push, pull_request]
-
-jobs:
-  test:
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v3
-      - name: Run Tests
-        run: ./scripts/test-all.sh --coverage
-      - name: Upload Coverage
-        uses: codecov/codecov-action@v3
-```
-
-## Best Practices
-
-1. **Test Isolation** - Each test should be independent
-2. **Mock External Services** - Don't call real APIs in tests
-3. **Use Fixtures** - Share common test setup
-4. **Test Business Logic** - Focus on services, not just endpoints
-5. **Fast Tests** - Keep unit tests under 100ms
-6. **Descriptive Names** - `test_delete_source_removes_all_related_data`
-
-## Performance Testing
-
-```python
-import pytest
-import time
-
-@pytest.mark.performance
-def test_bulk_delete_performance(source_service):
-    start = time.time()
-    for i in range(100):
-        source_service.delete_source(f"source-{i}")
-    duration = time.time() - start
-    assert duration < 5.0  # Should complete in under 5 seconds
-```
-
-## Debugging Tests
-
-```bash
-# Verbose output
-pytest -vv
-
-# Show print statements
-pytest -s
-
-# Drop into debugger on failure
-pytest --pdb
-
-# Run specific test with debugging
-pytest -vvs -k "test_delete" --pdb
-```
\ No newline at end of file
diff --git a/docs/docs/ui-components.mdx b/docs/docs/ui-components.mdx
deleted file mode 100644
index f9733131..00000000
--- a/docs/docs/ui-components.mdx
+++ /dev/null
@@ -1,404 +0,0 @@
----
-title: UI Components Reference
-sidebar_position: 3
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-import Admonition from '@theme/Admonition';
-
-# 🎨 UI Components Reference
-
-
-
-

- Complete reference for Archon's React component library built with Vite, Tailwind CSS, and modern UI patterns. -

-
-
- -## 📁 Component Structure - -``` -src/components/ -├── animations/ # Animation components -├── knowledge-base/ # Knowledge management UI -├── layouts/ # Layout components -├── mcp/ # MCP client components -├── project-tasks/ # Project management UI -├── settings/ # Settings components -└── shared/ # Shared/common components -``` - -## 🎭 Animation Components - -### Animations.tsx -**Purpose**: Provides animated UI elements and transitions - -**Key Components**: -- `FadeIn`: Fade-in animation wrapper -- `SlideIn`: Slide-in from direction -- `LoadingSpinner`: Animated loading indicator -- `ProgressBar`: Animated progress display - -**Usage Example**: -```jsx - - - -``` - -## 📚 Knowledge Base Components - -### KnowledgeTable.tsx -**Purpose**: Display and manage knowledge base entries - -**Features**: -- Sortable columns -- Search/filter functionality -- Source management actions -- Real-time updates - -**Props**: -| Prop | Type | Description | -|------|------|-------------| -| `sources` | `Source[]` | Array of knowledge sources | -| `onDelete` | `(id: string) => void` | Delete handler | -| `onRefresh` | `(id: string) => void` | Refresh handler | -| `loading` | `boolean` | Loading state | - -### CrawlProgress.tsx -**Purpose**: Real-time crawling progress display - -**Features**: -- Socket.IO connection for live updates -- Progress bar with percentage -- Current URL display -- Log message stream - -**Performance Notes**: -- Uses Socket.IO room subscription for targeted updates -- Minimal re-renders - only updates on progress changes -- Example of proper real-time pattern - -## 🏗️ Layout Components - -### MainLayout.tsx -**Purpose**: Primary application layout wrapper - -**Structure**: -```jsx - - -
- {children} -
- -
-``` - -### SideNavigation.tsx -**Purpose**: Left sidebar navigation menu - -**Features**: -- Collapsible menu -- Active route highlighting -- Icon-based navigation -- Responsive design - -**Menu Items**: -- Knowledge Base -- Projects -- MCP Clients -- Settings - -### ArchonChatPanel.tsx -**Purpose**: AI chat interface panel - -**Features**: -- Collapsible right panel -- Message history -- Real-time responses -- Context awareness - -**Performance Considerations**: -- Uses Socket.IO for streaming AI responses -- Consider virtualization for long chat histories -- Implements proper cleanup in useEffect returns - -## 🔌 MCP Components - -### MCPClients.tsx -**Purpose**: Manage MCP server connections - -**Features**: -- Add/remove MCP servers -- Connection status display -- Tool exploration -- Test interface - -### ClientCard.tsx -**Purpose**: Individual MCP client display card - -**Props**: -| Prop | Type | Description | -|------|------|-------------| -| `client` | `MCPClient` | Client configuration | -| `onConnect` | `() => void` | Connect handler | -| `onDisconnect` | `() => void` | Disconnect handler | -| `onDelete` | `() => void` | Delete handler | - -### ToolTestingPanel.tsx -**Purpose**: Interactive MCP tool testing interface - -**Features**: -- Tool selection dropdown -- Dynamic parameter inputs -- Execute tool calls -- Display results -- Error handling - -## 📊 Project & Task Components - -### TaskBoardView.tsx -**Purpose**: Kanban board for task management - -**Features**: -- Drag-and-drop between columns -- Status-based organization -- Task quick actions -- Real-time updates - -**Columns**: -- Todo -- Doing -- Review -- Done - -**Performance Notes**: -- Uses Socket.IO for real-time task updates from AI agents -- Implements React DnD for smooth drag operations -- Optimized with React.memo to prevent unnecessary re-renders - -### TaskTableView.tsx -**Purpose**: Table view for task management - -**Features**: -- Sortable columns -- Inline editing -- Bulk actions -- Filter by status/assignee - -### DraggableTaskCard.tsx -**Purpose**: Individual task card component - -**Props**: -| Prop | Type | Description | -|------|------|-------------| -| `task` | `Task` | Task data | -| `onUpdate` | `(task: Task) => void` | Update handler | -| `onDelete` | `(id: string) => void` | Delete handler | -| `isDragging` | `boolean` | Drag state | - -### BlockNoteEditor.tsx -**Purpose**: Rich text editor for documents - -**Features**: -- WYSIWYG editing -- Markdown support -- Code blocks -- Image embedding -- Auto-save - -### Project Tab Components - -#### DocsTab.tsx -**Purpose**: Project documentation management - -**Features**: -- Document list -- Create/edit documents -- Version history -- Search functionality - -#### FeaturesTab.tsx -**Purpose**: Project features organization - -**Features**: -- Feature list display -- Task grouping by feature -- Progress tracking -- Priority indicators - -#### DataTab.tsx -**Purpose**: Project data and analytics - -**Features**: -- Task statistics -- Progress charts -- Team performance -- Timeline views - -## ⚙️ Settings Components - -### SettingsPanel.tsx -**Purpose**: Application settings management - -**Sections**: -- API Keys -- Model Configuration -- UI Preferences -- Data Management - -**⚠️ Performance Warning**: -- RAGSettings component has 11 onChange handlers without optimization -- Needs debounced inputs or local state pattern -- See performance best practices in UI documentation - -### CredentialManager.tsx -**Purpose**: Secure credential storage UI - -**Features**: -- Add/edit credentials -- Encrypted storage -- Category organization -- Validation - -## 🔄 Shared Components - -### Button.tsx -**Purpose**: Consistent button styling - -**Variants**: -- `primary`: Main actions -- `secondary`: Secondary actions -- `danger`: Destructive actions -- `ghost`: Minimal styling - -### Modal.tsx -**Purpose**: Modal dialog wrapper - -**Props**: -| Prop | Type | Description | -|------|------|-------------| -| `isOpen` | `boolean` | Open state | -| `onClose` | `() => void` | Close handler | -| `title` | `string` | Modal title | -| `size` | `'sm' \| 'md' \| 'lg'` | Modal size | - -### SearchInput.tsx -**Purpose**: Reusable search input - -**Features**: -- Debounced input -- Clear button -- Loading state -- Keyboard shortcuts - -## 🎨 Styling System - -### Tailwind Configuration -```javascript -// tailwind.config.js -module.exports = { - theme: { - extend: { - colors: { - primary: '#8b5cf6', - secondary: '#1f2937', - accent: '#a855f7' - } - } - } -} -``` - -### Component Styling Pattern -```jsx -// Consistent class naming -const buttonClasses = clsx( - 'px-4 py-2 rounded-lg font-medium transition-colors', - { - 'bg-primary text-white hover:bg-primary-dark': variant === 'primary', - 'bg-gray-200 text-gray-800 hover:bg-gray-300': variant === 'secondary' - } -); -``` - -## 🔗 Component Integration - -### With Socket.IO -```jsx -// Real-time updates in components -useEffect(() => { - socket.on('task:updated', (task) => { - updateTaskInState(task); - }); - - return () => socket.off('task:updated'); -}, []); -``` - -### With API Services -```jsx -// Service integration pattern -const KnowledgeTable = () => { - const { data, loading, error } = useKnowledgeBase(); - - if (loading) return ; - if (error) return ; - - return ; -}; -``` - -### Performance Patterns - -#### Optimized Input Components -```jsx -// Use DebouncedInput for forms/modals -import { DebouncedInput } from './components/project-tasks/TaskInputComponents'; - - -``` - -#### Real-time Update Pattern -```jsx -// Efficient real-time updates -const TaskComponent = memo(({ task }) => { - // Component only re-renders when task changes - return ; -}, (prev, next) => prev.task.id === next.task.id); -``` - -## 📱 Responsive Design - -### Breakpoint Usage -- `sm`: 640px - Mobile landscape -- `md`: 768px - Tablets -- `lg`: 1024px - Small desktops -- `xl`: 1280px - Large desktops - -### Mobile Adaptations -- Collapsible navigation -- Stack layouts on small screens -- Touch-friendly interactions -- Simplified table views - -## 🔗 Related Documentation - -- [UI Overview](./ui) - UI architecture, setup, and **performance best practices** -- [Socket.IO Integration](./socketio) - Real-time features and room patterns -- [Frontend Testing](./testing-vitest-strategy) - Component testing -- [API Reference](./api-reference) - Backend integration -- [Coding Best Practices](./coding-best-practices) - React patterns and anti-patterns - -### Performance Resources -- See **Performance Best Practices** section in [UI Documentation](./ui#performance-best-practices) -- Example implementation: `TaskInputComponents.tsx` for debounced inputs -- Components needing optimization listed in [UI docs](./ui#components-requiring-performance-optimization) \ No newline at end of file diff --git a/docs/docs/ui.mdx b/docs/docs/ui.mdx deleted file mode 100644 index c6e64ac5..00000000 --- a/docs/docs/ui.mdx +++ /dev/null @@ -1,829 +0,0 @@ ---- -title: UI -sidebar_position: 10 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# UI - -Built with React and Vite. - -## Directory Structure - -```text -src/ -├── components/ -│ ├── animations/ -│ │ └── Animations.tsx -│ ├── knowledge-base/ -│ │ └── KnowledgeTable.tsx -│ ├── layouts/ -│ │ ├── ArchonChatPanel.tsx -│ │ ├── MainLayout.tsx -│ │ └── SideNavigation.tsx -│ ├── mcp/ -│ │ ├── ClientCard.tsx -│ │ ├── MCPClients.tsx -│ │ └── ToolTestingPanel.tsx -│ ├── project-tasks/ -│ │ ├── BlockNoteEditor.tsx -│ │ ├── DataTab.tsx -│ │ ├── DocsTab.tsx -│ │ ├── DraggableTaskCard.tsx -│ │ ├── FeaturesTab.tsx -│ │ ├── Tabs.tsx -│ │ ├── TaskBoardView.tsx -│ │ ├── TaskTableView.tsx -│ │ └── VersionHistoryModal.tsx -│ ├── settings/ -│ │ ├── APIKeysSection.tsx -│ │ ├── FeaturesSection.tsx -│ │ ├── IDEGlobalRules.tsx -│ │ ├── RAGSettings.tsx -│ │ └── TestStatus.tsx -│ ├── ui/ -│ │ ├── Badge.tsx -│ │ ├── Button.tsx -│ │ ├── Card.tsx -│ │ ├── Input.tsx -│ │ ├── Select.tsx -│ │ ├── ThemeToggle.tsx -│ │ └── Toggle.tsx -│ ├── CrawlingProgressCard.tsx -│ └── ProjectCreationProgressCard.tsx -├── contexts/ -│ ├── SettingsContext.tsx -│ ├── ThemeContext.tsx -│ └── ToastContext.tsx -├── hooks/ -│ ├── useNeonGlow.ts -│ └── useStaggeredEntrance.ts -├── lib/ -│ ├── projectSchemas.ts -│ ├── task-utils.tsx -│ └── utils.ts -├── pages/ -│ ├── KnowledgeBasePage.tsx -│ ├── MCPPage.tsx -│ ├── ProjectPage.tsx -│ └── SettingsPage.tsx -├── services/ -│ ├── agentChatService.ts -│ ├── api.ts -│ ├── crawlProgressService.ts -│ ├── credentialsService.ts -│ ├── knowledgeBaseService.ts -│ ├── mcpClientService.ts -│ ├── mcpServerService.ts -│ ├── mcpService.ts -│ ├── projectCreationProgressService.ts -│ ├── projectService.ts -│ ├── testService.ts -│ └── webSocketService.ts -└── types/ - ├── knowledge.ts - └── project.ts -``` - -## Environment Variables - -| Variable | Description | -|---------------------------|-----------------------------------| -| VITE_API_URL | Backend API base URL | -| VITE_API_BASE_URL | Base URL used by some services | - -## Running Locally - -```bash -cd archon-ui-main -npm install -npm run dev -``` - -## Component Communication - -```mermaid -%%{init:{ - 'theme':'base', - 'themeVariables': { - 'primaryColor':'#0a0a0a', - 'primaryTextColor':'#ffffff', - 'primaryBorderColor':'#6f55ff', - 'secondaryColor':'#111111', - 'secondaryBorderColor':'#3fb1ff', - 'tertiaryColor':'#1a1a1a', - 'tertiaryBorderColor':'#00d38a', - 'lineColor':'#3fb1ff', - 'textColor':'#ffffff', - 'fontFamily':'Inter', - 'fontSize':'14px', - 'background':'#0a0a0a', - 'mainBkg':'#111111', - 'secondBkg':'#1a1a1a', - 'clusterBkg':'rgba(17, 17, 17, 0.8)', - 'nodeTextColor':'#ffffff' - } -}}%% -flowchart LR - A["User"] --> B["React Form"] - B --> C["API Call"] - C --> D["Display Answer"] -``` - -See [Getting Started](getting-started) for details. - -# Archon UI - Knowledge Engine Web Interface - -A modern React-based web interface for the Archon Knowledge Engine MCP Server. Built with TypeScript, Vite, and Tailwind CSS. - -## 🎨 UI Overview - -Archon UI provides a comprehensive dashboard for managing your AI's knowledge base: - -![UI Architecture](https://via.placeholder.com/800x400?text=Archon+UI+Architecture) - -### Key Features - -- **📊 MCP Dashboard**: Monitor and control the MCP server -- **⚙️ Settings Management**: Configure credentials and RAG strategies -- **📚 Knowledge Management**: Browse, search, and organize knowledge items -- **📈 Real-time Updates**: Socket.IO-based live updates across the UI - -## 🏗️ Architecture - -### Technology Stack - -- **React 18.3**: Modern React with hooks and functional components -- **TypeScript**: Full type safety and IntelliSense support -- **Vite**: Fast build tool and dev server -- **Tailwind CSS**: Utility-first styling -- **Framer Motion**: Smooth animations and transitions -- **Lucide Icons**: Beautiful and consistent iconography -- **React Router**: Client-side routing - - -## 📄 Pages Documentation - -### 1. Knowledge Base (`/`) - -Browse and manage your knowledge items with multiple view modes. - -**Components:** -- **Knowledge Grid**: Card-based knowledge display with domain grouping -- **Knowledge Table**: Full-width table view with sortable columns -- **Search/Filter**: Search by title, type, tags -- **Crawling Progress**: Real-time progress tracking for URL crawling -- **Actions**: Delete, add sources, file upload - -**Features:** -- Grid and table view modes -- Real-time updates via Socket.IO -- Type-based filtering (technical/business) -- Domain-based grouping for URLs -- Tag tooltips for overflow -- Progress tracking for crawling operations - -### 2. Projects (`/projects`) - -Project dashboard with task management and documentation tabs. - -**Components:** -- **Project List**: Create and select projects -- **Task Tabs**: Manage tasks, features, docs and data -- **Progress Cards**: Real-time project creation status - -**Features:** -- Hierarchical tasks -- GitHub repository links -- Socket.IO project progress - -### 3. Settings (`/settings`) - -Comprehensive configuration management with organized sections. - -**Sections:** -- **Features**: - - Projects toggle (enable/disable Projects feature) - - Other feature flags -- **API Keys**: - - OpenAI API key (encrypted storage) - - Other API credentials -- **RAG Settings**: - - Contextual Embeddings toggle - - Hybrid Search toggle - - Agentic RAG (code extraction) toggle - - Reranking toggle - - Model selection -- **Archon Unit Tests** (Collapsible): - - Python MCP tests with real-time output - - React UI tests with local execution - - Pretty/Raw view modes - - Error summary display - -**Features:** -- Secure credential storage with encryption -- Real-time test execution and monitoring -- Toast notifications for actions -- Collapsible test section (collapsed by default) - -### 4. MCP Dashboard (`/mcp`) - -Central control panel for the MCP server. - -**Components:** -- **Server Control Panel**: Start/stop server, view status, select transport mode -- **Server Logs Viewer**: Real-time log streaming with auto-scroll -- **Available Tools Table**: Dynamic tool discovery and documentation -- **MCP Test Panel**: Interactive tool testing interface - -**Features:** -- Dual transport support (SSE/stdio) -- Real-time status polling (5-second intervals) -- Socket.IO-based log streaming -- Copy-to-clipboard configuration -- Tool parameter validation - -Browse and manage your knowledge items. - -**Components:** -- **Knowledge Grid**: Card-based knowledge display -- **Search/Filter**: Search by title, type, tags -- **Knowledge Details**: View full item details -- **Actions**: Delete, refresh, organize - -**Features:** -- Pagination support -- Real-time updates via Socket.IO -- Type-based filtering (technical/business) -- Metadata display - - -## 🧩 Component Library - -### Base UI Components - -#### Button -```tsx - -``` - -#### Card -```tsx - -

Card Title

-

Card content

-
-``` - -#### LoadingSpinner -```tsx - -``` - -### Layout Components - -#### Sidebar -- Collapsible navigation -- Active route highlighting -- Icon + text navigation items -- Responsive design - -#### Header -- Dark mode toggle -- User menu -- Breadcrumb navigation - -### Animation Components - -#### PageTransition -Wraps pages with smooth fade/slide animations: -```tsx - - - -``` - -## 🔌 Socket.IO Integration - -All real-time connections use **Socket.IO** with a room-based architecture on the default namespace for improved reliability and organization: - -### Key Services Using Socket.IO - -| Service | Purpose | Room Pattern | Status | -|---------|---------|--------------|--------| -| `crawlProgressService` | Progress tracking for crawling | `progress_{id}` | ✅ Room-based | -| `projectCreationProgressService` | Project creation progress | `progress_{id}` | ✅ Room-based | -| `webSocketService` | Socket.IO client wrapper | Default namespace | ✅ Room-based | -| `taskUpdateService` | Real-time task updates | `{project_id}` | ✅ Room-based | -| `agentChatService` | Agent chat streaming | `chat_{session_id}` | ✅ Room-based | - -### Room-Based Socket.IO Pattern - -```typescript -import { createWebSocketService } from './services/webSocketService'; - -// Always connect to default namespace -const wsService = createWebSocketService({ - maxReconnectAttempts: 5, - reconnectInterval: 1000 -}); - -// Connect to default namespace only -await wsService.connect('/'); - -// Join specific rooms via subscription events -wsService.send({ - type: 'subscribe_progress', - data: { progress_id: progressId } -}); - -// Handle room-specific messages -wsService.addMessageHandler('progress_update', (message) => { - updateProgressUI(message.data); -}); - -// Clean up (rooms cleaned automatically) -wsService.disconnect(); -``` - -### Component Integration with Rooms - -```typescript -useEffect(() => { - const ws = createWebSocketService(); - - // Connect to default namespace - ws.connect('/').then(() => { - // Join relevant rooms - ws.send({ - type: 'join_project', - data: { project_id: projectId } - }); - - // Handle room messages - ws.addMessageHandler('task_created', (message) => { - setTasks(prev => [...prev, message.data]); - }); - }); - - return () => ws.disconnect(); -}, [projectId]); // Stable dependencies only -``` - -### Room Subscription Patterns - - - - -```typescript -// Subscribe to project-specific updates -const subscribeToProject = (projectId: string) => { - wsService.send({ - type: 'join_project', - data: { project_id: projectId } - }); - - // Handle project room events - wsService.addMessageHandler('task_created', handleTaskCreated); - wsService.addMessageHandler('task_updated', handleTaskUpdated); - wsService.addMessageHandler('task_deleted', handleTaskDeleted); -}; -``` - - - - -```typescript -// Subscribe to progress tracking -const subscribeToProgress = (progressId: string) => { - wsService.send({ - type: 'subscribe_progress', - data: { progress_id: progressId } - }); - - // Handle progress updates - wsService.addMessageHandler('project_progress', (message) => { - updateProgressBar(message.data.percentage); - updateStatus(message.data.status); - }); -}; -``` - - - - -```typescript -// Subscribe to project list updates -const subscribeToProjectList = () => { - wsService.send({ type: 'subscribe_projects' }); - - // Handle list updates - wsService.addMessageHandler('projects_update', (message) => { - setProjects(message.data.projects); - }); -}; -``` - - - - -## 🔌 Services - -### mcpService -Handles all MCP server communication: -- `startServer()`: Start the MCP server -- `stopServer()`: Stop the MCP server -- `getStatus()`: Get current server status -- `streamLogs()`: Socket.IO log streaming -- `getAvailableTools()`: Fetch MCP tools - -### api -Base API configuration with: -- Automatic error handling -- Request/response interceptors -- Base URL configuration -- TypeScript generics - -### chatService -RAG query interface: -- `sendMessage()`: Send RAG query -- `streamResponse()`: Stream responses -- `getSources()`: Get available sources - -## 🎨 Styling - -### Tailwind Configuration -- Custom color palette -- Dark mode support -- Custom animations -- Responsive breakpoints - -### Theme Variables -```css ---primary: Blue accent colors ---secondary: Gray/neutral colors ---success: Green indicators ---warning: Orange indicators ---error: Red indicators -``` - -## 🚀 Development - -### Setup -```bash -# Install dependencies -npm install - -# Start dev server -npm run dev - -# Build for production -npm run build - -# Run tests -npm test -``` - -### Environment Variables -```env -VITE_API_URL=http://localhost:8080 -VITE_API_BASE_URL=http://localhost:8080 -``` - -### Hot Module Replacement -Vite provides instant HMR for: -- React components -- CSS modules -- TypeScript files - -## 🧪 Testing - -### Unit Tests -- Component testing with React Testing Library -- Service mocking with MSW -- Hook testing with @testing-library/react-hooks - -### Integration Tests -- Page-level testing -- API integration tests -- Socket.IO testing - -## 📦 Build & Deployment - -### Docker Support -```dockerfile -FROM node:18-alpine -WORKDIR /app -COPY package*.json ./ -RUN npm ci -COPY . . -RUN npm run build -EXPOSE 5173 -CMD ["npm", "run", "preview"] -``` - -### Production Optimization -- Code splitting by route -- Lazy loading for pages -- Image optimization -- Bundle size analysis - -## 🔧 Configuration Files - -### vite.config.ts -- Path aliases -- Build optimization -- Development server config - -### tsconfig.json -- Strict type checking -- Path mappings -- Compiler options - -### tailwind.config.js -- Custom theme -- Plugin configuration -- Purge settings - -## ✅ Frontend Development Standards - -### Performance Best Practices - -#### Input Performance Optimization - -**Problem**: Typing lag and screen flickering in modals/forms due to excessive re-renders. - -**Real Example**: EditTaskModal had 148 renders during typing! - -**Solution**: Use debounced input components that manage their own state: - -```typescript -// ✅ GOOD: Debounced input component -export const DebouncedInput = memo(({ value, onChange, delay = 300 }) => { - const [localValue, setLocalValue] = useState(value); - - // Local state for immediate feedback - const handleChange = (e) => { - setLocalValue(e.target.value); - // Debounced parent update - debouncedOnChange(e.target.value); - }; - - return ; -}); - -// Usage in modal - -``` - -**❌ BAD: Direct state updates** -```typescript -// Causes re-render on every keystroke - setFormData({ ...formData, title: e.target.value })} -/> -``` - -#### State Management Best Practices - -**1. Use React.memo with Custom Comparison** -```typescript -export const MyComponent = memo(({ props }) => { - // Component logic -}, (prevProps, nextProps) => { - // Return true to skip re-render - return prevProps.id === nextProps.id && - prevProps.status === nextProps.status; -}); -``` - -**2. Stable Event Handlers with useCallback** -```typescript -// ✅ GOOD: Stable reference -const handleChange = useCallback((value: string) => { - setData(prev => ({ ...prev, field: value })); -}, []); // Empty deps = stable forever - -// ❌ BAD: New function every render -onChange={(e) => setData({ ...data, field: e.target.value })} -``` - -**3. Batch State Updates** -```typescript -// ✅ GOOD: Single update -setFormData(prev => ({ - ...prev, - title: newTitle, - description: newDescription, - status: newStatus -})); - -// ❌ BAD: Multiple updates = multiple renders -setTitle(newTitle); -setDescription(newDescription); -setStatus(newStatus); -``` - -### Real-time Updates Best Practices - -#### When to Use Socket.IO (Real-time) - -Use Socket.IO for features that require immediate updates across users: - -**1. Progress Tracking** -- **Example**: CrawlingProgressCard -- **Why**: Users need to see live crawling progress -- **Pattern**: Progress room subscription -```typescript -// Subscribe to crawl progress -ws.send({ - type: 'crawl_subscribe', - data: { progress_id: crawlId } -}); - -ws.addMessageHandler('crawl_progress', (message) => { - updateProgressBar(message.data.percentage); - updateCurrentUrl(message.data.current_url); -}); -``` - -**2. AI Agent Communication** -- **Example**: ArchonChatPanel -- **Why**: Stream AI responses as they generate -- **Pattern**: Chat session room -```typescript -// Join chat session -ws.send({ - type: 'join_chat', - data: { session_id: sessionId } -}); - -ws.addMessageHandler('agent_message', (message) => { - appendToChat(message.data.content); -}); -``` - -**3. Collaborative Features** -- **Example**: TasksTab with MCP agent updates -- **Why**: Multiple agents/users updating tasks -- **Pattern**: Project room subscription -```typescript -// Real-time task updates from AI agents -ws.send({ - type: 'join_project', - data: { project_id: projectId } -}); - -ws.addMessageHandler('task_updated', (message) => { - // Update task immediately when AI agent modifies it - updateTaskInUI(message.data); -}); -``` - -#### When NOT to Use Socket.IO - -Use REST API calls for: -- User-triggered actions (save, delete, create) -- Initial data loading -- Infrequent updates -- Actions that need confirmation - -### Performance Testing - -Add this to components during development: -```typescript -const renderCount = useRef(0); -useEffect(() => { - renderCount.current++; - console.log(`[ComponentName] Render #${renderCount.current}`); -}); -``` - -**Performance Targets**: -- Typing: < 5 renders/second -- Modal open/close: < 3 renders -- State changes: 1-2 renders per action - -### Socket.IO Room-Based Best Practices - -**DO:** -- ✅ Always connect to default namespace `/` only -- ✅ Use room subscription events to join specific rooms -- ✅ Handle room-specific messages with clear event names -- ✅ Clean up connections in useEffect return (rooms auto-cleanup) -- ✅ Use typed message handlers with proper data extraction -- ✅ Follow the subscription pattern: connect → subscribe → handle messages - -**DON'T:** -- ❌ Use custom namespaces like `/chat`, `/project`, `/crawl` -- ❌ Create direct WebSocket instances or native Socket.IO clients -- ❌ Broadcast to all clients - use rooms for targeting -- ❌ Include unstable functions in useCallback dependencies -- ❌ Create multiple connections to the same endpoint -- ❌ Forget to handle reconnection scenarios - -### Room Subscription Pattern - -```typescript -// ✅ CORRECT: Room-based subscription -useEffect(() => { - const ws = createWebSocketService(); - - const connectAndSubscribe = async () => { - // Always connect to default namespace - await ws.connect('/'); - - // Subscribe to specific rooms - ws.send({ - type: 'subscribe_progress', - data: { progress_id: progressId } - }); - - // Handle room messages - ws.addMessageHandler('progress_update', (message) => { - setProgress(message.data); - }); - }; - - connectAndSubscribe(); - return () => ws.disconnect(); -}, [progressId]); - -// ❌ WRONG: Custom namespace connection -await ws.connect('/project-creation-progress/123'); // Don't do this -``` - -### Stable Dependencies Pattern - -```typescript -// ✅ CORRECT: Only stable dependencies -const handleUpdate = useCallback(() => { - updateData(value); - showToast('Updated', 'success'); // Can call without dependency -}, [value]); // Only primitive values - -// ❌ WRONG: Unstable function dependencies -const handleUpdate = useCallback(() => { - updateData(value); - showToast('Updated', 'success'); -}, [value, showToast]); // showToast causes re-renders -``` - -### Event Handling Pattern - -**Single Source of Truth**: Avoid duplicate event handlers for the same action. - -```typescript -// ✅ CORRECT: One place handles completion -const handleSocketMessage = (message) => { - if (message.type === 'completed') { - showToast('Operation completed', 'success'); - refreshData(); - } -}; - -// ❌ WRONG: Multiple handlers for same event -// In Socket.IO handler: -showToast('Operation completed', 'success'); -// In API callback: -showToast('Operation completed', 'success'); -// Causes duplicate toasts! -``` - -### Components Requiring Performance Optimization - -Based on code analysis, these components need performance improvements: - -#### High Priority -1. **RAGSettings** (`/components/settings/RAGSettings.tsx`) - - 11 onChange handlers without optimization - - Direct state updates on every change - - Fix: Implement debounced inputs or batch updates - -2. **DataTab - EditTableModal** (`/components/project-tasks/DataTab.tsx`) - - 6+ onChange handlers for table columns - - Multiple state updates per edit - - Fix: Use local state with save button - -3. **EditKnowledgeItemModal** (`/components/knowledge-base/EditKnowledgeItemModal.tsx`) - - Direct state updates in onChange - - Fix: Apply DebouncedInput pattern - -#### Medium Priority -4. **APIKeysSection** - Dynamic list with multiple input fields -5. **ToolTestingPanel** - Complex parameter inputs -6. **ArchonChatPanel** - Consider virtualization for long chat histories - diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js deleted file mode 100644 index d7a365bf..00000000 --- a/docs/docusaurus.config.js +++ /dev/null @@ -1,189 +0,0 @@ -// @ts-check - -/** @type {import('@docusaurus/types').Config} */ -export default { - title: 'Archon', - tagline: 'Knowledge Engine for AI Coding Assistants', - url: 'http://localhost:3838', - baseUrl: '/', - onBrokenLinks: 'warn', - onBrokenMarkdownLinks: 'warn', - favicon: 'favicon.png', - organizationName: 'archon', - projectName: 'archon', - - markdown: { - mermaid: true, - }, - - themes: ['@docusaurus/theme-mermaid'], - - // Client scripts to handle SVG rounded corners - scripts: [ - { - src: '/js/mermaid-rounded-corners.js', - async: true, - }, - ], - - presets: [ - [ - '@docusaurus/preset-classic', - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - path: 'docs', - routeBasePath: '/', - sidebarPath: './sidebars.js', // Enable proper sidebar - editUrl: 'https://github.com/coleam00/archon/edit/main/docs/', - showLastUpdateTime: true, - showLastUpdateAuthor: true, - }, - blog: false, - theme: { - customCss: './src/css/custom.css', - }, - }), - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - // Proper Mermaid configuration according to official docs - mermaid: { - theme: { - light: 'base', - dark: 'base' - }, - options: { - darkMode: true, - themeVariables: { - // Primary colors - Aurora borealis theme - primaryColor: '#0a0a0a', - primaryTextColor: '#ffffff', - primaryBorderColor: '#6f55ff', - - // Secondary colors - secondaryColor: '#111111', - secondaryTextColor: '#ffffff', - secondaryBorderColor: '#3fb1ff', - - // Tertiary colors - tertiaryColor: '#1a1a1a', - tertiaryTextColor: '#ffffff', - tertiaryBorderColor: '#00d38a', - - // Background and main colors - background: '#0a0a0a', - mainBkg: '#111111', - secondBkg: '#1a1a1a', - - // Lines and text with aurora colors - lineColor: '#3fb1ff', - textColor: '#ffffff', - - // Font configuration - Force Inter family throughout - fontFamily: '"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', - fontSize: '14px', - fontWeight: '400', - - // Flowchart specific variables - nodeBorder: '#6f55ff', - clusterBkg: 'rgba(17, 17, 17, 0.8)', - clusterBorder: '#3fb1ff', - defaultLinkColor: '#3fb1ff', - edgeLabelBackground: '#0a0a0a', - nodeTextColor: '#ffffff', - - // Color scales for different elements - cScale0: '#00d38a', - cScale1: '#0fcaa6', - cScale2: '#36b5ef', - cScale3: '#3fb1ff', - cScale4: '#fe6aff', - cScale5: '#d964ff', - cScale6: '#ab5dff', - cScale7: '#8a59ff', - cScale8: '#7656ff', - cScale9: '#6f55ff', - cScale10: '#9a3df8', - cScale11: '#ed0fed', - - // Sequence diagram specific - actorBkg: '#111111', - actorBorder: '#6f55ff', - actorTextColor: '#ffffff', - - // Class diagram - classText: '#ffffff', - - // State diagram - labelColor: '#ffffff', - } - }, - }, - colorMode: { - defaultMode: 'dark', - disableSwitch: true, - respectPrefersColorScheme: false, - }, - navbar: { - title: 'Archon', - logo: { - alt: 'Archon Logo', - src: 'logo-neon.png', - }, - items: [ - { - href: 'https://github.com/coleam00/archon', - label: 'GitHub', - position: 'right', - }, - ], - }, - - tableOfContents: { - minHeadingLevel: 2, - maxHeadingLevel: 4, - }, - - footer: { - style: 'dark', - links: [ - { - title: 'Getting Started', - items: [ - { label: 'Installation', to: '/getting-started' }, - { label: 'Quick Setup', to: '/getting-started#quick-start' }, - { label: 'Configuration', to: '/configuration' }, - ], - }, - { - title: 'API & Integration', - items: [ - { label: 'API Reference', to: '/api-reference' }, - { label: 'MCP Integration', to: '/mcp-overview' }, - { label: 'Task Management', to: '/tasks' }, - ], - }, - { - title: 'User Interface', - items: [ - { label: 'Web Interface', to: '/ui' }, - { label: 'Testing Guide', to: '/testing' }, - { label: 'Deployment', to: '/deployment' }, - ], - }, - { - title: 'Community', - items: [ - { label: 'GitHub', href: 'https://github.com/coleam00/archon' }, - { label: 'Issues', href: 'https://github.com/coleam00/archon/issues' }, - ], - }, - ], - copyright: `Copyright © ${new Date().getFullYear()} Archon Project`, - }, - }), -}; diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 0d8f7792..00000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,18946 +0,0 @@ -{ - "name": "docs", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "docs", - "version": "0.0.0", - "dependencies": { - "@docusaurus/core": "^3.8.0", - "@docusaurus/preset-classic": "^3.8.0", - "@docusaurus/theme-mermaid": "^3.8.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "lucide-react": "^0.513.0", - "prism-react-renderer": "^2.4.0", - "react": "^18.0.0", - "react-dom": "^18.0.0", - "reactflow": "^11.11.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz", - "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", - "@algolia/autocomplete-shared": "1.17.9" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", - "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz", - "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz", - "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==", - "license": "MIT", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/client-abtesting": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.26.0.tgz", - "integrity": "sha512-B2NdQEjxtWPNMTI9xm+4JUjL7f7a8j7eZou7CMPy0NSc4R7qfW6yXdN3nL0zbhUwVTTxjYhWSaUaVrKg7woUgQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0", - "@algolia/requester-browser-xhr": "5.26.0", - "@algolia/requester-fetch": "5.26.0", - "@algolia/requester-node-http": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.26.0.tgz", - "integrity": "sha512-xrfPWKuK6xooTB/Y1wIs2Q7+3M79RK5ckKHy3dWumR2yq8K6apj7hXp4W8sM1Ly6I6uY7mpp8paVebqfwOnQmQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0", - "@algolia/requester-browser-xhr": "5.26.0", - "@algolia/requester-fetch": "5.26.0", - "@algolia/requester-node-http": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.26.0.tgz", - "integrity": "sha512-0wDr3lvGQW2VWru8FSdGWptJMclN2APKbxH97h2uQM6A8cbzGbCezbIhGQM2S6tPVrzQZyu1PdfmxWMaGe4v3Q==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.26.0.tgz", - "integrity": "sha512-qNpS7eLXStMXb0u+DM0iyvVYAaeWGkI5qDuyo4AlIrepVI0cX+iltLGDULnYM5Vbfp8iBf5PEbgqKrE6jfdRLw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0", - "@algolia/requester-browser-xhr": "5.26.0", - "@algolia/requester-fetch": "5.26.0", - "@algolia/requester-node-http": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.26.0.tgz", - "integrity": "sha512-qDOieLuxn5mdJV8CA/zklb7z+mfmmlHUqyEBu0QpjBoiqmvu7O1Q7zF6WGvBy02y9T3uUp/CDQLtzLVCdkvLCQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0", - "@algolia/requester-browser-xhr": "5.26.0", - "@algolia/requester-fetch": "5.26.0", - "@algolia/requester-node-http": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-query-suggestions": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.26.0.tgz", - "integrity": "sha512-M9Fb88C9xRZLU++XLeyVc8hqqB2OXqDqBHfq0Utj62MVi3DchLVZnQ9QtJNttW0DanaTPhTBEIMUFUEH2Dgp+g==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0", - "@algolia/requester-browser-xhr": "5.26.0", - "@algolia/requester-fetch": "5.26.0", - "@algolia/requester-node-http": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.26.0.tgz", - "integrity": "sha512-LM3QevcTb6kqzTMUeP4RhwHXSyx4tkrsYy5jyFPexy4UA/kePQCBJG4Zc9anMdZuxXDkionbWLk5/YhL2daKCA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0", - "@algolia/requester-browser-xhr": "5.26.0", - "@algolia/requester-fetch": "5.26.0", - "@algolia/requester-node-http": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", - "license": "MIT" - }, - "node_modules/@algolia/ingestion": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.26.0.tgz", - "integrity": "sha512-SuSoBAB71xWRHEI+VIVZbraJEdPSSBEHeWnwhre6soQQLr+hu7miwvYXidqEfI60HOmrmIqtAk9+8vXe1hRj9g==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0", - "@algolia/requester-browser-xhr": "5.26.0", - "@algolia/requester-fetch": "5.26.0", - "@algolia/requester-node-http": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/monitoring": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.26.0.tgz", - "integrity": "sha512-QVgXc2CVm/TBoOEEeUhWHdvgSQ5w5kZgdqwIlLEBvnMuWHt0OFtfYFjKHAng1z4vy7bgxkpTY/YsCFJhF84FsA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0", - "@algolia/requester-browser-xhr": "5.26.0", - "@algolia/requester-fetch": "5.26.0", - "@algolia/requester-node-http": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.26.0.tgz", - "integrity": "sha512-rbBVdChoQCHlzix5kfLJMInJIeqBbAyZHLOWayhy4CapB/5zsFxQiUSGxPVrjlGuJoK4oHhsYZefS3EwR9ZksQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0", - "@algolia/requester-browser-xhr": "5.26.0", - "@algolia/requester-fetch": "5.26.0", - "@algolia/requester-node-http": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.26.0.tgz", - "integrity": "sha512-1G8m5sAL/rQgs8Qt2EoJq+h8l9BoPFICd4XK+0VEVr8H1hRGg3Jx1TTP6eQsBHsQNLCOF29Gf3YTlBbD6FBXIQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.26.0.tgz", - "integrity": "sha512-QZvpz46y/SoRwXZItpPTt9D5vYdMjl1wKU6z9LZuxuuOrxT0/MN4zsDRIKZBtIxmn3Huq9rStiR1ybHqsZD2yg==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.26.0.tgz", - "integrity": "sha512-VaoUJJla2GtlHFSy8syM/Zox+xmUkm849Hhx3R2PKPcD8Iv5NT/XTMt4WXfLmfIKI7bxSccCawghZTIXHmC6vw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@antfu/install-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", - "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", - "license": "MIT", - "dependencies": { - "package-manager-detector": "^1.3.0", - "tinyexec": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@antfu/utils": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", - "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", - "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", - "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.4", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.4", - "@babel/types": "^7.27.3", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.27.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-wrap-function": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", - "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.4.tgz", - "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", - "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", - "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", - "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", - "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", - "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", - "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", - "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.5.tgz", - "integrity": "sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", - "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", - "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.27.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz", - "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", - "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", - "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", - "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", - "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", - "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", - "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", - "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz", - "integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.3", - "@babel/plugin-transform-parameters": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", - "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", - "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", - "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", - "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz", - "integrity": "sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", - "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", - "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", - "license": "MIT", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", - "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.5.tgz", - "integrity": "sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", - "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", - "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz", - "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", - "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", - "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", - "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz", - "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", - "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", - "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", - "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", - "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.27.1", - "@babel/plugin-syntax-import-attributes": "^7.27.1", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.27.1", - "@babel/plugin-transform-async-to-generator": "^7.27.1", - "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.27.1", - "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.27.1", - "@babel/plugin-transform-classes": "^7.27.1", - "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.1", - "@babel/plugin-transform-dotall-regex": "^7.27.1", - "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", - "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-exponentiation-operator": "^7.27.1", - "@babel/plugin-transform-export-namespace-from": "^7.27.1", - "@babel/plugin-transform-for-of": "^7.27.1", - "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.27.1", - "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", - "@babel/plugin-transform-member-expression-literals": "^7.27.1", - "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.27.1", - "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", - "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", - "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.27.2", - "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1", - "@babel/plugin-transform-parameters": "^7.27.1", - "@babel/plugin-transform-private-methods": "^7.27.1", - "@babel/plugin-transform-private-property-in-object": "^7.27.1", - "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.27.1", - "@babel/plugin-transform-regexp-modifiers": "^7.27.1", - "@babel/plugin-transform-reserved-words": "^7.27.1", - "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.27.1", - "@babel/plugin-transform-sticky-regex": "^7.27.1", - "@babel/plugin-transform-template-literals": "^7.27.1", - "@babel/plugin-transform-typeof-symbol": "^7.27.1", - "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.27.1", - "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", - "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-transform-react-display-name": "^7.27.1", - "@babel/plugin-transform-react-jsx": "^7.27.1", - "@babel/plugin-transform-react-jsx-development": "^7.27.1", - "@babel/plugin-transform-react-pure-annotations": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", - "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.4.tgz", - "integrity": "sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.4.tgz", - "integrity": "sha512-H7QhL0ucCGOObsUETNbB2PuzF4gAvN8p32P6r91bX7M/hk4bx+3yz2hTwHL9d/Efzwu1upeb4/cd7oSxCzup3w==", - "license": "MIT", - "dependencies": { - "core-js-pure": "^3.30.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", - "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@braintree/sanitize-url": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz", - "integrity": "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==", - "license": "MIT" - }, - "node_modules/@chevrotain/cst-dts-gen": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz", - "integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==", - "license": "Apache-2.0", - "dependencies": { - "@chevrotain/gast": "11.0.3", - "@chevrotain/types": "11.0.3", - "lodash-es": "4.17.21" - } - }, - "node_modules/@chevrotain/gast": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz", - "integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==", - "license": "Apache-2.0", - "dependencies": { - "@chevrotain/types": "11.0.3", - "lodash-es": "4.17.21" - } - }, - "node_modules/@chevrotain/regexp-to-ast": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz", - "integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==", - "license": "Apache-2.0" - }, - "node_modules/@chevrotain/types": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz", - "integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==", - "license": "Apache-2.0" - }, - "node_modules/@chevrotain/utils": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz", - "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", - "license": "Apache-2.0" - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", - "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/color-helpers": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", - "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", - "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", - "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz", - "integrity": "sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz", - "integrity": "sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz", - "integrity": "sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz", - "integrity": "sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz", - "integrity": "sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", - "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", - "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz", - "integrity": "sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz", - "integrity": "sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz", - "integrity": "sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz", - "integrity": "sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-initial": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", - "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz", - "integrity": "sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-float-and-clear": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", - "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overflow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", - "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overscroll-behavior": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", - "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-resize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", - "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", - "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", - "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", - "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", - "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", - "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz", - "integrity": "sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz", - "integrity": "sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-random-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", - "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz", - "integrity": "sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", - "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", - "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", - "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz", - "integrity": "sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", - "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", - "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/utilities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", - "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz", - "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==", - "license": "MIT" - }, - "node_modules/@docsearch/react": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz", - "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.17.9", - "@algolia/autocomplete-preset-algolia": "1.17.9", - "@docsearch/css": "3.9.0", - "algoliasearch": "^5.14.2" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 20.0.0", - "react": ">= 16.8.0 < 20.0.0", - "react-dom": ">= 16.8.0 < 20.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@docusaurus/babel": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.0.tgz", - "integrity": "sha512-9EJwSgS6TgB8IzGk1L8XddJLhZod8fXT4ULYMx6SKqyCBqCFpVCEjR/hNXXhnmtVM2irDuzYoVLGWv7srG/VOA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.25.9", - "@babel/preset-env": "^7.25.9", - "@babel/preset-react": "^7.25.9", - "@babel/preset-typescript": "^7.25.9", - "@babel/runtime": "^7.25.9", - "@babel/runtime-corejs3": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.8.0", - "@docusaurus/utils": "3.8.0", - "babel-plugin-dynamic-import-node": "^2.3.3", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/bundler": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.0.tgz", - "integrity": "sha512-Rq4Z/MSeAHjVzBLirLeMcjLIAQy92pF1OI+2rmt18fSlMARfTGLWRE8Vb+ljQPTOSfJxwDYSzsK6i7XloD2rNA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.8.0", - "@docusaurus/cssnano-preset": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "babel-loader": "^9.2.1", - "clean-css": "^5.3.2", - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "file-loader": "^6.2.0", - "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.1", - "null-loader": "^4.0.1", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "postcss-preset-env": "^10.1.0", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "webpack": "^5.95.0", - "webpackbar": "^6.0.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/faster": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/faster": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.0.tgz", - "integrity": "sha512-c7u6zFELmSGPEP9WSubhVDjgnpiHgDqMh1qVdCB7rTflh4Jx0msTYmMiO91Ez0KtHj4sIsDsASnjwfJ2IZp3Vw==", - "license": "MIT", - "dependencies": { - "@docusaurus/babel": "3.8.0", - "@docusaurus/bundler": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "core-js": "^3.31.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "execa": "5.1.1", - "fs-extra": "^11.1.1", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.6.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "open": "^8.4.0", - "p-map": "^4.0.0", - "prompts": "^2.4.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.4", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.6", - "tinypool": "^1.0.2", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "webpack": "^5.95.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-server": "^4.15.2", - "webpack-merge": "^6.0.1" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@mdx-js/react": "^3.0.0", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.0.tgz", - "integrity": "sha512-UJ4hAS2T0R4WNy+phwVff2Q0L5+RXW9cwlH6AEphHR5qw3m/yacfWcSK7ort2pMMbDn8uGrD38BTm4oLkuuNoQ==", - "license": "MIT", - "dependencies": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/logger": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.0.tgz", - "integrity": "sha512-7eEMaFIam5Q+v8XwGqF/n0ZoCld4hV4eCCgQkfcN9Mq5inoZa6PHHW9Wu6lmgzoK5Kx3keEeABcO2SxwraoPDQ==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.0.tgz", - "integrity": "sha512-mDPSzssRnpjSdCGuv7z2EIAnPS1MHuZGTaRLwPn4oQwszu4afjWZ/60sfKjTnjBjI8Vl4OgJl2vMmfmiNDX4Ng==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "@mdx-js/mdx": "^3.0.0", - "@slorber/remark-comment": "^1.0.0", - "escape-html": "^1.0.3", - "estree-util-value-to-estree": "^3.0.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "image-size": "^2.0.2", - "mdast-util-mdx": "^3.0.0", - "mdast-util-to-string": "^4.0.0", - "rehype-raw": "^7.0.0", - "remark-directive": "^3.0.0", - "remark-emoji": "^4.0.0", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "stringify-object": "^3.3.0", - "tslib": "^2.6.0", - "unified": "^11.0.3", - "unist-util-visit": "^5.0.0", - "url-loader": "^4.1.1", - "vfile": "^6.0.1", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.0.tgz", - "integrity": "sha512-/uMb4Ipt5J/QnD13MpnoC/A4EYAe6DKNWqTWLlGrqsPJwJv73vSwkA25xnYunwfqWk0FlUQfGv/Swdh5eCCg7g==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.8.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.0.tgz", - "integrity": "sha512-0SlOTd9R55WEr1GgIXu+hhTT0hzARYx3zIScA5IzpdekZQesI/hKEa5LPHBd415fLkWMjdD59TaW/3qQKpJ0Lg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "cheerio": "1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "schema-dts": "^1.1.2", - "srcset": "^4.0.0", - "tslib": "^2.6.0", - "unist-util-visit": "^5.0.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.0.tgz", - "integrity": "sha512-fRDMFLbUN6eVRXcjP8s3Y7HpAt9pzPYh1F/7KKXOCxvJhjjCtbon4VJW0WndEPInVz4t8QUXn5QZkU2tGVCE2g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "@types/react-router-config": "^5.0.7", - "combine-promises": "^1.1.0", - "fs-extra": "^11.1.1", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "schema-dts": "^1.1.2", - "tslib": "^2.6.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.0.tgz", - "integrity": "sha512-39EDx2y1GA0Pxfion5tQZLNJxL4gq6susd1xzetVBjVIQtwpCdyloOfQBAgX0FylqQxfJrYqL0DIUuq7rd7uBw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-css-cascade-layers": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.0.tgz", - "integrity": "sha512-/VBTNymPIxQB8oA3ZQ4GFFRYdH4ZxDRRBECxyjRyv486mfUPXfcdk+im4S5mKWa6EK2JzBz95IH/Wu0qQgJ5yQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.0.tgz", - "integrity": "sha512-teonJvJsDB9o2OnG6ifbhblg/PXzZvpUKHFgD8dOL1UJ58u0lk8o0ZOkvaYEBa9nDgqzoWrRk9w+e3qaG2mOhQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^2.3.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.0.tgz", - "integrity": "sha512-aKKa7Q8+3xRSRESipNvlFgNp3FNPELKhuo48Cg/svQbGNwidSHbZT03JqbW4cBaQnyyVchO1ttk+kJ5VC9Gx0w==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.0.tgz", - "integrity": "sha512-ugQYMGF4BjbAW/JIBtVcp+9eZEgT9HRdvdcDudl5rywNPBA0lct+lXMG3r17s02rrhInMpjMahN3Yc9Cb3H5/g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "@types/gtag.js": "^0.0.12", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.0.tgz", - "integrity": "sha512-9juRWxbwZD3SV02Jd9QB6yeN7eu+7T4zB0bvJLcVQwi+am51wAxn2CwbdL0YCCX+9OfiXbADE8D8Q65Hbopu/w==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.0.tgz", - "integrity": "sha512-fGpOIyJvNiuAb90nSJ2Gfy/hUOaDu6826e5w5UxPmbpCIc7KlBHNAZ5g4L4ZuHhc4hdfq4mzVBsQSnne+8Ze1g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "fs-extra": "^11.1.1", - "sitemap": "^7.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-svgr": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.0.tgz", - "integrity": "sha512-kEDyry+4OMz6BWLG/lEqrNsL/w818bywK70N1gytViw4m9iAmoxCUT7Ri9Dgs7xUdzCHJ3OujolEmD88Wy44OA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "@svgr/core": "8.1.0", - "@svgr/webpack": "^8.1.0", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.0.tgz", - "integrity": "sha512-qOu6tQDOWv+rpTlKu+eJATCJVGnABpRCPuqf7LbEaQ1mNY//N/P8cHQwkpAU+aweQfarcZ0XfwCqRHJfjeSV/g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/plugin-content-blog": "3.8.0", - "@docusaurus/plugin-content-docs": "3.8.0", - "@docusaurus/plugin-content-pages": "3.8.0", - "@docusaurus/plugin-css-cascade-layers": "3.8.0", - "@docusaurus/plugin-debug": "3.8.0", - "@docusaurus/plugin-google-analytics": "3.8.0", - "@docusaurus/plugin-google-gtag": "3.8.0", - "@docusaurus/plugin-google-tag-manager": "3.8.0", - "@docusaurus/plugin-sitemap": "3.8.0", - "@docusaurus/plugin-svgr": "3.8.0", - "@docusaurus/theme-classic": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/theme-search-algolia": "3.8.0", - "@docusaurus/types": "3.8.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.0.tgz", - "integrity": "sha512-nQWFiD5ZjoT76OaELt2n33P3WVuuCz8Dt5KFRP2fCBo2r9JCLsp2GJjZpnaG24LZ5/arRjv4VqWKgpK0/YLt7g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/plugin-content-blog": "3.8.0", - "@docusaurus/plugin-content-docs": "3.8.0", - "@docusaurus/plugin-content-pages": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/theme-translations": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", - "infima": "0.2.0-alpha.45", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.26", - "prism-react-renderer": "^2.3.0", - "prismjs": "^1.29.0", - "react-router-dom": "^5.3.4", - "rtlcss": "^4.1.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.0.tgz", - "integrity": "sha512-YqV2vAWpXGLA+A3PMLrOMtqgTHJLDcT+1Caa6RF7N4/IWgrevy5diY8oIHFkXR/eybjcrFFjUPrHif8gSGs3Tw==", - "license": "MIT", - "dependencies": { - "@docusaurus/mdx-loader": "3.8.0", - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^2.0.0", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^2.3.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-mermaid": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.8.0.tgz", - "integrity": "sha512-ou0NJM37p4xrVuFaZp8qFe5Z/qBq9LuyRTP4KKRa0u2J3zC4f3saBJDgc56FyvvN1OsmU0189KGEPUjTr6hFxg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.0", - "@docusaurus/module-type-aliases": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "mermaid": ">=11.6.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.0.tgz", - "integrity": "sha512-GBZ5UOcPgiu6nUw153+0+PNWvFKweSnvKIL6Rp04H9olKb475jfKjAwCCtju5D2xs5qXHvCMvzWOg5o9f6DtuQ==", - "license": "MIT", - "dependencies": { - "@docsearch/react": "^3.9.0", - "@docusaurus/core": "3.8.0", - "@docusaurus/logger": "3.8.0", - "@docusaurus/plugin-content-docs": "3.8.0", - "@docusaurus/theme-common": "3.8.0", - "@docusaurus/theme-translations": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-validation": "3.8.0", - "algoliasearch": "^5.17.1", - "algoliasearch-helper": "^3.22.6", - "clsx": "^2.0.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.0.tgz", - "integrity": "sha512-1DTy/snHicgkCkryWq54fZvsAglTdjTx4qjOXgqnXJ+DIty1B+aPQrAVUu8LiM+6BiILfmNxYsxhKTj+BS3PZg==", - "license": "MIT", - "dependencies": { - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/types": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.0.tgz", - "integrity": "sha512-RDEClpwNxZq02c+JlaKLWoS13qwWhjcNsi2wG1UpzmEnuti/z1Wx4SGpqbUqRPNSd8QWWePR8Cb7DvG0VN/TtA==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.95.0", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/types/node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.0.tgz", - "integrity": "sha512-2wvtG28ALCN/A1WCSLxPASFBFzXCnP0YKCAFIPcvEb6imNu1wg7ni/Svcp71b3Z2FaOFFIv4Hq+j4gD7gA0yfQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.8.0", - "@docusaurus/types": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "escape-string-regexp": "^4.0.0", - "execa": "5.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "github-slugger": "^1.5.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "jiti": "^1.20.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "p-queue": "^6.6.2", - "prompts": "^2.4.2", - "resolve-pathname": "^3.0.0", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.0.tgz", - "integrity": "sha512-3TGF+wVTGgQ3pAc9+5jVchES4uXUAhAt9pwv7uws4mVOxL4alvU3ue/EZ+R4XuGk94pDy7CNXjRXpPjlfZXQfw==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.8.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.0.tgz", - "integrity": "sha512-MrnEbkigr54HkdFeg8e4FKc4EF+E9dlVwsY3XQZsNkbv3MKZnbHQ5LsNJDIKDROFe8PBf5C4qCAg5TPBpsjrjg==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.8.0", - "@docusaurus/utils": "3.8.0", - "@docusaurus/utils-common": "3.8.0", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", - "license": "MIT" - }, - "node_modules/@iconify/utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz", - "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==", - "license": "MIT", - "dependencies": { - "@antfu/install-pkg": "^1.0.0", - "@antfu/utils": "^8.1.0", - "@iconify/types": "^2.0.0", - "debug": "^4.4.0", - "globals": "^15.14.0", - "kolorist": "^1.8.0", - "local-pkg": "^1.0.0", - "mlly": "^1.7.4" - } - }, - "node_modules/@iconify/utils/node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", - "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-scope": "^1.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "recma-build-jsx": "^1.0.0", - "recma-jsx": "^1.0.0", - "recma-stringify": "^1.0.0", - "rehype-recma": "^1.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", - "license": "MIT", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/@mermaid-js/parser": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.4.0.tgz", - "integrity": "sha512-wla8XOWvQAwuqy+gxiZqY+c7FokraOTHRWMsbB4AgRx9Sy7zKslNyejy7E+a77qHfey5GXw/ik3IXv/NHMJgaA==", - "license": "MIT", - "dependencies": { - "langium": "3.3.1" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", - "license": "MIT" - }, - "node_modules/@reactflow/background": { - "version": "11.3.14", - "resolved": "https://registry.npmjs.org/@reactflow/background/-/background-11.3.14.tgz", - "integrity": "sha512-Gewd7blEVT5Lh6jqrvOgd4G6Qk17eGKQfsDXgyRSqM+CTwDqRldG2LsWN4sNeno6sbqVIC2fZ+rAUBFA9ZEUDA==", - "license": "MIT", - "dependencies": { - "@reactflow/core": "11.11.4", - "classcat": "^5.0.3", - "zustand": "^4.4.1" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - } - }, - "node_modules/@reactflow/controls": { - "version": "11.2.14", - "resolved": "https://registry.npmjs.org/@reactflow/controls/-/controls-11.2.14.tgz", - "integrity": "sha512-MiJp5VldFD7FrqaBNIrQ85dxChrG6ivuZ+dcFhPQUwOK3HfYgX2RHdBua+gx+40p5Vw5It3dVNp/my4Z3jF0dw==", - "license": "MIT", - "dependencies": { - "@reactflow/core": "11.11.4", - "classcat": "^5.0.3", - "zustand": "^4.4.1" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - } - }, - "node_modules/@reactflow/core": { - "version": "11.11.4", - "resolved": "https://registry.npmjs.org/@reactflow/core/-/core-11.11.4.tgz", - "integrity": "sha512-H4vODklsjAq3AMq6Np4LE12i1I4Ta9PrDHuBR9GmL8uzTt2l2jh4CiQbEMpvMDcp7xi4be0hgXj+Ysodde/i7Q==", - "license": "MIT", - "dependencies": { - "@types/d3": "^7.4.0", - "@types/d3-drag": "^3.0.1", - "@types/d3-selection": "^3.0.3", - "@types/d3-zoom": "^3.0.1", - "classcat": "^5.0.3", - "d3-drag": "^3.0.0", - "d3-selection": "^3.0.0", - "d3-zoom": "^3.0.0", - "zustand": "^4.4.1" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - } - }, - "node_modules/@reactflow/minimap": { - "version": "11.7.14", - "resolved": "https://registry.npmjs.org/@reactflow/minimap/-/minimap-11.7.14.tgz", - "integrity": "sha512-mpwLKKrEAofgFJdkhwR5UQ1JYWlcAAL/ZU/bctBkuNTT1yqV+y0buoNVImsRehVYhJwffSWeSHaBR5/GJjlCSQ==", - "license": "MIT", - "dependencies": { - "@reactflow/core": "11.11.4", - "@types/d3-selection": "^3.0.3", - "@types/d3-zoom": "^3.0.1", - "classcat": "^5.0.3", - "d3-selection": "^3.0.0", - "d3-zoom": "^3.0.0", - "zustand": "^4.4.1" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - } - }, - "node_modules/@reactflow/node-resizer": { - "version": "2.2.14", - "resolved": "https://registry.npmjs.org/@reactflow/node-resizer/-/node-resizer-2.2.14.tgz", - "integrity": "sha512-fwqnks83jUlYr6OHcdFEedumWKChTHRGw/kbCxj0oqBd+ekfs+SIp4ddyNU0pdx96JIm5iNFS0oNrmEiJbbSaA==", - "license": "MIT", - "dependencies": { - "@reactflow/core": "11.11.4", - "classcat": "^5.0.4", - "d3-drag": "^3.0.0", - "d3-selection": "^3.0.0", - "zustand": "^4.4.1" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - } - }, - "node_modules/@reactflow/node-toolbar": { - "version": "1.3.14", - "resolved": "https://registry.npmjs.org/@reactflow/node-toolbar/-/node-toolbar-1.3.14.tgz", - "integrity": "sha512-rbynXQnH/xFNu4P9H+hVqlEUafDCkEoCy0Dg9mG22Sg+rY/0ck6KkrAQrYrTgXusd+cEJOMK0uOOFCK2/5rSGQ==", - "license": "MIT", - "dependencies": { - "@reactflow/core": "11.11.4", - "classcat": "^5.0.3", - "zustand": "^4.4.1" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - } - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@slorber/remark-comment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", - "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.1.0", - "micromark-util-symbol": "^1.0.1" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@babel/plugin-transform-react-constant-elements": "^7.21.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@svgr/core": "8.1.0", - "@svgr/plugin-jsx": "8.1.0", - "@svgr/plugin-svgo": "8.1.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/d3": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", - "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", - "license": "MIT", - "dependencies": { - "@types/d3-array": "*", - "@types/d3-axis": "*", - "@types/d3-brush": "*", - "@types/d3-chord": "*", - "@types/d3-color": "*", - "@types/d3-contour": "*", - "@types/d3-delaunay": "*", - "@types/d3-dispatch": "*", - "@types/d3-drag": "*", - "@types/d3-dsv": "*", - "@types/d3-ease": "*", - "@types/d3-fetch": "*", - "@types/d3-force": "*", - "@types/d3-format": "*", - "@types/d3-geo": "*", - "@types/d3-hierarchy": "*", - "@types/d3-interpolate": "*", - "@types/d3-path": "*", - "@types/d3-polygon": "*", - "@types/d3-quadtree": "*", - "@types/d3-random": "*", - "@types/d3-scale": "*", - "@types/d3-scale-chromatic": "*", - "@types/d3-selection": "*", - "@types/d3-shape": "*", - "@types/d3-time": "*", - "@types/d3-time-format": "*", - "@types/d3-timer": "*", - "@types/d3-transition": "*", - "@types/d3-zoom": "*" - } - }, - "node_modules/@types/d3-array": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", - "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", - "license": "MIT" - }, - "node_modules/@types/d3-axis": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", - "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-brush": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", - "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-chord": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", - "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", - "license": "MIT" - }, - "node_modules/@types/d3-color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", - "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", - "license": "MIT" - }, - "node_modules/@types/d3-contour": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", - "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", - "license": "MIT", - "dependencies": { - "@types/d3-array": "*", - "@types/geojson": "*" - } - }, - "node_modules/@types/d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", - "license": "MIT" - }, - "node_modules/@types/d3-dispatch": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", - "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", - "license": "MIT" - }, - "node_modules/@types/d3-drag": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", - "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-dsv": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", - "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", - "license": "MIT" - }, - "node_modules/@types/d3-ease": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", - "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", - "license": "MIT" - }, - "node_modules/@types/d3-fetch": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", - "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", - "license": "MIT", - "dependencies": { - "@types/d3-dsv": "*" - } - }, - "node_modules/@types/d3-force": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", - "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", - "license": "MIT" - }, - "node_modules/@types/d3-format": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", - "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", - "license": "MIT" - }, - "node_modules/@types/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", - "license": "MIT", - "dependencies": { - "@types/geojson": "*" - } - }, - "node_modules/@types/d3-hierarchy": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", - "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", - "license": "MIT" - }, - "node_modules/@types/d3-interpolate": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", - "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", - "license": "MIT", - "dependencies": { - "@types/d3-color": "*" - } - }, - "node_modules/@types/d3-path": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", - "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", - "license": "MIT" - }, - "node_modules/@types/d3-polygon": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", - "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", - "license": "MIT" - }, - "node_modules/@types/d3-quadtree": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", - "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", - "license": "MIT" - }, - "node_modules/@types/d3-random": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", - "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", - "license": "MIT" - }, - "node_modules/@types/d3-scale": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", - "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", - "license": "MIT", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-scale-chromatic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", - "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", - "license": "MIT" - }, - "node_modules/@types/d3-selection": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", - "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", - "license": "MIT" - }, - "node_modules/@types/d3-shape": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", - "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", - "license": "MIT", - "dependencies": { - "@types/d3-path": "*" - } - }, - "node_modules/@types/d3-time": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", - "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", - "license": "MIT" - }, - "node_modules/@types/d3-time-format": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", - "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", - "license": "MIT" - }, - "node_modules/@types/d3-timer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", - "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", - "license": "MIT" - }, - "node_modules/@types/d3-transition": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", - "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-zoom": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", - "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", - "license": "MIT", - "dependencies": { - "@types/d3-interpolate": "*", - "@types/d3-selection": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "license": "MIT" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.22", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.22.tgz", - "integrity": "sha512-eZUmSnhRX9YRSkplpz0N+k6NljUUn5l3EWZIKZvYzhvMphEuNiyyy1viH/ejgt66JWgALwC/gtSUAeQKtSwW/w==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/geojson": { - "version": "7946.0.16", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", - "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", - "license": "MIT" - }, - "node_modules/@types/gtag.js": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "license": "MIT" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "license": "MIT" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.15.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.29.tgz", - "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prismjs": { - "version": "1.26.5", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", - "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.1.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.6.tgz", - "integrity": "sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==", - "license": "MIT", - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", - "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "^5.1.0" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" - }, - "node_modules/@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT", - "optional": true - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "license": "ISC" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/algoliasearch": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.26.0.tgz", - "integrity": "sha512-iriwDyAqedYgi9YTpVwJbE/TQJwelclpVFfDgNBfhdIhIzAdKo+Kitwinn+krx9tjDsnzRt3tqTQdbJ0E6OwNw==", - "license": "MIT", - "dependencies": { - "@algolia/client-abtesting": "5.26.0", - "@algolia/client-analytics": "5.26.0", - "@algolia/client-common": "5.26.0", - "@algolia/client-insights": "5.26.0", - "@algolia/client-personalization": "5.26.0", - "@algolia/client-query-suggestions": "5.26.0", - "@algolia/client-search": "5.26.0", - "@algolia/ingestion": "1.26.0", - "@algolia/monitoring": "1.26.0", - "@algolia/recommend": "5.26.0", - "@algolia/requester-browser-xhr": "5.26.0", - "@algolia/requester-fetch": "5.26.0", - "@algolia/requester-node-http": "5.26.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.25.0.tgz", - "integrity": "sha512-vQoK43U6HXA9/euCqLjvyNdM4G2Fiu/VFp4ae0Gau9sZeIKBPvUPnXfLYAe65Bg7PFuw03coeu5K6lTPSXRObw==", - "license": "MIT", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/astring": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", - "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", - "license": "MIT", - "bin": { - "astring": "bin/astring" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", - "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.4", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", - "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.4" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", - "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001718", - "electron-to-chromium": "^1.5.160", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001721", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", - "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chevrotain": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", - "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", - "license": "Apache-2.0", - "dependencies": { - "@chevrotain/cst-dts-gen": "11.0.3", - "@chevrotain/gast": "11.0.3", - "@chevrotain/regexp-to-ast": "11.0.3", - "@chevrotain/types": "11.0.3", - "@chevrotain/utils": "11.0.3", - "lodash-es": "4.17.21" - } - }, - "node_modules/chevrotain-allstar": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz", - "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==", - "license": "MIT", - "dependencies": { - "lodash-es": "^4.17.21" - }, - "peerDependencies": { - "chevrotain": "^11.0.0" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/classcat": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", - "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", - "license": "MIT" - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "license": "MIT" - }, - "node_modules/combine-promises": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", - "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "license": "ISC" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.0.2", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/confbox": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", - "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", - "license": "MIT" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", - "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", - "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.42.0.tgz", - "integrity": "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cose-base": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", - "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", - "license": "MIT", - "dependencies": { - "layout-base": "^1.0.0" - } - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-blank-pseudo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", - "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz", - "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "cssnano": "^6.0.1", - "jest-worker": "^29.4.3", - "postcss": "^8.4.24", - "schema-utils": "^4.0.1", - "serialize-javascript": "^6.0.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", - "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.0.tgz", - "integrity": "sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ], - "license": "MIT-0" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", - "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", - "license": "MIT", - "dependencies": { - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.0", - "cssnano-preset-default": "^6.1.2", - "postcss-discard-unused": "^6.0.5", - "postcss-merge-idents": "^6.0.3", - "postcss-reduce-idents": "^6.0.3", - "postcss-zindex": "^6.0.2" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "license": "CC0-1.0" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/cytoscape": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.32.0.tgz", - "integrity": "sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/cytoscape-cose-bilkent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", - "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", - "license": "MIT", - "dependencies": { - "cose-base": "^1.0.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", - "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", - "license": "MIT", - "dependencies": { - "cose-base": "^2.2.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/cose-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", - "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", - "license": "MIT", - "dependencies": { - "layout-base": "^2.0.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/layout-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", - "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", - "license": "MIT" - }, - "node_modules/d3": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", - "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", - "license": "ISC", - "dependencies": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "license": "ISC", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "license": "ISC", - "dependencies": { - "d3-array": "^3.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", - "license": "ISC", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "license": "ISC", - "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "license": "ISC", - "dependencies": { - "d3-dsv": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", - "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", - "license": "ISC", - "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-sankey": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", - "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-array": "1 - 2", - "d3-shape": "^1.2.0" - } - }, - "node_modules/d3-sankey/node_modules/d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "license": "BSD-3-Clause", - "dependencies": { - "internmap": "^1.0.0" - } - }, - "node_modules/d3-sankey/node_modules/d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-sankey/node_modules/d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-path": "1" - } - }, - "node_modules/d3-sankey/node_modules/internmap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", - "license": "ISC" - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "license": "ISC", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", - "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "license": "ISC", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "license": "ISC", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "license": "ISC", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dagre-d3-es": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz", - "integrity": "sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==", - "license": "MIT", - "dependencies": { - "d3": "^7.9.0", - "lodash-es": "^4.17.21" - } - }, - "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", - "license": "MIT" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", - "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delaunator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", - "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", - "license": "ISC", - "dependencies": { - "robust-predicates": "^3.0.2" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" - }, - "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", - "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", - "license": "(MPL-2.0 OR Apache-2.0)", - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.165", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz", - "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==", - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", - "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esast-util-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", - "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/esast-util-from-js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", - "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "acorn": "^8.0.0", - "esast-util-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-attach-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-walker": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-scope": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", - "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-value-to-estree": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.0.tgz", - "integrity": "sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - } - }, - "node_modules/estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", - "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/exsolve": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz", - "integrity": "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "license": "MIT", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "license": "MIT", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/file-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/file-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "license": "ISC" - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hachure-fill": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", - "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", - "license": "MIT" - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^9.0.0", - "property-information": "^7.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", - "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-estree": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", - "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-attach-comments": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-js": "^1.0.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", - "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-js": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5/node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", - "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/html-webpack-plugin/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", - "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", - "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", - "license": "MIT", - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.45", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", - "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/inline-style-parser": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", - "license": "MIT" - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/katex": { - "version": "0.16.22", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", - "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], - "license": "MIT", - "dependencies": { - "commander": "^8.3.0" - }, - "bin": { - "katex": "cli.js" - } - }, - "node_modules/katex/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/khroma": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", - "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", - "license": "MIT" - }, - "node_modules/langium": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/langium/-/langium-3.3.1.tgz", - "integrity": "sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==", - "license": "MIT", - "dependencies": { - "chevrotain": "~11.0.3", - "chevrotain-allstar": "~0.3.0", - "vscode-languageserver": "~9.0.1", - "vscode-languageserver-textdocument": "~1.0.11", - "vscode-uri": "~3.0.8" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "license": "MIT", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/launch-editor": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", - "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/layout-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", - "license": "MIT" - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/local-pkg": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", - "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", - "license": "MIT", - "dependencies": { - "mlly": "^1.7.4", - "pkg-types": "^2.0.1", - "quansync": "^0.2.8" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lucide-react": { - "version": "0.513.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.513.0.tgz", - "integrity": "sha512-CJZKq2g8Y8yN4Aq002GahSXbG2JpFv9kXwyiOAMvUBv7pxeOFHUWKB0mO7MiY4ZVFCV4aNjv2BJFq/z3DgKPQg==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/markdown-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/marked": { - "version": "15.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", - "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdast-util-directive": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", - "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/mdast-util-frontmatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "escape-string-regexp": "^5.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", - "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "license": "CC0-1.0" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/mermaid": { - "version": "11.6.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.6.0.tgz", - "integrity": "sha512-PE8hGUy1LDlWIHWBP05SFdqUHGmRcCcK4IzpOKPE35eOw+G9zZgcnMpyunJVUEOgb//KBORPjysKndw8bFLuRg==", - "license": "MIT", - "dependencies": { - "@braintree/sanitize-url": "^7.0.4", - "@iconify/utils": "^2.1.33", - "@mermaid-js/parser": "^0.4.0", - "@types/d3": "^7.4.3", - "cytoscape": "^3.29.3", - "cytoscape-cose-bilkent": "^4.1.0", - "cytoscape-fcose": "^2.2.0", - "d3": "^7.9.0", - "d3-sankey": "^0.12.3", - "dagre-d3-es": "7.0.11", - "dayjs": "^1.11.13", - "dompurify": "^3.2.4", - "katex": "^0.16.9", - "khroma": "^2.1.0", - "lodash-es": "^4.17.21", - "marked": "^15.0.7", - "roughjs": "^4.6.6", - "stylis": "^4.3.6", - "ts-dedent": "^2.2.0", - "uuid": "^11.1.0" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", - "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-frontmatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", - "license": "MIT", - "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", - "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", - "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", - "license": "MIT", - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", - "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-space/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", - "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mlly": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", - "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", - "license": "MIT", - "dependencies": { - "acorn": "^8.14.0", - "pathe": "^2.0.1", - "pkg-types": "^1.3.0", - "ufo": "^1.5.4" - } - }, - "node_modules/mlly/node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "license": "MIT" - }, - "node_modules/mlly/node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "license": "MIT", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", - "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/null-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/null-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/null-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "license": "MIT", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-manager-detector": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz", - "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==", - "license": "MIT" - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", - "license": "ISC" - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", - "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-data-parser": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", - "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", - "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", - "license": "MIT", - "dependencies": { - "confbox": "^0.2.1", - "exsolve": "^1.0.1", - "pathe": "^2.0.3" - } - }, - "node_modules/points-on-curve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", - "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", - "license": "MIT" - }, - "node_modules/points-on-path": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz", - "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", - "license": "MIT", - "dependencies": { - "path-data-parser": "0.1.0", - "points-on-curve": "0.2.0" - } - }, - "node_modules/postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", - "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz", - "integrity": "sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", - "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", - "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-custom-media": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", - "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-properties": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.5.tgz", - "integrity": "sha512-UWf/vhMapZatv+zOuqlfLmYXeOhhHLh8U8HAKGI2VJ00xLRYoAJh4xv8iX6FB6+TLXeDnm0DBLMi00E0hodbQw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", - "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", - "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-unused": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", - "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz", - "integrity": "sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", - "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-focus-within": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", - "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", - "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-image-set-function": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", - "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-lab-function": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz", - "integrity": "sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", - "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.3.5", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", - "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-merge-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", - "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", - "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", - "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-resolve-nested": "^3.0.0", - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", - "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", - "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", - "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-preset-env": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.0.tgz", - "integrity": "sha512-cl13sPBbSqo1Q7Ryb19oT5NZO5IHFolRbIMdgDq4f9w1MHYiL6uZS7uSsjXJ1KzRIcX5BMjEeyxmAevVXENa3Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-cascade-layers": "^5.0.1", - "@csstools/postcss-color-function": "^4.0.10", - "@csstools/postcss-color-mix-function": "^3.0.10", - "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.0", - "@csstools/postcss-content-alt-text": "^2.0.6", - "@csstools/postcss-exponential-functions": "^2.0.9", - "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.10", - "@csstools/postcss-gradients-interpolation-method": "^5.0.10", - "@csstools/postcss-hwb-function": "^4.0.10", - "@csstools/postcss-ic-unit": "^4.0.2", - "@csstools/postcss-initial": "^2.0.1", - "@csstools/postcss-is-pseudo-class": "^5.0.1", - "@csstools/postcss-light-dark-function": "^2.0.9", - "@csstools/postcss-logical-float-and-clear": "^3.0.0", - "@csstools/postcss-logical-overflow": "^2.0.0", - "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", - "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.4", - "@csstools/postcss-media-minmax": "^2.0.9", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", - "@csstools/postcss-nested-calc": "^4.0.0", - "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.10", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/postcss-random-function": "^2.0.1", - "@csstools/postcss-relative-color-syntax": "^3.0.10", - "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.4", - "@csstools/postcss-stepped-value-functions": "^4.0.9", - "@csstools/postcss-text-decoration-shorthand": "^4.0.2", - "@csstools/postcss-trigonometric-functions": "^4.0.9", - "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.21", - "browserslist": "^4.24.5", - "css-blank-pseudo": "^7.0.1", - "css-has-pseudo": "^7.0.2", - "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.3.0", - "postcss-attribute-case-insensitive": "^7.0.1", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.10", - "postcss-color-hex-alpha": "^10.0.0", - "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.6", - "postcss-custom-properties": "^14.0.5", - "postcss-custom-selectors": "^8.0.5", - "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.2", - "postcss-focus-visible": "^10.0.1", - "postcss-focus-within": "^9.0.1", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^6.0.0", - "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.10", - "postcss-logical": "^8.1.0", - "postcss-nesting": "^13.0.1", - "postcss-opacity-percentage": "^3.0.0", - "postcss-overflow-shorthand": "^6.0.0", - "postcss-page-break": "^3.0.4", - "postcss-place": "^10.0.0", - "postcss-pseudo-class-any-link": "^10.0.1", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^8.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", - "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", - "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", - "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", - "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", - "license": "MIT", - "dependencies": { - "sort-css-media-queries": "2.2.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.23" - } - }, - "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/postcss-zindex": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", - "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", - "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", - "license": "MIT", - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", - "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "license": "ISC" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/quansync": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", - "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ], - "license": "MIT" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-fast-compare": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", - "license": "MIT" - }, - "node_modules/react-helmet-async": { - "name": "@slorber/react-helmet-async", - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-json-view-lite": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz", - "integrity": "sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", - "license": "MIT", - "dependencies": { - "@types/react": "*" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/reactflow": { - "version": "11.11.4", - "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.11.4.tgz", - "integrity": "sha512-70FOtJkUWH3BAOsN+LU9lCrKoKbtOPnz2uq0CV2PLdNSwxTXOhCbsZr50GmZ+Rtw3jx8Uv7/vBFtCGixLfd4Og==", - "license": "MIT", - "dependencies": { - "@reactflow/background": "11.3.14", - "@reactflow/controls": "11.2.14", - "@reactflow/core": "11.11.4", - "@reactflow/minimap": "11.7.14", - "@reactflow/node-resizer": "2.2.14", - "@reactflow/node-toolbar": "1.3.14" - }, - "peerDependencies": { - "react": ">=17", - "react-dom": ">=17" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recma-build-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", - "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/recma-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", - "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", - "license": "MIT", - "dependencies": { - "acorn-jsx": "^5.0.0", - "estree-util-to-js": "^2.0.0", - "recma-parse": "^1.0.0", - "recma-stringify": "^1.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/recma-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", - "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "esast-util-from-js": "^2.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/recma-stringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", - "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-util-to-js": "^2.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-recma": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", - "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "hast-util-to-estree": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-directive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", - "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-directive": "^3.0.0", - "micromark-extension-directive": "^3.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-emoji": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", - "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.2", - "emoticon": "^4.0.1", - "mdast-util-find-and-replace": "^3.0.1", - "node-emoji": "^2.1.0", - "unified": "^11.0.4" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/remark-frontmatter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-frontmatter": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", - "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", - "license": "MIT", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", - "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", - "license": "MIT" - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", - "license": "Unlicense" - }, - "node_modules/roughjs": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", - "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", - "license": "MIT", - "dependencies": { - "hachure-fill": "^0.5.2", - "path-data-parser": "^0.1.0", - "points-on-curve": "^0.2.0", - "points-on-path": "^0.2.1" - } - }, - "node_modules/rtlcss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", - "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0", - "postcss": "^8.4.21", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", - "license": "BSD-3-Clause" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-dts": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", - "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", - "license": "Apache-2.0" - }, - "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "license": "MIT", - "peer": true - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", - "license": "MIT", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "3.3.0", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", - "license": "MIT" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT" - }, - "node_modules/sitemap": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", - "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", - "license": "MIT", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "license": "MIT" - }, - "node_modules/skin-tone": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", - "license": "MIT", - "dependencies": { - "unicode-emoji-modifier-base": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", - "license": "MIT", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "license": "BSD-2-Clause", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-js": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz", - "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==", - "license": "MIT", - "dependencies": { - "style-to-object": "1.0.8" - } - }, - "node_modules/style-to-object": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", - "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.2.4" - } - }, - "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/stylis": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", - "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "license": "MIT" - }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/tapable": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.40.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.40.0.tgz", - "integrity": "sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", - "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", - "license": "MIT" - }, - "node_modules/tinypool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz", - "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==", - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "license": "MIT", - "engines": { - "node": ">=6.10" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/url-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/url-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/esm/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/vscode-languageserver": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", - "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", - "license": "MIT", - "dependencies": { - "vscode-languageserver-protocol": "3.17.5" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", - "license": "MIT", - "dependencies": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", - "license": "MIT" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "license": "MIT" - }, - "node_modules/vscode-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "license": "MIT" - }, - "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpack": { - "version": "5.99.9", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", - "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.2.tgz", - "integrity": "sha512-ykKKus8lqlgXX/1WjudpIEjqsafjOTcOJqxnAbMLAu/KCsDCJ6GBtvscewvTkrn24HsnvFwrSCbenFrhtcCsAA==", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpackbar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", - "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "consola": "^3.2.3", - "figures": "^3.2.0", - "markdown-table": "^2.0.0", - "pretty-time": "^1.1.0", - "std-env": "^3.7.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=14.21.3" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/webpackbar/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/webpackbar/node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpackbar/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpackbar/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zustand": { - "version": "4.5.7", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", - "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", - "license": "MIT", - "dependencies": { - "use-sync-external-store": "^1.2.2" - }, - "engines": { - "node": ">=12.7.0" - }, - "peerDependencies": { - "@types/react": ">=16.8", - "immer": ">=9.0.6", - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "immer": { - "optional": true - }, - "react": { - "optional": true - } - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 9e776e86..00000000 --- a/docs/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "docs", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" - }, - "dependencies": { - "@docusaurus/core": "^3.8.0", - "@docusaurus/preset-classic": "^3.8.0", - "@docusaurus/theme-mermaid": "^3.8.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "lucide-react": "^0.513.0", - "prism-react-renderer": "^2.4.0", - "react": "^18.0.0", - "react-dom": "^18.0.0", - "@xyflow/react": "^12.6.0" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } -} diff --git a/docs/sidebars.js b/docs/sidebars.js deleted file mode 100644 index e8e29c2b..00000000 --- a/docs/sidebars.js +++ /dev/null @@ -1,69 +0,0 @@ -module.exports = { - docs: [ - // INTRO & GETTING STARTED - { - type: 'doc', - id: 'intro', - label: 'Introduction', - }, - { - type: 'category', - label: 'Getting Started', - items: [ - 'getting-started', - 'configuration', - 'deployment', - ], - }, - - // CORE FEATURES - { - type: 'category', - label: 'Features', - items: [ - 'projects-overview', - 'knowledge-overview', - 'code-extraction-rules', - ], - }, - - // REFERENCE SECTION - { - type: 'category', - label: 'Reference', - items: [ - 'architecture', - 'server-overview', - 'server-services', - 'api-reference', - 'mcp-server', - 'socketio', - 'testing', - 'coding-best-practices', - ], - }, - - // AGENTS & AI - { - type: 'category', - label: 'AI Agents', - items: [ - 'agents-overview', - 'agent-rag', - 'agent-document', - 'agent-task', - 'agent-chat', - ], - }, - - // GUIDES - { - type: 'category', - label: 'Guides', - items: [ - 'ui', - 'server-monitoring', - ], - }, - ], -}; diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css deleted file mode 100644 index a8233175..00000000 --- a/docs/src/css/custom.css +++ /dev/null @@ -1,1210 +0,0 @@ -/** - * Archon Documentation - Aurora Borealis Glass Theme - * Using colors from the Archon neon logo SVG - */ - -/* Import Inter font from Google Fonts */ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap'); - -/* Aurora borealis color palette from logo SVG */ -:root { - /* Primary aurora colors from logo gradient */ - --aurora-green: #00d38a; - --aurora-teal: #0fcaa6; - --aurora-blue: #36b5ef; - --aurora-cyan: #3fb1ff; - --aurora-pink: #fe6aff; - --aurora-purple: #d964ff; - --aurora-violet: #ab5dff; - --aurora-indigo: #8a59ff; - --aurora-deep-purple: #7656ff; - --aurora-core: #6f55ff; - --aurora-magenta: #9a3df8; - --aurora-hot-pink: #c624f2; - --aurora-electric: #e214ee; - --aurora-neon: #ed0fed; - - /* Primary theme colors using aurora palette */ - --ifm-color-primary: var(--aurora-core); - --ifm-color-primary-dark: var(--aurora-indigo); - --ifm-color-primary-darker: var(--aurora-violet); - --ifm-color-primary-darkest: var(--aurora-purple); - --ifm-color-primary-light: var(--aurora-cyan); - --ifm-color-primary-lighter: var(--aurora-blue); - --ifm-color-primary-lightest: var(--aurora-teal); - - /* Background and surface colors */ - --ifm-background-color: #0a0a0a; - --ifm-background-surface-color: #111111; - --ifm-color-content: #ffffff; - --ifm-color-content-secondary: #a1a1aa; - - /* Typography */ - --ifm-font-color-base: #ffffff; - --ifm-font-color-secondary: #e5e7eb; - --ifm-heading-color: #ffffff; - - /* Links with aurora gradient */ - --ifm-link-color: var(--aurora-cyan); - --ifm-link-hover-color: var(--aurora-pink); - - /* Cards and surfaces */ - --ifm-card-background-color: rgba(17, 17, 17, 0.8); - - /* Navbar */ - --ifm-navbar-background-color: #000000; - --ifm-navbar-link-color: #ffffff; - --ifm-navbar-link-hover-color: var(--aurora-cyan); - - /* Sidebar - smaller width like TOC */ - --ifm-sidebar-background-color: rgba(10, 10, 10, 0.8); - --ifm-sidebar-width: 240px; /* Much smaller like TOC */ - - /* Footer */ - --ifm-footer-background-color: #000000; - --ifm-footer-color: #e5e7eb; - --ifm-footer-link-color: #a1a1aa; - --ifm-footer-link-hover-color: var(--aurora-cyan); - --ifm-footer-title-color: #ffffff; - - /* Code blocks */ - --ifm-code-background: #1a1a1a; - --prism-background-color: #1a1a1a; - --ifm-code-font-size: 95%; - - /* Borders */ - --ifm-border-color: #333333; - --ifm-toc-border-color: #333333; -} - -/* Force dark theme */ -html[data-theme='dark'] { - /* Override any light mode settings */ -} - -/* Fixed grid background for parallax effect with aurora colors */ -html { - background: - radial-gradient(circle at 25% 25%, rgba(0, 211, 138, 0.1) 0%, transparent 50%), - radial-gradient(circle at 75% 75%, rgba(54, 181, 239, 0.1) 0%, transparent 50%), - radial-gradient(circle at 50% 50%, rgba(237, 15, 237, 0.05) 0%, transparent 70%), - linear-gradient(to right, rgba(111, 85, 255, 0.1) 1px, transparent 1px), - linear-gradient(to bottom, rgba(111, 85, 255, 0.1) 1px, transparent 1px), - #000000; - background-size: 100% 100%, 100% 100%, 100% 100%, 60px 60px, 60px 60px; - background-attachment: fixed; - min-height: 100vh; -} - -body { - background: transparent; - color: #ffffff; - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; -} - -/* Smaller sidebar with glass morphism */ -.theme-doc-sidebar-container { - background: rgba(10, 10, 10, 0.8) !important; - backdrop-filter: blur(20px) !important; - -webkit-backdrop-filter: blur(20px) !important; - border-right: 1px solid rgba(111, 85, 255, 0.2) !important; -} - -.theme-doc-sidebar-menu { - font-size: 0.875rem; /* Smaller font like TOC */ - padding: 0.5rem; - background: transparent; -} - -.theme-doc-sidebar-item-link { - font-size: 0.875rem; - padding: 0.25rem 0.75rem; - border-radius: 6px; - transition: all 0.2s ease; - margin-bottom: 2px; -} - -.theme-doc-sidebar-item-link:hover { - background: rgba(54, 181, 239, 0.1); - color: var(--aurora-cyan); - backdrop-filter: blur(10px); -} - -.theme-doc-sidebar-item-link--active { - background: linear-gradient(135deg, - rgba(0, 211, 138, 0.15), - rgba(54, 181, 239, 0.15), - rgba(111, 85, 255, 0.15) - ); - border-left: 3px solid var(--aurora-cyan); - color: var(--aurora-cyan); - backdrop-filter: blur(10px); - box-shadow: 0 4px 8px rgba(54, 181, 239, 0.1); -} - -/* Clean navbar styling */ -.navbar { - border-bottom: 1px solid #333333; -} - -/* ====== HERO SECTION WITH AURORA GLASS EFFECT ====== */ -.hero { - background: - radial-gradient(ellipse at top left, rgba(0, 211, 138, 0.3) 0%, transparent 70%), - radial-gradient(ellipse at top right, rgba(54, 181, 239, 0.2) 0%, transparent 70%), - radial-gradient(ellipse at bottom, rgba(237, 15, 237, 0.2) 0%, transparent 70%), - linear-gradient(135deg, #000000 0%, #0a0a0a 100%) !important; - position: relative; - overflow: hidden; - border-bottom: 1px solid rgba(111, 85, 255, 0.3); -} - -[data-theme='dark'] .hero { - background: - radial-gradient(ellipse at top left, rgba(0, 211, 138, 0.4) 0%, transparent 70%), - radial-gradient(ellipse at top right, rgba(54, 181, 239, 0.3) 0%, transparent 70%), - radial-gradient(ellipse at bottom, rgba(237, 15, 237, 0.3) 0%, transparent 70%), - linear-gradient(135deg, #000000 0%, #0a0a0a 100%) !important; -} - -.hero::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: linear-gradient(45deg, - transparent 30%, - rgba(0, 211, 138, 0.1) 40%, - rgba(54, 181, 239, 0.1) 50%, - rgba(237, 15, 237, 0.1) 60%, - transparent 70% - ); - animation: shimmer 4s ease-in-out infinite; -} - -@keyframes shimmer { - 0%, 100% { transform: translateX(-150%); opacity: 0; } - 50% { transform: translateX(150%); opacity: 1; } -} - -.hero__title { - color: #ffffff !important; - text-shadow: - 0 0 40px var(--aurora-cyan), - 0 0 80px var(--aurora-blue), - 0 0 120px var(--aurora-green); - font-weight: 700; - letter-spacing: -0.025em; - font-size: 3rem; -} - -.hero__subtitle { - color: rgba(255, 255, 255, 0.95) !important; - text-shadow: 0 0 30px var(--aurora-cyan); - font-size: 1.25rem; - font-weight: 400; -} - -/* Aurora neon glass button for Get Started */ -.button--green-neon { - background: rgba(0, 0, 0, 0.6) !important; - backdrop-filter: blur(16px); - border: 1px solid var(--aurora-green) !important; - color: var(--aurora-green) !important; - box-shadow: 0 8px 32px rgba(0, 211, 138, 0.3); - font-weight: 600; - text-shadow: 0 0 10px var(--aurora-green); - border-radius: 12px; - padding: 1rem 2rem; - font-size: 1.1rem; - transition: all 0.3s ease; - position: relative; - overflow: hidden; -} - -.button--green-neon::before { - content: ''; - position: absolute; - top: 0; - left: -100%; - width: 100%; - height: 100%; - background: linear-gradient(90deg, - transparent, - rgba(0, 211, 138, 0.2), - rgba(54, 181, 239, 0.2), - transparent - ); - transition: left 0.5s; -} - -.button--green-neon:hover { - background: rgba(0, 0, 0, 0.8) !important; - border-color: var(--aurora-cyan) !important; - transform: translateY(-3px); - box-shadow: 0 15px 50px rgba(54, 181, 239, 0.5); - color: var(--aurora-cyan) !important; - text-shadow: 0 0 15px var(--aurora-cyan); - text-decoration: none; -} - -.button--green-neon:hover::before { - left: 100%; -} - -/* Clean footer - aurora glass effect */ -.footer { - background: rgba(0, 0, 0, 0.95) !important; - border-top: 1px solid #333333 !important; - backdrop-filter: blur(10px); -} - -.footer__title { - color: #ffffff !important; - font-weight: 600 !important; - margin-bottom: 0.75rem !important; -} - -.footer__link-item { - color: rgba(255, 255, 255, 0.7) !important; - transition: color 0.2s ease !important; -} - -.footer__link-item:hover { - color: var(--aurora-cyan) !important; -} - -/* Code block improvements */ -.prism-code { - background: #1a1a1a !important; - border: 1px solid #333333; - border-radius: 8px; -} - -/* Alert/admonition styling */ -.alert { - border-radius: 8px; - border: 1px solid #333333; -} - -[data-theme='dark'] .alert { - background: rgba(17, 17, 17, 0.8); -} - -.alert--info { - border-left: 4px solid #3b82f6; -} - -.alert--warning { - border-left: 4px solid #f59e0b; -} - -.alert--danger { - border-left: 4px solid #ef4444; -} - -.alert--success { - border-left: 4px solid #10b981; -} - -/* Clean card styling */ -.card { - background: var(--ifm-card-background-color); - border: 1px solid #333333; - border-radius: 8px; -} - -/* ====== INTRO PAGE FEATURE CARDS WITH AURORA GLASS CONTAINERS ====== */ -/* Only apply to intro page feature cards, not other pages */ -.theme-doc-markdown .row .col > div, -.markdown .row .col > div { - height: 100%; - padding: 0.75rem; - border-radius: 8px; /* Subtle 8px corners, not pills */ - transition: all 0.3s ease; - position: relative; - backdrop-filter: blur(16px); - -webkit-backdrop-filter: blur(16px); - background: rgba(0, 0, 0, 0.7); - border: 1px solid rgba(111, 85, 255, 0.4); - box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.9); - min-height: 120px; -} - -.theme-doc-markdown .row .col > div::before, -.markdown .row .col > div::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 2px; - background: linear-gradient(90deg, - var(--aurora-green), - var(--aurora-cyan), - var(--aurora-pink), - var(--aurora-purple) - ); - box-shadow: 0 0 20px 5px rgba(111, 85, 255, 0.8); - border-radius: 8px 8px 0 0; -} - -.theme-doc-markdown .row .col > div::after, -.markdown .row .col > div::after { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 80px; - background: linear-gradient(to bottom, - rgba(111, 85, 255, 0.15), - rgba(111, 85, 255, 0.03) - ); - border-radius: 8px 8px 0 0; - pointer-events: none; - z-index: 0; -} - -.theme-doc-markdown .row .col > div > *, -.markdown .row .col > div > * { - position: relative; - z-index: 1; -} - -.theme-doc-markdown .row .col > div:hover, -.markdown .row .col > div:hover { - transform: translateY(-6px); - box-shadow: 0 25px 60px rgba(54, 181, 239, 0.4); - border-color: rgba(54, 181, 239, 0.6); -} - -/* Feature titles and content with enhanced visibility - intro page only */ -.theme-doc-markdown .row .col h3, -.markdown .row .col h3 { - color: #ffffff; - text-shadow: 0 0 10px var(--aurora-cyan); - font-size: 1rem; - font-weight: 600; - margin-bottom: 0.5rem; - z-index: 10; - position: relative; -} - -.theme-doc-markdown .row .col p, -.markdown .row .col p { - color: #f3f4f6; - line-height: 1.4; - font-size: 0.8rem; - z-index: 10; - position: relative; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); -} - -/* Enhanced SVGs with aurora glow */ -.featureSvg { - height: 40px; - width: 40px; - filter: drop-shadow(0 0 10px var(--aurora-cyan)); - transition: all 0.3s ease; - margin-bottom: 0.5rem; -} - -.featureSvg:hover { - filter: drop-shadow(0 0 25px var(--aurora-pink)); - transform: scale(1.1); -} - -/* Responsive design */ -@media (max-width: 768px) { - .hero__title { - font-size: 2.5rem; - } - - .hero__subtitle { - font-size: 1.1rem; - } - - .theme-doc-markdown .row .col > div, - .markdown .row .col > div { - padding: 0.625rem; - min-height: 110px; - } - - .theme-doc-markdown .row .col h3, - .markdown .row .col h3 { - font-size: 0.95rem; - margin-bottom: 0.4rem; - } - - .theme-doc-markdown .row .col p, - .markdown .row .col p { - font-size: 0.75rem; - line-height: 1.3; - } - - .featureSvg { - height: 35px; - width: 35px; - } -} - -@media (max-width: 480px) { - .hero__title { - font-size: 2rem; - } - - .hero__subtitle { - font-size: 1rem; - } - - .theme-doc-markdown .row .col > div, - .markdown .row .col > div { - padding: 0.5rem; - min-height: 100px; - } - - .theme-doc-markdown .row .col h3, - .markdown .row .col h3 { - font-size: 0.9rem; - margin-bottom: 0.3rem; - } - - .theme-doc-markdown .row .col p, - .markdown .row .col p { - font-size: 0.7rem; - line-height: 1.2; - } - - .featureSvg { - height: 30px; - width: 30px; - margin-bottom: 0.4rem; - } -} - -/* Scrollbar styling */ -::-webkit-scrollbar { - width: 8px; - height: 8px; -} - -::-webkit-scrollbar-track { - background: #1a1a1a; -} - -::-webkit-scrollbar-thumb { - background: #333333; - border-radius: 4px; -} - -::-webkit-scrollbar-thumb:hover { - background: #a855f7; -} - -/* Selection styling */ -::selection { - background: rgba(168, 85, 247, 0.3); - color: #ffffff; -} - -::-moz-selection { - background: rgba(168, 85, 247, 0.3); - color: #ffffff; -} - -/* ====== HOMEPAGE GLASS CONTAINERS ====== */ -/* Specific styling for homepage index.js glass containers */ -.glassContainer { - height: 100%; - padding: 1.5rem; - border-radius: 16px; - transition: all 0.3s ease; - position: relative; - backdrop-filter: blur(20px); - -webkit-backdrop-filter: blur(20px); - background: rgba(0, 0, 0, 0.6); - border: 1px solid rgba(168, 85, 247, 0.3); - box-shadow: 0 15px 35px -10px rgba(0, 0, 0, 0.8); - margin-bottom: 2rem; -} - -.glassContainer::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 3px; - background: linear-gradient(90deg, #a855f7, #3b82f6, #ec4899, #10b981); - box-shadow: 0 0 30px 8px rgba(168, 85, 247, 0.6); - border-radius: 16px 16px 0 0; -} - -.glassContainer::after { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 100px; - background: linear-gradient(to bottom, rgba(168, 85, 247, 0.2), rgba(168, 85, 247, 0.05)); - border-radius: 16px 16px 0 0; - pointer-events: none; - z-index: 0; -} - -.glassContainer > * { - position: relative; - z-index: 1; -} - -.glassContainer:hover { - transform: translateY(-8px); - box-shadow: 0 30px 70px rgba(168, 85, 247, 0.3); - border-color: rgba(168, 85, 247, 0.5); -} - -.glassContainer h3 { - color: #ffffff; - text-shadow: 0 0 15px rgba(168, 85, 247, 0.7); - font-size: 1.25rem; - font-weight: 700; - margin-bottom: 1rem; - z-index: 10; - position: relative; -} - -.glassContainer p { - color: #f8fafc; - line-height: 1.6; - font-size: 0.95rem; - z-index: 10; - position: relative; - text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8); -} - -/* ====== HOMEPAGE SECTIONS STYLING ====== */ -.whatIsArchon, .quickStart, .nextSteps, .callToAction { - padding: 4rem 0; -} - -.whatIsArchon { - background: rgba(0, 0, 0, 0.3); - backdrop-filter: blur(5px); -} - -.whatIsArchon h2 { - color: #ffffff; - text-shadow: 0 0 20px rgba(168, 85, 247, 0.6); - text-align: center; - margin-bottom: 2rem; -} - -.whatIsArchon p { - color: #e5e7eb; - font-size: 1.1rem; - line-height: 1.7; - margin-bottom: 1.5rem; -} - -.whatIsArchon a { - color: #a855f7; - text-decoration: none; - border-bottom: 1px solid rgba(168, 85, 247, 0.3); - transition: all 0.2s ease; -} - -.whatIsArchon a:hover { - color: #c084fc; - border-bottom-color: #c084fc; - text-shadow: 0 0 10px rgba(192, 132, 252, 0.5); -} - -.features { - padding: 5rem 0; -} - -.features h2 { - color: #ffffff; - text-shadow: 0 0 25px rgba(168, 85, 247, 0.8); - font-size: 2.5rem; - font-weight: 700; -} - -.quickStart { - background: rgba(0, 0, 0, 0.2); - backdrop-filter: blur(5px); -} - -.quickStart h2 { - color: #ffffff; - text-shadow: 0 0 20px rgba(168, 85, 247, 0.6); - text-align: center; - margin-bottom: 1.5rem; -} - -.quickStart p { - color: #e5e7eb; - font-size: 1.1rem; - text-align: center; - margin-bottom: 2rem; -} - -.nextSteps h2 { - color: #ffffff; - text-shadow: 0 0 20px rgba(168, 85, 247, 0.6); - text-align: center; - margin-bottom: 2rem; -} - -.nextSteps ol { - color: #e5e7eb; - font-size: 1.05rem; - line-height: 1.8; -} - -.nextSteps ol li { - margin-bottom: 0.75rem; -} - -.nextSteps a { - color: #a855f7; - text-decoration: none; - border-bottom: 1px solid rgba(168, 85, 247, 0.3); - transition: all 0.2s ease; -} - -.nextSteps a:hover { - color: #c084fc; - border-bottom-color: #c084fc; - text-shadow: 0 0 10px rgba(192, 132, 252, 0.5); -} - -.callToAction { - background: rgba(0, 0, 0, 0.3); - backdrop-filter: blur(5px); -} - -.callToAction hr { - border-color: rgba(168, 85, 247, 0.3); - margin-bottom: 2rem; -} - -.callToAction p { - color: #e5e7eb; - font-size: 1.2rem; -} - -/* Enhanced SVGs with smaller size and stronger neon glow */ -.featureSvg { - height: 40px; - width: 40px; - filter: drop-shadow(0 0 10px rgba(168, 85, 247, 0.6)); - transition: all 0.3s ease; - margin-bottom: 0.5rem; -} - -.featureSvg:hover { - filter: drop-shadow(0 0 25px rgba(168, 85, 247, 0.9)); - transform: scale(1.1); -} - -/* Responsive design */ -@media (max-width: 768px) { - .hero__title { - font-size: 2.5rem; - } - - .hero__subtitle { - font-size: 1.1rem; - } - - .theme-doc-markdown .row .col > div, - .markdown .row .col > div { - padding: 0.625rem; - min-height: 110px; - } - - .theme-doc-markdown .row .col h3, - .markdown .row .col h3 { - font-size: 0.95rem; - margin-bottom: 0.4rem; - } - - .theme-doc-markdown .row .col p, - .markdown .row .col p { - font-size: 0.75rem; - line-height: 1.3; - } - - .glassContainer { - padding: 1.25rem; - margin-bottom: 1.5rem; - } - - .glassContainer h3 { - font-size: 1.1rem; - } - - .glassContainer p { - font-size: 0.9rem; - } - - .features h2 { - font-size: 2rem; - } - - .whatIsArchon, .quickStart, .nextSteps, .callToAction { - padding: 3rem 0; - } - - .featureSvg { - height: 35px; - width: 35px; - } -} - -@media (max-width: 480px) { - .hero__title { - font-size: 2rem; - } - - .hero__subtitle { - font-size: 1rem; - } - - .theme-doc-markdown .row .col > div, - .markdown .row .col > div { - padding: 0.5rem; - min-height: 100px; - } - - .theme-doc-markdown .row .col h3, - .markdown .row .col h3 { - font-size: 0.9rem; - margin-bottom: 0.3rem; - } - - .theme-doc-markdown .row .col p, - .markdown .row .col p { - font-size: 0.7rem; - line-height: 1.2; - } - - .glassContainer { - padding: 1rem; - margin-bottom: 1.25rem; - } - - .glassContainer h3 { - font-size: 1rem; - } - - .glassContainer p { - font-size: 0.85rem; - } - - .features h2 { - font-size: 1.75rem; - } - - .whatIsArchon, .quickStart, .nextSteps, .callToAction { - padding: 2.5rem 0; - } - - .featureSvg { - height: 30px; - width: 30px; - margin-bottom: 0.4rem; - } -} - -/* Scrollbar styling */ -::-webkit-scrollbar { - width: 8px; - height: 8px; -} - -::-webkit-scrollbar-track { - background: #1a1a1a; -} - -::-webkit-scrollbar-thumb { - background: #333333; - border-radius: 4px; -} - -::-webkit-scrollbar-thumb:hover { - background: #a855f7; -} - -/* Selection styling */ -::selection { - background: rgba(168, 85, 247, 0.3); - color: #ffffff; -} - -::-moz-selection { - background: rgba(168, 85, 247, 0.3); - color: #ffffff; -} - -/* - * =================================================================== - * IMPORTANT: ROUNDED CORNERS IN MERMAID DIAGRAMS - * =================================================================== - * - * CSS border-radius and SVG rx/ry attributes do NOT work reliably - * on dynamically generated Mermaid SVG elements. - * - * To get rounded corners, use Mermaid's new shape syntax instead: - * - * For rounded rectangles: - * A@{ shape: rounded, label: "Rounded Node" } - * OR - * A["Rounded Node"]@{ shape: rounded } - * - * For stadium-shaped nodes (fully rounded): - * A@{ shape: stadium, label: "Stadium Node" } - * OR - * A(Stadium Node) // shorthand syntax - * - * Other rounded shapes available in Mermaid v11.3.0+: - * - event (rounded rectangle) - * - terminal/pill (stadium) - * - rounded (rounded rectangle) - * - * Example with multiple rounded shapes: - * flowchart TD - * A@{ shape: rounded, label: "Start Process" } - * B@{ shape: stadium, label: "User Input" } - * C@{ shape: event, label: "Event Triggered" } - * - * =================================================================== - */ - -/* Mermaid Diagram Aurora Glass Morphism Styling */ -.mermaid { - /* Dark glass morphism container with aurora theme */ - background: rgba(10, 10, 10, 0.8) !important; - backdrop-filter: blur(20px) !important; - border-radius: 8px !important; /* Subtle corners, not pills */ - border: 1px solid rgba(111, 85, 255, 0.4) !important; - padding: 24px !important; - margin: 24px 0 !important; - position: relative !important; - overflow: hidden !important; - z-index: 1 !important; - - /* Hover effect */ - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; -} - -/* Force override Mermaid's default yellow fills with higher specificity */ -.mermaid svg g rect[fill="#ffd93d"], -.mermaid svg g rect[fill="rgb(255, 217, 61)"], -.mermaid svg g rect[fill="#ffff00"], -.mermaid svg g rect[fill="yellow"] { - fill: rgba(17, 24, 39, 0.9) !important; - stroke: #a855f7 !important; - stroke-width: 2px !important; -} - -.mermaid:hover { - transform: translateY(-8px) !important; - border-color: var(--aurora-cyan) !important; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), - 0 10px 10px -5px rgba(0, 0, 0, 0.04), - 0 0 30px rgba(54, 181, 239, 0.3) !important; -} - -/* Top aurora gradient border */ -.mermaid::before { - content: '' !important; - position: absolute !important; - top: 0 !important; - left: 0 !important; - right: 0 !important; - height: 1px !important; - background: linear-gradient(90deg, - transparent, - var(--aurora-green) 20%, - var(--aurora-cyan) 40%, - var(--aurora-pink) 60%, - var(--aurora-purple) 80%, - transparent - ) !important; - z-index: 2 !important; -} - -/* SVG styling within Mermaid container */ -.mermaid svg { - background: transparent !important; - border-radius: 12px !important; - width: 100% !important; - height: auto !important; -} - -/* Text elements - Force override with highest specificity */ -.mermaid svg text, -.mermaid svg g text, -.mermaid svg g g text, -.mermaid .nodeLabel, -.mermaid .edgeLabel, -.mermaid .cluster-label, -.mermaid svg tspan, -.mermaid svg g tspan { - fill: #ffffff !important; - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important; - font-weight: 400 !important; - font-size: 14px !important; - text-anchor: middle !important; -} - -/* Force override SVG font attribute */ -.mermaid svg, -.mermaid svg g { - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important; - font-size: 14px !important; -} - -/* Node styling - rounded corners must be set in Mermaid syntax, not CSS */ -.mermaid .node rect, -.mermaid rect { - fill: rgba(17, 24, 39, 0.9) !important; - stroke: #a855f7 !important; - stroke-width: 2px !important; - filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.3)) !important; -} - -.mermaid .node circle, -.mermaid .node ellipse, -.mermaid .node polygon { - fill: rgba(17, 24, 39, 0.9) !important; - stroke: #a855f7 !important; - stroke-width: 2px !important; - filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.3)) !important; -} - -/* Special node types */ -.mermaid .node.start rect, -.mermaid .node.end rect { - fill: rgba(139, 92, 246, 0.8) !important; - stroke: #ddd6fe !important; -} - -.mermaid .node.process rect { - fill: rgba(31, 41, 55, 0.9) !important; - stroke: #c084fc !important; -} - -.mermaid .node.decision polygon { - fill: rgba(75, 85, 99, 0.8) !important; - stroke: #a855f7 !important; -} - -/* Edge/arrow styling */ -.mermaid .edgePath path { - stroke: #a855f7 !important; - stroke-width: 2px !important; - fill: none !important; -} - -.mermaid .arrowheadPath { - fill: #a855f7 !important; - stroke: #a855f7 !important; -} - -/* Cluster/subgraph styling */ -.mermaid .cluster rect { - fill: rgba(31, 41, 55, 0.6) !important; - stroke: rgba(139, 92, 246, 0.8) !important; - stroke-width: 1px !important; - stroke-dasharray: 5,5 !important; - rx: 8px !important; -} - -/* Git diagram specific styling */ -.mermaid .commit-main { - fill: #8b5cf6 !important; - stroke: #a855f7 !important; -} - -.mermaid .commit-branch { - fill: #c084fc !important; - stroke: #ddd6fe !important; -} - -/* Journey diagram styling */ -.mermaid .section { - fill: rgba(139, 92, 246, 0.3) !important; -} - -.mermaid .task { - fill: rgba(17, 24, 39, 0.9) !important; - stroke: #a855f7 !important; -} - -/* State diagram styling */ -.mermaid .state-start circle, -.mermaid .state-end circle { - fill: #8b5cf6 !important; - stroke: #ddd6fe !important; -} - -.mermaid .state rect { - fill: rgba(17, 24, 39, 0.9) !important; - stroke: #a855f7 !important; - rx: 6px !important; -} - -/* Timeline styling */ -.mermaid .timeline-item { - fill: rgba(17, 24, 39, 0.9) !important; - stroke: #a855f7 !important; -} - -/* XY Chart styling */ -.mermaid .xychart .plot-background { - fill: rgba(17, 24, 39, 0.5) !important; -} - -.mermaid .xychart .grid line { - stroke: rgba(139, 92, 246, 0.2) !important; -} - -/* Sequence diagram styling */ -.mermaid .actor { - fill: rgba(17, 24, 39, 0.9) !important; - stroke: #a855f7 !important; -} - -.mermaid .messageLine0, -.mermaid .messageLine1 { - stroke: #a855f7 !important; - stroke-width: 2px !important; -} - -.mermaid .labelBox { - fill: rgba(17, 24, 39, 0.9) !important; - stroke: #a855f7 !important; -} - -/* Class diagram styling */ -.mermaid .classBox { - fill: rgba(17, 24, 39, 0.9) !important; - stroke: #a855f7 !important; -} - -.mermaid .divider { - stroke: #6b7280 !important; -} - -/* Ensure proper contrast and visibility */ -.mermaid .label, -.mermaid .nodeLabel, -.mermaid .edgeLabel { - color: #ffffff !important; - fill: #ffffff !important; - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important; - font-weight: 400 !important; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8) !important; -} - -/* Force font styling on all text elements */ -/* Force rounded corners on SVG rectangles - using CSS rx/ry properties (SVG 2 spec) */ -.mermaid svg rect { - rx: 8px !important; - ry: 8px !important; - border-radius: 8px !important; /* Fallback for older browsers */ -} - -/* More specific targeting for flowchart nodes */ -.mermaid g.nodes rect, -.mermaid .node rect, -.mermaid g[class*="node"] rect { - rx: 8px !important; - ry: 8px !important; - border-radius: 8px !important; -} - -.mermaid * { - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important; -} - -/* Specific styling for different text types */ -.mermaid .cluster-label, -.mermaid .titleText { - font-weight: 600 !important; - font-size: 16px !important; -} - -.mermaid .edgeLabel { - font-size: 12px !important; - font-weight: 400 !important; -} - -/* Dark mode specific adjustments */ -[data-theme='dark'] .mermaid { - background: rgba(17, 24, 39, 0.9) !important; - border-color: rgba(139, 92, 246, 0.4) !important; -} - -[data-theme='dark'] .mermaid:hover { - border-color: rgba(168, 85, 247, 0.6) !important; -} - -/* Mobile responsive adjustments */ -@media (max-width: 768px) { - .mermaid { - padding: 16px !important; - margin: 16px 0 !important; - border-radius: 12px !important; - } - - .mermaid svg { - max-width: 100% !important; - height: auto !important; - } -} - -/* Animation for diagram loading */ -.mermaid { - animation: mermaidFadeIn 0.6s ease-out !important; -} - -@keyframes mermaidFadeIn { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -/* Prevent text selection on hover effects */ -.mermaid svg text { - user-select: none !important; - -webkit-user-select: none !important; - -moz-user-select: none !important; - -ms-user-select: none !important; -} - -/* - * JavaScript fallback for browsers that don't support CSS rx/ry properties - * This script will run after Mermaid renders and set SVG attributes directly - */ -.mermaid-rounded-fallback { - /* This class will be added by JavaScript if CSS rx/ry isn't supported */ -} - -.mermaid-rounded-fallback rect[rx="0"], -.mermaid-rounded-fallback rect:not([rx]) { - /* For browsers where CSS rx/ry doesn't work, JS will set attributes */ -} - diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js deleted file mode 100644 index b3c5018a..00000000 --- a/docs/src/pages/index.js +++ /dev/null @@ -1,575 +0,0 @@ -import React, { useEffect, useCallback, useState } from 'react'; -import clsx from 'clsx'; -import Layout from '@theme/Layout'; -import Link from '@docusaurus/Link'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import styles from './index.module.css'; -import { - ArrowRight, - Database, - Zap, - Globe, - FileText, - Cpu, - CheckSquare, - Plug - } from 'lucide-react'; -import Heading from '@theme/Heading'; - -// Architecture Diagram Component -const ArchitectureDiagram = () => { - const [reactFlowInstance, setReactFlowInstance] = useState(null); - const [lucideIcons, setLucideIcons] = useState(null); - - useEffect(() => { - const loadComponents = async () => { - if (typeof window !== 'undefined') { - try { - // Import React Flow CSS first - await import('@xyflow/react/dist/style.css'); - - const reactFlow = await import('@xyflow/react'); - const lucide = await import('lucide-react'); - setReactFlowInstance(reactFlow); - setLucideIcons(lucide); - } catch (error) { - console.error('Error loading components:', error); - } - } - }; - loadComponents(); - }, []); - - if (!reactFlowInstance || !lucideIcons) { - return
Loading...
; - } - - return ; -}; - -// Separate component for React Flow diagram to ensure hooks are called consistently -const ReactFlowDiagram = ({ reactFlowInstance, lucideIcons }) => { - const { ReactFlow, useNodesState, useEdgesState, addEdge, Handle, Position } = reactFlowInstance; - const { Database, Zap, Globe, FileText, CheckSquare } = lucideIcons; - - // Node definitions with organized layout matching the screenshot - const initialNodes = [ - // IDEs on the left (organized vertically) - { - id: 'cursor', - type: 'ide', - position: { x: 50, y: 50 }, - data: { label: 'Cursor', icon: '/img/cursor.svg' }, - draggable: false - }, - { - id: 'claude', - type: 'ide', - position: { x: 50, y: 150 }, - data: { label: 'Claude Code', icon: '/img/claude-logo.svg' }, - draggable: false - }, - { - id: 'windsurf', - type: 'ide', - position: { x: 50, y: 250 }, - data: { label: 'Windsurf', icon: '/img/windsurf-white-symbol.svg' }, - draggable: false - }, - { - id: 'vscode', - type: 'ide', - position: { x: 50, y: 350 }, - data: { label: 'VS Code', icon: '/img/Visual_Studio_Code_1.35_icon.svg' }, - draggable: false - }, - - // Archon in the center (raised higher) - { - id: 'archon', - type: 'archon', - position: { x: 330, y: 50 }, - data: { label: 'ARCHON', subtitle: 'Knowledge Engine' }, - draggable: false - }, - - // MCP Logo positioned on connector line - { - id: 'mcp-logo', - type: 'mcp', - position: { x: 210, y: 135 }, - data: { label: 'MCP' }, - draggable: false - }, - - // FastApi Logo positioned on connector line - { - id: 'fastapi', - type: 'fastapi', - position: { x: 355, y: 275 }, - data: { label: 'FastAPI' }, - draggable: false - }, - - // Archon UI Control below Archon - { - id: 'archon-ui', - type: 'ui-control', - position: { x: 313, y: 350 }, - data: { - title: 'Archon UI', - subtitle: 'Control all of Archon\'s Features' - }, - draggable: false - }, - - // Knowledge Sources container - { - id: 'knowledge-sources', - type: 'container', - position: { x: 700, y: 50 }, - data: { - title: 'Knowledge Sources', - type: 'knowledge', - items: [ - { label: 'Web Crawling', icon: Globe }, - { label: 'Document Upload', icon: FileText }, - { label: 'Advanced RAG', icon: Zap }, - { label: 'Semantic Search', icon: Database } - ] - }, - draggable: false - }, - - // Project Intelligence container - { - id: 'project-intelligence', - type: 'container', - position: { x: 700, y: 300 }, - data: { - title: 'Project Intelligence', - type: 'intelligence', - items: [ - { label: 'PRD Management', icon: FileText }, - { label: 'Feature Planning', icon: CheckSquare }, - { label: 'Data Architecture', icon: Database }, - { label: 'Task Management', icon: CheckSquare } - ] - }, - draggable: false - } - ]; - - // Simplified edges - now 7 total connections (solid lines) - const initialEdges = [ - // IDEs to Archon (4 purple lines) - { - id: 'cursor-archon', - source: 'cursor', - target: 'archon', - type: 'smoothstep', - style: { - stroke: '#8b5cf6', - strokeWidth: 3 - } - }, - { - id: 'claude-archon', - source: 'claude', - target: 'archon', - type: 'smoothstep', - style: { - stroke: '#8b5cf6', - strokeWidth: 3 - } - }, - { - id: 'windsurf-archon', - source: 'windsurf', - target: 'archon', - type: 'smoothstep', - style: { - stroke: '#8b5cf6', - strokeWidth: 3 - } - }, - { - id: 'vscode-archon', - source: 'vscode', - target: 'archon', - type: 'smoothstep', - style: { - stroke: '#8b5cf6', - strokeWidth: 3 - } - }, - - // Archon to Archon UI (1 blue line) - { - id: 'archon-ui', - source: 'archon', - sourceHandle: 'bottom', - target: 'archon-ui', - type: 'smoothstep', - style: { - stroke: '#3b82f6', - strokeWidth: 3 - } - }, - - // Archon to containers (2 lines) - { - id: 'archon-knowledge', - source: 'archon', - sourceHandle: 'right', - target: 'knowledge-sources', - type: 'smoothstep', - style: { - stroke: '#10b981', - strokeWidth: 3 - } - }, - { - id: 'archon-intelligence', - source: 'archon', - sourceHandle: 'right', - target: 'project-intelligence', - type: 'smoothstep', - style: { - stroke: '#f59e0b', - strokeWidth: 3 - } - } - ]; - - const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes); - const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); - - // Custom node components - const nodeTypes = { - ide: ({ data }) => ( -
- {data.label} - {data.label} - -
- ), - archon: ({ data }) => ( -
- -Python - Archon -
-

{data.label}

-

{data.subtitle}

-
- - -
- ), - 'ui-control': ({ data }) => ( -
- -React -

{data.title}

-

{data.subtitle}

-
- ), - mcp: ({ data }) => ( -
- MCP -
- ), - fastapi: ({ data }) => ( -
- FastAPI -
- ), - container: ({ data }) => ( -
-

{data.title}

-
- {data.items.map((item, index) => ( -
- - {item.label} -
- ))} -
- -
- ) - }; - - return ( -
- -
- ); -}; - -function HomepageHeader() { - const {siteConfig} = useDocusaurusContext(); - return ( -
-
-
-

{siteConfig.title}

-

Supercharge your AI development workflow. Plug Cursor, Windsurf, or any AI IDE into Archon to unlock instant access to your business knowledge, technical docs, project requirements, and development tasks.

-
- - Get Started - Quick Setup ⚡ - -
-
-
-
- ); -} - -function HomepageContent() { - const [lucideIcons, setLucideIcons] = useState(null); - const [isClient, setIsClient] = useState(false); - - useEffect(() => { - setIsClient(true); - - // Dynamically import Lucide React only on client side - const loadLucideIcons = async () => { - try { - const { Database, Zap, Globe, FileText, CheckSquare, Plug } = await import('lucide-react'); - setLucideIcons({ Database, Zap, Globe, FileText, CheckSquare, Plug }); - } catch (error) { - console.error('Error loading Lucide icons:', error); - } - }; - - loadLucideIcons(); - }, []); - - if (!isClient || !lucideIcons) { - return ( -
-
-
-

✨ Key Features

-
-
-
- Loading Features... -
-
-
-
-
-
- ); - } - - const { Database, Zap, Globe, FileText, CheckSquare, Plug } = lucideIcons; - - const features = [ - { - title: 'Knowledge Management', - icon: Database, - description: 'Intelligently crawl documentation sites, upload PDFs and documents, and organize knowledge by type (technical vs business). Advanced source filtering enables precise RAG queries across your entire knowledge base.' - }, - { - title: 'Advanced RAG Capabilities', - icon: Zap, - description: 'Smart URL detection, contextual embeddings, hybrid search, and reranking deliver superior search results. Special handling for code snippets and technical documentation with AI-powered content understanding.' - }, - { - title: 'MCP Integration', - icon: Plug, - description: 'Universal compatibility with Cursor, Windsurf, Claude Desktop, and any MCP client. Dual transport support (SSE/stdio) with real-time access to your knowledge base directly from your AI coding assistants.' - }, - { - title: 'Document Processing', - icon: FileText, - description: 'Dual-engine PDF extraction, Word document support, markdown processing, and smart chunking. AI-generated metadata and automatic code example extraction for comprehensive document understanding.' - }, - { - title: 'Web Interface', - icon: Globe, - description: 'Complete web dashboard for MCP server management, document upload, crawling operations, and interactive knowledge chat. Real-time log streaming and progress tracking for all operations.' - }, - { - title: 'Task Management', - icon: CheckSquare, - description: 'Integrated project and task management with AI agent integration. Create, track, and organize development tasks with automatic linking to relevant documentation and code examples.' - } - ]; - - return ( -
-
-
-

✨ Key Features

- - {/* First Row - 3 cards */} -
- {features.slice(0, 3).map((feature, idx) => { - const IconComponent = feature.icon; - return ( -
-
-
- -

{feature.title}

-
-

{feature.description}

-
-
- ); - })} -
- - {/* Second Row - 3 cards */} -
- {features.slice(3, 6).map((feature, idx) => { - const IconComponent = feature.icon; - return ( -
-
-
- -

{feature.title}

-
-

{feature.description}

-
-
- ); - })} -
-
-
- -
-
-
-
-

🚀 Quick Start

-

Ready to get started? Follow our comprehensive setup guide:

-
- - 👉 Getting Started Guide - Complete setup from installation to first knowledge base - -
-
-
-
-
- -
-
-
-
-

🎯 Next Steps

-
    -
  1. Set up Archon - Get your knowledge engine running
  2. -
  3. Connect your AI client - Integrate with Cursor, Windsurf, or Claude Desktop
  4. -
  5. Build your knowledge base - Start crawling and uploading content
  6. -
  7. Optimize for your use case - Configure RAG strategies
  8. -
  9. Deploy to production - Scale for team or enterprise use
  10. -
-
-
-
-
- -
-
-
-
-
-

Archon - Supercharging AI IDE's with knowledge and tasks

-
-
-
-
-
- ); -} - -export default function Home() { - const {siteConfig} = useDocusaurusContext(); - - return ( - - -
- {/* Architecture Diagram */} -
- -
- - -
-
- ); -} diff --git a/docs/src/pages/index.module.css b/docs/src/pages/index.module.css deleted file mode 100644 index eed803f7..00000000 --- a/docs/src/pages/index.module.css +++ /dev/null @@ -1,948 +0,0 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ - -.heroBanner { - padding: 6rem 0; - text-align: center; - position: relative; - overflow: hidden; -} - -.heroBanner::before { - content: ''; - position: absolute; - left: -25%; - top: 50%; - transform: translateY(-50%); - width: 55%; - height: 95%; - background-image: url('/img/logo-neon.png'); - background-size: contain; - background-repeat: no-repeat; - background-position: center right; - opacity: 0.2; - z-index: 0; - filter: - blur(1px) - drop-shadow(0 0 30px rgba(168, 85, 247, 0.8)) - drop-shadow(0 0 60px rgba(59, 130, 246, 0.6)) - drop-shadow(0 0 90px rgba(236, 72, 153, 0.4)) - drop-shadow(0 0 120px rgba(16, 185, 129, 0.3)); - animation: logoGlow 4s ease-in-out infinite alternate; -} - -@keyframes logoGlow { - 0% { - opacity: 0.15; - filter: - blur(1px) - drop-shadow(0 0 20px rgba(168, 85, 247, 0.6)) - drop-shadow(0 0 40px rgba(59, 130, 246, 0.4)) - drop-shadow(0 0 60px rgba(236, 72, 153, 0.3)) - drop-shadow(0 0 80px rgba(16, 185, 129, 0.2)); - } - 100% { - opacity: 0.25; - filter: - blur(0.5px) - drop-shadow(0 0 40px rgba(168, 85, 247, 1.0)) - drop-shadow(0 0 80px rgba(59, 130, 246, 0.8)) - drop-shadow(0 0 120px rgba(236, 72, 153, 0.6)) - drop-shadow(0 0 160px rgba(16, 185, 129, 0.4)); - } -} - -@media screen and (max-width: 966px) { - .heroBanner { - padding: 2rem; - } -} - -.buttons { - display: flex; - align-items: center; - justify-content: center; - margin-top: 2rem; - position: relative; - z-index: 2; -} - -.heroBanner .container { - position: relative; - z-index: 2; - display: flex; - justify-content: center; - align-items: center; - min-height: 100%; -} - -.heroContent { - max-width: 60%; - text-align: left; - margin: 0 auto; -} - -/* Architecture Diagram Section */ -.architectureSection { - padding: 20px 0 10px 0; - background: transparent; -} - -.architectureSection::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: - linear-gradient(90deg, transparent 0%, rgba(139, 92, 246, 0.03) 50%, transparent 100%), - linear-gradient(0deg, transparent 0%, rgba(16, 185, 129, 0.02) 50%, transparent 100%); - pointer-events: none; - z-index: -1; -} - -/* Node Styles */ - -/* Section Labels */ -.sectionLabel { - color: #ffffff; - font-size: 18px; - font-weight: 700; - text-shadow: 0 0 10px rgba(139, 92, 246, 0.5); - background: rgba(0, 0, 0, 0.3); - padding: 8px 16px; - border-radius: 8px; - backdrop-filter: blur(10px); - border: 1px solid rgba(139, 92, 246, 0.3); -} - -.features { - padding: 2rem 0 1rem 0; -} - -.featureRowSpacing { - margin-top: 2rem !important; -} - -.features .row { - margin-bottom: 0 !important; -} - -.features .row:last-child { - margin-bottom: 0 !important; -} - -.features .col { - margin-bottom: 0 !important; - padding: 0 0.5rem; -} - -.glassContainer { - height: 100%; - padding: 1.2rem; - border-radius: 16px; - transition: all 0.3s ease; - position: relative; - backdrop-filter: blur(20px); - -webkit-backdrop-filter: blur(20px); - background: rgba(0, 0, 0, 0.6); - border: 1px solid rgba(168, 85, 247, 0.3); - box-shadow: 0 15px 35px -10px rgba(0, 0, 0, 0.8); - margin-bottom: 0 !important; - overflow: hidden; /* Ensures glows stay within border-radius */ -} - -.glassContainer::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 3px; - background: linear-gradient(90deg, #a855f7, #3b82f6, #ec4899, #10b981); - box-shadow: - 0 0 20px 4px rgba(168, 85, 247, 0.4), - inset 0 0 20px 2px rgba(168, 85, 247, 0.2); - border-radius: 16px 16px 0 0; -} - -.glassContainer::after { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 100px; - background: linear-gradient(to bottom, rgba(168, 85, 247, 0.2), rgba(168, 85, 247, 0.05)); - border-radius: 16px 16px 0 0; - pointer-events: none; - z-index: 0; -} - -.glassContainer > * { - position: relative; - z-index: 1; -} - -.glassContainer:hover { - transform: translateY(-8px); - box-shadow: - 0 30px 70px rgba(168, 85, 247, 0.3), - 0 0 40px rgba(168, 85, 247, 0.2); - border-color: rgba(168, 85, 247, 0.5); -} - -.glassContainer h3 { - color: #ffffff; - text-shadow: 0 0 15px rgba(168, 85, 247, 0.7); - font-size: 1.15rem; - font-weight: 700; - margin: 0; - line-height: 1.3; - z-index: 10; - position: relative; - flex: 1; -} - -.glassContainer p { - color: #f8fafc; - line-height: 1.6; - font-size: 0.95rem; - z-index: 10; - position: relative; - text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8); -} - -.featureHeader { - display: flex; - align-items: center; - gap: 0.75rem; - margin-bottom: 1rem; -} - -.featureIcon { - color: #a855f7; - filter: drop-shadow(0 0 10px rgba(168, 85, 247, 0.6)); - transition: all 0.3s ease; - flex-shrink: 0; -} - -.featureDescription { - color: #9ca3af !important; - line-height: 1.6; - font-size: 0.95rem; - text-align: left; - text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8); - margin: 0; -} - -.glassContainer:hover .featureIcon { - color: #c084fc; - filter: drop-shadow(0 0 20px rgba(168, 85, 247, 0.8)); - transform: scale(1.1); -} - -.quickStart { - padding: 4rem 0; - background: rgba(0, 0, 0, 0.2); - backdrop-filter: blur(5px); -} - -.nextSteps { - padding: 4rem 0; -} - -.callToAction { - padding: 4rem 0; - background: rgba(0, 0, 0, 0.3); - backdrop-filter: blur(5px); -} - -.diagramContainer { - margin: 2rem 0; - padding: 2rem; - background: rgba(0, 0, 0, 0.4); - border-radius: 16px; - border: 1px solid rgba(168, 85, 247, 0.2); - backdrop-filter: blur(10px); - overflow-x: auto; -} - -.archonDiagram { - padding: 2rem 0 1rem 0; -} - -/* App Icon Styling */ -.appIcon { - display: flex; - flex-direction: column; - align-items: center; - transition: all 0.3s ease; -} - -.appIcon:hover { - transform: translateY(-8px); -} - -.iconBox { - width: 80px; - height: 80px; - border-radius: 20px; - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 0.75rem; - border: 2px solid rgba(255, 255, 255, 0.3); - box-shadow: - 0 10px 30px rgba(0, 0, 0, 0.5), - inset 0 1px 0 rgba(255, 255, 255, 0.2); - transition: all 0.3s ease; - backdrop-filter: blur(10px); -} - -.iconBox:hover { - transform: scale(1.1); - box-shadow: - 0 20px 50px rgba(168, 85, 247, 0.4), - inset 0 1px 0 rgba(255, 255, 255, 0.3); -} - -.cursorIcon, .windsurfIcon, .vscodeIcon { - font-size: 2.5rem; - filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.8)); -} - -.claudeIcon, .archonLogo { - width: 50px; - height: 50px; - filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.8)); -} - -.ideIcon { - width: 50px; - height: 50px; - filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.8)); -} - -.appName { - color: #ffffff; - font-weight: 600; - font-size: 0.9rem; - text-shadow: 0 0 10px rgba(255, 255, 255, 0.5); -} - -/* Neon Connector Lines */ -.neonConnector { - display: flex; - align-items: center; - justify-content: center; - margin: 2rem 0; - gap: 1rem; -} - -.connectionLine { - flex: 1; - height: 2px; - background: linear-gradient(90deg, transparent 0%, #a855f7 20%, #3b82f6 50%, #ec4899 80%, transparent 100%); - box-shadow: 0 0 10px rgba(168, 85, 247, 0.8); - animation: neonPulse 2s ease-in-out infinite alternate; -} - -.connectionText { - color: #a855f7; - font-weight: 600; - font-size: 0.9rem; - text-shadow: 0 0 10px rgba(168, 85, 247, 0.8); - background: rgba(0, 0, 0, 0.8); - padding: 0.5rem 1rem; - border-radius: 20px; - border: 1px solid rgba(168, 85, 247, 0.5); - backdrop-filter: blur(10px); -} - -@keyframes neonPulse { - 0% { opacity: 0.7; box-shadow: 0 0 5px rgba(168, 85, 247, 0.5); } - 100% { opacity: 1; box-shadow: 0 0 20px rgba(168, 85, 247, 1); } -} - -/* Horizontal Connector for three-column layout */ -.horizontalConnector { - display: flex; - align-items: center; - justify-content: center; - gap: 1rem; - margin: 1rem 0; -} - -.connectionArrow { - font-size: 2rem; - color: #a855f7; - text-shadow: 0 0 15px rgba(168, 85, 247, 0.8); - animation: arrowPulse 2s ease-in-out infinite alternate; -} - -@keyframes arrowPulse { - 0% { - color: #a855f7; - text-shadow: 0 0 10px rgba(168, 85, 247, 0.6); - transform: scale(1); - } - 100% { - color: #c084fc; - text-shadow: 0 0 20px rgba(168, 85, 247, 1); - transform: scale(1.1); - } -} - -/* IDE Node Styling */ -.ideNode { - display: flex; - flex-direction: column; - align-items: center; - padding: 12px; - background: rgba(31, 41, 55, 0.8); - border: 1px solid rgba(139, 92, 246, 0.5); - border-radius: 12px; - backdrop-filter: blur(8px); - box-shadow: 0 0 20px rgba(139, 92, 246, 0.3); - min-width: 100px; - transition: all 0.3s ease; -} - -.ideNode:hover { - border-color: rgba(139, 92, 246, 0.8); - box-shadow: 0 0 30px rgba(139, 92, 246, 0.5); - transform: translateY(-2px); -} - -.nodeIcon { - width: 32px; - height: 32px; - margin-bottom: 6px; - border-radius: 6px; -} - -/* Make cursor logo white */ -.ideNode img[alt="Cursor"] { - filter: invert(1) brightness(1.2); -} - -.nodeIconSvg { - margin-bottom: 6px; -} - -.nodeLabel { - color: #ffffff; - font-size: 12px; - font-weight: 600; - text-align: center; - line-height: 1.2; -} - -/* Archon Node Styling */ -.archonNode { - display: flex; - flex-direction: column; - align-items: center; - padding: 30px 25px; - background: linear-gradient(135deg, rgba(139, 92, 246, 0.2), rgba(168, 85, 247, 0.2)); - border: 2px solid rgba(139, 92, 246, 0.6); - border-radius: 20px; - backdrop-filter: blur(12px); - box-shadow: 0 0 40px rgba(139, 92, 246, 0.4); - min-width: 200px; - min-height: 140px; - position: relative; - overflow: hidden; -} - -.archonNode::before { - content: ''; - position: absolute; - top: 0; - left: -100%; - width: 100%; - height: 100%; - background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent); - animation: shimmer 3s infinite; -} - -@keyframes shimmer { - 0% { left: -100%; } - 100% { left: 100%; } -} - -.archonIcon { - width: 60px; - height: 60px; - margin-bottom: 12px; -} - -.archonText h3 { - color: #ffffff; - font-size: 22px; - font-weight: 700; - margin: 0 0 6px 0; - text-shadow: 0 0 10px rgba(139, 92, 246, 0.5); -} - -.archonText p { - color: #9ca3af; - font-size: 0.9rem; - margin: 0; - text-shadow: 0 0 10px rgba(139, 92, 246, 0.5); -} - -.pythonIcon { - position: absolute; - top: 8px; - left: 8px; - width: 24px; - height: 24px; - z-index: 10; - filter: drop-shadow(0 0 8px rgba(255, 212, 59, 0.8)); -} - -/* Knowledge Node Styling */ -.knowledgeNode { - display: flex; - flex-direction: column; - align-items: center; - padding: 12px; - background: rgba(16, 185, 129, 0.1); - border: 1px solid rgba(16, 185, 129, 0.5); - border-radius: 8px; - backdrop-filter: blur(8px); - box-shadow: 0 0 15px rgba(16, 185, 129, 0.2); - min-width: 120px; - transition: all 0.3s ease; -} - -.knowledgeNode:hover { - border-color: rgba(16, 185, 129, 0.8); - box-shadow: 0 0 25px rgba(16, 185, 129, 0.4); - transform: translateY(-2px); -} - -.knowledgeNode .nodeIconSvg { - color: #10b981; -} - -.intelligenceNode { - display: flex; - flex-direction: column; - align-items: center; - padding: 12px; - background: rgba(245, 158, 11, 0.1); - border: 1px solid rgba(245, 158, 11, 0.5); - border-radius: 8px; - backdrop-filter: blur(8px); - box-shadow: 0 0 15px rgba(245, 158, 11, 0.2); - min-width: 120px; - transition: all 0.3s ease; -} - -.intelligenceNode:hover { - border-color: rgba(245, 158, 11, 0.8); - box-shadow: 0 0 25px rgba(245, 158, 11, 0.4); - transform: translateY(-2px); -} - -.intelligenceNode .nodeIconSvg { - color: #f59e0b; -} - -.knowledgeHeader { - display: flex; - align-items: center; - margin-bottom: 1rem; - gap: 0.75rem; -} - -.knowledgeIcon { - font-size: 2rem; - filter: drop-shadow(0 0 10px rgba(59, 130, 246, 0.6)); -} - -.knowledgeNode h4 { - margin: 0; - color: #ffffff; - font-size: 1.2rem; - font-weight: 600; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); -} - -.knowledgeFeatures { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 0.5rem; -} - -.featureItem { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.5rem; - background: rgba(255, 255, 255, 0.05); - border-radius: 8px; - border: 1px solid rgba(255, 255, 255, 0.1); - font-size: 0.85rem; - color: #d1d5db; - transition: all 0.2s ease; -} - -.featureItem:hover { - background: rgba(255, 255, 255, 0.1); - border-color: rgba(59, 130, 246, 0.3); - color: #ffffff; -} - -.featureIcon { - font-size: 1rem; - filter: drop-shadow(0 0 5px rgba(59, 130, 246, 0.4)); -} - -/* React Flow Edge Styling - SOLID GLOWING LINES */ -:global(.react-flow__edge-path) { - stroke-width: 3 !important; - filter: drop-shadow(0 0 10px currentColor) !important; - stroke-dasharray: none !important; - animation: solidGlow 2s ease-in-out infinite alternate !important; -} - -:global(.react-flow__edge) { - pointer-events: none !important; -} - -@keyframes solidGlow { - 0% { - filter: drop-shadow(0 0 8px currentColor); - } - 100% { - filter: drop-shadow(0 0 20px currentColor); - } -} - -/* Responsive design */ -@media (max-width: 768px) { - .flowContainer { - height: 500px; - } - - .ideNode, .knowledgeNode { - min-width: 100px; - max-width: 200px; - } - - .archonNode { - min-width: 150px; - padding: 1.5rem; - } - - .knowledgeFeatures { - grid-template-columns: 1fr; - } -} - -@media (max-width: 480px) { - .heroBanner { - padding: 3rem 0; - } - - .heroBanner::before { - left: -20%; - width: 60%; - height: 70%; - opacity: 0.08; - } - - .glassContainer { - padding: 1rem; - margin-bottom: 1.25rem; - } - - .glassContainer h3 { - font-size: 1rem; - } - - .glassContainer p { - font-size: 0.85rem; - } - - .featureIcon { - width: 36px; - height: 36px; - } - - .heroContent { - max-width: 90%; - text-align: center; - margin: 0 auto; - } - - .architectureSection, .quickStart, .nextSteps, .callToAction { - padding: 2.5rem 0; - } - - .diagramContainer { - padding: 1rem; - margin: 1rem 0; - } - - .iconBox { - width: 50px; - height: 50px; - border-radius: 12px; - } - - .cursorIcon, .windsurfIcon, .vscodeIcon { - font-size: 1.5rem; - } - - .claudeIcon, .archonLogo { - width: 25px; - height: 25px; - } - - .systemBox { - padding: 1rem; - } - - .systemBox h4 { - font-size: 1.2rem; - } - - .archonCore { - padding: 1rem; - max-width: 200px; - } - - .archonCore h3 { - font-size: 1.4rem; - } - - .archonIconBox { - width: 60px; - height: 60px; - } - - .powerFeature { - padding: 1.25rem; - margin-bottom: 1.25rem; - } - - .powerFeature h3 { - font-size: 1.1rem; - } - - .powerFeature p { - font-size: 0.9rem; - } -} - -/* Container Node Styling */ -.containerNode { - display: flex; - flex-direction: column; - padding: 16px; - background: rgba(31, 41, 55, 0.8); - border: 1px solid rgba(139, 92, 246, 0.5); - border-radius: 12px; - backdrop-filter: blur(8px); - box-shadow: 0 0 20px rgba(139, 92, 246, 0.3); - min-width: 200px; - transition: all 0.3s ease; -} - -.containerNode:hover { - border-color: rgba(139, 92, 246, 0.8); - box-shadow: 0 0 30px rgba(139, 92, 246, 0.5); - transform: translateY(-2px); -} - -/* Knowledge Sources - Green */ -.containerNode[data-type="knowledge"] { - border-color: rgba(16, 185, 129, 0.6); - box-shadow: 0 0 25px rgba(16, 185, 129, 0.3); -} - -.containerNode[data-type="knowledge"]:hover { - border-color: rgba(16, 185, 129, 0.9); - box-shadow: 0 0 40px rgba(16, 185, 129, 0.5); -} - -.containerNode[data-type="knowledge"] .containerTitle { - text-shadow: 0 0 10px rgba(16, 185, 129, 0.6); -} - -/* Project Intelligence - Orange */ -.containerNode[data-type="intelligence"] { - border-color: rgba(245, 158, 11, 0.6); - box-shadow: 0 0 25px rgba(245, 158, 11, 0.3); -} - -.containerNode[data-type="intelligence"]:hover { - border-color: rgba(245, 158, 11, 0.9); - box-shadow: 0 0 40px rgba(245, 158, 11, 0.5); -} - -.containerNode[data-type="intelligence"] .containerTitle { - text-shadow: 0 0 10px rgba(245, 158, 11, 0.6); -} - -.containerTitle { - color: #ffffff; - font-size: 16px; - font-weight: 700; - margin: 0 0 12px 0; - text-align: center; - text-shadow: 0 0 10px rgba(139, 92, 246, 0.5); -} - -.containerGrid { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 8px; -} - -.containerItem { - display: flex; - align-items: center; - gap: 6px; - padding: 8px; - background: rgba(255, 255, 255, 0.05); - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 6px; - transition: all 0.2s ease; -} - -.containerItem:hover { - background: rgba(255, 255, 255, 0.1); - border-color: rgba(139, 92, 246, 0.3); -} - -.itemIcon { - color: #8b5cf6; - flex-shrink: 0; -} - -.itemLabel { - color: #ffffff; - font-size: 11px; - font-weight: 500; - line-height: 1.2; -} - -/* UI Control Node Styling */ -.uiControlNode { - display: flex; - flex-direction: column; - align-items: center; - padding: 20px; - background: rgba(31, 41, 55, 0.9); - border: 1px solid rgba(59, 130, 246, 0.6); - border-radius: 12px; - backdrop-filter: blur(8px); - box-shadow: 0 0 25px rgba(59, 130, 246, 0.3); - min-width: 180px; - transition: all 0.3s ease; -} - -.uiControlNode:hover { - border-color: rgba(59, 130, 246, 0.8); - box-shadow: 0 0 35px rgba(59, 130, 246, 0.5); - transform: translateY(-2px); -} - -.uiControlTitle { - color: #ffffff; - font-size: 1.3rem; - font-weight: 700; - margin: 0 0 0.5rem 0; - text-shadow: 0 0 15px rgba(59, 130, 246, 0.7); - text-align: center; -} - -.reactIcon { - position: absolute; - top: 8px; - left: 8px; - width: 24px; - height: 24px; - z-index: 10; - filter: drop-shadow(0 0 8px rgba(97, 218, 251, 0.8)); -} - -.uiControlSubtitle { - color: rgba(255, 255, 255, 0.8); - font-size: 13px; - margin: 0; - text-align: center; - line-height: 1.3; -} - -.mcpNode { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - background: rgba(139, 92, 246, 0.2); - border: 2px solid #8b5cf6; - border-radius: 50%; - width: 60px; - height: 60px; - box-shadow: - 0 0 20px rgba(139, 92, 246, 0.6), - inset 0 1px 0 rgba(255, 255, 255, 0.2); - backdrop-filter: blur(10px); - transition: all 0.3s ease; -} - -.mcpNode:hover { - transform: scale(1.1); - box-shadow: - 0 0 30px rgba(139, 92, 246, 0.8), - inset 0 1px 0 rgba(255, 255, 255, 0.3); -} - -.mcpIcon { - width: 40px; - height: 40px; - filter: brightness(0) invert(1) drop-shadow(0 0 10px rgba(255, 255, 255, 0.8)); -} - -.fastapiNode { - display: flex; - align-items: center; - justify-content: center; - background: rgba(0, 150, 136, 0.2); - border: 2px solid #009688; - border-radius: 12px; - padding: 8px 12px; - min-width: 120px; - height: 40px; - box-shadow: - 0 0 20px rgba(0, 150, 136, 0.4), - inset 0 1px 0 rgba(255, 255, 255, 0.2); - backdrop-filter: blur(10px); - transition: all 0.3s ease; -} - -.fastapiNode:hover { - transform: scale(1.05); - box-shadow: - 0 0 30px rgba(0, 150, 136, 0.6), - inset 0 1px 0 rgba(255, 255, 255, 0.3); -} - -.fastapiIcon { - height: 24px; - width: auto; - filter: brightness(0) invert(1) drop-shadow(0 0 8px rgba(255, 255, 255, 0.6)); -} - - - diff --git a/docs/src/pages/markdown-page.md b/docs/src/pages/markdown-page.md deleted file mode 100644 index 9756c5b6..00000000 --- a/docs/src/pages/markdown-page.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Markdown page example ---- - -# Markdown page example - -You don't need React to write simple standalone pages. diff --git a/docs/static/.nojekyll b/docs/static/.nojekyll deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/static/img/Python-logo-notext.svg b/docs/static/img/Python-logo-notext.svg deleted file mode 100644 index 269bbea5..00000000 --- a/docs/static/img/Python-logo-notext.svg +++ /dev/null @@ -1,265 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/static/img/React-icon.svg b/docs/static/img/React-icon.svg deleted file mode 100644 index ea77a618..00000000 --- a/docs/static/img/React-icon.svg +++ /dev/null @@ -1,9 +0,0 @@ - - React Logo - - - - - - - diff --git a/docs/static/img/Visual_Studio_Code_1.35_icon.svg b/docs/static/img/Visual_Studio_Code_1.35_icon.svg deleted file mode 100644 index 0557c2cb..00000000 --- a/docs/static/img/Visual_Studio_Code_1.35_icon.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/static/img/claude-logo.svg b/docs/static/img/claude-logo.svg deleted file mode 100644 index 853a243c..00000000 --- a/docs/static/img/claude-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/static/img/cursor.svg b/docs/static/img/cursor.svg deleted file mode 100644 index abadee50..00000000 --- a/docs/static/img/cursor.svg +++ /dev/null @@ -1 +0,0 @@ -Cursor \ No newline at end of file diff --git a/docs/static/img/docusaurus.png b/docs/static/img/docusaurus.png deleted file mode 100644 index f458149e3c8f53335f28fbc162ae67f55575c881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5142 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 F{0H{b<4^zq diff --git a/docs/static/img/fastapi-seeklogo.svg b/docs/static/img/fastapi-seeklogo.svg deleted file mode 100644 index 4f551587..00000000 --- a/docs/static/img/fastapi-seeklogo.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - FastAPI - - - - - diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico deleted file mode 100644 index c01d54bcd39a5f853428f3cd5aa0f383d963c484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3626 zcmb`Je@s(X6vrR`EK3%b%orErlDW({vnABqA zcfaS{d+xbU5JKp0*;0YOg+;Fl!eT)XRuapIwFLL`=imZCSon$`se`_<%@MB=M~KG+ z=EW^FL`w|Bo>*ktlaS^(fut!95`iG5u=SZ8nfDHO#GaTlH1-XG^;vsjUb^gWTVz0+ z^=WR1wv9-2oeR=_;fL0H7rNWqAzGtO(D;`~cX(RcN0w2v24Y8)6t`cS^_ghs`_ho? z{0ka~1Dgo8TfAP$r*ua?>$_V+kZ!-(TvEJ7O2f;Y#tezt$&R4 zLI}=-y@Z!grf*h3>}DUL{km4R>ya_I5Ag#{h_&?+HpKS!;$x3LC#CqUQ8&nM?X))Q zXAy2?`YL4FbC5CgJu(M&Q|>1st8XXLZ|5MgwgjP$m_2Vt0(J z&Gu7bOlkbGzGm2sh?X`){7w69Y$1#@P@7DF{ZE=4%T0NDS)iH`tiPSKpDNW)zmtn( zw;4$f>k)4$LBc>eBAaTZeCM2(iD+sHlj!qd z2GjRJ>f_Qes(+mnzdA^NH?^NB(^o-%Gmg$c8MNMq&`vm@9Ut;*&$xSD)PKH{wBCEC z4P9%NQ;n2s59ffMn8*5)5AAg4-93gBXBDX`A7S& zH-|%S3Wd%T79fk-e&l`{!?lve8_epXhE{d3Hn$Cg!t=-4D(t$cK~7f&4s?t7wr3ZP z*!SRQ-+tr|e1|hbc__J`k3S!rMy<0PHy&R`v#aJv?`Y?2{avK5sQz%=Us()jcNuZV z*$>auD4cEw>;t`+m>h?f?%VFJZj8D|Y1e_SjxG%J4{-AkFtT2+ZZS5UScS~%;dp!V>)7zi`w(xwSd*FS;Lml=f6hn#jq)2is4nkp+aTrV?)F6N z>DY#SU0IZ;*?Hu%tSj4edd~kYNHMFvS&5}#3-M;mBCOCZL3&;2obdG?qZ>rD|zC|Lu|sny76pn2xl|6sk~Hs{X9{8iBW zwiwgQt+@hi`FYMEhX2 - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/static/img/logo-neon.svg b/docs/static/img/logo-neon.svg deleted file mode 100644 index 2a692dc6..00000000 --- a/docs/static/img/logo-neon.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/static/img/logo.svg b/docs/static/img/logo.svg deleted file mode 100644 index 9db6d0d0..00000000 --- a/docs/static/img/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/static/img/mcp.svg b/docs/static/img/mcp.svg deleted file mode 100644 index 5cd83a8b..00000000 --- a/docs/static/img/mcp.svg +++ /dev/null @@ -1 +0,0 @@ -ModelContextProtocol \ No newline at end of file diff --git a/docs/static/img/tutorial/docsVersionDropdown.png b/docs/static/img/tutorial/docsVersionDropdown.png deleted file mode 100644 index ff1cbe68893d205dc0a6821bfa74d8e7d25c09cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25102 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 Js!v|N^*`%a2QvTw diff --git a/docs/static/img/tutorial/localeDropdown.png b/docs/static/img/tutorial/localeDropdown.png deleted file mode 100644 index d7163f96752499e2e39e771d4d5e9e42c68677aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30020 zcmZU)2RIyEA2%#)^k5Ms2v(OM+Ul!qh+Y!}A<;$ey_eN{i|CyoL>IjiMDNji@11Yt zzTfA0zW3ehnw^<5r_H~g-}z6FqP*l2%x9QLNJvkl-oTZSkRD|MhdMecPy$B2zyoe1 zOvJ?%rNqUl6m2XGP0S3CkQk%%banBiUNUxn{HUwj-T#6K)5cL5fe2OB_3Ul_Mb+Kh zlisHLB~eRjfdp>>MYRabl9w%GJTDKa2R0Af7vTL z$f#rm3Q#WeG5S!R8txP29Yu|T!uX52Pb^P3+sGmv>7cF{8Q{UdYprx|7i@ z&CLm+cq+;5%~aj}%~rgHRAr3dJ)};{mmMaZ5_r&a2UOH?llyy593x%b34PrQ*W3I1 z`I-Cs`}$CC?@J<-Hg8KLmKPreifM*R0m23ws7o2j$ssWV*XT%~N6(NR16PlL1NMmQ zKi3kE7?Du^mLnq}1)3m%{;eYqoF9IX!12)LpEF8y01_H-hYuW1>B#@5_M^;nl>c0- z1J95|Rm7#FfU}C8je&uMt+AyYs8uikD8R6KqhX7LL`3&+Jd#qTJplS2H&Io$QnjKhlZuK;&_>^oUl}g(Z*$;I2x4q!XT{IP=IH3i>d47zX=B93 z&d0~c_KJgzgM$UA!D8!dVfWFA#ln{6pHBWyKX3zEJsT4%I}=L_s)v3*ezLT;6M{e< z2KvwMpLrTMnf!Mo3)_ER3wS}chbL_8tgqPq(>Ksm@S&7n(ZtEXOapFW4$ur31IEe4 zCHS}g|MTR(BmPfI_5ZfyV(0zemjCnQ|8Du#*1$&G(i|Al4)$Mm{oD9|AO71=knQ2k z|A!L)koj*ZKxY`HAlrX<2E(lH(l-X!NNxgGPzBC_kp2CA1O6F-FHT@J#m~hPaXIriw)dxA((POJ2<`2UaZkytp?5dw z_;2t*phu!2czB>-KM{XCrKrdR!^i&=AcOo6Djy|uvLJ7C5Hm9~L6SUGy!%Z@O98 zDT1g-1q@GtoX-Ylo5hITyV#Rs9;1NwFCKmmA=OuM~C1eGvBgBpD5xn+JpQerOz?rxWE{X z;`WFoUFgwAfw@OY@At;hK9v0-e(gewJ_>y(TMv%M24h^t4kU=VK+t2!kj11s8kQc@ zL8ud!K4_U}17sPN6nRsGl*nA(eSMBlMvuDdrp=^!Aj%lR3s2SNJHb5A0WF%gAV9Tr z2O6qu!u_jGdI)v86H-VeP%)MbS?rC+1dIrbfpO{0{0^Wc6*?ZWn1r97&^b_#S^$v= ze&9i~zgJ`w76lR;1RvkVm+}2yrexybag@^#O2Ng%91h?#540B{2l<8mGUf|<^QIg7 z%bUN`x?F~co=^?S=5N5j1LO- z72#9pT@`e=s(NcSSI4~{^ORA&U`>o8$HgF9$Hz+;c@_FGVZ`b4Q!vKj#eEi$jA(il zl_Cy-gE^&M7(ktrX^yaNUXb?*IKP;{v6wvHc_@>(<~KUcn-yK){ztYrrBRu)aql~2!^-dEmD7(8cr3n`Q$aFW|98uTY56HSLw zE5^`|DQ|x+IPF?@O~M4nZDoJx_K^F~0IK6LeN?=~bJC(=2C#;T4kT@#$ui~v-pQG5 zYKNLH4(;*Lt4JJZ_NvJP$DA|Vqz+eoiOl$}J{L=!5yG6q{-u+p zd^${|K=zG4yjETB<-7Vu^?0%SpNM>t7=8BXlUgfMh_X?9+HYIp3-eMd6N`@ACkGv0 z_I3YEkG=9-HYFJ^ZT@BWt`5c1jOr6!?fu$WxSd- z=llJSVeZt+we?qbH=pxvIqaEKagoRPl!)qz#kv$+UI!1AzJxH-iV|`_ku5?Z_OHM4 zF9v=4Jgg4xn#q#y2W9~1%ItlAULDC*^3}nz*iCzm(qt*{>d8hlK(4m$&wB{W5K%=cOCB{yW62-D~R+yNc zO813-XbR!X)}D$8-2Y3yH1%H2$b5j&nru()^JNDCWK^hS8V$oE{7K=aJM^nUf#kdX znHHQa3!~&t7Ua`NHH#-Uv^m#--?`L@vt!Ko-VyZ<~gIP4I7LFWEnTmrF9U0RSuN!QI zUuvGay2&)_+zIKC-ag#|Ch91CQM;er34Drhtij$6)U##79QX7SsH%}r-QUEOYPG1bdW zC{E0$QK#3Ot1CAHi(grfeKLNZ_uOovf}5+N;`2@@{wGf&3w4y^iBj*Yr}nyDTduPt zB(5pX&h1YBOc*{b^*o0D&X#xAj0sx(Ty5b~P?YfacBd$nfqv6ysq=G^UIs&3#Zul= zG&Y?tWkrc>%45%z z8&mq5V^e|4FDzsqcho4GX-{FJ=W)r@B~zCoBvVzIofa={kQ{#{VGpt-mQ)p&`mvY} z=Z=<(5^NNtCZyEQDUxKzW6NzO;--4>&9h;tqB-oMdG7uo*425Qc+4lOQ%eGUyNBA& zb{<|_-<)$Rp`Y56w3K1C*=cW;ur(4g?}1UInxsteT0;A2#_sQO@dF#{?W;3`p0~+k zlScAhxCsNk`-D-q>340a8F!ycQ}0hL#~$5P+&-5me~mo5eJW6(!P~U|q2-*3CjX^d zlQV%9_p$qh{#5mMr`_H{=%~5?)Z#JCv?a=VQ9^nYT!!zd%aYXR9sdoZXY3;gQIZ_e zkWchISW^*`a6)cxi6^ggJcSxr{><7JEg&49_a-)RY{hz!Jpb_ONlEIFA=Un$Z!Cgk z*Gi;hnvbeIg#~#DCs>C zm24y&cWaW&<9O3n!>=>tS-v{Yjtw4m<NWHis@E7Wh3crdnK)+L0xp`Lq!s4mh1{oN^6yzAhb?&Koi49N)JKBF52M%owi%T<3auesYeYCeO<+DpWS1km0&&!E1_UYr5UaRNA&ZFF%+sVZZmp z(oKLS|J-~GW3OoTo0p6OTS1WL&S>PyZ={61yUMf3D_4(YvCI;xM@D6@BC**hDwU3Nyn>Sqiv+8mi6n@W5V9uX^tH|qyHImkvH84 zlU-~kV95N#!ryvh|H7wuqxczAsf@oBv+~z@*n6V(DyGGio3y!bRq&4y@>8@9Yl7$f z<;A7(rw(Rwq|-d6m_J6#sTt&MmKUm80>y+Y2_-N}`$bJhFe?M~_NTMM>QGE^pNyvT zsF{8~O9*u$D@r?avc5Rf=(AUXSC}ok@b26Oa`ZKxjz%wgYz>e&YO&5&JcqrnLdwmD zZtUTAUFScutj!gZGo}|DF@BLoa(QudnEf=cD^!zJmGUP7LBCp)BEQu&BlXOet#4Dt zO3P7Ve{O+zW~V**SM1?l5aKaIO)|5T!Gv1d?#x%jZw!W?x1-U|6y`?ze!v{HXVLon zsUV>nZAVOnMA1D6*}Tv)?wgis?hPDG(7O#F7tbDBY+rLK3~ zOnAxx@5bYLuH1|loRRr)?#imTu5ZDQTZba?Hu!8|#PkUA;z-Nx-ATol`zE|>EXNf0gkE>XDBm|pA9c}#h; zSR6M{do(&zp-#SG;;i}G?D@2to4YxlrWW+2A@e9)Qcs%3W0*whHh(`h?`hx?UC+p# zI4zit+J_cK9_n^`8Gsz>dK>9G_9$DM!;vqcz%eBC?Y^&WIrwoW?@0q1C&6AyTllZp zsYwJvf#{9$iQ3uzRp4Nr52}zbFZfi=^EP6y#yxvIVzhm#;NwUr1#ADU{qTz?f1}ULB2yW-ba6=~1nAIi_mPnF&;w-yTR#MDeqJ{t;AUue)~h0^*lr7F;ztoql*6(MgDw&IGgd=wOr!6ocJ&X|n;aGcq0c&7tJ2_XI;4Q^3yQ>5*f-LbV37(sDuy=$<=S(@^fa&P`Xg#Fd zczL1sKNuR(DOsL4RzESXmOD`6I&b5M!ibl1d}&mG!Ycd@P3x13*`VH!RGO5N!x11} z123?%)zDy%td7k0%o=F(Tu@EQ%z0BB44`~>yFG8o4d9VX#h<+NAoM}(J$I;h&)N&S z>#7#k53Fz9OBBG^yRI`m?nJx3^BEN#2twcgWTE89US$_rhn4i!nYdgsaCZUq6fbSq zBn^felhBV_$TE7Iqc*B7PmRBauay)3%#(XFXQA#B*+o}-!;Zl!BgDmi)9hlTJ%MxX zb7562DuQ*t&RY>NKjpR63-;P!?`!esOSF)6zI^~;jney9nrHzTf>)|I3lK^=+r<~3Pc&U@LBuM6MXF55%4$tGa)cZXQf z+2(tc)n5%=AAv7r4_p|Qui7i~&X%qYpP&+E9oa|8j;T61uk>i_-~OHpy-Q%f!f#m+ zUP&|OR1}iIOjxmMbvBGhGh70(Gxx}+eUo!vC~ue=)*96xxOL*g0Lv+op|E~AF*U3W z?fMaSTGm0G8AAw`E2V`94qXL!3lDJlUKA@j#wMOA4Hn&Hq*l_&IS$^ETf7^r^2ne4 zjrWv+75q_MsHPFh&r*P&lhnP;pHu1!BwB&Y4G^Q{T7g;r-;xlHb<)5$D3?)SdIU(XW)@B7$ zw6K-FgwZ!^F*?6J;p14raA=KYc>Gwt4wv)u?D#eM!kC)P()*dfMbW}VS8*q`vL*{a&KNZKd7p=GSRwzn7IZ&$T(8()m-%#oU9rB+tFlacG+hI$d1em?#jV$=q*uYO&i z2ye$IZmKJy$aAQtlOk4d#rp7WMFb<^@~R*VS$hnpmFUT{LKXH_>p9+KA$9HA0?{Tz zB}X_RnQeu;-jtS;cEin$zY7}kY)#bd;5T2Fz>Rm6eltnttc&b!eNx?wl=w%x#MLsN z%a_;-zAEg{Hd?zaP3E$va_K34%NOh+kz>~bgXP+DMe1ILvs`roY_@BPGQH-aSoD>7 zPn@q3Z5|Xqq8QO<%d=}I(iwY?A{osuka_h8yN`lO=~nB#rZ=rM;Ho?;4*DS@cvQOMm5Q4 z9-$Sxa%H?5(Sz{@QX3)Fxt6;Ry8)ajW>$;qr7g*(WIVZUi2U+R*#HLqpCx~q>U2`D z*=2SKv;72)zq4J^-)V;hzn!Bc9HSh~<4yt$q6OvBWLH_g5%z`*lST3hF^@tKg(YN| z!A&#JefPI;IE&@rTHZc>o1>pR&rcfo-3^3NT+JqUle;h5=euYVHke`g->SNwNb3vSD`!>nC5_Arhy7V}?(F{~^nt3h1TbKP^@iRm99O#w}E zIP{4LzHMV*R`kovhgJ`c_{hsxL2(9>D3 zVFQ6%5{c@4skhDN>a1^N-d3E%E2$D4l&-xPdoP^wOT@k1cG{viv`E3&1zWSBF37mt z#mST3HE$itExM=AD}#fJCA8EK_*7I)2!#o-584gn@^3w{6{ic#)oR{07@NA7uhE}+ z^v`h$41?<}(MgzNXaG#`f~( zz~vCVwT{{__+yy^A*c#T@Li)}9TWXHfUTM9LA}8FE8d*$JI_<>~zgoj; zlZ8qR!S*yYTI+}6y2xpPQVU2c+U|9uv*jAA*7C&{xYR_Sc;l(h2_ZwMO_mHy<#{Sh z5)NCB)%NlBzQf(0^}r?kX)|cuiaj0~AWDqWHK?mauaw2&`9AKPb>N#v$CK z($yWvv3J@8f?s-ETi5tMvu_+UkZ3CQ;4M8Wz3x2SZre6<4zFHRkr=+(42&@HK(M7@ zco7V3ShzQMv@7h>u=Z=WD$KuQi=U2P`+e?a&)@87$`pd1S__3YP}R%D5FPltRIzKP z)Op1i6Q3sBAlrA6<(yX%zmMqLor%k{jOa9Y-Gz&n>N8V4CZLgMH8FcC@UB79uiV+R z?-Yai4{BA%vxG?pCn1Z~6iMP*Y9LYeiIIkgQR^c>-)GFJ*?N@B68?-=N{3iccrxm57`XY@W0G(PmJ$Ts24Pp;9Zr z8iqkrDgPdMb)<{7u@Tl$PLt?1!{913IH42KwQbTqK%MysFT^sL%PB^vQSnM^wM@uZ za?n5vmVd2z0NGOI@XdC7<-}l@!SC#>vFczxd)CiTE{l@t?>>rhRvA3`>b2ZjRit&$ zhQR69joBc!$7s>hpZ1EXl$M9MCJIxGV=<-RlbuGvNcZV~0)zS8>*J=qp$>Vsx{|x? zwkP)~E>m`4{BEQ1cdv9Uojfmp{u(avxV17Fcnx=wbpGLzYJbm@W{BfoS?Mp#XPv`e z`_(~xddJj9Fifi3=&RIp(Dt(4zMk*0)C{Y(eib;Dv1Tq3D<=NBog~1$P z&{2bwTo$QddaY5L~x-%ztA(4cSeFOtOP$v}Da+4BmbVO7v5D^F`a`|O;81ebp50yU0LhK?+|)^_Nk2h@AU(y z_9Cu|j)E+l1d9Ns_VcU==}_@6Q)q_HfNX=7C3~A zA-o}?I3mna*j;akhpt5E^71Tj<~sg(Q{^|CTST{G`DvLVbB*CJQ zfV#C2`YGkq_CPmtzK*X&cUyZU9_n(+i+Ig+qqE+2M zM=7DQG;i=Z!y_Wh3#RboVYd*?REE=KcG*?8B?)}6TzPJQ5>bxANGA``^v9!3O=FXL zS(*SL7aO^Pvlo|$8$oOF?!@Z7J`P~4x*JN zuO@Ro#z0@zq?_-z@tsO&vv`h5%KJM(vW3H97AWx14Y`x&ZAOCz*n??4b#bof%7wg^0{zbdA^3 zS}$F|r-)S2ENA>oRLTFD@;-A{Pzp6<0<<;!QSxYLeYsB*5gaobf33tPuen0w%#R+L za!LJCv7Ug(Vh%fH%vz>lOh8l8Zck58P9TMdPFfkXBn!`lE?rztOH9?Cuu_}}Q@X<% z$?NlZ|Curm^LZErUexDLa)oU;M7=!BP_(WwG>g21n5#`|S%9g~N(K&5Dh%Ytm^b#F zXS*t~+OR9J%Qb=o9pC@yBS^c6uo*fxquS7wyGAT(6p}2 zDO<%WPx@0%$saOBMHH^MaFuZM3t2*wh3Etx}nt5E0a;Qb+j-p;{;1`vht2u2KwrWzRRoa!)#XcQ4q+D{@DcY($)2( zM3 z`D(3#nMK;WTJ_!BG0z~CXXtP_RR1l5VF&k{qe|<`89ON7lF`W23Tv91-9|{yn1ylF zby7P6k8~9+vta;2D<(ybSS?&zW+X7cG(^fpt$sG37k1b^9+&sDYb;;`*iV(9GF3j@ zRrt#LAZ)A+az-)BB<6KBN3><=dYYQqjvZ@Imnnvlz2!p54lG1B_s1`G^rZH!xgjsQ zoSbwMd?mGlRGJOy|7Jeus+N%H05Sy z)83NJ*^~Lo_HuGMBQaL8gG!)xc{(PIB_dd@>|-11atYrIZ9+V`069;5AA@wDi)7#gyyTVrW_RFO*Wk$M)Ua;_ev<#7S`Q>hQRJPve z!dGZc12Fs7rygs?s;VqIn2Qcs1t*=_yzJQ+^@|SJ+pe0voUnY)$&O~~G}z^Z1i&9D zJ7}76%yMPbX^h^ZIOr}g<7f~1O zdE859O#b&yf0y2D1x zbq)y3RJAl+A;chA^cs51n1<4q7PE}539ym@LrTfiQgd?8R>2^JShmg6+3|Rbb(QK4 zOhh*n{AJ~``+F9>XY#D!=O2zeN`XC3IV%o+P-~`Mx38UbFi*sK5MiY$n@pTVRHj(;}N|Y_rK58yFYFq0w&j+AHH?vxn_&9`Y z%-d;>oo`IJauz=-r?SXn`UWK_K?OI6;12WUSgfZ!@|5jWZs6~7c$W}-28-BY8A>&y z9}zS>Q@JeSH*)OSM~oC(>{Ckt(>sH_Ra2?8+$!IKPq!!5&E}zU!I!;TqXj6ZTVq&v zUFEcYvm~TRy^A%gTi5!NeecW6zKXnHwh4%=qJZiKZ$?XQx}6xe#T4VtcIKG{$B4r( z@x%W_)!A>0`Jz4%>6Vm~*m_8BQNa^|DDP__ueor@e`6vbtTHj}qKg>5+!zXoE_NU8 z>N!={fXC8feEilKMuvhP_0PbjD9C_kMy?EwJr1mdl`W}{#7}*qkIKTOSD_RSyW}is z;FD%tE#rX4#`?*6Okzhz&OWYX_1yq+3exEzUXHJ~$BQ`~QWQ#z(%0|qO;)YINbG64YhnqI$#^V4 zH)+u(KH~;T_Mvg@onvS!vgLVNmN6?;f+Y>yIDf#_Vxr;=7SWr~@|Q-w>MIX2kPKev zv*nU^_ZiJTF-!Cw2BeHw|euhhN_V`ZN+nUtGV6Zo@>;vA=JBj-mddgL&RkNogxBZ zHS4ClW}vNxr~@p=!+4b91={j1sWYFf$ke8!;9rejp_d+WZ22MZ9zSqeF&y0r(t3Ct zl$5Z%VW+7wM>{ejP9|%;%9=)%e)ch>G>NoG1D+j&1vHXavVU1^HZ?ryh5k2TDt{OK zn^rBy=gbKPgAeNl?R2{jgRTMALUAw#hEo#4tQmwLc!IiUucCoq#55hk0uryxUjw`% zNDDPLNJuF;F1Vgf+))e&I_Hk{OM~)NXV{Qy9%TrM!|83PX_CYH{1NCZJr7A?vv^dH zR_kMosdo-jn{~AIF%ka^q!1Jlr{Cx-0{^P`J8HstDu)1amBa7sTPbhA@p| z8}by3&xKu4Q)WuxQu{`X+@76ft6&>McY;$5MZ9LEX~(j(29R$A@-7$E?FfFVK>$sQ zG&cY-6v&@*k1cnbRRKofq`fO^TkABK`}4SZwdJ~TAK3E==^KQ7yR!wQGLk$OnuS`82(hlrV7_?f?`-$B>eE1F5( zf+op4&k+}*YY?W5=zU>0n3_^c15p;ut6BZf;PSeX&gHL}Hl;)6G#dC78luo?-AB^C zmbEQwAG;aUMUx^GP*-CU+-0kYZIPAmVr?*u5>H8MX=vB=WFw<1zV5F9GVpHxrtzbk z-Wo=_t|D<@c1N#U%d+Wi;G(&rP|Jj~>9qGbVfBa8;U@;LwO)$bo4_Mh?K;J`5ATQv z>c#Yaj76l5(FSF=^7H;}jYS+882l&*o2cEVOiU{9^gY>K0UCTXm8QpRRw zrc6)rxmxc(Cgllo2oVcrXD`EIMK8%Dk<3KWmbE@qGlAS*@UYRQ7O)D>%ioqomeYO` zWnfkrFmS2Wu6JOJrv00+H%0y3Zgcoo;w9XSIaz;0m zUxAQv(3ABl$r}KIAoZ^xY=k2enpJbj*`Do=F;)>sU~qVf!f0-})Y@|1%!d7QwTX`uF%|@pM4<2OR1|}9=GH=NMswgxyzm}W z1M``xRqLFW|B#XDV9s&gfZiGQsEetqj84}aMlaM`)6m~(xL(fiZ_BP}ZX*aaHa)zZ z`mf^x%;i^v)s7o}F2^d=z0qcFKF{L8%>J2IR6gAtj*5$r>x7zKSB1E}Lf>2sM^MFS zJ&4PbN3;-Gu1nJ_kOv^q~xdD0Gh#*B=WJo30kn_YbMMPUSSWX$_0jl|r z9e7Sa>Bz|LiRuX0HBsAWmA&XVWU%>k1!*|nnfmb?mf@^$eoT46MW>J|rzLY2Gc?UA zGw(Y4t>&*&^ZNYd`aQ}dg8FKcS8d}WXX_z%p!Kir?>X-&jA#$e$;kvc zS5TTra?rdiv}aU4zh`{23YyGV%Yt)x`1L%j&v{B3PJbjS8NKbygf|34U>QcGf85-n zR(}lg6WkrGhd_1G7 z@HTo@aUmaEzW=_Z)bezU2U@EQ(hCJFD2mF$s@LNtDXJ$c4sVJ4B+p3_0)|EWS_DM7T30o{o@ zodC=~1d?^eCq1{0dvI>w^ph)#%^O%As+IuQIQ-IoA(!{E|*V*Z>8pNQ2sii6{=ToOy-j@i|NZUx- zO)g3{x4sVXWfwdijrneI%U^S~^?9K!0_NjFUqNo6_PmH|a^Ul!c#q~1Uc#N8$_?H^dN#9MDa>zvi z4N~GLQBZcc+yFFn$sLPsF;8yq=P0wCuG$9= zu)Of{%S7(a?-VD5<%L!WFRq^^Y=4^k{t<=T;UenQ&5QHh^8j*#H* z^UV>o53crZ@x}6(T6}Kpj2F4(3Z;!l94Ff|JXxLE_C~4pP}z$G-%wdLyWQc(7PYJN zBtQFDHJJab30O8gMx(SLd3js1mB7$b1Nc>|nI=o`+w=Jdcr+HWL6}z%0uS#?JCg!r z8P;epHvrhVvL40opokZ-iNaYsKqe77T5@`M>VyPjI@i_Fp5Z$v0EYro92Gafpf8~% zgsl;Dk<;dh#cH& z4fMt8l)NjuFMq)PuRT`p)IT1w&vhXu1+4O}KmM^%tTql9+@j0Nyj?4$77VxBoh-`m z@I^J$k5%ojwrXEo)W#q^6o7m++izI6nEX5_^ybMH4*r?2F7~fvVd2P>v*Wau)dcM? zL&7HqG*&J9tiMJ}oA%yc^bAQFY^m2AoO}AAJ$HLWBNKwCGW&y!g0_qOVyvW2BJ5d9 zyMpk53#b^C`5w z+Ut_ge#-#?%IEGohv^=}K@83JH#8M}B>Bkrof(qk7-{Zj8dUNj2rCS0wo0==3WM6H1d-zI-?@#e-j!Ue)Z@zI3`i0ypyX@<(+Pw$)hb{o$x5Yf27LaD50xv{Lw!F$qYW>#X*{vio_< zqCw7m;~oE3JLQ@oT`!jiqn|GEaFaC3eKZ{pKB4@(^{7DIL7~FE+-_7`c|#L0xRc_0 zTk}FVdLJ5v6P4CQJyyEo{%+Z`Bwq0CdEDXeYRfe8G}pZb+&jCWG?ZHTR=!RM;Lbsh zAP{m^!1(VKaZXt$S!z_vJVZC4_+e37Rf4^&Aqd_wMUBBSYVCki9HtaULo!5!);xEh zz>t-5f7}5ny24GkajWaT7~oWE`58S6_w)}$Vf0_WSr2yt!5aO>T%NGm^iPZ})lqM@ zJoiU(U$`*ruDV?Jn{XxXX$8X>H^v`U9=VsrRUykZ~{&62{uo_Cc$44KbhhPU!tT$~5 zWgeFPL{9U#VUkV0GdNIYIsG(aUhU67=_xzc^RD5Z4i4V{J|$@v_aXqh47V4pTiegV z=F9gifdx_q3;i=abxu!-DJO80JpUwN4Qlr!-gF^Ri zx@zbUOjniDpnc*w?mdf|-KrVg-8y^krKP4D(gFVC(9kG6B~(l%bmTGs7ixtQl%&?% z>GzpC@ktMwpO$}EFSDZjuF}s|FX9^um&5ZZe_@GHG zaM0Ka>r^iShAe>ljF9<-@Fj{T;afDY5*lm$4Q8dCqo!iV2-u=&cRm}LIun~v84vV{ zT9*cbEf(_~=m_3Z^XKijz0?*xWvo)BwbERy=lDk-)xW0p*9wA+HX~e zcy%q2J1vl03`Lv)_B_6Y%yFPfIq%Vt zGp=e*%KH|pX7t8TO0KN;?WmGy;zj+Nm37GDiHy7rVf(F7UCBShIN*BVk>lo)nBH-|LA7thkn`AjAU}v^CH#;xY<=Ft=xtgeBATA{iuCSA*XdTRP zPw+zG_M4N!sS0?m-tom7GJMqs!vn1ECV#`t`{bZNkaW(n?eLG+&9wHfoE?1Qt_6Yk zwC3iA*5WCl-w`Ol3Ox4Lm(qvD z!6pmg0l`85`ruy z9C9eoc951k=ROKbbgwe-KdkUr9uTgf?B{XyW`CXCwn2luyEq?x!}EU^u&cQa9Q?#! z@MSuCoOvxCSoGQ2h00=rmJ6S(qA>h?w|c&n==69l@e9w0B)uHFK&f^K-zujKLPUyioV>a4g1i^Prs$2 z-dCJ#)(w@GbZ{Y~#l2bn+fX?PK$LKbVjlpnuXx|V;7=k1R;m`|VgGHY2{dGgi=kX| zA=9X%eNa*F{Fm_dkN>RG36S{#kkVx7v|kRU#6c-k-NNxOR!GUrPUcE>mzE``j3gZH z=OfL0y|zIE_hWqca@E@g?u9__k|!v!+&g05tO-ph5Q_b{WdC8@9%f(BlHG-o>ChRs{9Ahar(_JH*9SSk~(Ma=?>U-O4_c~Vq++H0H?zM3^wM^D%pk| zB(pyK2^q8*1y>MBJP^m9!eNpcA<3`83IGfV56C!xHUqZkFe6C&pXjH)w{8G%gFmJ+ zwG_Ap$ZLUQJ--e36uVw$bNH4Y62YU7BC%ND&EL`wAD053O7g<}5`X)d{i9!warP+% z&m|3iysk|({>f*Pf*3E=p`674V}LIK>+U@uKtm0ocwg{QCZi(36DwAy1?{I5ZBxq4|g;QB%QH7wtP5g3uj3sYn-( z$m!+b>XIBBLY(*zF}nx&U4##^@R#=s`LhOn_CICWYkvWL2vGf`exg;ECHK`j%-eAE zAhd*4L?{4x)NKyDK_J?g{{?{o-CoWMn&5G~w4z{BF=HL+b4j^=SX>R8n{hl~W=Wqi zVN?)#sA{J`78<1+-a!&rA-gLLx16SvuZ{*V1Cq>o;f@kDvVr<=8_aNfH^Ykk#_Q-e z|3MM6;eJ#@EB~^qi-SJ6Gyx?i_q?*~GFofUnX+c!4g9NFeyF1auFy&3Y0}VSnVz#2 z6TmM3uZE(x(?LK1^sD)^`egsSkVEVHn>wZd7NVY0t$mcudrBmv`};N3;CUn@PUMF# zz<1p-Dhwp;wQns>X-}ytY3sNhWQre2QQ`SYq5HBw+A%;4Yzf~rU?aet!~lhU6eaJ5 zy!1=)!_yNeqaZLNV3T=|O7;~LDTnh z=g$A!-xG$o%BTDoEGTsMoET~VUfb|&XX-fH9JQaJr~2~*tL>cqL=uf;IG0noxW|S# z<+DjuCDhnQ2D(h_2i-IgTzx4?Nf^?+dL&1I-)Fn*nTR~N_Fintuz$~}t<~J#7z#|5 zVuGutM>?zzq^wMS^$=`7V-dRfyeTMLEI5V`ltw(0(Fe zIN{ZQI_P7CGYZylWPaib7qdHBk+R*HEL*$(ZSrf#pzt-RB5JI6Jn&_FUpx!vi+A6Q z?{FJRt46WFPNz>v2WoLuR1uLRY7#uNR=#|07gn6|lxlEB{+cIFCmTwQL}PJ}3`9t~ z4Rrxr#c-_ft(~gK9h(uw85_W&JJT7*%-$pD z)e%;Z&EAda&!xo5BDr63+sNJA=GO16 z&-e5F{qg(#X&&dC*LmGv&(~{b`$dJT0ACZ^jzDA@U)}3}8|9M3BUUHyXUF*F6mZ!$ zk>LUsx2#ZBRAklI?APtR`;d!`7i_&Kb4;v$@69hWwKb@pf4BM@N`XdJ{)}GKZ>3fE z)P6``=Zd%uhlMne6BT%_sYcBL7yz~TC3n+@o}7Q2xvu;P!SJmJSR69ScLBlXtXHC3 z#)-%sQl!ye9u-S~C;I#iR6^+fPV$eN@w|Cyu_x?Mn@gkD)QjIsF#!}S8Zm?22Y$G! z%jw7=tx#9@&%1sCc9wm@{I-~Lm6GL`tgc&-^8ax0DGYM4M@DQb)zuC-gVgf;kZrnI z2Dh}!qgJLb&c*dZb=Zr|0UeQOf6gl=r$Z5~f5as>c>M++p8amtQ8^teRE8E*PKWz% z)jMtz<}_I*wnENTYwP4r5B1motBUvF^ptD^(c4}WpEPre!`)helP2<_w2l?K+yU=I zurM6><#d`8^#Q?Hmb1Hn1mrYLA1Ar5>vFHPC|aRVpjU_L?sWbKw6}z_kO#Eq!|>LN zI>oZR%%QiBU(Wd1g=%;Y23BK_Ga>oJh(}XIQhtAnnSkKAbB5pK``GE(#fG1zP)4nE zF%X+ioFK!GN0RK=x~1k|fH{UoeQT&@@%sZHr|3wS@; zjnFdAZ+a&#-G_n1^zR?a8R}?15{2^mUa%`(?T1tn+|t&~7s8LJ3x{1M@fieItZ8`T zc*Q!S{~Qu74iK(l^KM1=!nxC})F%C~J7e3|LpBHEawJbG70~qS!~{&L#Zw)Phj9K{ zp&jlvWiY*u7JP*2^H_7xq@eN~{y3cg7SVQ2@Vx_RC9RsCDc37IbQjLtrBSG#1naQ;eScvy084 zSEHi=9U`JA`gL9gy*lWe@;O%x)7EWR-XoNfF~g?*e3Bb*cZlqQXMQDmfDaC;S=G?; ze4t>xgnzgT$mtC`yV9E|m+-NSriarO_kIT5GOyqi)(rm0Xu9q(7@MnQKc?Z}b-FW0 z{i%^w;c$vmEk+pZjJKqiNzQG@vzIxS*m$J9?$-KfnY_O_5n<*&@yLu2Bnk;`6sq`Z z7pT9-stVTKkYPe9npAME{{16)-NFIwdAEbK4;tOj+ZW2@V5=Q=F}%3hD>CZ_wcWwv{5P?GwK*X5m7WA z`dd<7#y2$3ZanM~x;paVMHClq3o%4m#*Vseiey&KxRJ6dpOp~4cm9SG7hw=*aclW$do3!ZnU%uOJQNuVU(pUxFRR?!=L= zCSEbVHRd=)CM1v8ke{Bz%K~yiBzmw~tDqKAjB}(vejF%R64ERpqjT!ixeIFw(a`mD z%$Qr~Jh43ZK^OqY6Cb4-l#7)&&uNa0noy9VEI zrH&8Au*loOcQ}t*1TEJuFL(SM-romZTb8ZD?SEaI6jdyR(8WB#xRAYFs@l>4%rRu_ zH6J#te({9%!QZl72z_{KR2(1kTniT0eNDdl>AQC+#)VfDJ()@OP}`U8))+hN;}xDx z9V9O86oe*FVxmSpKELIvwMHGeBdsa#S$0m${WnGw;`CP_Uc-yRT=DA>Na%CbC}3f1 znR#m^`kb(*?-q9hPqX$a41CDIm09rh27#<95m65b z2*S(=*4cBwNxuAqBYA>}+FrY?MqXT${j9w3s`<13(>d@CuUa&qC-IRVmk#RogrPKT;p6P>^AmEFQ#T6QRr(D>-) zb;SA`Ms(d|@bBL_q?jgA&3)YtvxgwIb7DmB%320I2bNQRAOs)brDV!V;wmldDkKxY zgmE`QD(iy1{r%K%B_+j9s7|Jmo@|m|aAw9h0m^slRe z8sG5nqh6DDp)&~z*lSdLTIl8r=M3O6g;)~0tNc+2y~rc?s{4b1f$^HPLaJ-$V!hh1 zOo_F}P3SIxtyIZtWUu!&8Dx$+m`=LZK_-rmjUo1fEnZh;1#Vn8)5hl!ju_9j`%)3o zqd7X3vuj%`@6py!a31>w+N>7PqxV8aFWtRaW{a>YjkL?bX7BazYeQF{(RcS71Hu_xYT3!#Ea57-%!! z<+;-9Tl(||yH8KRzH)k4homw1hpSmqE{1Jq;)F(`cieWR81D&1-9eznR>JC_7yow9 z!FccrFP&xgJkOBZ!nxMr#aAptbun8RYGZ4!ZdUYXaK&nH`v+wKt|FDC^0nd(sZ?;27+xTCcs$v}67n$_xYaeK0xa^3Aw7 z^q}dU(A1yV{O)QGug`X{BK13g@gO@r5cJsP8{$P}oVHJK+l{vu-AdKnJ_HNzDg-=2 zt$b?ST?p$Y4?WubPA@qbm}$Lo!g$wj;O4HF2_nsJcKROuM{Zq&w;ia_gJ3+=6;`lG z-URoHQbwuI3hR7BXi;4-`@ezX7pZoG!=5g=+svFAnuzs8#+U5fz%vWr+63Xx%b07P zX9l{wmnx7jji_0r5Q*(eyMu#{n{atpwSP5*czdqR-}yD4mwJ~?NvXLQ%-o2DsgjLr z+)odqXENcS@2<&wRba+{gEY5oro=Pf1P^0Zu5cuuu{Icr6T|78#bFkHTB3aGbyLj% z#C0h!V8r2IGI!X9*g`DjoYYoDdGe<6d^VDt#)%82*QcPJ_ej+5{;IIDR^%69I``(w>a1w7bYPwXSAdtIEwC8Ds&5taHS?9XGt*}tdw8$A+pIedNjk0(K zKNbdEX}ShP_R!f)=FL6jD(v_G*yc{)fST6VnS{R{B2{PQDmf>THgP+h&I<}vBCgxp z4H60hjFKXzFPwFxM}|G={#yGV`v-?#@0_WLcDa5xK0E{9Z%qMNoOj8=0lZ}V%QmaG ztL$jpZMauRKKY$i73bqq#dqWip^;E}{`k(cy>cDt;8IunLNxK$LHa)6c>0_dKD=1* zyo#WlvK!I)V2fJGE>;_sq^&TYRN-k3^CO+01`C2SL!7r%y>z!b$8-fm4^H7jNFOK~ z@Tfm-o4kXyK(LHhKDXIkt?(J=Q&MJJH9-?TXymPaXstN=>sE2psfc|^>uHFp#dP0r zdg;MB!MI{P=~?VxP#X+RUJ%)puea{l-;~x?*@wDmM~J+A9u5JjD+Ewonf%`Q|J+J6 z>eORXpNRmx!9bxos^LV~X8~kY9eh|zr9R}ZTK@RO%fYY&Qsb|d%!OC&XLcR#*)>J* z)O*s_A{NMhy=Pv0DD=`CBZ_=SxA1w7KlK{yP6^hCI>jON_2;A0V{U9#?`+FLQy9@O|U&89Hq-e!VVW_=}xyr$AtH1h!NY3aMM zt6MFD$qJvvPKtQ^oz)(%^g3Q&6>KN!6A^YKbK(A!!Q!teg#mIEBhH?y$nZRthsl<$ z8*jUq&C-DbKf|#<78k8z_zARc^v@b-*iWG`U5f>}`$TBuap@B%MW8Zs>7GgpO4+E3 z+02A5ESBl*^Br)7)UNDr{k5e(6W(IIL?Y*JN;lY&oinZDa>uP>XOi}+(ZN+n?&D)p zey@>%qII^=#`ph@t^~yC4T$sOuZ>p&fE)OCX8vurH$-tqEOpi6xarM_tAjSukJEfX z$3#;+$E&o4_u-qBTH7`>-Gys&kN&0_bVzKLObh{7%!SSyi$DVNs0Vqr0*)LZ`8WDl z-w8xYAf=hXFocm4{0VysVDck!`n~ckf^rHub$*gZ8@lgsSTd{w8)-uEyeb+fJwQqwYYCPJNkd z|MItksQUPCchl37{r%j({uHhATReW6Pwc-bDYgQ8xdK_$1@#t@MgnBLJ7}y=Y}gc0 zj4gmhI+aZpM4_Za>zkX7VunS(4cpga;6=#!#?sM)D$37i)(ae?$i4R#@nO)bc~?F) z@V^5RdS;^9bIa=7;gh)$*$q|EKd6=svi|mA zaVsOJX<52%^q`}PXqj4(S99fp@?rI8nC@rcz)SdI$$p4DC=EUOs?f6SPRw$m^<sr7c4Y785sR#elK6Go#|kyg{pP`; zc7!tTT-HG_UCI`>1Z9g?`CO;cEN5LbFBK|0Mt}#pN0hAQXO*G_rFHJyY-xFwi~*3! zhR8!)$r8ohE2V>|kjNHS2aUcuj4nQh(ZzJq5S@hxF1R30mpoa=Mt++b<`IwqLxd&)#vyk% zPsa+Q^G*K&v&8caw+}%-qo&`*8bjW;FPi}n=;wW1O#w>oB6?FIzKgf*CM0>O+KJ}t zee1ZRD+s#KS7Hr{9S&zY+3}KFGImPUPJp1sr)@QGxf)~mdDdOX0`}{@(I9{< z0$P~N|J*NmgtURhIoj4094g_b{8f!FybSD%%;4GF73mndcFiq8Tc4N~~eWgAbgK5lHW&vMz@t5c%J& zK0k)bG(W8Ruj(~#mee}_KrpHaUpR9RHu{b}T5}OHV*Kw05~smycbZ>o^jF&jPlUc*V?#8F z)?-D*fJAdm6`2;AIJDf|^cYjacOtie2yb}y#2nDNq5RFIGtS;F{3n^LqwbMXSO0Yu z#&wV8t(u^=NiuWA;5O-r34^j)b!lh3T%@FEIwEI8eomPPJ+A1nElxns10ZgEq2WK> zb$#;u5YaWLacZhDT_{waL}QZN*d|)Zg(|#T@aurdJ&)zm^Na|ch~k4DauTq+R;9!7 zF^;|tAQI>uGdJLv@%>*(7O(mzQzSE?$BRlE60-|9K16-jEgL$t)-vTA|Ku+}*kBlY zJu;4AqqXCL80qT~L2jDdg=vzLAW}MtCS{;j4@mYWz%?ZPa}BZV)xff8rR?2r!ppns zoShrF7!tgacaYjda`-M9M^o=;{PKiOcB;pEGL>S_)ZBdCjmv3*E z^W$TIO#2YhPUUa-#kv1Za{Rg5-0z@M*{3MVdg!@6vRQz)sD$fU8PjTB{%^`TlAzm*yoeTmjqiAF^Y-B)wx*t zs8cTsCM$tf5p~oEap6CmElXMUf|2AVE5_Tb4>6Pfb&<4z|5`xgjPJ^MuJeVB$LwOW zz1!0j)SPk1FT5AU?jI_@tN^n~q_@GDki6Q}wNU(-7YHSMX#s{`1#;WX6$82U*dg?{ zsbVUo-5zvIvG9l<|J~Vm<<1|&epw!e$J^gjZtx;M1|g;>zqD61AbfEU0i3a0l7}?J z4iYONjn*S33IV{oK~zg+Ez*u%#J*uG4z@3@K>8O>4?9r}_kVngIC&D|>gZ0K+gUdk z!UQ_P){~eh!bO!ki^T^fo^4#oKqR)eOPbi^KNB_EYi8^bie;_m=%INU`k=?dx>;TN_VM@k&SQ@-No4B7?w*olhzm;j zEUND2+7uH7ss-i?v_u0TPU)mO8?Sx`vCoY`j~^MAMLs)a(N3c#?IfeS&WFM@02Bn_ zlbUY8Bla5^g>p38$XYdnU-n#8<{Wyi{{WY%5WU4PTRhuYIkT=kAVBO9Qn&E@=#-*( z_6%4>l(<3KC#W~VU)!KKo7JFrOp|WP8T5Q-gaaZ#Ej^MJh1%8InmJ|5#c+@+(tlzv zz>o4U=@Bw>gsQhn4k{AeFdL3ax!XRw4sgR&rU+_hUF8>`%g1XF?4WUqmZE$uaOv~z zH4cw7Xn4^f>=GJ0WLk z{)N9|w=Nr{@YZKtKFOAym0TGyX@waAd`UU4J*x`^RpR+zdLGNmtPjTaVmXc0^uR0A zL!+UrB=iIlPxg)a1hVrS;};2q0ZBy+JHvD@RVFRQ8#2fvrmihmFweH34GGNR?`ttY zwo<7lnC1Etu*ouF@l!H7-(L?Q=!R&EtSc9ke)#`sP9e3n6ipvtrcf3uRDTngFsrs) zKI|BYQ45rV4^JsTIx{mO)7srr+D9pVI^7)`=N7mt&98Q;2p8c`OBS3bSw+n=$qP?(L2D+p95gPSq>)w+Oh7Lpz@}#= zYvwrszKmO{I=B!$@z~L9Zema^?AK*h!DQmd@fv#0uHZ(whjlB@Ou!NITj#N2z#SgC z#1<=ovbxe81Ix-FeLPLxTK#ZGgB8=ehj2yUSc(4uKfUYX6hXbOsB2-UvVEzz$(TYw zsts&lYB7vz#~pWxfaW(7FsZH6oGJ>%oRtrMCZtN9E|Ge20TZ5uzLct=X3RPk(^_U= z*$-Ysu83sjN9NLJNXgfEw6P|#k4@LS-S6YnZz_DTrT@YolqUkGk)C3G@2Oyqo5 zOBtvR@JiL01;gpd)mZ#~Z*cY09Um1t7D0NpZ=3W};7iCCvrMv#*UAc@({U*an(5OP znOA;9g=bMNfsH)z{E+D_hImM9$?+-RQG;*JXntvqY#BAJL2ac-mX@>8PG`~_#5JUJ zylXOX!|7+Mu_K{>sy!b`cRJ?>8)(?r&FX(|F||uJ1+k(PW=t}#D4u3d^#p79fZPGf ziw5)+J@0y}?n*2w(V^tr+u|o?JPn#UTLd;P|0@Mtu6eRqV%0mCBO9vO&sOYNY zEO@d*PBvl~6Z)r;t)y}kZG69)qtwA~={8CqcV30tF#CeDESE-Xq_;UqG=oY5^?vH+ zw{W-i#iHp%#eZQ+C9w1VN)-IItE02?j8?Jz#Sz0Fix-RC;x^12^p#M6hW)S_b}Yuw zo{O|Km959(+T{nYDi)E>90SHi030QY(wgmQL4dz_(W(*J_>V7pubPNQ3#NHVx?8lZXIU8~fsxy@o=2DO_Ya zD;Jr(KCH^ANxvo3iR--SHV9JnN(KAc@c9pr{h}EeglOy zd8Zi~dBOGK-LhYe(;eSpP7h9Kr%;EV-NtAPEW#D8*CCc-r6dFVoGPW5Ql8uxVmEV6 zX}3aWlopsMHlt(Bw9cZQJX!Mf^`LL>(PEV*05VJCY^6%}=7GFCd3^Ix+MMXs+^~ z1bR#14%{b_Ll07P69j$!nepp$A@$EyKC7=lI)iZZ)|xBRjGRj5%S#T*G4MZh>%Rqc zTM?#Hj@5~FYlTCf-txG!UQ)F<(+S+mk;tQ^*jrGUqM%z745S%n^)jg{g9teLzq+8n z|BDENzmX0V*WE42{dyp^aX9Hxoq6-oXVL6TwG*O^+X&#w*9^g*d>7B|_c3E@g0<^fl zTydGSy67dc{9_5hKFLAyV>(*+FiXtWqkCO%0(SIH9ZB(}2x<5>FQo(S0;KsXEn@Lv zkr!g1SZ^vBMDN*U`BQBpW=D6F;1*dcSG~w`~-;Vq^yK)2YN89qiGJnckT#T?` zhV?wlF3eHN?(PnCm`Cimf#3(H_HX*D$&~bpx59*X4C;;0HYsO(f`p)jh$El!86=lFpD_7^6`LL*eKxMH!kR0J zi|pIrwAA1t63H7>-(}GRc`5Y!mzrk>xl2z<7YG&G>p!p;ft_5GXILaMIWpb0W;!X_ z^wTpJ?@FnW6LT_BR*Ivf)D&hcirLq{-EgUxz4FLt%-sDHjm}uG%$!bfhq&WM)32#< ztn@-P;EEEKv8$~=MgTL>A)YoZH~2Cl1VZrH$?}H6i2jM=l7-d1(CPMv?edh82c8t= zP-f^~ELkgag3ExGCcxJewI>0wyPI(Rq=9={^MyV>-C(^w(!DV(J9=JD=gyzu=1WgF zDALpjQHt7D-?e8QEoRY+>z^76={T-e)V!?Aufp{dIfrie(o!;I04+@2MkpbNzdc#v zZ?0EJ*b_JNX`tClhuw)@qX=Dp*1Lqs$9S1Raiw0@NLy$wdf|3>F0Vk0VlsP+Ueuko z?q9qa+WjK}^(*|R_8mq0VfwU0Zoa1Ie>BQn>qIM9@QG^Ca`%LEpULM;BCe#CO6%~< z4)?+al>n!1a@T!q+PL*z?2M01KerGc;3gNdWF!Xzz$k9H-F-%O2oL)3UeM zXACxCsQMZ<=LLVZ6s>D(#ISND|B~fVg?B@d8fJ&-T1q_HSpBk&@sld*cMCByvRrG4 zQXDS)$E6>%KL%t&blgPEHnNNmuws3dJ2oFqZ8rdPwc1p(h2iABmvkr(!!DpeibUih za@DtgIII?9FFkaCG)9Y4@7Hohk<4&c6j_)ZG7bJ@`K}cJ^qGc9;hXtlj|STAH;2h` zOjOIhoLI$+v`g}eiL-dDL2zAs!tW)VZld)>M46l*ToK}O zU1S6dR1Lif_fbqN4^QpP7Y~HpWtER+VQ52E zxYp8lP&5K4Y7WfJhBCnEzIDV|GFnx0n%rwN9_$~35xrxaRK%b>~5jU8U8ha(d06cFp3EYgWznze(WJ)?3UDf+llT;Mr z`-(?wTpeb?%zKteLNLh-Ng$Z6D%n_Q^(iL^HCwyOHWJEJ0MD@BgKz-l7389MvG{{j zp<=9%(5J60ec#H8uPW#ur;W2?CR4+$fb8Q+@l-n17;W(FS3|RJ^Io&X^<{aL%KUGY4)r++= zN-%c^g!Yp0&5QLdM^=cZ8Et|TwPWjhn~jUvXmA1c*p%G`w7%*sDoQ^v#o8c}&+rt`HIEBHi2 zZ~?HgnBcNltifVju97f`EO#4w%Xx3Dm!fnc{l&NHN*{t72yy3aXA%t9e^j2} zLop<;D*xCJC1}xuuB-MZWy+kh3e2=ROQR;T zuyYV?Fjq?e+Tw*DwUyd#urR5DFOF9i65x}jWhsqZYQ9J=*sMH5G}Rv?QF5Z00;a=43Xyv)xU z;bD3xK!$IxTM=5IkvHMs@2(Bh&Ou$-D%!_5@=aqo9nY-ISK%$4H%cgRL2Z=u2pqF) z-)m)#$wC96F0LK}+6;A_SL_(oo%Hj0VX!u}BZge~CwC99?1$zf4vug7sMAx0Dq%(= zD)z4X8t`2H?|@7$zU>#dXoXTt`Vl>Eq;fJdGn3RN95Hz(09~XBl0KK`6EB#NvXdHq zmKo*&CO8HPSBXQ^E}g_hNZ|DyIIRVAr{1<%O^Kfq%P{Y}oe?3|IxZ3IVEgcjv)ajx zLZ}Y#2583o`Ti{bEOn;JgH^Jw07oA6nZECauvxNb2j&`n+C9CqTUh1;=RNOE=5%1a zv68p}DSsfbgL3V3l+j+wd&sZmwbPv&L6YO3bI=mT@@ngUYUdT{2I*%1+ssz8uQtjohP|@|YkCuAvZ=k(R~lB<*X#ohr*c;TTk-;DU+*13B)c#-Nmn`-vn5pfa)N+ATc z-al)7mMPR=YIejA;E+Z+6&nGKWbqpu(RVbMLVd!orjlRT(l>2UBMg|`dCNP%(&p`& zTB;mc0o^oG+uVnu?aj>E(kNts%R1AuIH`dU1TJ!;w;w1w-kg5kb+&xuaKiiX(LY*DfdnNv_I`kY4xviwFS8umerK*wz3{$a#437d}`L z2!>6+BfOoc;9UNdQLkcZ3d(B`5cEe2sfd0bVgz~OX$kpJsEVQ;Q|C8bhVgLgkSqZP zZ2FCAU&k#CGpF$>0C3FkUV3}i2mkR^%vxWkZm>atHR`Rar^I|WwvcjTT<{)WfLm9| z1EN(hDszY-<#ji~aU>6_!(CcO=+(kAt&)51n6H2fI?Ow&;V=l`QP?spRBp2a-2U=1Y~*2_Yjs7}_YCP)VbI7FVcviD=M|g_DDP$9V5+q4%dFmN z3HXfCI$MdwBcjKG1r{OlUWTcXADd?Qq5avV%4j{b;3O=Anree`xtSu*o+5$^Lg_t1 zISk+rq8j!3{b2}fxa*K*qp~nAuqW&8Glb~RpWxC3V3Z0hC;0nwM+98C6WUC^58V7c z``vcxRXO^~zVO|ty{qTMtY%esU+8rK&x!8)zcXk4qpbKUbFSm=e$<0bb@bQAFYmK* z`KZoOa8$08DQppM-oQhX`YW7I?XA=d1N*KTrzh=&{(|Z>VI1>|%3$qQ@P4TIZifr8 z<$D8kuvub>uVLOfI!x>;8`%i{H)ya{9Goo6=eklWdiOM~i2%Ia=D{Q8-5 uCX1!zG83I$cGEC0w9v<+*n9Qw(J{FOm-2u(b>O!VkLcYp(!oRRU;H0j`3DF9 diff --git a/docs/static/img/windsurf-white-symbol.svg b/docs/static/img/windsurf-white-symbol.svg deleted file mode 100644 index 2e4e4e49..00000000 --- a/docs/static/img/windsurf-white-symbol.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/static/js/mermaid-rounded-corners.js b/docs/static/js/mermaid-rounded-corners.js deleted file mode 100644 index 8a0f6daa..00000000 --- a/docs/static/js/mermaid-rounded-corners.js +++ /dev/null @@ -1,155 +0,0 @@ -/** - * Mermaid Rounded Corners Fallback - * - * This script ensures that Mermaid diagrams have rounded corners by: - * 1. First trying to use CSS rx/ry properties (modern approach) - * 2. Falling back to setting SVG attributes directly if CSS doesn't work - * 3. Using MutationObserver to handle dynamically loaded diagrams - */ - -(function() { - 'use strict'; - - const CORNER_RADIUS = 8; - - /** - * Test if the browser supports CSS rx/ry properties on SVG elements - */ - function testCSSRxRySupport() { - try { - const testRect = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); - testRect.style.rx = '10px'; - // If CSS rx works, the style property should be set - return testRect.style.rx === '10px'; - } catch (e) { - return false; - } - } - - /** - * Apply rounded corners to SVG rectangles using attributes - */ - function applyRoundedCorners(container) { - if (!container) return; - - // Find all rect elements in the container - const rects = container.querySelectorAll('rect'); - - rects.forEach(rect => { - // Only apply if not already set or if set to 0 - const currentRx = rect.getAttribute('rx'); - const currentRy = rect.getAttribute('ry'); - - if (!currentRx || currentRx === '0' || parseInt(currentRx) < CORNER_RADIUS) { - rect.setAttribute('rx', CORNER_RADIUS); - } - - if (!currentRy || currentRy === '0' || parseInt(currentRy) < CORNER_RADIUS) { - rect.setAttribute('ry', CORNER_RADIUS); - } - }); - } - - /** - * Process all existing Mermaid diagrams - */ - function processExistingDiagrams() { - const mermaidContainers = document.querySelectorAll('.mermaid'); - - mermaidContainers.forEach(container => { - const svg = container.querySelector('svg'); - if (svg) { - applyRoundedCorners(svg); - } - }); - } - - /** - * Initialize the rounded corners functionality - */ - function initialize() { - const supportsCSS = testCSSRxRySupport(); - - if (!supportsCSS) { - console.log('CSS rx/ry not supported, using attribute fallback for Mermaid rounded corners'); - - // Add fallback class to body for CSS targeting - document.body.classList.add('mermaid-rounded-fallback'); - } else { - console.log('CSS rx/ry supported, but applying attribute fallback as additional insurance'); - } - - // Always apply attribute-based rounded corners as insurance - // This ensures compatibility across all browsers and Mermaid versions - - // Process existing diagrams - processExistingDiagrams(); - - // Watch for new diagrams being added dynamically - const observer = new MutationObserver(mutations => { - mutations.forEach(mutation => { - mutation.addedNodes.forEach(node => { - if (node.nodeType === Node.ELEMENT_NODE) { - // Check if the added node is a Mermaid container - if (node.classList && node.classList.contains('mermaid')) { - const svg = node.querySelector('svg'); - if (svg) { - applyRoundedCorners(svg); - } - } - - // Check if the added node contains Mermaid containers - const mermaidContainers = node.querySelectorAll && node.querySelectorAll('.mermaid'); - if (mermaidContainers) { - mermaidContainers.forEach(container => { - const svg = container.querySelector('svg'); - if (svg) { - applyRoundedCorners(svg); - } - }); - } - - // Check if the added node is an SVG inside a Mermaid container - if (node.tagName === 'svg' && node.closest('.mermaid')) { - applyRoundedCorners(node); - } - } - }); - }); - }); - - // Start observing - observer.observe(document.body, { - childList: true, - subtree: true - }); - - // Also re-process after Mermaid renders (if Mermaid is available) - if (typeof window.mermaid !== 'undefined') { - // Hook into Mermaid's callback if possible - const originalInit = window.mermaid.init; - if (originalInit) { - window.mermaid.init = function(...args) { - const result = originalInit.apply(this, args); - // Small delay to ensure rendering is complete - setTimeout(processExistingDiagrams, 100); - return result; - }; - } - } - } - - // Initialize when DOM is ready - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', initialize); - } else { - // DOM is already ready - initialize(); - } - - // Also initialize after window load as backup - window.addEventListener('load', () => { - setTimeout(processExistingDiagrams, 500); - }); - -})(); \ No newline at end of file