Refactor UnifiedCoordinator to follow Single Responsibility Principle
- Create dedicated service classes for separated concerns: * AgentService: Agent management and health monitoring * WorkflowService: Workflow parsing and execution tracking * PerformanceService: Metrics and load balancing * BackgroundService: Background processes and cleanup * TaskService: Database persistence (already existed) - Refactor UnifiedCoordinator into UnifiedCoordinatorRefactored * Clean separation of responsibilities * Improved maintainability and testability * Dependency injection pattern for services * Clear service boundaries and interfaces - Maintain backward compatibility through re-exports - Update main.py to use refactored coordinator 🚀 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -2,833 +2,16 @@
|
||||
Unified Hive Coordinator
|
||||
Combines the functionality of HiveCoordinator and DistributedCoordinator into a single,
|
||||
cohesive orchestration system for the Hive platform.
|
||||
|
||||
DEPRECATED: This module is being refactored. Use unified_coordinator_refactored.py for new implementations.
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import aiohttp
|
||||
import json
|
||||
import time
|
||||
import hashlib
|
||||
import logging
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Dict, List, Optional, Any, Set
|
||||
from enum import Enum
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from sqlalchemy.orm import Session
|
||||
import redis.asyncio as redis
|
||||
from prometheus_client import Counter, Histogram, Gauge
|
||||
|
||||
from ..models.agent import Agent as ORMAgent
|
||||
from ..core.database import SessionLocal
|
||||
from ..cli_agents.cli_agent_manager import get_cli_agent_manager
|
||||
from ..services.task_service import TaskService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Performance Metrics
|
||||
TASK_COUNTER = Counter('hive_tasks_total', 'Total tasks processed', ['task_type', 'agent'])
|
||||
TASK_DURATION = Histogram('hive_task_duration_seconds', 'Task execution time', ['task_type', 'agent'])
|
||||
ACTIVE_TASKS = Gauge('hive_active_tasks', 'Currently active tasks', ['agent'])
|
||||
AGENT_UTILIZATION = Gauge('hive_agent_utilization', 'Agent utilization percentage', ['agent'])
|
||||
|
||||
class AgentType(Enum):
|
||||
"""Unified agent types supporting both original and distributed workflows"""
|
||||
# Original agent types
|
||||
KERNEL_DEV = "kernel_dev"
|
||||
PYTORCH_DEV = "pytorch_dev"
|
||||
PROFILER = "profiler"
|
||||
DOCS_WRITER = "docs_writer"
|
||||
TESTER = "tester"
|
||||
CLI_GEMINI = "cli_gemini"
|
||||
GENERAL_AI = "general_ai"
|
||||
REASONING = "reasoning"
|
||||
|
||||
# Distributed workflow types
|
||||
CODE_GENERATION = "code_generation"
|
||||
CODE_REVIEW = "code_review"
|
||||
TESTING = "testing"
|
||||
COMPILATION = "compilation"
|
||||
OPTIMIZATION = "optimization"
|
||||
DOCUMENTATION = "documentation"
|
||||
DEPLOYMENT = "deployment"
|
||||
|
||||
class TaskStatus(Enum):
|
||||
"""Task status tracking"""
|
||||
PENDING = "pending"
|
||||
IN_PROGRESS = "in_progress"
|
||||
COMPLETED = "completed"
|
||||
FAILED = "failed"
|
||||
|
||||
class TaskPriority(Enum):
|
||||
"""Task priority levels"""
|
||||
CRITICAL = 1
|
||||
HIGH = 2
|
||||
NORMAL = 3
|
||||
LOW = 4
|
||||
|
||||
@dataclass
|
||||
class Agent:
|
||||
"""Unified agent representation supporting both Ollama and CLI agents"""
|
||||
id: str
|
||||
endpoint: str
|
||||
model: str
|
||||
specialty: AgentType
|
||||
max_concurrent: int = 2
|
||||
current_tasks: int = 0
|
||||
agent_type: str = "ollama" # "ollama" or "cli"
|
||||
cli_config: Optional[Dict[str, Any]] = None
|
||||
|
||||
# Enhanced fields for distributed workflows
|
||||
gpu_type: str = "unknown"
|
||||
capabilities: Set[str] = field(default_factory=set)
|
||||
performance_history: List[float] = field(default_factory=list)
|
||||
specializations: List[AgentType] = field(default_factory=list)
|
||||
last_heartbeat: float = field(default_factory=time.time)
|
||||
|
||||
def __post_init__(self):
|
||||
if self.specializations:
|
||||
self.capabilities.update([spec.value for spec in self.specializations])
|
||||
|
||||
@dataclass
|
||||
class Task:
|
||||
"""Unified task representation"""
|
||||
id: str
|
||||
type: AgentType
|
||||
priority: int = 3
|
||||
status: TaskStatus = TaskStatus.PENDING
|
||||
context: Dict[str, Any] = field(default_factory=dict)
|
||||
payload: Dict[str, Any] = field(default_factory=dict)
|
||||
assigned_agent: Optional[str] = None
|
||||
result: Optional[Dict] = None
|
||||
created_at: float = field(default_factory=time.time)
|
||||
completed_at: Optional[float] = None
|
||||
|
||||
# Workflow support
|
||||
workflow_id: Optional[str] = None
|
||||
dependencies: List[str] = field(default_factory=list)
|
||||
|
||||
def cache_key(self) -> str:
|
||||
"""Generate cache key for task result"""
|
||||
payload_hash = hashlib.md5(json.dumps(self.payload, sort_keys=True).encode()).hexdigest()
|
||||
return f"task_result:{self.type.value}:{payload_hash}"
|
||||
|
||||
class UnifiedCoordinator:
|
||||
"""
|
||||
Unified coordinator that combines HiveCoordinator and DistributedCoordinator functionality.
|
||||
Provides both simple task orchestration and advanced distributed workflow management.
|
||||
"""
|
||||
|
||||
def __init__(self, redis_url: str = "redis://localhost:6379"):
|
||||
# Core state
|
||||
self.agents: Dict[str, Agent] = {}
|
||||
self.tasks: Dict[str, Task] = {} # In-memory cache for active tasks
|
||||
self.task_queue: List[Task] = []
|
||||
self.is_initialized = False
|
||||
|
||||
# Database persistence
|
||||
self.task_service = TaskService()
|
||||
|
||||
# CLI agent support
|
||||
self.cli_agent_manager = None
|
||||
|
||||
# Distributed workflow support
|
||||
self.redis_url = redis_url
|
||||
self.redis_client: Optional[redis.Redis] = None
|
||||
self.executor = ThreadPoolExecutor(max_workers=4)
|
||||
self.running = False
|
||||
self.workflow_tasks: Dict[str, List[Task]] = {}
|
||||
|
||||
# Performance tracking
|
||||
self.load_balancer = AdaptiveLoadBalancer()
|
||||
|
||||
# Async tasks
|
||||
self._background_tasks: Set[asyncio.Task] = set()
|
||||
|
||||
async def initialize(self):
|
||||
"""Initialize the unified coordinator with all subsystems"""
|
||||
if self.is_initialized:
|
||||
return
|
||||
|
||||
logger.info("🚀 Initializing Unified Hive Coordinator...")
|
||||
|
||||
try:
|
||||
# Initialize CLI agent manager
|
||||
self.cli_agent_manager = get_cli_agent_manager()
|
||||
|
||||
# Initialize Redis connection for distributed features
|
||||
try:
|
||||
self.redis_client = redis.from_url(self.redis_url)
|
||||
await self.redis_client.ping()
|
||||
logger.info("✅ Redis connection established")
|
||||
except Exception as e:
|
||||
logger.warning(f"⚠️ Redis unavailable, distributed features disabled: {e}")
|
||||
self.redis_client = None
|
||||
|
||||
# Load agents from database
|
||||
await self._load_database_agents()
|
||||
|
||||
# Load existing tasks from database
|
||||
await self._load_database_tasks()
|
||||
|
||||
# Initialize cluster agents
|
||||
self._initialize_cluster_agents()
|
||||
|
||||
# Test initial connectivity
|
||||
await self._test_initial_connectivity()
|
||||
|
||||
self.is_initialized = True
|
||||
logger.info("✅ Unified Hive Coordinator initialized successfully")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to initialize coordinator: {e}")
|
||||
raise
|
||||
|
||||
async def start(self):
|
||||
"""Start the coordinator background processes"""
|
||||
if not self.is_initialized:
|
||||
await self.initialize()
|
||||
|
||||
self.running = True
|
||||
|
||||
# Start background tasks
|
||||
self._background_tasks.add(asyncio.create_task(self._task_processor()))
|
||||
if self.redis_client:
|
||||
self._background_tasks.add(asyncio.create_task(self._health_monitor()))
|
||||
self._background_tasks.add(asyncio.create_task(self._performance_optimizer()))
|
||||
|
||||
logger.info("🚀 Unified Coordinator background processes started")
|
||||
|
||||
async def shutdown(self):
|
||||
"""Shutdown the coordinator gracefully"""
|
||||
logger.info("🛑 Shutting down Unified Hive Coordinator...")
|
||||
|
||||
self.running = False
|
||||
|
||||
# Cancel background tasks
|
||||
for task in self._background_tasks:
|
||||
task.cancel()
|
||||
|
||||
# Wait for tasks to complete
|
||||
if self._background_tasks:
|
||||
await asyncio.gather(*self._background_tasks, return_exceptions=True)
|
||||
|
||||
# Close Redis connection
|
||||
if self.redis_client:
|
||||
await self.redis_client.close()
|
||||
|
||||
# Shutdown executor
|
||||
self.executor.shutdown(wait=True)
|
||||
|
||||
logger.info("✅ Unified Coordinator shutdown complete")
|
||||
|
||||
# =========================================================================
|
||||
# AGENT MANAGEMENT
|
||||
# =========================================================================
|
||||
|
||||
def add_agent(self, agent: Agent):
|
||||
"""Add an agent to the coordinator"""
|
||||
self.agents[agent.id] = agent
|
||||
logger.info(f"✅ Added agent: {agent.id} ({agent.specialty.value})")
|
||||
|
||||
async def _load_database_agents(self):
|
||||
"""Load agents from database"""
|
||||
try:
|
||||
db = SessionLocal()
|
||||
orm_agents = db.query(ORMAgent).all()
|
||||
|
||||
for orm_agent in orm_agents:
|
||||
specialty = AgentType(orm_agent.specialty) if orm_agent.specialty else AgentType.GENERAL_AI
|
||||
agent = Agent(
|
||||
id=orm_agent.id,
|
||||
endpoint=orm_agent.endpoint,
|
||||
model=orm_agent.model or "unknown",
|
||||
specialty=specialty,
|
||||
max_concurrent=orm_agent.max_concurrent,
|
||||
current_tasks=orm_agent.current_tasks,
|
||||
agent_type=orm_agent.agent_type,
|
||||
cli_config=orm_agent.cli_config
|
||||
)
|
||||
self.add_agent(agent)
|
||||
|
||||
db.close()
|
||||
logger.info(f"📊 Loaded {len(orm_agents)} agents from database")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to load agents from database: {e}")
|
||||
|
||||
async def _load_database_tasks(self):
|
||||
"""Load pending and in-progress tasks from database"""
|
||||
try:
|
||||
# Load pending tasks
|
||||
pending_orm_tasks = self.task_service.get_tasks(status='pending', limit=100)
|
||||
for orm_task in pending_orm_tasks:
|
||||
coordinator_task = self.task_service.coordinator_task_from_orm(orm_task)
|
||||
self.tasks[coordinator_task.id] = coordinator_task
|
||||
self.task_queue.append(coordinator_task)
|
||||
|
||||
# Load in-progress tasks
|
||||
in_progress_orm_tasks = self.task_service.get_tasks(status='in_progress', limit=100)
|
||||
for orm_task in in_progress_orm_tasks:
|
||||
coordinator_task = self.task_service.coordinator_task_from_orm(orm_task)
|
||||
self.tasks[coordinator_task.id] = coordinator_task
|
||||
# In-progress tasks are not added to task_queue as they're already being processed
|
||||
|
||||
# Sort task queue by priority
|
||||
self.task_queue.sort(key=lambda t: t.priority)
|
||||
|
||||
logger.info(f"📊 Loaded {len(pending_orm_tasks)} pending and {len(in_progress_orm_tasks)} in-progress tasks from database")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to load tasks from database: {e}")
|
||||
|
||||
def _initialize_cluster_agents(self):
|
||||
"""Initialize predefined cluster agents"""
|
||||
# This maintains compatibility with the original HiveCoordinator
|
||||
cluster_agents = [
|
||||
Agent(
|
||||
id="walnut-codellama",
|
||||
endpoint="http://walnut.local:11434",
|
||||
model="codellama:34b",
|
||||
specialty=AgentType.KERNEL_DEV
|
||||
),
|
||||
Agent(
|
||||
id="oak-gemma",
|
||||
endpoint="http://oak.local:11434",
|
||||
model="gemma2:27b",
|
||||
specialty=AgentType.PYTORCH_DEV
|
||||
),
|
||||
Agent(
|
||||
id="ironwood-llama",
|
||||
endpoint="http://ironwood.local:11434",
|
||||
model="llama3.1:70b",
|
||||
specialty=AgentType.GENERAL_AI
|
||||
)
|
||||
]
|
||||
|
||||
for agent in cluster_agents:
|
||||
if agent.id not in self.agents:
|
||||
self.add_agent(agent)
|
||||
|
||||
# =========================================================================
|
||||
# TASK MANAGEMENT
|
||||
# =========================================================================
|
||||
|
||||
def create_task(self, task_type: AgentType, context: Dict, priority: int = 3) -> Task:
|
||||
"""Create a new task"""
|
||||
task_id = f"task_{int(time.time())}_{len(self.tasks)}"
|
||||
task = Task(
|
||||
id=task_id,
|
||||
type=task_type,
|
||||
context=context,
|
||||
priority=priority,
|
||||
payload=context # For compatibility
|
||||
)
|
||||
|
||||
# Persist to database
|
||||
try:
|
||||
self.task_service.create_task(task)
|
||||
logger.info(f"💾 Task {task_id} persisted to database")
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to persist task {task_id} to database: {e}")
|
||||
|
||||
# Add to in-memory structures
|
||||
self.tasks[task_id] = task
|
||||
self.task_queue.append(task)
|
||||
|
||||
# Sort queue by priority
|
||||
self.task_queue.sort(key=lambda t: t.priority)
|
||||
|
||||
logger.info(f"📝 Created task: {task_id} ({task_type.value}, priority: {priority})")
|
||||
return task
|
||||
|
||||
async def submit_workflow(self, workflow: Dict[str, Any]) -> str:
|
||||
"""Submit a workflow for execution (distributed coordinator compatibility)"""
|
||||
workflow_id = f"workflow_{int(time.time())}"
|
||||
tasks = self._parse_workflow_to_tasks(workflow, workflow_id)
|
||||
|
||||
self.workflow_tasks[workflow_id] = tasks
|
||||
for task in tasks:
|
||||
self.tasks[task.id] = task
|
||||
|
||||
await self._schedule_workflow_tasks(tasks)
|
||||
|
||||
logger.info(f"🔄 Submitted workflow: {workflow_id} with {len(tasks)} tasks")
|
||||
return workflow_id
|
||||
|
||||
def _parse_workflow_to_tasks(self, workflow: Dict[str, Any], workflow_id: str) -> List[Task]:
|
||||
"""Parse workflow definition into tasks"""
|
||||
tasks = []
|
||||
base_tasks = workflow.get('tasks', [])
|
||||
|
||||
for i, task_def in enumerate(base_tasks):
|
||||
task_id = f"{workflow_id}_task_{i}"
|
||||
task_type = AgentType(task_def.get('type', 'general_ai'))
|
||||
|
||||
task = Task(
|
||||
id=task_id,
|
||||
type=task_type,
|
||||
workflow_id=workflow_id,
|
||||
context=task_def.get('context', {}),
|
||||
payload=task_def.get('payload', {}),
|
||||
dependencies=task_def.get('dependencies', []),
|
||||
priority=task_def.get('priority', 3)
|
||||
)
|
||||
tasks.append(task)
|
||||
|
||||
return tasks
|
||||
|
||||
async def _schedule_workflow_tasks(self, tasks: List[Task]):
|
||||
"""Schedule workflow tasks respecting dependencies"""
|
||||
for task in tasks:
|
||||
if not task.dependencies:
|
||||
self.task_queue.append(task)
|
||||
# Tasks with dependencies will be scheduled when dependencies complete
|
||||
|
||||
def get_available_agent(self, task_type: AgentType) -> Optional[Agent]:
|
||||
"""Find an available agent for the task type"""
|
||||
available_agents = [
|
||||
agent for agent in self.agents.values()
|
||||
if (agent.specialty == task_type or task_type in agent.specializations)
|
||||
and agent.current_tasks < agent.max_concurrent
|
||||
]
|
||||
|
||||
if not available_agents:
|
||||
# Fallback to general AI agents
|
||||
available_agents = [
|
||||
agent for agent in self.agents.values()
|
||||
if agent.specialty == AgentType.GENERAL_AI
|
||||
and agent.current_tasks < agent.max_concurrent
|
||||
]
|
||||
|
||||
if available_agents:
|
||||
# Use load balancer for optimal selection
|
||||
return min(available_agents, key=lambda a: self.load_balancer.get_weight(a.id))
|
||||
|
||||
return None
|
||||
|
||||
# =========================================================================
|
||||
# TASK EXECUTION
|
||||
# =========================================================================
|
||||
|
||||
async def _task_processor(self):
|
||||
"""Background task processor"""
|
||||
while self.running:
|
||||
try:
|
||||
if self.task_queue:
|
||||
# Process pending tasks
|
||||
await self.process_queue()
|
||||
|
||||
# Check for workflow tasks whose dependencies are satisfied
|
||||
await self._check_workflow_dependencies()
|
||||
|
||||
await asyncio.sleep(1)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Error in task processor: {e}")
|
||||
await asyncio.sleep(5)
|
||||
|
||||
async def process_queue(self):
|
||||
"""Process the task queue"""
|
||||
if not self.task_queue:
|
||||
return
|
||||
|
||||
# Process up to 5 tasks concurrently
|
||||
batch_size = min(5, len(self.task_queue))
|
||||
current_batch = self.task_queue[:batch_size]
|
||||
|
||||
tasks_to_execute = []
|
||||
for task in current_batch:
|
||||
agent = self.get_available_agent(task.type)
|
||||
if agent:
|
||||
tasks_to_execute.append((task, agent))
|
||||
self.task_queue.remove(task)
|
||||
|
||||
if tasks_to_execute:
|
||||
await asyncio.gather(*[
|
||||
self._execute_task_with_agent(task, agent)
|
||||
for task, agent in tasks_to_execute
|
||||
], return_exceptions=True)
|
||||
|
||||
async def _execute_task_with_agent(self, task: Task, agent: Agent):
|
||||
"""Execute a task with a specific agent"""
|
||||
try:
|
||||
task.status = TaskStatus.IN_PROGRESS
|
||||
task.assigned_agent = agent.id
|
||||
agent.current_tasks += 1
|
||||
|
||||
# Persist status change to database
|
||||
try:
|
||||
self.task_service.update_task(task.id, task)
|
||||
logger.debug(f"💾 Updated task {task.id} status to IN_PROGRESS in database")
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to update task {task.id} status in database: {e}")
|
||||
|
||||
ACTIVE_TASKS.labels(agent=agent.id).inc()
|
||||
start_time = time.time()
|
||||
|
||||
# Execute based on agent type
|
||||
if agent.agent_type == "cli":
|
||||
result = await self._execute_cli_task(task, agent)
|
||||
else:
|
||||
result = await self._execute_ollama_task(task, agent)
|
||||
|
||||
# Record metrics
|
||||
execution_time = time.time() - start_time
|
||||
TASK_COUNTER.labels(task_type=task.type.value, agent=agent.id).inc()
|
||||
TASK_DURATION.labels(task_type=task.type.value, agent=agent.id).observe(execution_time)
|
||||
|
||||
# Update task
|
||||
task.result = result
|
||||
task.status = TaskStatus.COMPLETED
|
||||
task.completed_at = time.time()
|
||||
|
||||
# Persist completion to database
|
||||
try:
|
||||
self.task_service.update_task(task.id, task)
|
||||
logger.debug(f"💾 Updated task {task.id} status to COMPLETED in database")
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to update completed task {task.id} in database: {e}")
|
||||
|
||||
# Update agent
|
||||
agent.current_tasks -= 1
|
||||
self.load_balancer.update_weight(agent.id, execution_time)
|
||||
|
||||
ACTIVE_TASKS.labels(agent=agent.id).dec()
|
||||
|
||||
# Handle workflow completion
|
||||
if task.workflow_id:
|
||||
await self._handle_workflow_task_completion(task)
|
||||
|
||||
logger.info(f"✅ Task {task.id} completed by {agent.id}")
|
||||
|
||||
except Exception as e:
|
||||
task.status = TaskStatus.FAILED
|
||||
task.result = {"error": str(e)}
|
||||
|
||||
# Persist failure to database
|
||||
try:
|
||||
self.task_service.update_task(task.id, task)
|
||||
logger.debug(f"💾 Updated task {task.id} status to FAILED in database")
|
||||
except Exception as db_e:
|
||||
logger.error(f"❌ Failed to update failed task {task.id} in database: {db_e}")
|
||||
|
||||
agent.current_tasks -= 1
|
||||
ACTIVE_TASKS.labels(agent=agent.id).dec()
|
||||
logger.error(f"❌ Task {task.id} failed: {e}")
|
||||
|
||||
async def _execute_cli_task(self, task: Task, agent: Agent) -> Dict:
|
||||
"""Execute task on CLI agent"""
|
||||
if not self.cli_agent_manager:
|
||||
raise Exception("CLI agent manager not initialized")
|
||||
|
||||
prompt = self._build_task_prompt(task)
|
||||
return await self.cli_agent_manager.execute_task(agent.id, prompt, task.context)
|
||||
|
||||
async def _execute_ollama_task(self, task: Task, agent: Agent) -> Dict:
|
||||
"""Execute task on Ollama agent"""
|
||||
prompt = self._build_task_prompt(task)
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
payload = {
|
||||
"model": agent.model,
|
||||
"prompt": prompt,
|
||||
"stream": False
|
||||
}
|
||||
|
||||
async with session.post(f"{agent.endpoint}/api/generate", json=payload) as response:
|
||||
if response.status == 200:
|
||||
result = await response.json()
|
||||
return {"output": result.get("response", ""), "model": agent.model}
|
||||
else:
|
||||
raise Exception(f"HTTP {response.status}: {await response.text()}")
|
||||
|
||||
def _build_task_prompt(self, task: Task) -> str:
|
||||
"""Build prompt for task execution"""
|
||||
context_str = json.dumps(task.context, indent=2) if task.context else "No context provided"
|
||||
|
||||
return f"""
|
||||
Task Type: {task.type.value}
|
||||
Priority: {task.priority}
|
||||
Context: {context_str}
|
||||
|
||||
Please complete this task based on the provided context and requirements.
|
||||
"""
|
||||
|
||||
# =========================================================================
|
||||
# WORKFLOW MANAGEMENT
|
||||
# =========================================================================
|
||||
|
||||
async def _check_workflow_dependencies(self):
|
||||
"""Check and schedule workflow tasks whose dependencies are satisfied"""
|
||||
for workflow_id, workflow_tasks in self.workflow_tasks.items():
|
||||
for task in workflow_tasks:
|
||||
if (task.status == TaskStatus.PENDING and
|
||||
task not in self.task_queue and
|
||||
await self._dependencies_satisfied(task)):
|
||||
self.task_queue.append(task)
|
||||
|
||||
async def _dependencies_satisfied(self, task: Task) -> bool:
|
||||
"""Check if task dependencies are satisfied"""
|
||||
for dep_id in task.dependencies:
|
||||
dep_task = self.tasks.get(dep_id)
|
||||
if not dep_task or dep_task.status != TaskStatus.COMPLETED:
|
||||
return False
|
||||
return True
|
||||
|
||||
async def _handle_workflow_task_completion(self, task: Task):
|
||||
"""Handle completion of a workflow task"""
|
||||
if not task.workflow_id:
|
||||
return
|
||||
|
||||
# Check if workflow is complete
|
||||
workflow_tasks = self.workflow_tasks.get(task.workflow_id, [])
|
||||
completed_tasks = [t for t in workflow_tasks if t.status == TaskStatus.COMPLETED]
|
||||
|
||||
if len(completed_tasks) == len(workflow_tasks):
|
||||
logger.info(f"🎉 Workflow {task.workflow_id} completed")
|
||||
# Could emit event or update database here
|
||||
|
||||
async def get_workflow_status(self, workflow_id: str) -> Dict[str, Any]:
|
||||
"""Get workflow execution status"""
|
||||
workflow_tasks = self.workflow_tasks.get(workflow_id, [])
|
||||
|
||||
if not workflow_tasks:
|
||||
return {"error": "Workflow not found"}
|
||||
|
||||
status_counts = {}
|
||||
for status in TaskStatus:
|
||||
status_counts[status.value] = len([t for t in workflow_tasks if t.status == status])
|
||||
|
||||
return {
|
||||
"workflow_id": workflow_id,
|
||||
"total_tasks": len(workflow_tasks),
|
||||
"status_breakdown": status_counts,
|
||||
"completed": status_counts.get("completed", 0) == len(workflow_tasks)
|
||||
}
|
||||
|
||||
# =========================================================================
|
||||
# MONITORING & HEALTH
|
||||
# =========================================================================
|
||||
|
||||
async def _test_initial_connectivity(self):
|
||||
"""Test connectivity to all agents"""
|
||||
logger.info("🔍 Testing agent connectivity...")
|
||||
|
||||
for agent in self.agents.values():
|
||||
try:
|
||||
if agent.agent_type == "cli":
|
||||
# Test CLI agent
|
||||
if self.cli_agent_manager:
|
||||
await self.cli_agent_manager.test_agent(agent.id)
|
||||
else:
|
||||
# Test Ollama agent
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(f"{agent.endpoint}/api/tags", timeout=aiohttp.ClientTimeout(total=5)) as response:
|
||||
if response.status == 200:
|
||||
logger.info(f"✅ Agent {agent.id} is responsive")
|
||||
else:
|
||||
logger.warning(f"⚠️ Agent {agent.id} returned HTTP {response.status}")
|
||||
except Exception as e:
|
||||
logger.warning(f"⚠️ Agent {agent.id} is not responsive: {e}")
|
||||
|
||||
async def _health_monitor(self):
|
||||
"""Background health monitoring"""
|
||||
while self.running:
|
||||
try:
|
||||
for agent in self.agents.values():
|
||||
await self._check_agent_health(agent)
|
||||
await asyncio.sleep(30) # Check every 30 seconds
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Health monitor error: {e}")
|
||||
await asyncio.sleep(60)
|
||||
|
||||
async def _check_agent_health(self, agent: Agent):
|
||||
"""Check individual agent health"""
|
||||
try:
|
||||
if agent.agent_type == "cli":
|
||||
# CLI agent health check
|
||||
if self.cli_agent_manager:
|
||||
is_healthy = await self.cli_agent_manager.test_agent(agent.id)
|
||||
else:
|
||||
# Ollama agent health check
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(f"{agent.endpoint}/api/tags", timeout=aiohttp.ClientTimeout(total=10)) as response:
|
||||
is_healthy = response.status == 200
|
||||
|
||||
if is_healthy:
|
||||
agent.last_heartbeat = time.time()
|
||||
else:
|
||||
logger.warning(f"⚠️ Agent {agent.id} health check failed")
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"⚠️ Agent {agent.id} health check error: {e}")
|
||||
|
||||
async def _performance_optimizer(self):
|
||||
"""Background performance optimization"""
|
||||
while self.running:
|
||||
try:
|
||||
await self._optimize_agent_parameters()
|
||||
await self._cleanup_completed_tasks()
|
||||
await asyncio.sleep(300) # Optimize every 5 minutes
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Performance optimizer error: {e}")
|
||||
await asyncio.sleep(600)
|
||||
|
||||
async def _optimize_agent_parameters(self):
|
||||
"""Optimize agent parameters based on performance"""
|
||||
for agent in self.agents.values():
|
||||
if agent.performance_history:
|
||||
avg_time = sum(agent.performance_history) / len(agent.performance_history)
|
||||
utilization = agent.current_tasks / agent.max_concurrent if agent.max_concurrent > 0 else 0
|
||||
AGENT_UTILIZATION.labels(agent=agent.id).set(utilization)
|
||||
|
||||
async def _cleanup_completed_tasks(self):
|
||||
"""Clean up old completed tasks"""
|
||||
try:
|
||||
# Clean up in-memory tasks (keep only active ones)
|
||||
cutoff_time = time.time() - 3600 # 1 hour ago
|
||||
|
||||
completed_tasks = [
|
||||
task_id for task_id, task in self.tasks.items()
|
||||
if task.status == TaskStatus.COMPLETED and (task.completed_at or 0) < cutoff_time
|
||||
]
|
||||
|
||||
for task_id in completed_tasks:
|
||||
del self.tasks[task_id]
|
||||
|
||||
# Clean up database tasks (older ones)
|
||||
try:
|
||||
db_cleaned_count = self.task_service.cleanup_completed_tasks(max_age_hours=24)
|
||||
if db_cleaned_count > 0:
|
||||
logger.info(f"🧹 Cleaned up {db_cleaned_count} old tasks from database")
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to cleanup database tasks: {e}")
|
||||
|
||||
if completed_tasks:
|
||||
logger.info(f"🧹 Cleaned up {len(completed_tasks)} old completed tasks from memory")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to cleanup completed tasks: {e}")
|
||||
|
||||
# =========================================================================
|
||||
# STATUS & METRICS
|
||||
# =========================================================================
|
||||
|
||||
def get_task_status(self, task_id: str) -> Optional[Task]:
|
||||
"""Get status of a specific task"""
|
||||
# First check in-memory cache
|
||||
task = self.tasks.get(task_id)
|
||||
if task:
|
||||
return task
|
||||
|
||||
# If not in memory, check database
|
||||
try:
|
||||
orm_task = self.task_service.get_task(task_id)
|
||||
if orm_task:
|
||||
return self.task_service.coordinator_task_from_orm(orm_task)
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to get task {task_id} from database: {e}")
|
||||
|
||||
return None
|
||||
|
||||
def get_completed_tasks(self, limit: int = 50) -> List[Task]:
|
||||
"""Get all completed tasks"""
|
||||
# Get from in-memory cache first
|
||||
memory_completed = [task for task in self.tasks.values() if task.status == TaskStatus.COMPLETED]
|
||||
|
||||
# Get additional from database if needed
|
||||
try:
|
||||
if len(memory_completed) < limit:
|
||||
db_completed = self.task_service.get_tasks(status='completed', limit=limit)
|
||||
db_tasks = [self.task_service.coordinator_task_from_orm(orm_task) for orm_task in db_completed]
|
||||
|
||||
# Combine and deduplicate
|
||||
all_tasks = {task.id: task for task in memory_completed + db_tasks}
|
||||
return list(all_tasks.values())[:limit]
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to get completed tasks from database: {e}")
|
||||
|
||||
return memory_completed[:limit]
|
||||
|
||||
async def get_health_status(self):
|
||||
"""Get coordinator health status"""
|
||||
agent_status = {}
|
||||
for agent_id, agent in self.agents.items():
|
||||
agent_status[agent_id] = {
|
||||
"type": agent.agent_type,
|
||||
"model": agent.model,
|
||||
"specialty": agent.specialty.value,
|
||||
"current_tasks": agent.current_tasks,
|
||||
"max_concurrent": agent.max_concurrent,
|
||||
"last_heartbeat": agent.last_heartbeat
|
||||
}
|
||||
|
||||
# Get comprehensive task statistics from database
|
||||
try:
|
||||
db_stats = self.task_service.get_task_statistics()
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to get task statistics from database: {e}")
|
||||
db_stats = {}
|
||||
|
||||
return {
|
||||
"status": "operational" if self.is_initialized else "initializing",
|
||||
"agents": agent_status,
|
||||
"total_agents": len(self.agents),
|
||||
"active_tasks": len([t for t in self.tasks.values() if t.status == TaskStatus.IN_PROGRESS]),
|
||||
"pending_tasks": len(self.task_queue),
|
||||
"completed_tasks": len([t for t in self.tasks.values() if t.status == TaskStatus.COMPLETED]),
|
||||
"database_statistics": db_stats
|
||||
}
|
||||
|
||||
async def get_comprehensive_status(self):
|
||||
"""Get comprehensive system status"""
|
||||
health = await self.get_health_status()
|
||||
|
||||
return {
|
||||
**health,
|
||||
"coordinator_type": "unified",
|
||||
"features": {
|
||||
"simple_tasks": True,
|
||||
"workflows": True,
|
||||
"cli_agents": self.cli_agent_manager is not None,
|
||||
"distributed_caching": self.redis_client is not None,
|
||||
"performance_monitoring": True
|
||||
},
|
||||
"uptime": time.time() - (self.is_initialized and time.time() or 0)
|
||||
}
|
||||
|
||||
async def get_prometheus_metrics(self):
|
||||
"""Get Prometheus metrics"""
|
||||
from prometheus_client import generate_latest, CONTENT_TYPE_LATEST
|
||||
return generate_latest()
|
||||
|
||||
def generate_progress_report(self) -> Dict:
|
||||
"""Generate progress report"""
|
||||
total_tasks = len(self.tasks)
|
||||
completed_tasks = len([t for t in self.tasks.values() if t.status == TaskStatus.COMPLETED])
|
||||
failed_tasks = len([t for t in self.tasks.values() if t.status == TaskStatus.FAILED])
|
||||
|
||||
return {
|
||||
"total_tasks": total_tasks,
|
||||
"completed_tasks": completed_tasks,
|
||||
"failed_tasks": failed_tasks,
|
||||
"success_rate": completed_tasks / total_tasks if total_tasks > 0 else 0,
|
||||
"active_agents": len([a for a in self.agents.values() if a.current_tasks > 0]),
|
||||
"queue_length": len(self.task_queue)
|
||||
}
|
||||
|
||||
|
||||
class AdaptiveLoadBalancer:
|
||||
"""Simple adaptive load balancer for agent selection"""
|
||||
|
||||
def __init__(self):
|
||||
self.weights: Dict[str, float] = {}
|
||||
|
||||
def update_weight(self, agent_id: str, performance_metric: float):
|
||||
"""Update agent weight based on performance (lower is better)"""
|
||||
# Inverse relationship: better performance = lower weight
|
||||
self.weights[agent_id] = performance_metric
|
||||
|
||||
def get_weight(self, agent_id: str) -> float:
|
||||
"""Get agent weight (lower = more preferred)"""
|
||||
return self.weights.get(agent_id, 1.0)
|
||||
# Re-export from refactored implementation
|
||||
from .unified_coordinator_refactored import (
|
||||
UnifiedCoordinatorRefactored as UnifiedCoordinator,
|
||||
Agent,
|
||||
Task,
|
||||
AgentType,
|
||||
TaskStatus,
|
||||
TaskPriority
|
||||
)
|
||||
468
backend/app/core/unified_coordinator_refactored.py
Normal file
468
backend/app/core/unified_coordinator_refactored.py
Normal file
@@ -0,0 +1,468 @@
|
||||
"""
|
||||
Refactored Unified Hive Coordinator
|
||||
|
||||
Clean architecture with separated concerns using dedicated service classes.
|
||||
Each service handles a specific responsibility for maintainability and testability.
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import aiohttp
|
||||
import json
|
||||
import time
|
||||
import hashlib
|
||||
import logging
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Dict, List, Optional, Any, Set
|
||||
from enum import Enum
|
||||
import redis.asyncio as redis
|
||||
|
||||
from ..services.agent_service import AgentService, Agent, AgentType
|
||||
from ..services.task_service import TaskService
|
||||
from ..services.workflow_service import WorkflowService, Task, TaskStatus
|
||||
from ..services.performance_service import PerformanceService
|
||||
from ..services.background_service import BackgroundService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TaskPriority(Enum):
|
||||
"""Task priority levels"""
|
||||
CRITICAL = 1
|
||||
HIGH = 2
|
||||
NORMAL = 3
|
||||
LOW = 4
|
||||
|
||||
|
||||
class UnifiedCoordinatorRefactored:
|
||||
"""
|
||||
Refactored unified coordinator with separated concerns.
|
||||
|
||||
This coordinator orchestrates between specialized services:
|
||||
- AgentService: Agent management and health monitoring
|
||||
- TaskService: Database persistence and CRUD operations
|
||||
- WorkflowService: Workflow parsing and execution tracking
|
||||
- PerformanceService: Metrics and load balancing
|
||||
- BackgroundService: Background processes and cleanup
|
||||
"""
|
||||
|
||||
def __init__(self, redis_url: str = "redis://localhost:6379"):
|
||||
# Core state - only minimal coordination state
|
||||
self.tasks: Dict[str, Task] = {} # In-memory cache for active tasks
|
||||
self.task_queue: List[Task] = []
|
||||
self.is_initialized = False
|
||||
self.running = False
|
||||
|
||||
# Redis for distributed features
|
||||
self.redis_url = redis_url
|
||||
self.redis_client: Optional[redis.Redis] = None
|
||||
|
||||
# Specialized services
|
||||
self.agent_service = AgentService()
|
||||
self.task_service = TaskService()
|
||||
self.workflow_service = WorkflowService()
|
||||
self.performance_service = PerformanceService()
|
||||
self.background_service = BackgroundService()
|
||||
|
||||
async def initialize(self):
|
||||
"""Initialize the unified coordinator with all subsystems"""
|
||||
if self.is_initialized:
|
||||
return
|
||||
|
||||
logger.info("🚀 Initializing Refactored Unified Hive Coordinator...")
|
||||
|
||||
try:
|
||||
# Initialize Redis connection for distributed features
|
||||
try:
|
||||
self.redis_client = redis.from_url(self.redis_url)
|
||||
await self.redis_client.ping()
|
||||
logger.info("✅ Redis connection established")
|
||||
except Exception as e:
|
||||
logger.warning(f"⚠️ Redis unavailable, distributed features disabled: {e}")
|
||||
self.redis_client = None
|
||||
|
||||
# Initialize all services
|
||||
await self.agent_service.initialize()
|
||||
self.task_service.initialize()
|
||||
self.workflow_service.initialize()
|
||||
self.performance_service.initialize()
|
||||
|
||||
# Initialize background service with dependencies
|
||||
self.background_service.initialize(
|
||||
self.agent_service,
|
||||
self.task_service,
|
||||
self.workflow_service,
|
||||
self.performance_service
|
||||
)
|
||||
|
||||
# Load existing tasks from database
|
||||
await self._load_database_tasks()
|
||||
|
||||
self.is_initialized = True
|
||||
logger.info("✅ Refactored Unified Hive Coordinator initialized successfully")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to initialize coordinator: {e}")
|
||||
raise
|
||||
|
||||
async def start(self):
|
||||
"""Start the coordinator background processes"""
|
||||
if not self.is_initialized:
|
||||
await self.initialize()
|
||||
|
||||
self.running = True
|
||||
|
||||
# Start background service
|
||||
await self.background_service.start()
|
||||
|
||||
# Start main task processor
|
||||
asyncio.create_task(self._task_processor())
|
||||
|
||||
logger.info("🚀 Refactored Unified Coordinator background processes started")
|
||||
|
||||
async def shutdown(self):
|
||||
"""Shutdown the coordinator gracefully"""
|
||||
logger.info("🛑 Shutting down Refactored Unified Hive Coordinator...")
|
||||
|
||||
self.running = False
|
||||
|
||||
# Shutdown background service
|
||||
await self.background_service.shutdown()
|
||||
|
||||
# Close Redis connection
|
||||
if self.redis_client:
|
||||
await self.redis_client.close()
|
||||
|
||||
logger.info("✅ Refactored Unified Coordinator shutdown complete")
|
||||
|
||||
# =========================================================================
|
||||
# TASK COORDINATION (Main Responsibility)
|
||||
# =========================================================================
|
||||
|
||||
def create_task(self, task_type: AgentType, context: Dict, priority: int = 3) -> Task:
|
||||
"""Create a new task"""
|
||||
task_id = f"task_{int(time.time())}_{len(self.tasks)}"
|
||||
task = Task(
|
||||
id=task_id,
|
||||
type=task_type,
|
||||
context=context,
|
||||
priority=priority,
|
||||
payload=context # For compatibility
|
||||
)
|
||||
|
||||
# Persist to database
|
||||
try:
|
||||
self.task_service.create_task(task)
|
||||
logger.info(f"💾 Task {task_id} persisted to database")
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to persist task {task_id} to database: {e}")
|
||||
|
||||
# Add to in-memory structures
|
||||
self.tasks[task_id] = task
|
||||
self.task_queue.append(task)
|
||||
|
||||
# Sort queue by priority
|
||||
self.task_queue.sort(key=lambda t: t.priority)
|
||||
|
||||
logger.info(f"📝 Created task: {task_id} ({task_type.value}, priority: {priority})")
|
||||
return task
|
||||
|
||||
async def _task_processor(self):
|
||||
"""Background task processor"""
|
||||
while self.running:
|
||||
try:
|
||||
if self.task_queue:
|
||||
# Process pending tasks
|
||||
await self.process_queue()
|
||||
|
||||
# Check for workflow tasks whose dependencies are satisfied
|
||||
await self._check_workflow_dependencies()
|
||||
|
||||
await asyncio.sleep(1)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Error in task processor: {e}")
|
||||
await asyncio.sleep(5)
|
||||
|
||||
async def process_queue(self):
|
||||
"""Process the task queue"""
|
||||
if not self.task_queue:
|
||||
return
|
||||
|
||||
# Process up to 5 tasks concurrently
|
||||
batch_size = min(5, len(self.task_queue))
|
||||
current_batch = self.task_queue[:batch_size]
|
||||
|
||||
tasks_to_execute = []
|
||||
for task in current_batch:
|
||||
agent = self.agent_service.get_optimal_agent(
|
||||
task.type,
|
||||
self.performance_service.get_load_balancer()
|
||||
)
|
||||
if agent:
|
||||
tasks_to_execute.append((task, agent))
|
||||
self.task_queue.remove(task)
|
||||
|
||||
if tasks_to_execute:
|
||||
await asyncio.gather(*[
|
||||
self._execute_task_with_agent(task, agent)
|
||||
for task, agent in tasks_to_execute
|
||||
], return_exceptions=True)
|
||||
|
||||
async def _execute_task_with_agent(self, task: Task, agent):
|
||||
"""Execute a task with a specific agent"""
|
||||
try:
|
||||
task.status = TaskStatus.IN_PROGRESS
|
||||
task.assigned_agent = agent.id
|
||||
|
||||
# Update agent and metrics
|
||||
self.agent_service.increment_agent_tasks(agent.id)
|
||||
self.performance_service.record_task_start(agent.id)
|
||||
|
||||
# Persist status change to database
|
||||
try:
|
||||
self.task_service.update_task(task.id, task)
|
||||
logger.debug(f"💾 Updated task {task.id} status to IN_PROGRESS in database")
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to update task {task.id} status in database: {e}")
|
||||
|
||||
start_time = time.time()
|
||||
|
||||
# Execute based on agent type
|
||||
if agent.agent_type == "cli":
|
||||
result = await self._execute_cli_task(task, agent)
|
||||
else:
|
||||
result = await self._execute_ollama_task(task, agent)
|
||||
|
||||
# Record metrics
|
||||
execution_time = time.time() - start_time
|
||||
self.performance_service.record_task_completion(agent.id, task.type.value, execution_time)
|
||||
|
||||
# Update task
|
||||
task.result = result
|
||||
task.status = TaskStatus.COMPLETED
|
||||
task.completed_at = time.time()
|
||||
|
||||
# Persist completion to database
|
||||
try:
|
||||
self.task_service.update_task(task.id, task)
|
||||
logger.debug(f"💾 Updated task {task.id} status to COMPLETED in database")
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to update completed task {task.id} in database: {e}")
|
||||
|
||||
# Update agent
|
||||
self.agent_service.decrement_agent_tasks(agent.id)
|
||||
|
||||
# Handle workflow completion
|
||||
if task.workflow_id:
|
||||
self.workflow_service.handle_task_completion(task)
|
||||
|
||||
logger.info(f"✅ Task {task.id} completed by {agent.id}")
|
||||
|
||||
except Exception as e:
|
||||
task.status = TaskStatus.FAILED
|
||||
task.result = {"error": str(e)}
|
||||
|
||||
# Persist failure to database
|
||||
try:
|
||||
self.task_service.update_task(task.id, task)
|
||||
logger.debug(f"💾 Updated task {task.id} status to FAILED in database")
|
||||
except Exception as db_e:
|
||||
logger.error(f"❌ Failed to update failed task {task.id} in database: {db_e}")
|
||||
|
||||
self.agent_service.decrement_agent_tasks(agent.id)
|
||||
self.performance_service.record_task_failure(agent.id)
|
||||
logger.error(f"❌ Task {task.id} failed: {e}")
|
||||
|
||||
async def _execute_cli_task(self, task: Task, agent) -> Dict:
|
||||
"""Execute task on CLI agent"""
|
||||
if not self.agent_service.cli_agent_manager:
|
||||
raise Exception("CLI agent manager not initialized")
|
||||
|
||||
prompt = self._build_task_prompt(task)
|
||||
return await self.agent_service.cli_agent_manager.execute_task(agent.id, prompt, task.context)
|
||||
|
||||
async def _execute_ollama_task(self, task: Task, agent) -> Dict:
|
||||
"""Execute task on Ollama agent"""
|
||||
prompt = self._build_task_prompt(task)
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
payload = {
|
||||
"model": agent.model,
|
||||
"prompt": prompt,
|
||||
"stream": False
|
||||
}
|
||||
|
||||
async with session.post(f"{agent.endpoint}/api/generate", json=payload) as response:
|
||||
if response.status == 200:
|
||||
result = await response.json()
|
||||
return {"output": result.get("response", ""), "model": agent.model}
|
||||
else:
|
||||
raise Exception(f"HTTP {response.status}: {await response.text()}")
|
||||
|
||||
def _build_task_prompt(self, task: Task) -> str:
|
||||
"""Build prompt for task execution"""
|
||||
context_str = json.dumps(task.context, indent=2) if task.context else "No context provided"
|
||||
|
||||
return f"""
|
||||
Task Type: {task.type.value}
|
||||
Priority: {task.priority}
|
||||
Context: {context_str}
|
||||
|
||||
Please complete this task based on the provided context and requirements.
|
||||
"""
|
||||
|
||||
# =========================================================================
|
||||
# WORKFLOW DELEGATION
|
||||
# =========================================================================
|
||||
|
||||
async def submit_workflow(self, workflow: Dict[str, Any]) -> str:
|
||||
"""Submit a workflow for execution"""
|
||||
return await self.workflow_service.submit_workflow(workflow)
|
||||
|
||||
async def _check_workflow_dependencies(self):
|
||||
"""Check and schedule workflow tasks whose dependencies are satisfied"""
|
||||
ready_tasks = self.workflow_service.get_ready_workflow_tasks(self.tasks)
|
||||
for task in ready_tasks:
|
||||
if task not in self.task_queue:
|
||||
self.tasks[task.id] = task
|
||||
self.task_queue.append(task)
|
||||
|
||||
def get_workflow_status(self, workflow_id: str) -> Dict[str, Any]:
|
||||
"""Get workflow execution status"""
|
||||
return self.workflow_service.get_workflow_status(workflow_id)
|
||||
|
||||
# =========================================================================
|
||||
# SERVICE DELEGATION
|
||||
# =========================================================================
|
||||
|
||||
async def _load_database_tasks(self):
|
||||
"""Load pending and in-progress tasks from database"""
|
||||
try:
|
||||
# Load pending tasks
|
||||
pending_orm_tasks = self.task_service.get_tasks(status='pending', limit=100)
|
||||
for orm_task in pending_orm_tasks:
|
||||
coordinator_task = self.task_service.coordinator_task_from_orm(orm_task)
|
||||
self.tasks[coordinator_task.id] = coordinator_task
|
||||
self.task_queue.append(coordinator_task)
|
||||
|
||||
# Load in-progress tasks
|
||||
in_progress_orm_tasks = self.task_service.get_tasks(status='in_progress', limit=100)
|
||||
for orm_task in in_progress_orm_tasks:
|
||||
coordinator_task = self.task_service.coordinator_task_from_orm(orm_task)
|
||||
self.tasks[coordinator_task.id] = coordinator_task
|
||||
# In-progress tasks are not added to task_queue as they're already being processed
|
||||
|
||||
# Sort task queue by priority
|
||||
self.task_queue.sort(key=lambda t: t.priority)
|
||||
|
||||
logger.info(f"📊 Loaded {len(pending_orm_tasks)} pending and {len(in_progress_orm_tasks)} in-progress tasks from database")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to load tasks from database: {e}")
|
||||
|
||||
# =========================================================================
|
||||
# STATUS & HEALTH (Delegation to Services)
|
||||
# =========================================================================
|
||||
|
||||
def get_task_status(self, task_id: str) -> Optional[Task]:
|
||||
"""Get status of a specific task"""
|
||||
# First check in-memory cache
|
||||
task = self.tasks.get(task_id)
|
||||
if task:
|
||||
return task
|
||||
|
||||
# If not in memory, check database
|
||||
try:
|
||||
orm_task = self.task_service.get_task(task_id)
|
||||
if orm_task:
|
||||
return self.task_service.coordinator_task_from_orm(orm_task)
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to get task {task_id} from database: {e}")
|
||||
|
||||
return None
|
||||
|
||||
def get_completed_tasks(self, limit: int = 50) -> List[Task]:
|
||||
"""Get all completed tasks"""
|
||||
# Get from in-memory cache first
|
||||
memory_completed = [task for task in self.tasks.values() if task.status == TaskStatus.COMPLETED]
|
||||
|
||||
# Get additional from database if needed
|
||||
try:
|
||||
if len(memory_completed) < limit:
|
||||
db_completed = self.task_service.get_tasks(status='completed', limit=limit)
|
||||
db_tasks = [self.task_service.coordinator_task_from_orm(orm_task) for orm_task in db_completed]
|
||||
|
||||
# Combine and deduplicate
|
||||
all_tasks = {task.id: task for task in memory_completed + db_tasks}
|
||||
return list(all_tasks.values())[:limit]
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to get completed tasks from database: {e}")
|
||||
|
||||
return memory_completed[:limit]
|
||||
|
||||
async def get_health_status(self):
|
||||
"""Get coordinator health status"""
|
||||
agent_status = self.agent_service.get_agent_status()
|
||||
|
||||
# Get comprehensive task statistics from database
|
||||
try:
|
||||
db_stats = self.task_service.get_task_statistics()
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to get task statistics from database: {e}")
|
||||
db_stats = {}
|
||||
|
||||
return {
|
||||
"status": "operational" if self.is_initialized else "initializing",
|
||||
"agents": agent_status,
|
||||
"total_agents": len(self.agent_service.get_all_agents()),
|
||||
"active_tasks": len([t for t in self.tasks.values() if t.status == TaskStatus.IN_PROGRESS]),
|
||||
"pending_tasks": len(self.task_queue),
|
||||
"completed_tasks": len([t for t in self.tasks.values() if t.status == TaskStatus.COMPLETED]),
|
||||
"database_statistics": db_stats,
|
||||
"background_service": self.background_service.get_status()
|
||||
}
|
||||
|
||||
async def get_comprehensive_status(self):
|
||||
"""Get comprehensive system status"""
|
||||
health = await self.get_health_status()
|
||||
|
||||
return {
|
||||
**health,
|
||||
"coordinator_type": "unified_refactored",
|
||||
"features": {
|
||||
"simple_tasks": True,
|
||||
"workflows": True,
|
||||
"cli_agents": self.agent_service.cli_agent_manager is not None,
|
||||
"distributed_caching": self.redis_client is not None,
|
||||
"performance_monitoring": True,
|
||||
"separated_concerns": True
|
||||
},
|
||||
"uptime": time.time() - (self.is_initialized and time.time() or 0),
|
||||
"performance_metrics": self.performance_service.get_performance_metrics()
|
||||
}
|
||||
|
||||
async def get_prometheus_metrics(self):
|
||||
"""Get Prometheus metrics"""
|
||||
return await self.performance_service.get_prometheus_metrics()
|
||||
|
||||
def generate_progress_report(self) -> Dict:
|
||||
"""Generate progress report"""
|
||||
return self.performance_service.generate_performance_report(
|
||||
self.agent_service.get_all_agents(),
|
||||
self.tasks
|
||||
)
|
||||
|
||||
# =========================================================================
|
||||
# AGENT MANAGEMENT (Delegation)
|
||||
# =========================================================================
|
||||
|
||||
def add_agent(self, agent: Agent):
|
||||
"""Add an agent to the coordinator"""
|
||||
self.agent_service.add_agent(agent)
|
||||
|
||||
def get_available_agent(self, task_type: AgentType):
|
||||
"""Find an available agent for the task type"""
|
||||
return self.agent_service.get_optimal_agent(
|
||||
task_type,
|
||||
self.performance_service.get_load_balancer()
|
||||
)
|
||||
@@ -9,7 +9,7 @@ from datetime import datetime
|
||||
from pathlib import Path
|
||||
import socketio
|
||||
|
||||
from .core.unified_coordinator import UnifiedCoordinator
|
||||
from .core.unified_coordinator_refactored import UnifiedCoordinatorRefactored as UnifiedCoordinator
|
||||
from .core.database import engine, get_db, init_database_with_retry, test_database_connection
|
||||
from .api import agents, workflows, executions, monitoring, projects, tasks, cluster, distributed_workflows, cli_agents, auth
|
||||
from .models.user import Base
|
||||
|
||||
300
backend/app/services/agent_service.py
Normal file
300
backend/app/services/agent_service.py
Normal file
@@ -0,0 +1,300 @@
|
||||
"""
|
||||
Agent Management Service
|
||||
|
||||
Handles agent registration, health monitoring, and connectivity management.
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import aiohttp
|
||||
import time
|
||||
import logging
|
||||
from typing import Dict, List, Optional, Set, Any
|
||||
from dataclasses import dataclass, field
|
||||
from sqlalchemy.orm import Session
|
||||
from enum import Enum
|
||||
|
||||
from ..models.agent import Agent as ORMAgent
|
||||
from ..core.database import SessionLocal
|
||||
from ..cli_agents.cli_agent_manager import get_cli_agent_manager
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class AgentType(Enum):
|
||||
"""Unified agent types supporting both original and distributed workflows"""
|
||||
# Original agent types
|
||||
KERNEL_DEV = "kernel_dev"
|
||||
PYTORCH_DEV = "pytorch_dev"
|
||||
PROFILER = "profiler"
|
||||
DOCS_WRITER = "docs_writer"
|
||||
TESTER = "tester"
|
||||
CLI_GEMINI = "cli_gemini"
|
||||
GENERAL_AI = "general_ai"
|
||||
REASONING = "reasoning"
|
||||
|
||||
# Distributed workflow types
|
||||
CODE_GENERATION = "code_generation"
|
||||
CODE_REVIEW = "code_review"
|
||||
TESTING = "testing"
|
||||
COMPILATION = "compilation"
|
||||
OPTIMIZATION = "optimization"
|
||||
DOCUMENTATION = "documentation"
|
||||
DEPLOYMENT = "deployment"
|
||||
|
||||
|
||||
@dataclass
|
||||
class Agent:
|
||||
"""Unified agent representation supporting both Ollama and CLI agents"""
|
||||
id: str
|
||||
endpoint: str
|
||||
model: str
|
||||
specialty: AgentType
|
||||
max_concurrent: int = 2
|
||||
current_tasks: int = 0
|
||||
agent_type: str = "ollama" # "ollama" or "cli"
|
||||
cli_config: Optional[Dict[str, Any]] = None
|
||||
|
||||
# Enhanced fields for distributed workflows
|
||||
gpu_type: str = "unknown"
|
||||
capabilities: Set[str] = field(default_factory=set)
|
||||
performance_history: List[float] = field(default_factory=list)
|
||||
specializations: List[AgentType] = field(default_factory=list)
|
||||
last_heartbeat: float = field(default_factory=time.time)
|
||||
|
||||
def __post_init__(self):
|
||||
if self.specializations:
|
||||
self.capabilities.update([spec.value for spec in self.specializations])
|
||||
|
||||
|
||||
class AgentService:
|
||||
"""Service for managing agents in the Hive cluster"""
|
||||
|
||||
def __init__(self):
|
||||
self.agents: Dict[str, Agent] = {}
|
||||
self.cli_agent_manager = None
|
||||
self._initialized = False
|
||||
|
||||
async def initialize(self):
|
||||
"""Initialize the agent service"""
|
||||
if self._initialized:
|
||||
return
|
||||
|
||||
try:
|
||||
# Initialize CLI agent manager
|
||||
self.cli_agent_manager = get_cli_agent_manager()
|
||||
|
||||
# Load agents from database
|
||||
await self._load_database_agents()
|
||||
|
||||
# Initialize predefined cluster agents
|
||||
self._initialize_cluster_agents()
|
||||
|
||||
# Test initial connectivity
|
||||
await self._test_initial_connectivity()
|
||||
|
||||
self._initialized = True
|
||||
logger.info("✅ Agent Service initialized successfully")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to initialize agent service: {e}")
|
||||
raise
|
||||
|
||||
def add_agent(self, agent: Agent):
|
||||
"""Add an agent to the service"""
|
||||
self.agents[agent.id] = agent
|
||||
logger.info(f"✅ Added agent: {agent.id} ({agent.specialty.value})")
|
||||
|
||||
def get_agent(self, agent_id: str) -> Optional[Agent]:
|
||||
"""Get agent by ID"""
|
||||
return self.agents.get(agent_id)
|
||||
|
||||
def get_all_agents(self) -> Dict[str, Agent]:
|
||||
"""Get all agents"""
|
||||
return self.agents.copy()
|
||||
|
||||
def get_agents_by_specialty(self, specialty: AgentType) -> List[Agent]:
|
||||
"""Get agents by specialty"""
|
||||
return [
|
||||
agent for agent in self.agents.values()
|
||||
if agent.specialty == specialty or specialty in agent.specializations
|
||||
]
|
||||
|
||||
def get_available_agents(self, specialty: Optional[AgentType] = None) -> List[Agent]:
|
||||
"""Get available agents, optionally filtered by specialty"""
|
||||
available = [
|
||||
agent for agent in self.agents.values()
|
||||
if agent.current_tasks < agent.max_concurrent
|
||||
]
|
||||
|
||||
if specialty:
|
||||
available = [
|
||||
agent for agent in available
|
||||
if agent.specialty == specialty or specialty in agent.specializations
|
||||
]
|
||||
|
||||
return available
|
||||
|
||||
def get_optimal_agent(self, specialty: AgentType, load_balancer=None) -> Optional[Agent]:
|
||||
"""Get the optimal agent for a task type"""
|
||||
available_agents = [
|
||||
agent for agent in self.agents.values()
|
||||
if (agent.specialty == specialty or specialty in agent.specializations)
|
||||
and agent.current_tasks < agent.max_concurrent
|
||||
]
|
||||
|
||||
if not available_agents:
|
||||
# Fallback to general AI agents
|
||||
available_agents = [
|
||||
agent for agent in self.agents.values()
|
||||
if agent.specialty == AgentType.GENERAL_AI
|
||||
and agent.current_tasks < agent.max_concurrent
|
||||
]
|
||||
|
||||
if available_agents:
|
||||
if load_balancer:
|
||||
return min(available_agents, key=lambda a: load_balancer.get_weight(a.id))
|
||||
else:
|
||||
# Simple round-robin based on current tasks
|
||||
return min(available_agents, key=lambda a: a.current_tasks)
|
||||
|
||||
return None
|
||||
|
||||
def increment_agent_tasks(self, agent_id: str):
|
||||
"""Increment current task count for an agent"""
|
||||
if agent_id in self.agents:
|
||||
self.agents[agent_id].current_tasks += 1
|
||||
|
||||
def decrement_agent_tasks(self, agent_id: str):
|
||||
"""Decrement current task count for an agent"""
|
||||
if agent_id in self.agents:
|
||||
self.agents[agent_id].current_tasks = max(0, self.agents[agent_id].current_tasks - 1)
|
||||
|
||||
def update_agent_heartbeat(self, agent_id: str):
|
||||
"""Update agent heartbeat timestamp"""
|
||||
if agent_id in self.agents:
|
||||
self.agents[agent_id].last_heartbeat = time.time()
|
||||
|
||||
async def _load_database_agents(self):
|
||||
"""Load agents from database"""
|
||||
try:
|
||||
db = SessionLocal()
|
||||
orm_agents = db.query(ORMAgent).all()
|
||||
|
||||
for orm_agent in orm_agents:
|
||||
specialty = AgentType(orm_agent.specialty) if orm_agent.specialty else AgentType.GENERAL_AI
|
||||
agent = Agent(
|
||||
id=orm_agent.id,
|
||||
endpoint=orm_agent.endpoint,
|
||||
model=orm_agent.model or "unknown",
|
||||
specialty=specialty,
|
||||
max_concurrent=orm_agent.max_concurrent,
|
||||
current_tasks=orm_agent.current_tasks,
|
||||
agent_type=orm_agent.agent_type,
|
||||
cli_config=orm_agent.cli_config
|
||||
)
|
||||
self.add_agent(agent)
|
||||
|
||||
db.close()
|
||||
logger.info(f"📊 Loaded {len(orm_agents)} agents from database")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to load agents from database: {e}")
|
||||
|
||||
def _initialize_cluster_agents(self):
|
||||
"""Initialize predefined cluster agents"""
|
||||
cluster_agents = [
|
||||
Agent(
|
||||
id="walnut-codellama",
|
||||
endpoint="http://walnut.local:11434",
|
||||
model="codellama:34b",
|
||||
specialty=AgentType.KERNEL_DEV
|
||||
),
|
||||
Agent(
|
||||
id="oak-gemma",
|
||||
endpoint="http://oak.local:11434",
|
||||
model="gemma2:27b",
|
||||
specialty=AgentType.PYTORCH_DEV
|
||||
),
|
||||
Agent(
|
||||
id="ironwood-llama",
|
||||
endpoint="http://ironwood.local:11434",
|
||||
model="llama3.1:70b",
|
||||
specialty=AgentType.GENERAL_AI
|
||||
)
|
||||
]
|
||||
|
||||
for agent in cluster_agents:
|
||||
if agent.id not in self.agents:
|
||||
self.add_agent(agent)
|
||||
|
||||
async def _test_initial_connectivity(self):
|
||||
"""Test connectivity to all agents"""
|
||||
logger.info("🔍 Testing agent connectivity...")
|
||||
|
||||
for agent in self.agents.values():
|
||||
try:
|
||||
if agent.agent_type == "cli":
|
||||
# Test CLI agent
|
||||
if self.cli_agent_manager:
|
||||
await self.cli_agent_manager.test_agent(agent.id)
|
||||
else:
|
||||
# Test Ollama agent
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(
|
||||
f"{agent.endpoint}/api/tags",
|
||||
timeout=aiohttp.ClientTimeout(total=5)
|
||||
) as response:
|
||||
if response.status == 200:
|
||||
logger.info(f"✅ Agent {agent.id} is responsive")
|
||||
else:
|
||||
logger.warning(f"⚠️ Agent {agent.id} returned HTTP {response.status}")
|
||||
except Exception as e:
|
||||
logger.warning(f"⚠️ Agent {agent.id} is not responsive: {e}")
|
||||
|
||||
async def check_agent_health(self, agent: Agent) -> bool:
|
||||
"""Check individual agent health"""
|
||||
try:
|
||||
if agent.agent_type == "cli":
|
||||
# CLI agent health check
|
||||
if self.cli_agent_manager:
|
||||
return await self.cli_agent_manager.test_agent(agent.id)
|
||||
return False
|
||||
else:
|
||||
# Ollama agent health check
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(
|
||||
f"{agent.endpoint}/api/tags",
|
||||
timeout=aiohttp.ClientTimeout(total=10)
|
||||
) as response:
|
||||
return response.status == 200
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"⚠️ Agent {agent.id} health check error: {e}")
|
||||
return False
|
||||
|
||||
async def health_monitor_cycle(self):
|
||||
"""Single cycle of health monitoring for all agents"""
|
||||
try:
|
||||
for agent in self.agents.values():
|
||||
is_healthy = await self.check_agent_health(agent)
|
||||
if is_healthy:
|
||||
agent.last_heartbeat = time.time()
|
||||
else:
|
||||
logger.warning(f"⚠️ Agent {agent.id} health check failed")
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Health monitor cycle error: {e}")
|
||||
|
||||
def get_agent_status(self) -> Dict[str, Dict]:
|
||||
"""Get status of all agents"""
|
||||
agent_status = {}
|
||||
for agent_id, agent in self.agents.items():
|
||||
agent_status[agent_id] = {
|
||||
"type": agent.agent_type,
|
||||
"model": agent.model,
|
||||
"specialty": agent.specialty.value,
|
||||
"current_tasks": agent.current_tasks,
|
||||
"max_concurrent": agent.max_concurrent,
|
||||
"last_heartbeat": agent.last_heartbeat,
|
||||
"utilization": agent.current_tasks / agent.max_concurrent if agent.max_concurrent > 0 else 0
|
||||
}
|
||||
return agent_status
|
||||
163
backend/app/services/background_service.py
Normal file
163
backend/app/services/background_service.py
Normal file
@@ -0,0 +1,163 @@
|
||||
"""
|
||||
Background Processing Service
|
||||
|
||||
Handles background tasks, cleanup, monitoring, and maintenance operations.
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
from typing import Set, Optional, Callable
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class BackgroundService:
|
||||
"""Service for managing background tasks and processes"""
|
||||
|
||||
def __init__(self):
|
||||
self.running = False
|
||||
self.executor = ThreadPoolExecutor(max_workers=4)
|
||||
self._background_tasks: Set[asyncio.Task] = set()
|
||||
self._initialized = False
|
||||
|
||||
# Service references (injected)
|
||||
self.agent_service = None
|
||||
self.task_service = None
|
||||
self.workflow_service = None
|
||||
self.performance_service = None
|
||||
|
||||
def initialize(self, agent_service, task_service, workflow_service, performance_service):
|
||||
"""Initialize the background service with dependencies"""
|
||||
if self._initialized:
|
||||
return
|
||||
|
||||
self.agent_service = agent_service
|
||||
self.task_service = task_service
|
||||
self.workflow_service = workflow_service
|
||||
self.performance_service = performance_service
|
||||
|
||||
self._initialized = True
|
||||
logger.info("✅ Background Service initialized successfully")
|
||||
|
||||
async def start(self):
|
||||
"""Start background processes"""
|
||||
if not self._initialized:
|
||||
raise Exception("Background service not initialized")
|
||||
|
||||
self.running = True
|
||||
|
||||
# Start background tasks
|
||||
self._background_tasks.add(asyncio.create_task(self._health_monitor()))
|
||||
self._background_tasks.add(asyncio.create_task(self._performance_optimizer()))
|
||||
self._background_tasks.add(asyncio.create_task(self._cleanup_manager()))
|
||||
|
||||
logger.info("🚀 Background Service processes started")
|
||||
|
||||
async def shutdown(self):
|
||||
"""Shutdown background processes"""
|
||||
logger.info("🛑 Shutting down Background Service...")
|
||||
|
||||
self.running = False
|
||||
|
||||
# Cancel background tasks
|
||||
for task in self._background_tasks:
|
||||
task.cancel()
|
||||
|
||||
# Wait for tasks to complete
|
||||
if self._background_tasks:
|
||||
await asyncio.gather(*self._background_tasks, return_exceptions=True)
|
||||
|
||||
# Shutdown executor
|
||||
self.executor.shutdown(wait=True)
|
||||
|
||||
logger.info("✅ Background Service shutdown complete")
|
||||
|
||||
async def _health_monitor(self):
|
||||
"""Background health monitoring"""
|
||||
while self.running:
|
||||
try:
|
||||
if self.agent_service:
|
||||
await self.agent_service.health_monitor_cycle()
|
||||
await asyncio.sleep(30) # Check every 30 seconds
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Health monitor error: {e}")
|
||||
await asyncio.sleep(60)
|
||||
|
||||
async def _performance_optimizer(self):
|
||||
"""Background performance optimization"""
|
||||
while self.running:
|
||||
try:
|
||||
if self.performance_service and self.agent_service:
|
||||
await self.performance_service.optimization_cycle(
|
||||
self.agent_service.get_all_agents()
|
||||
)
|
||||
await asyncio.sleep(300) # Optimize every 5 minutes
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Performance optimizer error: {e}")
|
||||
await asyncio.sleep(600)
|
||||
|
||||
async def _cleanup_manager(self):
|
||||
"""Background cleanup management"""
|
||||
while self.running:
|
||||
try:
|
||||
# Cleanup completed tasks
|
||||
if self.task_service:
|
||||
cleaned_count = await self._cleanup_completed_tasks()
|
||||
if cleaned_count > 0:
|
||||
logger.info(f"🧹 Cleaned up {cleaned_count} old tasks")
|
||||
|
||||
# Cleanup workflows
|
||||
if self.workflow_service:
|
||||
workflow_cleaned = self.workflow_service.cleanup_completed_workflows(max_age_hours=24)
|
||||
if workflow_cleaned > 0:
|
||||
logger.info(f"🧹 Cleaned up {workflow_cleaned} old workflows")
|
||||
|
||||
await asyncio.sleep(3600) # Cleanup every hour
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Cleanup manager error: {e}")
|
||||
await asyncio.sleep(1800) # Retry in 30 minutes
|
||||
|
||||
async def _cleanup_completed_tasks(self) -> int:
|
||||
"""Clean up old completed tasks"""
|
||||
try:
|
||||
# Clean up database tasks (older ones)
|
||||
db_cleaned_count = self.task_service.cleanup_completed_tasks(max_age_hours=24)
|
||||
return db_cleaned_count
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to cleanup completed tasks: {e}")
|
||||
return 0
|
||||
|
||||
def add_background_task(self, coro):
|
||||
"""Add a custom background task"""
|
||||
if self.running:
|
||||
task = asyncio.create_task(coro)
|
||||
self._background_tasks.add(task)
|
||||
|
||||
# Clean up completed tasks
|
||||
task.add_done_callback(self._background_tasks.discard)
|
||||
|
||||
return task
|
||||
return None
|
||||
|
||||
def schedule_periodic_task(self, coro_func: Callable, interval_seconds: int):
|
||||
"""Schedule a periodic task"""
|
||||
async def periodic_wrapper():
|
||||
while self.running:
|
||||
try:
|
||||
await coro_func()
|
||||
await asyncio.sleep(interval_seconds)
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Periodic task error: {e}")
|
||||
await asyncio.sleep(interval_seconds)
|
||||
|
||||
return self.add_background_task(periodic_wrapper())
|
||||
|
||||
def get_status(self) -> dict:
|
||||
"""Get background service status"""
|
||||
return {
|
||||
"running": self.running,
|
||||
"active_tasks": len([t for t in self._background_tasks if not t.done()]),
|
||||
"total_tasks": len(self._background_tasks),
|
||||
"executor_threads": self.executor._threads if hasattr(self.executor, '_threads') else 0
|
||||
}
|
||||
173
backend/app/services/performance_service.py
Normal file
173
backend/app/services/performance_service.py
Normal file
@@ -0,0 +1,173 @@
|
||||
"""
|
||||
Performance Monitoring and Optimization Service
|
||||
|
||||
Handles performance metrics, load balancing, and system optimization.
|
||||
"""
|
||||
|
||||
import time
|
||||
import logging
|
||||
from typing import Dict, List, Optional
|
||||
from prometheus_client import Counter, Histogram, Gauge
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Performance Metrics
|
||||
TASK_COUNTER = Counter('hive_tasks_total', 'Total tasks processed', ['task_type', 'agent'])
|
||||
TASK_DURATION = Histogram('hive_task_duration_seconds', 'Task execution time', ['task_type', 'agent'])
|
||||
ACTIVE_TASKS = Gauge('hive_active_tasks', 'Currently active tasks', ['agent'])
|
||||
AGENT_UTILIZATION = Gauge('hive_agent_utilization', 'Agent utilization percentage', ['agent'])
|
||||
|
||||
|
||||
class AdaptiveLoadBalancer:
|
||||
"""Adaptive load balancer for optimal agent selection"""
|
||||
|
||||
def __init__(self):
|
||||
self.weights: Dict[str, float] = {}
|
||||
self.performance_history: Dict[str, List[float]] = {}
|
||||
self.max_history = 100 # Keep last 100 performance measurements
|
||||
|
||||
def update_weight(self, agent_id: str, performance_metric: float):
|
||||
"""Update agent weight based on performance (lower is better)"""
|
||||
# Inverse relationship: better performance = lower weight
|
||||
self.weights[agent_id] = performance_metric
|
||||
|
||||
# Update performance history
|
||||
if agent_id not in self.performance_history:
|
||||
self.performance_history[agent_id] = []
|
||||
|
||||
self.performance_history[agent_id].append(performance_metric)
|
||||
|
||||
# Keep only recent history
|
||||
if len(self.performance_history[agent_id]) > self.max_history:
|
||||
self.performance_history[agent_id] = self.performance_history[agent_id][-self.max_history:]
|
||||
|
||||
def get_weight(self, agent_id: str) -> float:
|
||||
"""Get agent weight (lower = more preferred)"""
|
||||
return self.weights.get(agent_id, 1.0)
|
||||
|
||||
def get_average_performance(self, agent_id: str) -> float:
|
||||
"""Get average performance for an agent"""
|
||||
history = self.performance_history.get(agent_id, [])
|
||||
if not history:
|
||||
return 1.0
|
||||
return sum(history) / len(history)
|
||||
|
||||
def get_performance_stats(self) -> Dict[str, Dict[str, float]]:
|
||||
"""Get performance statistics for all agents"""
|
||||
stats = {}
|
||||
for agent_id in self.weights:
|
||||
history = self.performance_history.get(agent_id, [])
|
||||
if history:
|
||||
stats[agent_id] = {
|
||||
"current_weight": self.weights[agent_id],
|
||||
"average_time": sum(history) / len(history),
|
||||
"min_time": min(history),
|
||||
"max_time": max(history),
|
||||
"sample_count": len(history)
|
||||
}
|
||||
return stats
|
||||
|
||||
|
||||
class PerformanceService:
|
||||
"""Service for performance monitoring and optimization"""
|
||||
|
||||
def __init__(self):
|
||||
self.load_balancer = AdaptiveLoadBalancer()
|
||||
self._initialized = False
|
||||
|
||||
def initialize(self):
|
||||
"""Initialize the performance service"""
|
||||
if self._initialized:
|
||||
return
|
||||
|
||||
self._initialized = True
|
||||
logger.info("✅ Performance Service initialized successfully")
|
||||
|
||||
def record_task_start(self, agent_id: str):
|
||||
"""Record task start for metrics"""
|
||||
ACTIVE_TASKS.labels(agent=agent_id).inc()
|
||||
|
||||
def record_task_completion(self, agent_id: str, task_type: str, execution_time: float):
|
||||
"""Record task completion metrics"""
|
||||
TASK_COUNTER.labels(task_type=task_type, agent=agent_id).inc()
|
||||
TASK_DURATION.labels(task_type=task_type, agent=agent_id).observe(execution_time)
|
||||
ACTIVE_TASKS.labels(agent=agent_id).dec()
|
||||
|
||||
# Update load balancer
|
||||
self.load_balancer.update_weight(agent_id, execution_time)
|
||||
|
||||
def record_task_failure(self, agent_id: str):
|
||||
"""Record task failure for metrics"""
|
||||
ACTIVE_TASKS.labels(agent=agent_id).dec()
|
||||
|
||||
def update_agent_utilization(self, agent_id: str, current_tasks: int, max_concurrent: int):
|
||||
"""Update agent utilization metrics"""
|
||||
utilization = current_tasks / max_concurrent if max_concurrent > 0 else 0
|
||||
AGENT_UTILIZATION.labels(agent=agent_id).set(utilization)
|
||||
|
||||
def get_load_balancer(self) -> AdaptiveLoadBalancer:
|
||||
"""Get the load balancer instance"""
|
||||
return self.load_balancer
|
||||
|
||||
async def optimization_cycle(self, agents: Dict):
|
||||
"""Single cycle of performance optimization"""
|
||||
try:
|
||||
# Update utilization metrics for all agents
|
||||
for agent in agents.values():
|
||||
utilization = agent.current_tasks / agent.max_concurrent if agent.max_concurrent > 0 else 0
|
||||
AGENT_UTILIZATION.labels(agent=agent.id).set(utilization)
|
||||
|
||||
# Additional optimization logic could go here
|
||||
# - Dynamic scaling recommendations
|
||||
# - Agent rebalancing suggestions
|
||||
# - Performance alerts
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Performance optimization cycle error: {e}")
|
||||
|
||||
def get_performance_metrics(self) -> Dict:
|
||||
"""Get current performance metrics"""
|
||||
return {
|
||||
"load_balancer_stats": self.load_balancer.get_performance_stats(),
|
||||
"prometheus_available": True
|
||||
}
|
||||
|
||||
async def get_prometheus_metrics(self):
|
||||
"""Get Prometheus metrics"""
|
||||
from prometheus_client import generate_latest, CONTENT_TYPE_LATEST
|
||||
return generate_latest()
|
||||
|
||||
def generate_performance_report(self, agents: Dict, tasks: Dict) -> Dict:
|
||||
"""Generate comprehensive performance report"""
|
||||
from .workflow_service import TaskStatus
|
||||
|
||||
# Agent performance
|
||||
agent_stats = {}
|
||||
for agent_id, agent in agents.items():
|
||||
agent_stats[agent_id] = {
|
||||
"current_tasks": agent.current_tasks,
|
||||
"max_concurrent": agent.max_concurrent,
|
||||
"utilization": agent.current_tasks / agent.max_concurrent if agent.max_concurrent > 0 else 0,
|
||||
"average_performance": self.load_balancer.get_average_performance(agent_id),
|
||||
"weight": self.load_balancer.get_weight(agent_id)
|
||||
}
|
||||
|
||||
# Task statistics
|
||||
total_tasks = len(tasks)
|
||||
completed_tasks = len([t for t in tasks.values() if t.status == TaskStatus.COMPLETED])
|
||||
failed_tasks = len([t for t in tasks.values() if t.status == TaskStatus.FAILED])
|
||||
active_tasks = len([t for t in tasks.values() if t.status == TaskStatus.IN_PROGRESS])
|
||||
|
||||
return {
|
||||
"timestamp": time.time(),
|
||||
"task_statistics": {
|
||||
"total": total_tasks,
|
||||
"completed": completed_tasks,
|
||||
"failed": failed_tasks,
|
||||
"active": active_tasks,
|
||||
"success_rate": completed_tasks / total_tasks if total_tasks > 0 else 0
|
||||
},
|
||||
"agent_performance": agent_stats,
|
||||
"active_agents": len([a for a in agents.values() if a.current_tasks > 0]),
|
||||
"load_balancer": self.load_balancer.get_performance_stats()
|
||||
}
|
||||
263
backend/app/services/workflow_service.py
Normal file
263
backend/app/services/workflow_service.py
Normal file
@@ -0,0 +1,263 @@
|
||||
"""
|
||||
Workflow Management Service
|
||||
|
||||
Handles workflow parsing, scheduling, dependency tracking, and execution management.
|
||||
"""
|
||||
|
||||
import time
|
||||
import logging
|
||||
from typing import Dict, List, Optional, Any
|
||||
from dataclasses import dataclass, field
|
||||
from enum import Enum
|
||||
|
||||
# Import shared types
|
||||
from .agent_service import AgentType
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TaskStatus(Enum):
|
||||
"""Task status tracking"""
|
||||
PENDING = "pending"
|
||||
IN_PROGRESS = "in_progress"
|
||||
COMPLETED = "completed"
|
||||
FAILED = "failed"
|
||||
|
||||
|
||||
@dataclass
|
||||
class Task:
|
||||
"""Unified task representation"""
|
||||
id: str
|
||||
type: AgentType
|
||||
priority: int = 3
|
||||
status: TaskStatus = TaskStatus.PENDING
|
||||
context: Dict[str, Any] = field(default_factory=dict)
|
||||
payload: Dict[str, Any] = field(default_factory=dict)
|
||||
assigned_agent: Optional[str] = None
|
||||
result: Optional[Dict] = None
|
||||
created_at: float = field(default_factory=time.time)
|
||||
completed_at: Optional[float] = None
|
||||
|
||||
# Workflow support
|
||||
workflow_id: Optional[str] = None
|
||||
dependencies: List[str] = field(default_factory=list)
|
||||
|
||||
def cache_key(self) -> str:
|
||||
"""Generate cache key for task result"""
|
||||
import hashlib
|
||||
import json
|
||||
payload_hash = hashlib.md5(json.dumps(self.payload, sort_keys=True).encode()).hexdigest()
|
||||
return f"task_result:{self.type.value}:{payload_hash}"
|
||||
|
||||
|
||||
@dataclass
|
||||
class WorkflowExecution:
|
||||
"""Represents a workflow execution instance"""
|
||||
workflow_id: str
|
||||
execution_id: str
|
||||
tasks: List[Task]
|
||||
created_at: float
|
||||
completed_at: Optional[float] = None
|
||||
status: str = "running"
|
||||
metadata: Dict[str, Any] = None
|
||||
|
||||
def __post_init__(self):
|
||||
if self.metadata is None:
|
||||
self.metadata = {}
|
||||
|
||||
|
||||
class WorkflowService:
|
||||
"""Service for managing workflows and their execution"""
|
||||
|
||||
def __init__(self):
|
||||
self.workflow_tasks: Dict[str, List[Task]] = {}
|
||||
self.workflow_executions: Dict[str, WorkflowExecution] = {}
|
||||
self._initialized = False
|
||||
|
||||
def initialize(self):
|
||||
"""Initialize the workflow service"""
|
||||
if self._initialized:
|
||||
return
|
||||
|
||||
self._initialized = True
|
||||
logger.info("✅ Workflow Service initialized successfully")
|
||||
|
||||
async def submit_workflow(self, workflow: Dict[str, Any]) -> str:
|
||||
"""Submit a workflow for execution"""
|
||||
workflow_id = f"workflow_{int(time.time())}"
|
||||
execution_id = f"exec_{workflow_id}"
|
||||
|
||||
tasks = self._parse_workflow_to_tasks(workflow, workflow_id)
|
||||
|
||||
# Create workflow execution record
|
||||
execution = WorkflowExecution(
|
||||
workflow_id=workflow_id,
|
||||
execution_id=execution_id,
|
||||
tasks=tasks,
|
||||
created_at=time.time(),
|
||||
metadata=workflow.get('metadata', {})
|
||||
)
|
||||
|
||||
self.workflow_tasks[workflow_id] = tasks
|
||||
self.workflow_executions[execution_id] = execution
|
||||
|
||||
logger.info(f"🔄 Submitted workflow: {workflow_id} with {len(tasks)} tasks")
|
||||
return workflow_id
|
||||
|
||||
def _parse_workflow_to_tasks(self, workflow: Dict[str, Any], workflow_id: str) -> List[Task]:
|
||||
"""Parse workflow definition into tasks"""
|
||||
tasks = []
|
||||
base_tasks = workflow.get('tasks', [])
|
||||
|
||||
for i, task_def in enumerate(base_tasks):
|
||||
task_id = f"{workflow_id}_task_{i}"
|
||||
task_type = AgentType(task_def.get('type', 'general_ai'))
|
||||
|
||||
task = Task(
|
||||
id=task_id,
|
||||
type=task_type,
|
||||
workflow_id=workflow_id,
|
||||
context=task_def.get('context', {}),
|
||||
payload=task_def.get('payload', {}),
|
||||
dependencies=task_def.get('dependencies', []),
|
||||
priority=task_def.get('priority', 3)
|
||||
)
|
||||
tasks.append(task)
|
||||
|
||||
return tasks
|
||||
|
||||
def get_ready_workflow_tasks(self, all_tasks: Dict[str, Task]) -> List[Task]:
|
||||
"""Get workflow tasks that are ready to execute (dependencies satisfied)"""
|
||||
ready_tasks = []
|
||||
|
||||
for workflow_id, workflow_tasks in self.workflow_tasks.items():
|
||||
for task in workflow_tasks:
|
||||
if (task.status == TaskStatus.PENDING and
|
||||
self._dependencies_satisfied(task, all_tasks)):
|
||||
ready_tasks.append(task)
|
||||
|
||||
return ready_tasks
|
||||
|
||||
def _dependencies_satisfied(self, task: Task, all_tasks: Dict[str, Task]) -> bool:
|
||||
"""Check if task dependencies are satisfied"""
|
||||
for dep_id in task.dependencies:
|
||||
dep_task = all_tasks.get(dep_id)
|
||||
if not dep_task or dep_task.status != TaskStatus.COMPLETED:
|
||||
return False
|
||||
return True
|
||||
|
||||
def handle_task_completion(self, task: Task):
|
||||
"""Handle completion of a workflow task"""
|
||||
if not task.workflow_id:
|
||||
return
|
||||
|
||||
# Check if workflow is complete
|
||||
workflow_tasks = self.workflow_tasks.get(task.workflow_id, [])
|
||||
completed_tasks = [t for t in workflow_tasks if t.status == TaskStatus.COMPLETED]
|
||||
failed_tasks = [t for t in workflow_tasks if t.status == TaskStatus.FAILED]
|
||||
|
||||
# Update workflow execution status
|
||||
for execution in self.workflow_executions.values():
|
||||
if execution.workflow_id == task.workflow_id:
|
||||
if len(failed_tasks) > 0:
|
||||
execution.status = "failed"
|
||||
execution.completed_at = time.time()
|
||||
logger.info(f"❌ Workflow {task.workflow_id} failed")
|
||||
elif len(completed_tasks) == len(workflow_tasks):
|
||||
execution.status = "completed"
|
||||
execution.completed_at = time.time()
|
||||
logger.info(f"🎉 Workflow {task.workflow_id} completed")
|
||||
break
|
||||
|
||||
def get_workflow_status(self, workflow_id: str) -> Dict[str, Any]:
|
||||
"""Get workflow execution status"""
|
||||
workflow_tasks = self.workflow_tasks.get(workflow_id, [])
|
||||
|
||||
if not workflow_tasks:
|
||||
return {"error": "Workflow not found"}
|
||||
|
||||
status_counts = {}
|
||||
for status in TaskStatus:
|
||||
status_counts[status.value] = len([t for t in workflow_tasks if t.status == status])
|
||||
|
||||
# Find execution record
|
||||
execution = None
|
||||
for exec_record in self.workflow_executions.values():
|
||||
if exec_record.workflow_id == workflow_id:
|
||||
execution = exec_record
|
||||
break
|
||||
|
||||
return {
|
||||
"workflow_id": workflow_id,
|
||||
"execution_id": execution.execution_id if execution else None,
|
||||
"total_tasks": len(workflow_tasks),
|
||||
"status_breakdown": status_counts,
|
||||
"completed": status_counts.get("completed", 0) == len(workflow_tasks),
|
||||
"status": execution.status if execution else "unknown",
|
||||
"created_at": execution.created_at if execution else None,
|
||||
"completed_at": execution.completed_at if execution else None
|
||||
}
|
||||
|
||||
def get_workflow_tasks(self, workflow_id: str) -> List[Task]:
|
||||
"""Get all tasks for a workflow"""
|
||||
return self.workflow_tasks.get(workflow_id, [])
|
||||
|
||||
def get_all_workflows(self) -> Dict[str, List[Task]]:
|
||||
"""Get all workflows"""
|
||||
return self.workflow_tasks.copy()
|
||||
|
||||
def get_workflow_executions(self, workflow_id: Optional[str] = None) -> List[Dict[str, Any]]:
|
||||
"""Get workflow execution history"""
|
||||
executions = []
|
||||
|
||||
for execution in self.workflow_executions.values():
|
||||
if workflow_id is None or execution.workflow_id == workflow_id:
|
||||
executions.append({
|
||||
"workflow_id": execution.workflow_id,
|
||||
"execution_id": execution.execution_id,
|
||||
"status": execution.status,
|
||||
"task_count": len(execution.tasks),
|
||||
"created_at": execution.created_at,
|
||||
"completed_at": execution.completed_at,
|
||||
"metadata": execution.metadata
|
||||
})
|
||||
|
||||
# Sort by creation time, newest first
|
||||
executions.sort(key=lambda x: x["created_at"], reverse=True)
|
||||
return executions
|
||||
|
||||
def cleanup_completed_workflows(self, max_age_hours: int = 24):
|
||||
"""Clean up old completed workflow executions"""
|
||||
cutoff_time = time.time() - (max_age_hours * 3600)
|
||||
|
||||
# Find completed executions older than cutoff
|
||||
to_remove = []
|
||||
for execution_id, execution in self.workflow_executions.items():
|
||||
if (execution.status in ["completed", "failed"] and
|
||||
execution.completed_at and
|
||||
execution.completed_at < cutoff_time):
|
||||
to_remove.append(execution_id)
|
||||
|
||||
# Remove old executions and their associated workflow tasks
|
||||
removed_count = 0
|
||||
for execution_id in to_remove:
|
||||
execution = self.workflow_executions[execution_id]
|
||||
workflow_id = execution.workflow_id
|
||||
|
||||
# Remove workflow tasks if this is the only execution for this workflow
|
||||
other_executions = [
|
||||
e for e in self.workflow_executions.values()
|
||||
if e.workflow_id == workflow_id and e.execution_id != execution_id
|
||||
]
|
||||
|
||||
if not other_executions:
|
||||
self.workflow_tasks.pop(workflow_id, None)
|
||||
|
||||
# Remove execution record
|
||||
del self.workflow_executions[execution_id]
|
||||
removed_count += 1
|
||||
|
||||
if removed_count > 0:
|
||||
logger.info(f"🧹 Cleaned up {removed_count} old workflow executions")
|
||||
|
||||
return removed_count
|
||||
1
frontend/dist/assets/index-9i8CMzyD.css
vendored
1
frontend/dist/assets/index-9i8CMzyD.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
frontend/dist/assets/index-CBw2HfAv.css
vendored
Normal file
1
frontend/dist/assets/index-CBw2HfAv.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
frontend/dist/index.html
vendored
4
frontend/dist/index.html
vendored
@@ -61,8 +61,8 @@
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script type="module" crossorigin src="/assets/index-DF5q6xIR.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-9i8CMzyD.css">
|
||||
<script type="module" crossorigin src="/assets/index-BsrGdklV.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-CBw2HfAv.css">
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
|
||||
55
frontend/node_modules/.package-lock.json
generated
vendored
55
frontend/node_modules/.package-lock.json
generated
vendored
@@ -1922,12 +1922,6 @@
|
||||
"@types/react": "^18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/resize-observer-browser": {
|
||||
"version": "0.1.11",
|
||||
"resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.11.tgz",
|
||||
"integrity": "sha512-cNw5iH8JkMkb3QkCoe7DaZiawbDQEUX8t7iuQaRTyLOyQCR2h+ibBD4GJt7p5yhUHrlOeL7ZtbxNHeipqNsBzQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/semver": {
|
||||
"version": "7.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz",
|
||||
@@ -4131,12 +4125,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/lucide-react": {
|
||||
"version": "0.294.0",
|
||||
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.294.0.tgz",
|
||||
"integrity": "sha512-V7o0/VECSGbLHn3/1O67FUgBwWB+hmzshrgDVRJQhMh8uj5D3HBuIvhuAmQTtlupILSplwIZg5FTc4tTKMA2SA==",
|
||||
"version": "0.453.0",
|
||||
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.453.0.tgz",
|
||||
"integrity": "sha512-kL+RGZCcJi9BvJtzg2kshO192Ddy9hv3ij+cPrVPWSRzgCWCVazoQJxOjAwgK53NomL07HB7GPHW120FimjNhQ==",
|
||||
"license": "ISC",
|
||||
"peerDependencies": {
|
||||
"react": "^16.5.1 || ^17.0.0 || ^18.0.0"
|
||||
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
|
||||
}
|
||||
},
|
||||
"node_modules/math-intrinsics": {
|
||||
@@ -4739,47 +4733,6 @@
|
||||
"react": "^18.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/react-flow-renderer": {
|
||||
"version": "10.3.17",
|
||||
"resolved": "https://registry.npmjs.org/react-flow-renderer/-/react-flow-renderer-10.3.17.tgz",
|
||||
"integrity": "sha512-bywiqVErlh5kCDqw3x0an5Ur3mT9j9CwJsDwmhmz4i1IgYM1a0SPqqEhClvjX+s5pU4nHjmVaGXWK96pwsiGcQ==",
|
||||
"deprecated": "react-flow-renderer has been renamed to reactflow, please use this package from now on https://reactflow.dev/docs/guides/migrate-to-v11/",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.18.9",
|
||||
"@types/d3": "^7.4.0",
|
||||
"@types/resize-observer-browser": "^0.1.7",
|
||||
"classcat": "^5.0.3",
|
||||
"d3-drag": "^3.0.0",
|
||||
"d3-selection": "^3.0.0",
|
||||
"d3-zoom": "^3.0.0",
|
||||
"zustand": "^3.7.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "16 || 17 || 18",
|
||||
"react-dom": "16 || 17 || 18"
|
||||
}
|
||||
},
|
||||
"node_modules/react-flow-renderer/node_modules/zustand": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz",
|
||||
"integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12.7.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">=16.8"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/react-hook-form": {
|
||||
"version": "7.60.0",
|
||||
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.60.0.tgz",
|
||||
|
||||
21
frontend/node_modules/@types/resize-observer-browser/LICENSE
generated
vendored
21
frontend/node_modules/@types/resize-observer-browser/LICENSE
generated
vendored
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE
|
||||
60
frontend/node_modules/@types/resize-observer-browser/README.md
generated
vendored
60
frontend/node_modules/@types/resize-observer-browser/README.md
generated
vendored
@@ -1,60 +0,0 @@
|
||||
# Installation
|
||||
> `npm install --save @types/resize-observer-browser`
|
||||
|
||||
# Summary
|
||||
This package contains type definitions for resize-observer-browser (https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver).
|
||||
|
||||
# Details
|
||||
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/resize-observer-browser.
|
||||
## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/resize-observer-browser/index.d.ts)
|
||||
````ts
|
||||
interface Window {
|
||||
ResizeObserver: typeof ResizeObserver;
|
||||
}
|
||||
|
||||
interface ResizeObserverOptions {
|
||||
/**
|
||||
* Sets which box model the observer will observe changes to. Possible values
|
||||
* are `content-box` (the default), and `border-box`.
|
||||
*
|
||||
* @default 'content-box'
|
||||
*/
|
||||
box?: "content-box" | "border-box" | "device-pixel-content-box" | undefined;
|
||||
}
|
||||
|
||||
interface ResizeObserverSize {
|
||||
readonly inlineSize: number;
|
||||
readonly blockSize: number;
|
||||
}
|
||||
|
||||
interface ResizeObserver {
|
||||
disconnect(): void;
|
||||
observe(target: Element, options?: ResizeObserverOptions): void;
|
||||
unobserve(target: Element): void;
|
||||
}
|
||||
|
||||
declare var ResizeObserver: {
|
||||
new(callback: ResizeObserverCallback): ResizeObserver;
|
||||
prototype: ResizeObserver;
|
||||
};
|
||||
|
||||
interface ResizeObserverCallback {
|
||||
(entries: ResizeObserverEntry[], observer: ResizeObserver): void;
|
||||
}
|
||||
|
||||
interface ResizeObserverEntry {
|
||||
readonly target: Element;
|
||||
readonly contentRect: DOMRectReadOnly;
|
||||
readonly borderBoxSize: readonly ResizeObserverSize[];
|
||||
readonly contentBoxSize: readonly ResizeObserverSize[];
|
||||
readonly devicePixelContentBoxSize: readonly ResizeObserverSize[];
|
||||
}
|
||||
|
||||
````
|
||||
|
||||
### Additional Details
|
||||
* Last updated: Mon, 20 Nov 2023 23:36:24 GMT
|
||||
* Dependencies: none
|
||||
|
||||
# Credits
|
||||
These definitions were written by [Chives](https://github.com/chivesrs), [William Furr](https://github.com/wffurr), and [Alexander Shushunov](https://github.com/AlexanderShushunov).
|
||||
41
frontend/node_modules/@types/resize-observer-browser/index.d.ts
generated
vendored
41
frontend/node_modules/@types/resize-observer-browser/index.d.ts
generated
vendored
@@ -1,41 +0,0 @@
|
||||
interface Window {
|
||||
ResizeObserver: typeof ResizeObserver;
|
||||
}
|
||||
|
||||
interface ResizeObserverOptions {
|
||||
/**
|
||||
* Sets which box model the observer will observe changes to. Possible values
|
||||
* are `content-box` (the default), and `border-box`.
|
||||
*
|
||||
* @default 'content-box'
|
||||
*/
|
||||
box?: "content-box" | "border-box" | "device-pixel-content-box" | undefined;
|
||||
}
|
||||
|
||||
interface ResizeObserverSize {
|
||||
readonly inlineSize: number;
|
||||
readonly blockSize: number;
|
||||
}
|
||||
|
||||
interface ResizeObserver {
|
||||
disconnect(): void;
|
||||
observe(target: Element, options?: ResizeObserverOptions): void;
|
||||
unobserve(target: Element): void;
|
||||
}
|
||||
|
||||
declare var ResizeObserver: {
|
||||
new(callback: ResizeObserverCallback): ResizeObserver;
|
||||
prototype: ResizeObserver;
|
||||
};
|
||||
|
||||
interface ResizeObserverCallback {
|
||||
(entries: ResizeObserverEntry[], observer: ResizeObserver): void;
|
||||
}
|
||||
|
||||
interface ResizeObserverEntry {
|
||||
readonly target: Element;
|
||||
readonly contentRect: DOMRectReadOnly;
|
||||
readonly borderBoxSize: readonly ResizeObserverSize[];
|
||||
readonly contentBoxSize: readonly ResizeObserverSize[];
|
||||
readonly devicePixelContentBoxSize: readonly ResizeObserverSize[];
|
||||
}
|
||||
36
frontend/node_modules/@types/resize-observer-browser/package.json
generated
vendored
36
frontend/node_modules/@types/resize-observer-browser/package.json
generated
vendored
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"name": "@types/resize-observer-browser",
|
||||
"version": "0.1.11",
|
||||
"description": "TypeScript definitions for resize-observer-browser",
|
||||
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/resize-observer-browser",
|
||||
"license": "MIT",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Chives",
|
||||
"githubUsername": "chivesrs",
|
||||
"url": "https://github.com/chivesrs"
|
||||
},
|
||||
{
|
||||
"name": "William Furr",
|
||||
"githubUsername": "wffurr",
|
||||
"url": "https://github.com/wffurr"
|
||||
},
|
||||
{
|
||||
"name": "Alexander Shushunov",
|
||||
"githubUsername": "AlexanderShushunov",
|
||||
"url": "https://github.com/AlexanderShushunov"
|
||||
}
|
||||
],
|
||||
"main": "",
|
||||
"types": "index.d.ts",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
|
||||
"directory": "types/resize-observer-browser"
|
||||
},
|
||||
"scripts": {},
|
||||
"dependencies": {},
|
||||
"typesPublisherContentHash": "799e292136e171f271a3b93d2e1f6cb31d66755aa1adff2c4cb5057007d69bb0",
|
||||
"typeScriptVersion": "4.5",
|
||||
"nonNpm": true
|
||||
}
|
||||
136
frontend/node_modules/lucide-react/README.md
generated
vendored
136
frontend/node_modules/lucide-react/README.md
generated
vendored
@@ -1,3 +1,13 @@
|
||||
<p align="center">
|
||||
<a href="https://github.com/lucide-icons/lucide#gh-light-mode-only">
|
||||
<img src="https://lucide.dev/lucide-react.svg#gh-light-mode-only" alt="Lucide React - Implementation of the lucide icon library for react applications." width="540">
|
||||
</a>
|
||||
<a href="https://github.com/lucide-icons/lucide#gh-dark-mode-only">
|
||||
<img src="https://lucide.dev/package-logos/dark/lucide-react.svg#gh-dark-mode-only" alt="Lucide React - Implementation of the lucide icon library for react applications." width="540">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
|
||||
# Lucide React
|
||||
|
||||
Implementation of the lucide icon library for react applications.
|
||||
@@ -16,126 +26,26 @@ or
|
||||
npm install lucide-react
|
||||
```
|
||||
|
||||
## How to use
|
||||
## Documentation
|
||||
|
||||
It's built with ES modules so it's completely tree-shakable.
|
||||
Each icon can be imported as a react component.
|
||||
For full documentation, visit [lucide.dev](https://lucide.dev/guide/packages/lucide-react)
|
||||
|
||||
### Example
|
||||
## Community
|
||||
|
||||
You can pass additional props to adjust the icon.
|
||||
Join the [Discord server](https://discord.gg/EH6nSts) to chat with the maintainers and other users.
|
||||
|
||||
```js
|
||||
import { Camera } from 'lucide-react';
|
||||
## License
|
||||
|
||||
const App = () => {
|
||||
return <Camera color="red" size={48} />;
|
||||
};
|
||||
Lucide is licensed under the ISC license. See [LICENSE](https://lucide.dev/license).
|
||||
|
||||
export default App;
|
||||
```
|
||||
## Sponsors
|
||||
|
||||
### Props
|
||||
<a href="https://vercel.com?utm_source=lucide&utm_campaign=oss">
|
||||
<img src="https://lucide.dev/vercel.svg" alt="Powered by Vercel" width="200" />
|
||||
</a>
|
||||
|
||||
| name | type | default |
|
||||
| ------------- | -------- | ------------ |
|
||||
| `size` | _Number_ | 24 |
|
||||
| `color` | _String_ | currentColor |
|
||||
| `strokeWidth` | _Number_ | 2 |
|
||||
<a href="https://www.digitalocean.com/?refcode=b0877a2caebd&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge"><img src="https://lucide.dev/digitalocean.svg" width="200" alt="DigitalOcean Referral Badge" /></a>
|
||||
|
||||
### Custom props
|
||||
### Awesome backer 🍺
|
||||
|
||||
You can also pass custom props that will be added in the svg as attributes.
|
||||
|
||||
```js
|
||||
const App = () => {
|
||||
return <Camera fill="red" />;
|
||||
};
|
||||
```
|
||||
|
||||
### Generic icon component
|
||||
|
||||
It is possible to create a generic icon component to load icons.
|
||||
|
||||
> :warning: The example below is importing all ES modules. This is **not** recommended when you using a bundler since your application build size will grow substantially.
|
||||
|
||||
```js
|
||||
import { icons } from 'lucide-react';
|
||||
|
||||
const Icon = ({ name, color, size }) => {
|
||||
const LucideIcon = icons[name];
|
||||
|
||||
return <LucideIcon color={color} size={size} />;
|
||||
};
|
||||
|
||||
export default Icon;
|
||||
```
|
||||
|
||||
#### With Dynamic Imports
|
||||
|
||||
Lucide react exports a dynamic import map `dynamicIconImports`. Useful for applications that want to show icons dynamically by icon name. For example when using a content management system with where icon names are stored in a database.
|
||||
|
||||
When using client side rendering, it will fetch the icon component when it's needed. This will reduce the initial bundle size.
|
||||
|
||||
The keys of the dynamic import map are the lucide original icon names.
|
||||
|
||||
Example with React suspense:
|
||||
|
||||
```tsx
|
||||
import React, { lazy, Suspense } from 'react';
|
||||
import { dynamicIconImports, LucideProps } from 'lucide-react';
|
||||
|
||||
const fallback = <div style={{ background: '#ddd', width: 24, height: 24 }}/>
|
||||
|
||||
interface IconProps extends Omit<LucideProps, 'ref'> {
|
||||
name: keyof typeof dynamicIconImports;
|
||||
}
|
||||
|
||||
const Icon = ({ name, ...props }: IconProps) => {
|
||||
const LucideIcon = lazy(dynamicIconImports[name]);
|
||||
|
||||
return (
|
||||
<Suspense fallback={fallback}>
|
||||
<LucideIcon {...props} />
|
||||
</Suspense>
|
||||
);
|
||||
}
|
||||
|
||||
export default Icon
|
||||
```
|
||||
|
||||
##### NextJS Example
|
||||
|
||||
In NextJS, [the dynamic function](https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading#nextdynamic) can be used to dynamically load the icon component.
|
||||
|
||||
To make dynamic imports work with NextJS, you need to add `lucide-react` to the [`transpilePackages`](https://nextjs.org/docs/app/api-reference/next-config-js/transpilePackages) option in your `next.config.js` like this:
|
||||
|
||||
```js
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
transpilePackages: ['lucide-react'] // add this
|
||||
}
|
||||
|
||||
module.exports = nextConfig
|
||||
|
||||
```
|
||||
|
||||
You can then start using it:
|
||||
|
||||
```tsx
|
||||
import dynamic from 'next/dynamic'
|
||||
import { LucideProps } from 'lucide-react';
|
||||
import dynamicIconImports from 'lucide-react/dynamicIconImports';
|
||||
|
||||
interface IconProps extends LucideProps {
|
||||
name: keyof typeof dynamicIconImports;
|
||||
}
|
||||
|
||||
const Icon = ({ name, ...props }: IconProps) => {
|
||||
const LucideIcon = dynamic(dynamicIconImports[name])
|
||||
|
||||
return <LucideIcon {...props} />;
|
||||
};
|
||||
|
||||
export default Icon;
|
||||
```
|
||||
<a href="https://www.scipress.io?utm_source=lucide"><img src="https://lucide.dev/sponsors/scipress.svg" width="180" alt="Scipress sponsor badge" /></a>
|
||||
|
||||
9109
frontend/node_modules/lucide-react/dist/cjs/lucide-react.js
generated
vendored
9109
frontend/node_modules/lucide-react/dist/cjs/lucide-react.js
generated
vendored
File diff suppressed because it is too large
Load Diff
2
frontend/node_modules/lucide-react/dist/cjs/lucide-react.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/cjs/lucide-react.js.map
generated
vendored
File diff suppressed because one or more lines are too long
44
frontend/node_modules/lucide-react/dist/esm/Icon.js
generated
vendored
Normal file
44
frontend/node_modules/lucide-react/dist/esm/Icon.js
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import { forwardRef, createElement } from 'react';
|
||||
import defaultAttributes from './defaultAttributes.js';
|
||||
import { mergeClasses } from './shared/src/utils.js';
|
||||
|
||||
const Icon = forwardRef(
|
||||
({
|
||||
color = "currentColor",
|
||||
size = 24,
|
||||
strokeWidth = 2,
|
||||
absoluteStrokeWidth,
|
||||
className = "",
|
||||
children,
|
||||
iconNode,
|
||||
...rest
|
||||
}, ref) => {
|
||||
return createElement(
|
||||
"svg",
|
||||
{
|
||||
ref,
|
||||
...defaultAttributes,
|
||||
width: size,
|
||||
height: size,
|
||||
stroke: color,
|
||||
strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
|
||||
className: mergeClasses("lucide", className),
|
||||
...rest
|
||||
},
|
||||
[
|
||||
...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
|
||||
...Array.isArray(children) ? children : [children]
|
||||
]
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
export { Icon as default };
|
||||
//# sourceMappingURL=Icon.js.map
|
||||
1
frontend/node_modules/lucide-react/dist/esm/Icon.js.map
generated
vendored
Normal file
1
frontend/node_modules/lucide-react/dist/esm/Icon.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"Icon.js","sources":["../../src/Icon.ts"],"sourcesContent":["import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) => {\n return createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n"],"names":[],"mappings":";;;;;;;;;;;AAwBA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACX,CACE,CAAA;AAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAA,CAAA,CAAA,CAAA;AAAA,CACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,GAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,GAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,GAAG,CAAA,CAAA,CAAA,CAAA;AAAA,KAEL,GACG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAO,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACR,WAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAI,CAAA,CAAA,CAAA,CAAM,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAI,CAAA,CAAA,CAAA,CAAI,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC/E,SAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,SAAS,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3C,GAAG,CAAA,CAAA,CAAA,CAAA;AAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,GAAG,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,CAAC,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAM,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3D,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA;AAAA,CACpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CACF,CAAA,CAAA;AACF,CAAA,CAAA;;"}
|
||||
31
frontend/node_modules/lucide-react/dist/esm/createLucideIcon.js
generated
vendored
31
frontend/node_modules/lucide-react/dist/esm/createLucideIcon.js
generated
vendored
@@ -1,37 +1,26 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import { forwardRef, createElement } from 'react';
|
||||
import defaultAttributes from './defaultAttributes.js';
|
||||
import { mergeClasses, toKebabCase } from './shared/src/utils.js';
|
||||
import Icon from './Icon.js';
|
||||
|
||||
const toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase().trim();
|
||||
const createLucideIcon = (iconName, iconNode) => {
|
||||
const Component = forwardRef(
|
||||
({ color = "currentColor", size = 24, strokeWidth = 2, absoluteStrokeWidth, className = "", children, ...rest }, ref) => createElement(
|
||||
"svg",
|
||||
{
|
||||
ref,
|
||||
...defaultAttributes,
|
||||
width: size,
|
||||
height: size,
|
||||
stroke: color,
|
||||
strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
|
||||
className: ["lucide", `lucide-${toKebabCase(iconName)}`, className].join(" "),
|
||||
...rest
|
||||
},
|
||||
[
|
||||
...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
|
||||
...Array.isArray(children) ? children : [children]
|
||||
]
|
||||
)
|
||||
({ className, ...props }, ref) => createElement(Icon, {
|
||||
ref,
|
||||
iconNode,
|
||||
className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className),
|
||||
...props
|
||||
})
|
||||
);
|
||||
Component.displayName = `${iconName}`;
|
||||
return Component;
|
||||
};
|
||||
|
||||
export { createLucideIcon as default, toKebabCase };
|
||||
export { createLucideIcon as default };
|
||||
//# sourceMappingURL=createLucideIcon.js.map
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/createLucideIcon.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/createLucideIcon.js.map
generated
vendored
File diff suppressed because one or more lines are too long
2
frontend/node_modules/lucide-react/dist/esm/defaultAttributes.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/defaultAttributes.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
18
frontend/node_modules/lucide-react/dist/esm/icons/a-arrow-down.js
generated
vendored
Normal file
18
frontend/node_modules/lucide-react/dist/esm/icons/a-arrow-down.js
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AArrowDown = createLucideIcon("AArrowDown", [
|
||||
["path", { d: "M3.5 13h6", key: "p1my2r" }],
|
||||
["path", { d: "m2 16 4.5-9 4.5 9", key: "ndf0b3" }],
|
||||
["path", { d: "M18 7v9", key: "pknjwm" }],
|
||||
["path", { d: "m14 12 4 4 4-4", key: "buelq4" }]
|
||||
]);
|
||||
|
||||
export { AArrowDown as default };
|
||||
//# sourceMappingURL=a-arrow-down.js.map
|
||||
1
frontend/node_modules/lucide-react/dist/esm/icons/a-arrow-down.js.map
generated
vendored
Normal file
1
frontend/node_modules/lucide-react/dist/esm/icons/a-arrow-down.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"a-arrow-down.js","sources":["../../../src/icons/a-arrow-down.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AArrowDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/a-arrow-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AArrowDown = createLucideIcon('AArrowDown', [\n ['path', { d: 'M3.5 13h6', key: 'p1my2r' }],\n ['path', { d: 'm2 16 4.5-9 4.5 9', key: 'ndf0b3' }],\n ['path', { d: 'M18 7v9', key: 'pknjwm' }],\n ['path', { d: 'm14 12 4 4 4-4', key: 'buelq4' }],\n]);\n\nexport default AArrowDown;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,iBAAiB,YAAc,CAAA,CAAA,CAAA;AAAA,CAAA,CAChD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAClD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACxC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACjD,CAAC,CAAA,CAAA;;"}
|
||||
18
frontend/node_modules/lucide-react/dist/esm/icons/a-arrow-up.js
generated
vendored
Normal file
18
frontend/node_modules/lucide-react/dist/esm/icons/a-arrow-up.js
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AArrowUp = createLucideIcon("AArrowUp", [
|
||||
["path", { d: "M3.5 13h6", key: "p1my2r" }],
|
||||
["path", { d: "m2 16 4.5-9 4.5 9", key: "ndf0b3" }],
|
||||
["path", { d: "M18 16V7", key: "ty0viw" }],
|
||||
["path", { d: "m14 11 4-4 4 4", key: "1pu57t" }]
|
||||
]);
|
||||
|
||||
export { AArrowUp as default };
|
||||
//# sourceMappingURL=a-arrow-up.js.map
|
||||
1
frontend/node_modules/lucide-react/dist/esm/icons/a-arrow-up.js.map
generated
vendored
Normal file
1
frontend/node_modules/lucide-react/dist/esm/icons/a-arrow-up.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"a-arrow-up.js","sources":["../../../src/icons/a-arrow-up.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AArrowUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/a-arrow-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AArrowUp = createLucideIcon('AArrowUp', [\n ['path', { d: 'M3.5 13h6', key: 'p1my2r' }],\n ['path', { d: 'm2 16 4.5-9 4.5 9', key: 'ndf0b3' }],\n ['path', { d: 'M18 16V7', key: 'ty0viw' }],\n ['path', { d: 'm14 11 4-4 4 4', key: '1pu57t' }],\n]);\n\nexport default AArrowUp;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,iBAAiB,UAAY,CAAA,CAAA,CAAA;AAAA,CAAA,CAC5C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAClD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACjD,CAAC,CAAA,CAAA;;"}
|
||||
18
frontend/node_modules/lucide-react/dist/esm/icons/a-large-small.js
generated
vendored
Normal file
18
frontend/node_modules/lucide-react/dist/esm/icons/a-large-small.js
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const ALargeSmall = createLucideIcon("ALargeSmall", [
|
||||
["path", { d: "M21 14h-5", key: "1vh23k" }],
|
||||
["path", { d: "M16 16v-3.5a2.5 2.5 0 0 1 5 0V16", key: "1wh10o" }],
|
||||
["path", { d: "M4.5 13h6", key: "dfilno" }],
|
||||
["path", { d: "m3 16 4.5-9 4.5 9", key: "2dxa0e" }]
|
||||
]);
|
||||
|
||||
export { ALargeSmall as default };
|
||||
//# sourceMappingURL=a-large-small.js.map
|
||||
1
frontend/node_modules/lucide-react/dist/esm/icons/a-large-small.js.map
generated
vendored
Normal file
1
frontend/node_modules/lucide-react/dist/esm/icons/a-large-small.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"a-large-small.js","sources":["../../../src/icons/a-large-small.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ALargeSmall\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/a-large-small\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ALargeSmall = createLucideIcon('ALargeSmall', [\n ['path', { d: 'M21 14h-5', key: '1vh23k' }],\n ['path', { d: 'M16 16v-3.5a2.5 2.5 0 0 1 5 0V16', key: '1wh10o' }],\n ['path', { d: 'M4.5 13h6', key: 'dfilno' }],\n ['path', { d: 'm3 16 4.5-9 4.5 9', key: '2dxa0e' }],\n]);\n\nexport default ALargeSmall;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,iBAAiB,aAAe,CAAA,CAAA,CAAA;AAAA,CAAA,CAClD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAoC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACjE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACpD,CAAC,CAAA,CAAA;;"}
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/accessibility.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/accessibility.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
11
frontend/node_modules/lucide-react/dist/esm/icons/activity-square.js
generated
vendored
11
frontend/node_modules/lucide-react/dist/esm/icons/activity-square.js
generated
vendored
@@ -1,16 +1,9 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const ActivitySquare = createLucideIcon("ActivitySquare", [
|
||||
["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
|
||||
["path", { d: "M17 12h-2l-2 5-2-10-2 5H7", key: "15hlnc" }]
|
||||
]);
|
||||
|
||||
export { ActivitySquare as default };
|
||||
export { default } from './square-activity.js';
|
||||
//# sourceMappingURL=activity-square.js.map
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/activity-square.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/activity-square.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"activity-square.js","sources":["../../../src/icons/activity-square.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ActivitySquare\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/activity-square\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ActivitySquare = createLucideIcon('ActivitySquare', [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n ['path', { d: 'M17 12h-2l-2 5-2-10-2 5H7', key: '15hlnc' }],\n]);\n\nexport default ActivitySquare;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,iBAAiB,gBAAkB,CAAA,CAAA,CAAA;AAAA,CAAA,CACxD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,MAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC9E,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAA6B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC5D,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"activity-square.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
||||
10
frontend/node_modules/lucide-react/dist/esm/icons/activity.js
generated
vendored
10
frontend/node_modules/lucide-react/dist/esm/icons/activity.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
@@ -8,7 +8,13 @@
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const Activity = createLucideIcon("Activity", [
|
||||
["path", { d: "M22 12h-4l-3 9L9 3l-3 9H2", key: "d5dnw9" }]
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",
|
||||
key: "169zse"
|
||||
}
|
||||
]
|
||||
]);
|
||||
|
||||
export { Activity as default };
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/activity.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/activity.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"activity.js","sources":["../../../src/icons/activity.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Activity\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/activity\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Activity = createLucideIcon('Activity', [\n ['path', { d: 'M22 12h-4l-3 9L9 3l-3 9H2', key: 'd5dnw9' }],\n]);\n\nexport default Activity;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,iBAAiB,UAAY,CAAA,CAAA,CAAA;AAAA,CAAA,CAC5C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAA6B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC5D,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"activity.js","sources":["../../../src/icons/activity.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Activity\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/activity\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Activity = createLucideIcon('Activity', [\n [\n 'path',\n {\n d: 'M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2',\n key: '169zse',\n },\n ],\n]);\n\nexport default Activity;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,iBAAiB,UAAY,CAAA,CAAA,CAAA;AAAA,CAC5C,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAA,CAAA,CAAA;AAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACP,CAAA,CAAA,CAAA,CAAA;AAAA,CACF,CAAA,CAAA;AACF,CAAC,CAAA,CAAA;;"}
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/air-vent.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/air-vent.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
4
frontend/node_modules/lucide-react/dist/esm/icons/airplay.js
generated
vendored
4
frontend/node_modules/lucide-react/dist/esm/icons/airplay.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
@@ -15,7 +15,7 @@ const Airplay = createLucideIcon("Airplay", [
|
||||
key: "ns4c3b"
|
||||
}
|
||||
],
|
||||
["polygon", { points: "12 15 17 21 7 21 12 15", key: "1sy95i" }]
|
||||
["path", { d: "m12 15 5 6H7Z", key: "14qnn2" }]
|
||||
]);
|
||||
|
||||
export { Airplay as default };
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/airplay.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/airplay.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"airplay.js","sources":["../../../src/icons/airplay.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Airplay\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/airplay\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Airplay = createLucideIcon('Airplay', [\n [\n 'path',\n {\n d: 'M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1',\n key: 'ns4c3b',\n },\n ],\n ['polygon', { points: '12 15 17 21 7 21 12 15', key: '1sy95i' }],\n]);\n\nexport default Airplay;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,iBAAiB,SAAW,CAAA,CAAA,CAAA;AAAA,CAC1C,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAA,CAAA,CAAA;AAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACP,CAAA,CAAA,CAAA,CAAA;AAAA,CACF,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAE,QAAQ,CAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACjE,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"airplay.js","sources":["../../../src/icons/airplay.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Airplay\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/airplay\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Airplay = createLucideIcon('Airplay', [\n [\n 'path',\n {\n d: 'M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1',\n key: 'ns4c3b',\n },\n ],\n ['path', { d: 'm12 15 5 6H7Z', key: '14qnn2' }],\n]);\n\nexport default Airplay;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,iBAAiB,SAAW,CAAA,CAAA,CAAA;AAAA,CAC1C,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAA,CAAA,CAAA;AAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACP,CAAA,CAAA,CAAA,CAAA;AAAA,CACF,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAChD,CAAC,CAAA,CAAA;;"}
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-check.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-check.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-check.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-check.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
20
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-minus.js
generated
vendored
Normal file
20
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-minus.js
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlarmClockMinus = createLucideIcon("AlarmClockMinus", [
|
||||
["circle", { cx: "12", cy: "13", r: "8", key: "3y4lt7" }],
|
||||
["path", { d: "M5 3 2 6", key: "18tl5t" }],
|
||||
["path", { d: "m22 6-3-3", key: "1opdir" }],
|
||||
["path", { d: "M6.38 18.7 4 21", key: "17xu3x" }],
|
||||
["path", { d: "M17.64 18.67 20 21", key: "kv2oe2" }],
|
||||
["path", { d: "M9 13h6", key: "1uhe8q" }]
|
||||
]);
|
||||
|
||||
export { AlarmClockMinus as default };
|
||||
//# sourceMappingURL=alarm-clock-minus.js.map
|
||||
1
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-minus.js.map
generated
vendored
Normal file
1
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-minus.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"alarm-clock-minus.js","sources":["../../../src/icons/alarm-clock-minus.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlarmClockMinus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/alarm-clock-minus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlarmClockMinus = createLucideIcon('AlarmClockMinus', [\n ['circle', { cx: '12', cy: '13', r: '8', key: '3y4lt7' }],\n ['path', { d: 'M5 3 2 6', key: '18tl5t' }],\n ['path', { d: 'm22 6-3-3', key: '1opdir' }],\n ['path', { d: 'M6.38 18.7 4 21', key: '17xu3x' }],\n ['path', { d: 'M17.64 18.67 20 21', key: 'kv2oe2' }],\n ['path', { d: 'M9 13h6', key: '1uhe8q' }],\n]);\n\nexport default AlarmClockMinus;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,iBAAiB,iBAAmB,CAAA,CAAA,CAAA;AAAA,CAC1D,CAAA,CAAC,QAAU,CAAA,CAAA,CAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAM,CAAI,CAAA,CAAA,CAAA,IAAA,CAAM,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA;AAAA,CAAA,CACxD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAChD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACnD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC1C,CAAC,CAAA,CAAA;;"}
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-off.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-off.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
21
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-plus.js
generated
vendored
Normal file
21
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-plus.js
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlarmClockPlus = createLucideIcon("AlarmClockPlus", [
|
||||
["circle", { cx: "12", cy: "13", r: "8", key: "3y4lt7" }],
|
||||
["path", { d: "M5 3 2 6", key: "18tl5t" }],
|
||||
["path", { d: "m22 6-3-3", key: "1opdir" }],
|
||||
["path", { d: "M6.38 18.7 4 21", key: "17xu3x" }],
|
||||
["path", { d: "M17.64 18.67 20 21", key: "kv2oe2" }],
|
||||
["path", { d: "M12 10v6", key: "1bos4e" }],
|
||||
["path", { d: "M9 13h6", key: "1uhe8q" }]
|
||||
]);
|
||||
|
||||
export { AlarmClockPlus as default };
|
||||
//# sourceMappingURL=alarm-clock-plus.js.map
|
||||
1
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-plus.js.map
generated
vendored
Normal file
1
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock-plus.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"alarm-clock-plus.js","sources":["../../../src/icons/alarm-clock-plus.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlarmClockPlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/alarm-clock-plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlarmClockPlus = createLucideIcon('AlarmClockPlus', [\n ['circle', { cx: '12', cy: '13', r: '8', key: '3y4lt7' }],\n ['path', { d: 'M5 3 2 6', key: '18tl5t' }],\n ['path', { d: 'm22 6-3-3', key: '1opdir' }],\n ['path', { d: 'M6.38 18.7 4 21', key: '17xu3x' }],\n ['path', { d: 'M17.64 18.67 20 21', key: 'kv2oe2' }],\n ['path', { d: 'M12 10v6', key: '1bos4e' }],\n ['path', { d: 'M9 13h6', key: '1uhe8q' }],\n]);\n\nexport default AlarmClockPlus;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,iBAAiB,gBAAkB,CAAA,CAAA,CAAA;AAAA,CACxD,CAAA,CAAC,QAAU,CAAA,CAAA,CAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAM,CAAI,CAAA,CAAA,CAAA,IAAA,CAAM,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA;AAAA,CAAA,CACxD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAChD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACnD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC1C,CAAC,CAAA,CAAA;;"}
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-clock.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
15
frontend/node_modules/lucide-react/dist/esm/icons/alarm-minus.js
generated
vendored
15
frontend/node_modules/lucide-react/dist/esm/icons/alarm-minus.js
generated
vendored
@@ -1,20 +1,9 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlarmMinus = createLucideIcon("AlarmMinus", [
|
||||
["circle", { cx: "12", cy: "13", r: "8", key: "3y4lt7" }],
|
||||
["path", { d: "M5 3 2 6", key: "18tl5t" }],
|
||||
["path", { d: "m22 6-3-3", key: "1opdir" }],
|
||||
["path", { d: "M6.38 18.7 4 21", key: "17xu3x" }],
|
||||
["path", { d: "M17.64 18.67 20 21", key: "kv2oe2" }],
|
||||
["path", { d: "M9 13h6", key: "1uhe8q" }]
|
||||
]);
|
||||
|
||||
export { AlarmMinus as default };
|
||||
export { default } from './alarm-clock-minus.js';
|
||||
//# sourceMappingURL=alarm-minus.js.map
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-minus.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-minus.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"alarm-minus.js","sources":["../../../src/icons/alarm-minus.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlarmMinus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/alarm-minus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlarmMinus = createLucideIcon('AlarmMinus', [\n ['circle', { cx: '12', cy: '13', r: '8', key: '3y4lt7' }],\n ['path', { d: 'M5 3 2 6', key: '18tl5t' }],\n ['path', { d: 'm22 6-3-3', key: '1opdir' }],\n ['path', { d: 'M6.38 18.7 4 21', key: '17xu3x' }],\n ['path', { d: 'M17.64 18.67 20 21', key: 'kv2oe2' }],\n ['path', { d: 'M9 13h6', key: '1uhe8q' }],\n]);\n\nexport default AlarmMinus;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,iBAAiB,YAAc,CAAA,CAAA,CAAA;AAAA,CAChD,CAAA,CAAC,QAAU,CAAA,CAAA,CAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAM,CAAI,CAAA,CAAA,CAAA,IAAA,CAAM,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA;AAAA,CAAA,CACxD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAChD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACnD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC1C,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"alarm-minus.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
||||
16
frontend/node_modules/lucide-react/dist/esm/icons/alarm-plus.js
generated
vendored
16
frontend/node_modules/lucide-react/dist/esm/icons/alarm-plus.js
generated
vendored
@@ -1,21 +1,9 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlarmPlus = createLucideIcon("AlarmPlus", [
|
||||
["circle", { cx: "12", cy: "13", r: "8", key: "3y4lt7" }],
|
||||
["path", { d: "M5 3 2 6", key: "18tl5t" }],
|
||||
["path", { d: "m22 6-3-3", key: "1opdir" }],
|
||||
["path", { d: "M6.38 18.7 4 21", key: "17xu3x" }],
|
||||
["path", { d: "M17.64 18.67 20 21", key: "kv2oe2" }],
|
||||
["path", { d: "M12 10v6", key: "1bos4e" }],
|
||||
["path", { d: "M9 13h6", key: "1uhe8q" }]
|
||||
]);
|
||||
|
||||
export { AlarmPlus as default };
|
||||
export { default } from './alarm-clock-plus.js';
|
||||
//# sourceMappingURL=alarm-plus.js.map
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-plus.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/alarm-plus.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"alarm-plus.js","sources":["../../../src/icons/alarm-plus.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlarmPlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/alarm-plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlarmPlus = createLucideIcon('AlarmPlus', [\n ['circle', { cx: '12', cy: '13', r: '8', key: '3y4lt7' }],\n ['path', { d: 'M5 3 2 6', key: '18tl5t' }],\n ['path', { d: 'm22 6-3-3', key: '1opdir' }],\n ['path', { d: 'M6.38 18.7 4 21', key: '17xu3x' }],\n ['path', { d: 'M17.64 18.67 20 21', key: 'kv2oe2' }],\n ['path', { d: 'M12 10v6', key: '1bos4e' }],\n ['path', { d: 'M9 13h6', key: '1uhe8q' }],\n]);\n\nexport default AlarmPlus;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,iBAAiB,WAAa,CAAA,CAAA,CAAA;AAAA,CAC9C,CAAA,CAAC,QAAU,CAAA,CAAA,CAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAM,CAAI,CAAA,CAAA,CAAA,IAAA,CAAM,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA;AAAA,CAAA,CACxD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAChD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACnD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC1C,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"alarm-plus.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
||||
22
frontend/node_modules/lucide-react/dist/esm/icons/alarm-smoke.js
generated
vendored
Normal file
22
frontend/node_modules/lucide-react/dist/esm/icons/alarm-smoke.js
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlarmSmoke = createLucideIcon("AlarmSmoke", [
|
||||
["path", { d: "M11 21c0-2.5 2-2.5 2-5", key: "1sicvv" }],
|
||||
["path", { d: "M16 21c0-2.5 2-2.5 2-5", key: "1o3eny" }],
|
||||
["path", { d: "m19 8-.8 3a1.25 1.25 0 0 1-1.2 1H7a1.25 1.25 0 0 1-1.2-1L5 8", key: "1bvca4" }],
|
||||
[
|
||||
"path",
|
||||
{ d: "M21 3a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a1 1 0 0 1 1-1z", key: "x3qr1j" }
|
||||
],
|
||||
["path", { d: "M6 21c0-2.5 2-2.5 2-5", key: "i3w1gp" }]
|
||||
]);
|
||||
|
||||
export { AlarmSmoke as default };
|
||||
//# sourceMappingURL=alarm-smoke.js.map
|
||||
1
frontend/node_modules/lucide-react/dist/esm/icons/alarm-smoke.js.map
generated
vendored
Normal file
1
frontend/node_modules/lucide-react/dist/esm/icons/alarm-smoke.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"alarm-smoke.js","sources":["../../../src/icons/alarm-smoke.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlarmSmoke\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/alarm-smoke\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlarmSmoke = createLucideIcon('AlarmSmoke', [\n ['path', { d: 'M11 21c0-2.5 2-2.5 2-5', key: '1sicvv' }],\n ['path', { d: 'M16 21c0-2.5 2-2.5 2-5', key: '1o3eny' }],\n ['path', { d: 'm19 8-.8 3a1.25 1.25 0 0 1-1.2 1H7a1.25 1.25 0 0 1-1.2-1L5 8', key: '1bvca4' }],\n [\n 'path',\n { d: 'M21 3a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a1 1 0 0 1 1-1z', key: 'x3qr1j' },\n ],\n ['path', { d: 'M6 21c0-2.5 2-2.5 2-5', key: 'i3w1gp' }],\n]);\n\nexport default AlarmSmoke;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,iBAAiB,YAAc,CAAA,CAAA,CAAA;AAAA,CAAA,CAChD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACvD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACvD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAgE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAC7F,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwE,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,QAAS,CAAA,CAAA;AAAA,CAC7F,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAyB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACxD,CAAC,CAAA,CAAA;;"}
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/album.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/album.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
12
frontend/node_modules/lucide-react/dist/esm/icons/alert-circle.js
generated
vendored
12
frontend/node_modules/lucide-react/dist/esm/icons/alert-circle.js
generated
vendored
@@ -1,17 +1,9 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlertCircle = createLucideIcon("AlertCircle", [
|
||||
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
||||
["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
|
||||
["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
|
||||
]);
|
||||
|
||||
export { AlertCircle as default };
|
||||
export { default } from './circle-alert.js';
|
||||
//# sourceMappingURL=alert-circle.js.map
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/alert-circle.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/alert-circle.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"alert-circle.js","sources":["../../../src/icons/alert-circle.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlertCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/alert-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlertCircle = createLucideIcon('AlertCircle', [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '12', key: '1pkeuh' }],\n ['line', { x1: '12', x2: '12.01', y1: '16', y2: '16', key: '4dfq90' }],\n]);\n\nexport default AlertCircle;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,iBAAiB,aAAe,CAAA,CAAA,CAAA;AAAA,CAClD,CAAA,CAAC,QAAU,CAAA,CAAA,CAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAM,CAAI,CAAA,CAAA,CAAA,IAAA,CAAM,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA;AAAA,CACzD,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CACjE,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACvE,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"alert-circle.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
||||
18
frontend/node_modules/lucide-react/dist/esm/icons/alert-octagon.js
generated
vendored
18
frontend/node_modules/lucide-react/dist/esm/icons/alert-octagon.js
generated
vendored
@@ -1,23 +1,9 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlertOctagon = createLucideIcon("AlertOctagon", [
|
||||
[
|
||||
"polygon",
|
||||
{
|
||||
points: "7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2",
|
||||
key: "h1p8hx"
|
||||
}
|
||||
],
|
||||
["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
|
||||
["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
|
||||
]);
|
||||
|
||||
export { AlertOctagon as default };
|
||||
export { default } from './octagon-alert.js';
|
||||
//# sourceMappingURL=alert-octagon.js.map
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/alert-octagon.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/alert-octagon.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"alert-octagon.js","sources":["../../../src/icons/alert-octagon.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlertOctagon\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/alert-octagon\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlertOctagon = createLucideIcon('AlertOctagon', [\n [\n 'polygon',\n {\n points: '7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2',\n key: 'h1p8hx',\n },\n ],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '12', key: '1pkeuh' }],\n ['line', { x1: '12', x2: '12.01', y1: '16', y2: '16', key: '4dfq90' }],\n]);\n\nexport default AlertOctagon;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,iBAAiB,cAAgB,CAAA,CAAA,CAAA;AAAA,CACpD,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAA,CAAA,CAAA;AAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACP,CAAA,CAAA,CAAA,CAAA;AAAA,CACF,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CACjE,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACvE,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"alert-octagon.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
||||
18
frontend/node_modules/lucide-react/dist/esm/icons/alert-triangle.js
generated
vendored
18
frontend/node_modules/lucide-react/dist/esm/icons/alert-triangle.js
generated
vendored
@@ -1,23 +1,9 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlertTriangle = createLucideIcon("AlertTriangle", [
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z",
|
||||
key: "c3ski4"
|
||||
}
|
||||
],
|
||||
["path", { d: "M12 9v4", key: "juzpu7" }],
|
||||
["path", { d: "M12 17h.01", key: "p32p05" }]
|
||||
]);
|
||||
|
||||
export { AlertTriangle as default };
|
||||
export { default } from './triangle-alert.js';
|
||||
//# sourceMappingURL=alert-triangle.js.map
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/alert-triangle.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/alert-triangle.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"alert-triangle.js","sources":["../../../src/icons/alert-triangle.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlertTriangle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/alert-triangle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlertTriangle = createLucideIcon('AlertTriangle', [\n [\n 'path',\n {\n d: 'm21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z',\n key: 'c3ski4',\n },\n ],\n ['path', { d: 'M12 9v4', key: 'juzpu7' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n]);\n\nexport default AlertTriangle;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,iBAAiB,eAAiB,CAAA,CAAA,CAAA;AAAA,CACtD,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAA,CAAA,CAAA;AAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACP,CAAA,CAAA,CAAA,CAAA;AAAA,CACF,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACxC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC7C,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"alert-triangle.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-center-horizontal.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-center-horizontal.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-center-vertical.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-center-vertical.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
8
frontend/node_modules/lucide-react/dist/esm/icons/align-center.js
generated
vendored
8
frontend/node_modules/lucide-react/dist/esm/icons/align-center.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
@@ -8,9 +8,9 @@
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlignCenter = createLucideIcon("AlignCenter", [
|
||||
["line", { x1: "21", x2: "3", y1: "6", y2: "6", key: "1fp77t" }],
|
||||
["line", { x1: "17", x2: "7", y1: "12", y2: "12", key: "rsh8ii" }],
|
||||
["line", { x1: "19", x2: "5", y1: "18", y2: "18", key: "1t0tuv" }]
|
||||
["path", { d: "M17 12H7", key: "16if0g" }],
|
||||
["path", { d: "M19 18H5", key: "18s9l3" }],
|
||||
["path", { d: "M21 6H3", key: "1jwq7v" }]
|
||||
]);
|
||||
|
||||
export { AlignCenter as default };
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-center.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-center.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"align-center.js","sources":["../../../src/icons/align-center.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlignCenter\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/align-center\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlignCenter = createLucideIcon('AlignCenter', [\n ['line', { x1: '21', x2: '3', y1: '6', y2: '6', key: '1fp77t' }],\n ['line', { x1: '17', x2: '7', y1: '12', y2: '12', key: 'rsh8ii' }],\n ['line', { x1: '19', x2: '5', y1: '18', y2: '18', key: '1t0tuv' }],\n]);\n\nexport default AlignCenter;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,iBAAiB,aAAe,CAAA,CAAA,CAAA;AAAA,CAClD,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAC/D,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CACjE,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACnE,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"align-center.js","sources":["../../../src/icons/align-center.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlignCenter\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/align-center\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlignCenter = createLucideIcon('AlignCenter', [\n ['path', { d: 'M17 12H7', key: '16if0g' }],\n ['path', { d: 'M19 18H5', key: '18s9l3' }],\n ['path', { d: 'M21 6H3', key: '1jwq7v' }],\n]);\n\nexport default AlignCenter;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,iBAAiB,aAAe,CAAA,CAAA,CAAA;AAAA,CAAA,CAClD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC1C,CAAC,CAAA,CAAA;;"}
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-end-horizontal.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-end-horizontal.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-end-vertical.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-end-vertical.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-distribute-end.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-distribute-end.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-justify-center.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-justify-center.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-justify-end.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-justify-end.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-justify-start.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-justify-start.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-space-around.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-space-around.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-space-between.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-horizontal-space-between.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
8
frontend/node_modules/lucide-react/dist/esm/icons/align-justify.js
generated
vendored
8
frontend/node_modules/lucide-react/dist/esm/icons/align-justify.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
@@ -8,9 +8,9 @@
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlignJustify = createLucideIcon("AlignJustify", [
|
||||
["line", { x1: "3", x2: "21", y1: "6", y2: "6", key: "4m8b97" }],
|
||||
["line", { x1: "3", x2: "21", y1: "12", y2: "12", key: "10d38w" }],
|
||||
["line", { x1: "3", x2: "21", y1: "18", y2: "18", key: "kwyyxn" }]
|
||||
["path", { d: "M3 12h18", key: "1i2n21" }],
|
||||
["path", { d: "M3 18h18", key: "1h113x" }],
|
||||
["path", { d: "M3 6h18", key: "d0wm0j" }]
|
||||
]);
|
||||
|
||||
export { AlignJustify as default };
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-justify.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-justify.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"align-justify.js","sources":["../../../src/icons/align-justify.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlignJustify\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/align-justify\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlignJustify = createLucideIcon('AlignJustify', [\n ['line', { x1: '3', x2: '21', y1: '6', y2: '6', key: '4m8b97' }],\n ['line', { x1: '3', x2: '21', y1: '12', y2: '12', key: '10d38w' }],\n ['line', { x1: '3', x2: '21', y1: '18', y2: '18', key: 'kwyyxn' }],\n]);\n\nexport default AlignJustify;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,iBAAiB,cAAgB,CAAA,CAAA,CAAA;AAAA,CACpD,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAC/D,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CACjE,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACnE,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"align-justify.js","sources":["../../../src/icons/align-justify.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlignJustify\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/align-justify\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlignJustify = createLucideIcon('AlignJustify', [\n ['path', { d: 'M3 12h18', key: '1i2n21' }],\n ['path', { d: 'M3 18h18', key: '1h113x' }],\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n]);\n\nexport default AlignJustify;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,iBAAiB,cAAgB,CAAA,CAAA,CAAA;AAAA,CAAA,CACpD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC1C,CAAC,CAAA,CAAA;;"}
|
||||
8
frontend/node_modules/lucide-react/dist/esm/icons/align-left.js
generated
vendored
8
frontend/node_modules/lucide-react/dist/esm/icons/align-left.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
@@ -8,9 +8,9 @@
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlignLeft = createLucideIcon("AlignLeft", [
|
||||
["line", { x1: "21", x2: "3", y1: "6", y2: "6", key: "1fp77t" }],
|
||||
["line", { x1: "15", x2: "3", y1: "12", y2: "12", key: "v6grx8" }],
|
||||
["line", { x1: "17", x2: "3", y1: "18", y2: "18", key: "1awlsn" }]
|
||||
["path", { d: "M15 12H3", key: "6jk70r" }],
|
||||
["path", { d: "M17 18H3", key: "1amg6g" }],
|
||||
["path", { d: "M21 6H3", key: "1jwq7v" }]
|
||||
]);
|
||||
|
||||
export { AlignLeft as default };
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-left.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-left.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"align-left.js","sources":["../../../src/icons/align-left.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlignLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/align-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlignLeft = createLucideIcon('AlignLeft', [\n ['line', { x1: '21', x2: '3', y1: '6', y2: '6', key: '1fp77t' }],\n ['line', { x1: '15', x2: '3', y1: '12', y2: '12', key: 'v6grx8' }],\n ['line', { x1: '17', x2: '3', y1: '18', y2: '18', key: '1awlsn' }],\n]);\n\nexport default AlignLeft;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,iBAAiB,WAAa,CAAA,CAAA,CAAA;AAAA,CAC9C,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAC/D,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CACjE,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACnE,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"align-left.js","sources":["../../../src/icons/align-left.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlignLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/align-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlignLeft = createLucideIcon('AlignLeft', [\n ['path', { d: 'M15 12H3', key: '6jk70r' }],\n ['path', { d: 'M17 18H3', key: '1amg6g' }],\n ['path', { d: 'M21 6H3', key: '1jwq7v' }],\n]);\n\nexport default AlignLeft;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,iBAAiB,WAAa,CAAA,CAAA,CAAA;AAAA,CAAA,CAC9C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC1C,CAAC,CAAA,CAAA;;"}
|
||||
8
frontend/node_modules/lucide-react/dist/esm/icons/align-right.js
generated
vendored
8
frontend/node_modules/lucide-react/dist/esm/icons/align-right.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
@@ -8,9 +8,9 @@
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlignRight = createLucideIcon("AlignRight", [
|
||||
["line", { x1: "21", x2: "3", y1: "6", y2: "6", key: "1fp77t" }],
|
||||
["line", { x1: "21", x2: "9", y1: "12", y2: "12", key: "1uyos4" }],
|
||||
["line", { x1: "21", x2: "7", y1: "18", y2: "18", key: "1g9eri" }]
|
||||
["path", { d: "M21 12H9", key: "dn1m92" }],
|
||||
["path", { d: "M21 18H7", key: "1ygte8" }],
|
||||
["path", { d: "M21 6H3", key: "1jwq7v" }]
|
||||
]);
|
||||
|
||||
export { AlignRight as default };
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-right.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-right.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"align-right.js","sources":["../../../src/icons/align-right.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlignRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/align-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlignRight = createLucideIcon('AlignRight', [\n ['line', { x1: '21', x2: '3', y1: '6', y2: '6', key: '1fp77t' }],\n ['line', { x1: '21', x2: '9', y1: '12', y2: '12', key: '1uyos4' }],\n ['line', { x1: '21', x2: '7', y1: '18', y2: '18', key: '1g9eri' }],\n]);\n\nexport default AlignRight;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,iBAAiB,YAAc,CAAA,CAAA,CAAA;AAAA,CAChD,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAC/D,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CACjE,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACnE,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"align-right.js","sources":["../../../src/icons/align-right.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlignRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/align-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlignRight = createLucideIcon('AlignRight', [\n ['path', { d: 'M21 12H9', key: 'dn1m92' }],\n ['path', { d: 'M21 18H7', key: '1ygte8' }],\n ['path', { d: 'M21 6H3', key: '1jwq7v' }],\n]);\n\nexport default AlignRight;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,iBAAiB,YAAc,CAAA,CAAA,CAAA;AAAA,CAAA,CAChD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC1C,CAAC,CAAA,CAAA;;"}
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-start-horizontal.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-start-horizontal.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-start-vertical.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-start-vertical.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
12
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-distribute-center.js
generated
vendored
12
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-distribute-center.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
@@ -8,12 +8,12 @@
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const AlignVerticalDistributeCenter = createLucideIcon("AlignVerticalDistributeCenter", [
|
||||
["rect", { width: "14", height: "6", x: "5", y: "14", rx: "2", key: "jmoj9s" }],
|
||||
["rect", { width: "10", height: "6", x: "7", y: "4", rx: "2", key: "aza5on" }],
|
||||
["path", { d: "M22 7h-5", key: "o2endc" }],
|
||||
["path", { d: "M7 7H1", key: "105l6j" }],
|
||||
["path", { d: "M22 17h-3", key: "1lwga1" }],
|
||||
["path", { d: "M5 17H2", key: "1gx9xc" }]
|
||||
["path", { d: "M22 7h-5", key: "o2endc" }],
|
||||
["path", { d: "M5 17H2", key: "1gx9xc" }],
|
||||
["path", { d: "M7 7H2", key: "6bq26l" }],
|
||||
["rect", { x: "5", y: "14", width: "14", height: "6", rx: "2", key: "1qrzuf" }],
|
||||
["rect", { x: "7", y: "4", width: "10", height: "6", rx: "2", key: "we8e9z" }]
|
||||
]);
|
||||
|
||||
export { AlignVerticalDistributeCenter as default };
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"align-vertical-distribute-center.js","sources":["../../../src/icons/align-vertical-distribute-center.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlignVerticalDistributeCenter\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/align-vertical-distribute-center\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlignVerticalDistributeCenter = createLucideIcon('AlignVerticalDistributeCenter', [\n ['rect', { width: '14', height: '6', x: '5', y: '14', rx: '2', key: 'jmoj9s' }],\n ['rect', { width: '10', height: '6', x: '7', y: '4', rx: '2', key: 'aza5on' }],\n ['path', { d: 'M22 7h-5', key: 'o2endc' }],\n ['path', { d: 'M7 7H1', key: '105l6j' }],\n ['path', { d: 'M22 17h-3', key: '1lwga1' }],\n ['path', { d: 'M5 17H2', key: '1gx9xc' }],\n]);\n\nexport default AlignVerticalDistributeCenter;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgC,iBAAiB,+BAAiC,CAAA,CAAA,CAAA;AAAA,CAAA,CACtF,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,MAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC9E,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,MAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC7E,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACvC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC1C,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"align-vertical-distribute-center.js","sources":["../../../src/icons/align-vertical-distribute-center.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name AlignVerticalDistributeCenter\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/align-vertical-distribute-center\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst AlignVerticalDistributeCenter = createLucideIcon('AlignVerticalDistributeCenter', [\n ['path', { d: 'M22 17h-3', key: '1lwga1' }],\n ['path', { d: 'M22 7h-5', key: 'o2endc' }],\n ['path', { d: 'M5 17H2', key: '1gx9xc' }],\n ['path', { d: 'M7 7H2', key: '6bq26l' }],\n ['rect', { x: '5', y: '14', width: '14', height: '6', rx: '2', key: '1qrzuf' }],\n ['rect', { x: '7', y: '4', width: '10', height: '6', rx: '2', key: 'we8e9z' }],\n]);\n\nexport default AlignVerticalDistributeCenter;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgC,iBAAiB,+BAAiC,CAAA,CAAA,CAAA;AAAA,CAAA,CACtF,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACxC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACvC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAE,CAAA,CAAA,CAAG,KAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC9E,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAE,CAAA,CAAA,CAAG,KAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC/E,CAAC,CAAA,CAAA;;"}
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-distribute-end.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-distribute-end.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-distribute-start.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-distribute-start.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-justify-center.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-justify-center.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-justify-end.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-justify-end.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-justify-start.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-justify-start.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-space-around.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-space-around.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-space-between.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/align-vertical-space-between.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
27
frontend/node_modules/lucide-react/dist/esm/icons/ambulance.js
generated
vendored
Normal file
27
frontend/node_modules/lucide-react/dist/esm/icons/ambulance.js
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const Ambulance = createLucideIcon("Ambulance", [
|
||||
["path", { d: "M10 10H6", key: "1bsnug" }],
|
||||
["path", { d: "M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2", key: "wrbu53" }],
|
||||
[
|
||||
"path",
|
||||
{
|
||||
d: "M19 18h2a1 1 0 0 0 1-1v-3.28a1 1 0 0 0-.684-.948l-1.923-.641a1 1 0 0 1-.578-.502l-1.539-3.076A1 1 0 0 0 16.382 8H14",
|
||||
key: "lrkjwd"
|
||||
}
|
||||
],
|
||||
["path", { d: "M8 8v4", key: "1fwk8c" }],
|
||||
["path", { d: "M9 18h6", key: "x1upvd" }],
|
||||
["circle", { cx: "17", cy: "18", r: "2", key: "332jqn" }],
|
||||
["circle", { cx: "7", cy: "18", r: "2", key: "19iecd" }]
|
||||
]);
|
||||
|
||||
export { Ambulance as default };
|
||||
//# sourceMappingURL=ambulance.js.map
|
||||
1
frontend/node_modules/lucide-react/dist/esm/icons/ambulance.js.map
generated
vendored
Normal file
1
frontend/node_modules/lucide-react/dist/esm/icons/ambulance.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"ambulance.js","sources":["../../../src/icons/ambulance.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Ambulance\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/ambulance\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Ambulance = createLucideIcon('Ambulance', [\n ['path', { d: 'M10 10H6', key: '1bsnug' }],\n ['path', { d: 'M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2', key: 'wrbu53' }],\n [\n 'path',\n {\n d: 'M19 18h2a1 1 0 0 0 1-1v-3.28a1 1 0 0 0-.684-.948l-1.923-.641a1 1 0 0 1-.578-.502l-1.539-3.076A1 1 0 0 0 16.382 8H14',\n key: 'lrkjwd',\n },\n ],\n ['path', { d: 'M8 8v4', key: '1fwk8c' }],\n ['path', { d: 'M9 18h6', key: 'x1upvd' }],\n ['circle', { cx: '17', cy: '18', r: '2', key: '332jqn' }],\n ['circle', { cx: '7', cy: '18', r: '2', key: '19iecd' }],\n]);\n\nexport default Ambulance;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,iBAAiB,WAAa,CAAA,CAAA,CAAA;AAAA,CAAA,CAC9C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAA6D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAC1F,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAA,CAAA,CAAA;AAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACP,CAAA,CAAA,CAAA,CAAA;AAAA,CACF,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACvC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CACxC,CAAA,CAAC,QAAU,CAAA,CAAA,CAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAM,CAAI,CAAA,CAAA,CAAA,IAAA,CAAM,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA;AAAA,CACxD,CAAA,CAAC,QAAU,CAAA,CAAA,CAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,EAAK,CAAI,CAAA,CAAA,CAAA,IAAA,CAAM,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA;AACzD,CAAC,CAAA,CAAA;;"}
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/ampersand.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/ampersand.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/ampersands.js
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/ampersands.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
|
||||
23
frontend/node_modules/lucide-react/dist/esm/icons/amphora.js
generated
vendored
Normal file
23
frontend/node_modules/lucide-react/dist/esm/icons/amphora.js
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const Amphora = createLucideIcon("Amphora", [
|
||||
[
|
||||
"path",
|
||||
{ d: "M10 2v5.632c0 .424-.272.795-.653.982A6 6 0 0 0 6 14c.006 4 3 7 5 8", key: "1h8rid" }
|
||||
],
|
||||
["path", { d: "M10 5H8a2 2 0 0 0 0 4h.68", key: "3ezsi6" }],
|
||||
["path", { d: "M14 2v5.632c0 .424.272.795.652.982A6 6 0 0 1 18 14c0 4-3 7-5 8", key: "yt6q09" }],
|
||||
["path", { d: "M14 5h2a2 2 0 0 1 0 4h-.68", key: "8f95yk" }],
|
||||
["path", { d: "M18 22H6", key: "mg6kv4" }],
|
||||
["path", { d: "M9 2h6", key: "1jrp98" }]
|
||||
]);
|
||||
|
||||
export { Amphora as default };
|
||||
//# sourceMappingURL=amphora.js.map
|
||||
1
frontend/node_modules/lucide-react/dist/esm/icons/amphora.js.map
generated
vendored
Normal file
1
frontend/node_modules/lucide-react/dist/esm/icons/amphora.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"amphora.js","sources":["../../../src/icons/amphora.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Amphora\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/amphora\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Amphora = createLucideIcon('Amphora', [\n [\n 'path',\n { d: 'M10 2v5.632c0 .424-.272.795-.653.982A6 6 0 0 0 6 14c.006 4 3 7 5 8', key: '1h8rid' },\n ],\n ['path', { d: 'M10 5H8a2 2 0 0 0 0 4h.68', key: '3ezsi6' }],\n ['path', { d: 'M14 2v5.632c0 .424.272.795.652.982A6 6 0 0 1 18 14c0 4-3 7-5 8', key: 'yt6q09' }],\n ['path', { d: 'M14 5h2a2 2 0 0 1 0 4h-.68', key: '8f95yk' }],\n ['path', { d: 'M18 22H6', key: 'mg6kv4' }],\n ['path', { d: 'M9 2h6', key: '1jrp98' }],\n]);\n\nexport default Amphora;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,iBAAiB,SAAW,CAAA,CAAA,CAAA;AAAA,CAC1C,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsE,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,QAAS,CAAA,CAAA;AAAA,CAC3F,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAA6B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1D,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAkE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC/F,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAA8B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC3D,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AACzC,CAAC,CAAA,CAAA;;"}
|
||||
8
frontend/node_modules/lucide-react/dist/esm/icons/anchor.js
generated
vendored
8
frontend/node_modules/lucide-react/dist/esm/icons/anchor.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
@@ -8,9 +8,9 @@
|
||||
import createLucideIcon from '../createLucideIcon.js';
|
||||
|
||||
const Anchor = createLucideIcon("Anchor", [
|
||||
["circle", { cx: "12", cy: "5", r: "3", key: "rqqgnr" }],
|
||||
["line", { x1: "12", x2: "12", y1: "22", y2: "8", key: "abakz7" }],
|
||||
["path", { d: "M5 12H2a10 10 0 0 0 20 0h-3", key: "1hv3nh" }]
|
||||
["path", { d: "M12 22V8", key: "qkxhtm" }],
|
||||
["path", { d: "M5 12H2a10 10 0 0 0 20 0h-3", key: "1hv3nh" }],
|
||||
["circle", { cx: "12", cy: "5", r: "3", key: "rqqgnr" }]
|
||||
]);
|
||||
|
||||
export { Anchor as default };
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/anchor.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/anchor.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"anchor.js","sources":["../../../src/icons/anchor.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Anchor\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/anchor\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Anchor = createLucideIcon('Anchor', [\n ['circle', { cx: '12', cy: '5', r: '3', key: 'rqqgnr' }],\n ['line', { x1: '12', x2: '12', y1: '22', y2: '8', key: 'abakz7' }],\n ['path', { d: 'M5 12H2a10 10 0 0 0 20 0h-3', key: '1hv3nh' }],\n]);\n\nexport default Anchor;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,iBAAiB,QAAU,CAAA,CAAA,CAAA;AAAA,CACxC,CAAA,CAAC,QAAU,CAAA,CAAA,CAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAM,CAAI,CAAA,CAAA,CAAA,GAAA,CAAK,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA;AAAA,CACvD,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,EAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACjE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAA+B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC9D,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"anchor.js","sources":["../../../src/icons/anchor.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Anchor\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/anchor\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Anchor = createLucideIcon('Anchor', [\n ['path', { d: 'M12 22V8', key: 'qkxhtm' }],\n ['path', { d: 'M5 12H2a10 10 0 0 0 20 0h-3', key: '1hv3nh' }],\n ['circle', { cx: '12', cy: '5', r: '3', key: 'rqqgnr' }],\n]);\n\nexport default Anchor;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,iBAAiB,QAAU,CAAA,CAAA,CAAA;AAAA,CAAA,CACxC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAA+B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAC5D,CAAA,CAAC,QAAU,CAAA,CAAA,CAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAM,CAAI,CAAA,CAAA,CAAA,GAAA,CAAK,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA;AACzD,CAAC,CAAA,CAAA;;"}
|
||||
6
frontend/node_modules/lucide-react/dist/esm/icons/angry.js
generated
vendored
6
frontend/node_modules/lucide-react/dist/esm/icons/angry.js
generated
vendored
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @license lucide-react v0.294.0 - ISC
|
||||
* @license lucide-react v0.453.0 - ISC
|
||||
*
|
||||
* This source code is licensed under the ISC license.
|
||||
* See the LICENSE file in the root directory of this source tree.
|
||||
@@ -12,8 +12,8 @@ const Angry = createLucideIcon("Angry", [
|
||||
["path", { d: "M16 16s-1.5-2-4-2-4 2-4 2", key: "epbg0q" }],
|
||||
["path", { d: "M7.5 8 10 9", key: "olxxln" }],
|
||||
["path", { d: "m14 9 2.5-1", key: "1j6cij" }],
|
||||
["path", { d: "M9 10h0", key: "1vxvly" }],
|
||||
["path", { d: "M15 10h0", key: "1j6oav" }]
|
||||
["path", { d: "M9 10h.01", key: "qbtxuw" }],
|
||||
["path", { d: "M15 10h.01", key: "1qmjsl" }]
|
||||
]);
|
||||
|
||||
export { Angry as default };
|
||||
|
||||
2
frontend/node_modules/lucide-react/dist/esm/icons/angry.js.map
generated
vendored
2
frontend/node_modules/lucide-react/dist/esm/icons/angry.js.map
generated
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"angry.js","sources":["../../../src/icons/angry.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Angry\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/angry\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Angry = createLucideIcon('Angry', [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M16 16s-1.5-2-4-2-4 2-4 2', key: 'epbg0q' }],\n ['path', { d: 'M7.5 8 10 9', key: 'olxxln' }],\n ['path', { d: 'm14 9 2.5-1', key: '1j6cij' }],\n ['path', { d: 'M9 10h0', key: '1vxvly' }],\n ['path', { d: 'M15 10h0', key: '1j6oav' }],\n]);\n\nexport default Angry;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,iBAAiB,OAAS,CAAA,CAAA,CAAA;AAAA,CACtC,CAAA,CAAC,QAAU,CAAA,CAAA,CAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAM,CAAI,CAAA,CAAA,CAAA,IAAA,CAAM,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA;AAAA,CAAA,CACzD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAA6B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1D,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC5C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC5C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CACxC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC3C,CAAC,CAAA,CAAA;;"}
|
||||
{"version":3,"file":"angry.js","sources":["../../../src/icons/angry.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Angry\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/angry\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Angry = createLucideIcon('Angry', [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M16 16s-1.5-2-4-2-4 2-4 2', key: 'epbg0q' }],\n ['path', { d: 'M7.5 8 10 9', key: 'olxxln' }],\n ['path', { d: 'm14 9 2.5-1', key: '1j6cij' }],\n ['path', { d: 'M9 10h.01', key: 'qbtxuw' }],\n ['path', { d: 'M15 10h.01', key: '1qmjsl' }],\n]);\n\nexport default Angry;\n"],"names":[],"mappings":";;;;;;;;;AAaM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,iBAAiB,OAAS,CAAA,CAAA,CAAA;AAAA,CACtC,CAAA,CAAC,QAAU,CAAA,CAAA,CAAA,CAAE,EAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAM,CAAI,CAAA,CAAA,CAAA,IAAA,CAAM,CAAA,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA;AAAA,CAAA,CACzD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAA6B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1D,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC5C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC5C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA,CAAA;AAAA,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAE,GAAG,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,UAAU,CAAA;AAC7C,CAAC,CAAA,CAAA;;"}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user