diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..d8864781
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,17 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.pyc
+*.pyo
+*.pyd
+
+# Virtual Environment
+backend/venv/
+venv/
+
+# Logs
+backend/logs/
+*.log
+
+# OS files
+.DS_Store
+Thumbs.db
diff --git a/.vscode/settings.json b/.vscode/settings.json
index e308575a..158c20dd 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,3 +1,7 @@
{
- "DockerRun.DisableDockerrc": true
+ "DockerRun.DisableDockerrc": true,
+ "python.defaultInterpreterPath": "${workspaceFolder}/devlink/backend/venv/Scripts/python.exe",
+ "python.analysis.extraPaths": [
+ "${workspaceFolder}/devlink/backend"
+ ]
}
\ No newline at end of file
diff --git a/backend/app/main.py b/backend/app/main.py
index 7142b3a2..04734567 100644
--- a/backend/app/main.py
+++ b/backend/app/main.py
@@ -12,6 +12,23 @@
from slowapi.middleware import SlowAPIMiddleware
from slowapi import _rate_limit_exceeded_handler
+from app.routers import (
+ activities,
+ applications,
+ auth,
+ bookmarks,
+ builder_flares,
+ conversations,
+ followers,
+ messages,
+ notifications,
+ organizations,
+ projects,
+ repositories,
+ skills,
+ users,
+)
+
@asynccontextmanager
async def lifespan(app: FastAPI):
@@ -125,43 +142,23 @@ async def global_exception_handler(request, exc):
# API Routers
# ------------------------------------------------------------------
-# Uncomment as each router is created.
-
-from app.routers import auth
-from app.routers import users
-from app.routers import projects
-from app.routers import builders
-from app.routers import builder_flare
-from app.routers import messages
-from app.routers import notifications
-from app.routers import ai
-from app.routers import followers
-from app.routers import bookmarks
-from app.routers import activities
-from app.routers import notifications
-from app.routers import conversations
-from app.routers import repositories
-from app.routers import organizations
-from app.routers import applications
-from app.routers import skills
-from app.routers import users
+# Router inclusions
app.include_router(auth.router, prefix="/api/auth", tags=["Authentication"])
app.include_router(users.router, prefix="/api/users", tags=["Users"])
app.include_router(projects.router, prefix="/api/projects", tags=["Projects"])
-app.include_router(builder_flare.router, prefix="/api/flare", tags=["Builder's Flare"])
+app.include_router(builder_flares.router, prefix="/api/flare", tags=["Builder's Flare"])
app.include_router(messages.router, prefix="/api/messages", tags=["Messages"])
app.include_router(
notifications.router, prefix="/api/notifications", tags=["Notifications"]
)
-app.include_router(ai.router, prefix="/api/ai", tags=["AI"])
+# app.include_router(ai.router, prefix="/api/ai", tags=["AI"])
app.include_router(followers.router)
app.include_router(bookmarks.router)
app.include_router(activities.router)
-app.include_router(notifications.router)
app.include_router(conversations.router)
app.include_router(repositories.router)
app.include_router(organizations.router)
app.include_router(applications.router)
app.include_router(skills.router)
-app.include_router(users.router)
+
diff --git a/backend/app/routers/projects.py b/backend/app/routers/projects.py
index ff6a4f87..a97ff829 100644
--- a/backend/app/routers/projects.py
+++ b/backend/app/routers/projects.py
@@ -344,3 +344,75 @@ def delete_project(
db,
project,
)
+
+
+@router.post(
+ "/{project_id}/invite/{user_id}",
+ status_code=status.HTTP_201_CREATED,
+)
+def invite_user(
+ project_id: uuid.UUID,
+ user_id: uuid.UUID,
+ db: Session = Depends(get_db),
+ current_user: User = Depends(get_current_user),
+):
+
+ project = ProjectService.get_project(db, project_id)
+ if project is None:
+ raise HTTPException(
+ status_code=404,
+ detail="Project not found",
+ )
+
+ if project.owner_id != current_user.id:
+ raise HTTPException(
+ status_code=403,
+ detail="Only the project owner can invite members",
+ )
+
+ from app.models.project_member import ProjectMember, MemberRole
+ from sqlalchemy import and_, select
+ existing_member = db.scalar(
+ select(ProjectMember).where(
+ and_(
+ ProjectMember.project_id == project_id,
+ ProjectMember.user_id == user_id,
+ )
+ )
+ )
+ if existing_member:
+ raise HTTPException(
+ status_code=400,
+ detail="User is already invited or a member of the project",
+ )
+
+ new_member = ProjectMember(
+ project_id=project_id,
+ user_id=user_id,
+ role=MemberRole.MEMBER,
+ is_active=False,
+ )
+ db.add(new_member)
+ db.commit()
+ db.refresh(new_member)
+
+ from app.models.notification import NotificationType
+ from app.schemas.notification import NotificationCreate
+ from app.services.notification_service import NotificationService
+
+ notification_data = NotificationCreate(
+ recipient_id=user_id,
+ type=NotificationType.PROJECT_INVITE,
+ title="Project Invitation",
+ message=f"You have been invited to join the project '{project.title}'.",
+ action_url=f"/projects/{project_id}",
+ project_id=project_id,
+ )
+ NotificationService.create_notification(
+ db=db,
+ recipient_id=user_id,
+ sender_id=current_user.id,
+ notification=notification_data,
+ )
+
+ return {"message": "User invited successfully"}
diff --git a/backend/app/schemas/activity.py b/backend/app/schemas/activity.py
new file mode 100644
index 00000000..6fc111d1
--- /dev/null
+++ b/backend/app/schemas/activity.py
@@ -0,0 +1,35 @@
+from __future__ import annotations
+
+import uuid
+from datetime import datetime
+from typing import Optional
+from pydantic import BaseModel, ConfigDict
+from app.models.activity import ActivityType
+
+class ActivityBase(BaseModel):
+ activity_type: ActivityType
+ title: str
+ description: Optional[str] = None
+ project_id: Optional[uuid.UUID] = None
+ organization_id: Optional[uuid.UUID] = None
+ repository_id: Optional[uuid.UUID] = None
+ application_id: Optional[uuid.UUID] = None
+ builder_flare_id: Optional[uuid.UUID] = None
+ icon: Optional[str] = None
+ color: Optional[str] = None
+
+class ActivityCreate(ActivityBase):
+ actor_id: uuid.UUID
+
+class ActivityUpdate(BaseModel):
+ title: Optional[str] = None
+ description: Optional[str] = None
+ icon: Optional[str] = None
+ color: Optional[str] = None
+
+class ActivityResponse(ActivityBase):
+ model_config = ConfigDict(from_attributes=True)
+
+ id: uuid.UUID
+ actor_id: uuid.UUID
+ created_at: datetime
diff --git a/backend/app/schemas/application.py b/backend/app/schemas/application.py
new file mode 100644
index 00000000..ef79975b
--- /dev/null
+++ b/backend/app/schemas/application.py
@@ -0,0 +1,38 @@
+from __future__ import annotations
+
+import uuid
+from datetime import datetime
+from typing import Optional
+from pydantic import BaseModel, ConfigDict
+from app.models.application import ApplicationStatus
+
+class ApplicationBase(BaseModel):
+ message: Optional[str] = None
+ portfolio_url: Optional[str] = None
+ github_url: Optional[str] = None
+ resume_url: Optional[str] = None
+
+class ApplicationCreate(ApplicationBase):
+ pass
+
+class ApplicationUpdate(BaseModel):
+ status: Optional[ApplicationStatus] = None
+ message: Optional[str] = None
+ portfolio_url: Optional[str] = None
+ github_url: Optional[str] = None
+ resume_url: Optional[str] = None
+ review_notes: Optional[str] = None
+ shortlisted: Optional[bool] = None
+
+class ApplicationResponse(ApplicationBase):
+ model_config = ConfigDict(from_attributes=True)
+
+ id: uuid.UUID
+ applicant_id: uuid.UUID
+ project_id: uuid.UUID
+ flare_id: uuid.UUID
+ status: ApplicationStatus
+ review_notes: Optional[str] = None
+ shortlisted: bool
+ created_at: datetime
+ updated_at: datetime
diff --git a/backend/app/schemas/bookmark.py b/backend/app/schemas/bookmark.py
new file mode 100644
index 00000000..aea14ba4
--- /dev/null
+++ b/backend/app/schemas/bookmark.py
@@ -0,0 +1,13 @@
+from __future__ import annotations
+
+import uuid
+from datetime import datetime
+from pydantic import BaseModel, ConfigDict
+
+class BookmarkResponse(BaseModel):
+ model_config = ConfigDict(from_attributes=True)
+
+ id: uuid.UUID
+ user_id: uuid.UUID
+ project_id: uuid.UUID
+ created_at: datetime
diff --git a/backend/app/schemas/builder_flare.py b/backend/app/schemas/builder_flare.py
new file mode 100644
index 00000000..09697085
--- /dev/null
+++ b/backend/app/schemas/builder_flare.py
@@ -0,0 +1,43 @@
+from __future__ import annotations
+
+import uuid
+from datetime import datetime
+from typing import Optional
+from pydantic import BaseModel, ConfigDict
+from app.models.builder_flare import FlareStatus
+
+class BuilderFlareBase(BaseModel):
+ title: str
+ description: str
+ role: str
+ location: Optional[str] = None
+ commitment: Optional[str] = None
+ experience_level: Optional[str] = None
+ openings: int = 1
+ status: FlareStatus = FlareStatus.OPEN
+ remote: bool = True
+
+class BuilderFlareCreate(BuilderFlareBase):
+ project_id: uuid.UUID
+
+class BuilderFlareUpdate(BaseModel):
+ title: Optional[str] = None
+ description: Optional[str] = None
+ role: Optional[str] = None
+ location: Optional[str] = None
+ commitment: Optional[str] = None
+ experience_level: Optional[str] = None
+ openings: Optional[int] = None
+ status: Optional[FlareStatus] = None
+ remote: Optional[bool] = None
+
+class BuilderFlareResponse(BuilderFlareBase):
+ model_config = ConfigDict(from_attributes=True)
+
+ id: uuid.UUID
+ project_id: uuid.UUID
+ created_by: uuid.UUID
+ applicants_count: int
+ featured: bool
+ created_at: datetime
+ updated_at: datetime
diff --git a/backend/app/schemas/conversation.py b/backend/app/schemas/conversation.py
new file mode 100644
index 00000000..faaec5f0
--- /dev/null
+++ b/backend/app/schemas/conversation.py
@@ -0,0 +1,30 @@
+from __future__ import annotations
+
+import uuid
+from datetime import datetime
+from typing import Optional
+from pydantic import BaseModel, ConfigDict
+from app.models.conversation import ConversationType
+
+class ConversationBase(BaseModel):
+ type: ConversationType = ConversationType.DIRECT
+ title: Optional[str] = None
+ project_id: Optional[uuid.UUID] = None
+
+class ConversationCreate(ConversationBase):
+ pass
+
+class ConversationUpdate(BaseModel):
+ title: Optional[str] = None
+ is_active: Optional[bool] = None
+ archived: Optional[bool] = None
+
+class ConversationResponse(ConversationBase):
+ model_config = ConfigDict(from_attributes=True)
+
+ id: uuid.UUID
+ created_by: uuid.UUID
+ is_active: bool
+ archived: bool
+ created_at: datetime
+ updated_at: datetime
diff --git a/backend/app/schemas/follower.py b/backend/app/schemas/follower.py
new file mode 100644
index 00000000..4c1eb126
--- /dev/null
+++ b/backend/app/schemas/follower.py
@@ -0,0 +1,13 @@
+from __future__ import annotations
+
+import uuid
+from datetime import datetime
+from pydantic import BaseModel, ConfigDict
+
+class FollowerResponse(BaseModel):
+ model_config = ConfigDict(from_attributes=True)
+
+ id: uuid.UUID
+ follower_id: uuid.UUID
+ following_id: uuid.UUID
+ created_at: datetime
diff --git a/backend/app/schemas/message.py b/backend/app/schemas/message.py
new file mode 100644
index 00000000..a047a262
--- /dev/null
+++ b/backend/app/schemas/message.py
@@ -0,0 +1,37 @@
+from __future__ import annotations
+
+import uuid
+from datetime import datetime
+from typing import Optional
+from pydantic import BaseModel, ConfigDict
+from app.models.message import MessageType
+
+class MessageBase(BaseModel):
+ content: str
+ type: MessageType = MessageType.TEXT
+ parent_message_id: Optional[uuid.UUID] = None
+ attachment_url: Optional[str] = None
+ attachment_name: Optional[str] = None
+ attachment_size: Optional[int] = None
+ mime_type: Optional[str] = None
+
+class MessageCreate(MessageBase):
+ pass
+
+class MessageUpdate(BaseModel):
+ content: Optional[str] = None
+ is_edited: Optional[bool] = None
+ is_deleted: Optional[bool] = None
+
+class MessageResponse(MessageBase):
+ model_config = ConfigDict(from_attributes=True)
+
+ id: uuid.UUID
+ conversation_id: uuid.UUID
+ sender_id: uuid.UUID
+ is_edited: bool
+ is_deleted: bool
+ created_at: datetime
+ updated_at: datetime
+ edited_at: Optional[datetime] = None
+ deleted_at: Optional[datetime] = None
diff --git a/backend/app/schemas/notification.py b/backend/app/schemas/notification.py
index fc20f5ed..9d3bcfd5 100644
--- a/backend/app/schemas/notification.py
+++ b/backend/app/schemas/notification.py
@@ -3,6 +3,18 @@
import uuid
from datetime import datetime
from typing import Optional
+<<<<<<< HEAD
+from pydantic import BaseModel, ConfigDict
+from app.models.notification import NotificationType
+
+class NotificationBase(BaseModel):
+ recipient_id: uuid.UUID
+ type: NotificationType
+ title: str
+ message: str
+ action_url: Optional[str] = None
+ image_url: Optional[str] = None
+=======
from pydantic import BaseModel, ConfigDict
@@ -22,11 +34,19 @@ class NotificationBase(BaseModel):
action_url: Optional[str] = None
image_url: Optional[str] = None
+>>>>>>> upstream/main
project_id: Optional[uuid.UUID] = None
conversation_id: Optional[uuid.UUID] = None
message_id: Optional[uuid.UUID] = None
application_id: Optional[uuid.UUID] = None
+<<<<<<< HEAD
+class NotificationCreate(NotificationBase):
+ pass
+
+class NotificationUpdate(BaseModel):
+ is_read: Optional[bool] = None
+=======
# ==========================================================
# Create (the existing test endpoint reads notification.recipient_id)
@@ -54,11 +74,19 @@ class NotificationUpdate(BaseModel):
# Response
# ==========================================================
+>>>>>>> upstream/main
class NotificationResponse(NotificationBase):
model_config = ConfigDict(from_attributes=True)
id: uuid.UUID
+<<<<<<< HEAD
+ sender_id: Optional[uuid.UUID] = None
+ is_read: bool
+ read_at: Optional[datetime] = None
+ created_at: datetime
+ updated_at: datetime
+=======
recipient_id: uuid.UUID
sender_id: Optional[uuid.UUID] = None
@@ -66,4 +94,5 @@ class NotificationResponse(NotificationBase):
read_at: Optional[datetime] = None
created_at: datetime
- updated_at: datetime
\ No newline at end of file
+ updated_at: datetime
+>>>>>>> upstream/main
diff --git a/backend/app/schemas/organization.py b/backend/app/schemas/organization.py
new file mode 100644
index 00000000..2209e03f
--- /dev/null
+++ b/backend/app/schemas/organization.py
@@ -0,0 +1,56 @@
+from __future__ import annotations
+
+import uuid
+from datetime import datetime
+from typing import Optional
+from pydantic import BaseModel, ConfigDict
+from app.models.organization import OrganizationType
+
+class OrganizationBase(BaseModel):
+ name: str
+ slug: str
+ description: Optional[str] = None
+ organization_type: OrganizationType = OrganizationType.STARTUP
+ website: Optional[str] = None
+ email: Optional[str] = None
+ phone: Optional[str] = None
+ logo_url: Optional[str] = None
+ banner_url: Optional[str] = None
+ location: Optional[str] = None
+ github_url: Optional[str] = None
+ linkedin_url: Optional[str] = None
+ twitter_url: Optional[str] = None
+ hiring: bool = False
+
+class OrganizationCreate(OrganizationBase):
+ pass
+
+class OrganizationUpdate(BaseModel):
+ name: Optional[str] = None
+ slug: Optional[str] = None
+ description: Optional[str] = None
+ organization_type: Optional[OrganizationType] = None
+ website: Optional[str] = None
+ email: Optional[str] = None
+ phone: Optional[str] = None
+ logo_url: Optional[str] = None
+ banner_url: Optional[str] = None
+ location: Optional[str] = None
+ github_url: Optional[str] = None
+ linkedin_url: Optional[str] = None
+ twitter_url: Optional[str] = None
+ hiring: Optional[bool] = None
+ active: Optional[bool] = None
+
+class OrganizationResponse(OrganizationBase):
+ model_config = ConfigDict(from_attributes=True)
+
+ id: uuid.UUID
+ owner_id: uuid.UUID
+ members_count: int
+ projects_count: int
+ followers_count: int
+ verified: bool
+ active: bool
+ created_at: datetime
+ updated_at: datetime
diff --git a/backend/app/schemas/project.py b/backend/app/schemas/project.py
new file mode 100644
index 00000000..81d4e24c
--- /dev/null
+++ b/backend/app/schemas/project.py
@@ -0,0 +1,57 @@
+from __future__ import annotations
+
+import uuid
+from datetime import datetime
+from typing import Optional
+from pydantic import BaseModel, ConfigDict
+from app.models.project import ProjectStage, ProjectVisibility
+
+class ProjectBase(BaseModel):
+ title: str
+ slug: str
+ tagline: Optional[str] = None
+ description: str
+ stage: ProjectStage = ProjectStage.IDEA
+ visibility: ProjectVisibility = ProjectVisibility.PUBLIC
+ tech_stack: Optional[str] = None
+ repository_url: Optional[str] = None
+ website_url: Optional[str] = None
+ demo_url: Optional[str] = None
+ team_size: int = 1
+ max_team_size: int = 5
+ hiring: bool = True
+ logo_url: Optional[str] = None
+ banner_url: Optional[str] = None
+
+class ProjectCreate(ProjectBase):
+ pass
+
+class ProjectUpdate(BaseModel):
+ title: Optional[str] = None
+ slug: Optional[str] = None
+ tagline: Optional[str] = None
+ description: Optional[str] = None
+ stage: Optional[ProjectStage] = None
+ visibility: Optional[ProjectVisibility] = None
+ tech_stack: Optional[str] = None
+ repository_url: Optional[str] = None
+ website_url: Optional[str] = None
+ demo_url: Optional[str] = None
+ team_size: Optional[int] = None
+ max_team_size: Optional[int] = None
+ hiring: Optional[bool] = None
+ logo_url: Optional[str] = None
+ banner_url: Optional[str] = None
+
+class ProjectResponse(ProjectBase):
+ model_config = ConfigDict(from_attributes=True)
+
+ id: uuid.UUID
+ owner_id: uuid.UUID
+ stars: int
+ views: int
+ applications_count: int
+ is_featured: bool
+ is_archived: bool
+ created_at: datetime
+ updated_at: datetime
diff --git a/backend/app/schemas/repository.py b/backend/app/schemas/repository.py
new file mode 100644
index 00000000..91510382
--- /dev/null
+++ b/backend/app/schemas/repository.py
@@ -0,0 +1,62 @@
+from __future__ import annotations
+
+import uuid
+from datetime import datetime
+from typing import Optional
+from pydantic import BaseModel, ConfigDict
+from app.models.repository import RepositoryProvider
+
+class RepositoryBase(BaseModel):
+ provider: RepositoryProvider
+ repository_id: Optional[str] = None
+ owner: str
+ name: str
+ full_name: str
+ description: Optional[str] = None
+ default_branch: str = "main"
+ clone_url: Optional[str] = None
+ html_url: str
+ homepage: Optional[str] = None
+ language: Optional[str] = None
+ stars: int = 0
+ forks: int = 0
+ watchers: int = 0
+ open_issues: int = 0
+ contributors: int = 0
+ is_private: bool = False
+ archived: bool = False
+
+class RepositoryCreate(RepositoryBase):
+ project_id: uuid.UUID
+
+class RepositoryUpdate(BaseModel):
+ provider: Optional[RepositoryProvider] = None
+ repository_id: Optional[str] = None
+ owner: Optional[str] = None
+ name: Optional[str] = None
+ full_name: Optional[str] = None
+ description: Optional[str] = None
+ default_branch: Optional[str] = None
+ clone_url: Optional[str] = None
+ html_url: Optional[str] = None
+ homepage: Optional[str] = None
+ language: Optional[str] = None
+ stars: Optional[int] = None
+ forks: Optional[int] = None
+ watchers: Optional[int] = None
+ open_issues: Optional[int] = None
+ contributors: Optional[int] = None
+ is_private: Optional[bool] = None
+ archived: Optional[bool] = None
+ synced: Optional[bool] = None
+
+class RepositoryResponse(RepositoryBase):
+ model_config = ConfigDict(from_attributes=True)
+
+ id: uuid.UUID
+ project_id: uuid.UUID
+ connected_by: Optional[uuid.UUID] = None
+ synced: bool
+ last_synced_at: Optional[datetime] = None
+ created_at: datetime
+ updated_at: datetime
diff --git a/backend/app/schemas/skill.py b/backend/app/schemas/skill.py
new file mode 100644
index 00000000..1d8b9135
--- /dev/null
+++ b/backend/app/schemas/skill.py
@@ -0,0 +1,30 @@
+from __future__ import annotations
+
+import uuid
+from datetime import datetime
+from typing import Optional
+from pydantic import BaseModel, ConfigDict
+
+class SkillBase(BaseModel):
+ name: str
+ slug: str
+ category: Optional[str] = None
+ description: Optional[str] = None
+ icon: Optional[str] = None
+
+class SkillCreate(SkillBase):
+ pass
+
+class SkillUpdate(BaseModel):
+ name: Optional[str] = None
+ slug: Optional[str] = None
+ category: Optional[str] = None
+ description: Optional[str] = None
+ icon: Optional[str] = None
+
+class SkillResponse(SkillBase):
+ model_config = ConfigDict(from_attributes=True)
+
+ id: uuid.UUID
+ created_at: datetime
+ updated_at: datetime
diff --git a/backend/app/services/application_service.py b/backend/app/services/application_service.py
index 9c655dc8..020c5784 100644
--- a/backend/app/services/application_service.py
+++ b/backend/app/services/application_service.py
@@ -11,10 +11,13 @@
Application,
ApplicationStatus,
)
+from app.models.notification import NotificationType
from app.schemas.application import (
ApplicationCreate,
ApplicationUpdate,
)
+from app.schemas.notification import NotificationCreate
+from app.services.notification_service import NotificationService
class ApplicationService:
@@ -121,6 +124,26 @@ def accept_application(
db.commit()
db.refresh(db_application)
+ # Trigger notification
+ project_title = db_application.project.title if db_application.project else "Project"
+ owner_id = db_application.project.owner_id if db_application.project else None
+
+ notification_data = NotificationCreate(
+ recipient_id=db_application.applicant_id,
+ type=NotificationType.APPLICATION_ACCEPTED,
+ title="Application Accepted",
+ message=f"Your application for project '{project_title}' has been accepted!",
+ action_url=f"/projects/{db_application.project_id}",
+ project_id=db_application.project_id,
+ application_id=db_application.id
+ )
+ NotificationService.create_notification(
+ db=db,
+ recipient_id=db_application.applicant_id,
+ sender_id=owner_id,
+ notification=notification_data
+ )
+
return db_application
@staticmethod
@@ -134,6 +157,26 @@ def reject_application(
db.commit()
db.refresh(db_application)
+ # Trigger notification
+ project_title = db_application.project.title if db_application.project else "Project"
+ owner_id = db_application.project.owner_id if db_application.project else None
+
+ notification_data = NotificationCreate(
+ recipient_id=db_application.applicant_id,
+ type=NotificationType.APPLICATION_REJECTED,
+ title="Application Rejected",
+ message=f"Your application for project '{project_title}' has been rejected.",
+ action_url=f"/projects/{db_application.project_id}",
+ project_id=db_application.project_id,
+ application_id=db_application.id
+ )
+ NotificationService.create_notification(
+ db=db,
+ recipient_id=db_application.applicant_id,
+ sender_id=owner_id,
+ notification=notification_data
+ )
+
return db_application
@staticmethod
diff --git a/backend/app/services/follower_service.py b/backend/app/services/follower_service.py
index 92586c27..7abe65d8 100644
--- a/backend/app/services/follower_service.py
+++ b/backend/app/services/follower_service.py
@@ -6,6 +6,10 @@
from sqlalchemy.orm import Session
from app.models.follower import Follower
+from app.models.user import User
+from app.models.notification import NotificationType
+from app.schemas.notification import NotificationCreate
+from app.services.notification_service import NotificationService
class FollowerService:
@@ -29,6 +33,25 @@ def follow_user(
db.commit()
db.refresh(relationship)
+ # Trigger notification
+ follower = db.get(User, follower_id)
+ follower_name = f"{follower.first_name} {follower.last_name}" if follower else "Someone"
+ follower_username = follower.username if follower else ""
+
+ notification_data = NotificationCreate(
+ recipient_id=following_id,
+ type=NotificationType.FOLLOW,
+ title="New Follower",
+ message=f"{follower_name} started following you.",
+ action_url=f"/profile/{follower_username}" if follower_username else None
+ )
+ NotificationService.create_notification(
+ db=db,
+ recipient_id=following_id,
+ sender_id=follower_id,
+ notification=notification_data
+ )
+
return relationship
@staticmethod
diff --git a/backend/app/services/message_service.py b/backend/app/services/message_service.py
index 49a9071e..306f7b14 100644
--- a/backend/app/services/message_service.py
+++ b/backend/app/services/message_service.py
@@ -7,10 +7,15 @@
from sqlalchemy.orm import Session
from app.models.message import Message
+from app.models.conversation_member import ConversationMember
+from app.models.user import User
+from app.models.notification import NotificationType
from app.schemas.message import (
MessageCreate,
MessageUpdate,
)
+from app.schemas.notification import NotificationCreate
+from app.services.notification_service import NotificationService
class MessageService:
@@ -42,6 +47,34 @@ def send_message(
db.commit()
db.refresh(db_message)
+ # Trigger notifications for conversation members
+ sender = db.get(User, sender_id)
+ sender_name = f"{sender.first_name} {sender.last_name}" if sender else "Someone"
+
+ member_stmt = select(ConversationMember).where(ConversationMember.conversation_id == conversation_id)
+ members = db.scalars(member_stmt).all()
+
+ content_hint = message.content[:50] if message.content else "sent an attachment"
+ notification_message = f"{sender_name}: {content_hint}"
+
+ for member in members:
+ if member.user_id != sender_id:
+ notification_data = NotificationCreate(
+ recipient_id=member.user_id,
+ type=NotificationType.MESSAGE,
+ title="New Message",
+ message=notification_message,
+ action_url=f"/messages/{conversation_id}",
+ conversation_id=conversation_id,
+ message_id=db_message.id
+ )
+ NotificationService.create_notification(
+ db=db,
+ recipient_id=member.user_id,
+ sender_id=sender_id,
+ notification=notification_data
+ )
+
return db_message
@staticmethod
diff --git a/backend/app/services/notification_service.py b/backend/app/services/notification_service.py
index ef59340e..d3cbdf62 100644
--- a/backend/app/services/notification_service.py
+++ b/backend/app/services/notification_service.py
@@ -26,6 +26,30 @@ def create_notification(
notification: NotificationCreate,
) -> Notification:
+ # Check for existing unread duplicate notification
+ stmt = select(Notification).where(
+ Notification.recipient_id == recipient_id,
+ Notification.type == notification.type,
+ Notification.is_read.is_(False),
+ )
+ if sender_id is not None:
+ stmt = stmt.where(Notification.sender_id == sender_id)
+ if notification.project_id is not None:
+ stmt = stmt.where(Notification.project_id == notification.project_id)
+ if notification.conversation_id is not None:
+ stmt = stmt.where(Notification.conversation_id == notification.conversation_id)
+ if notification.application_id is not None:
+ stmt = stmt.where(Notification.application_id == notification.application_id)
+
+ existing = db.scalars(stmt).first()
+ if existing:
+ existing.message = notification.message
+ existing.title = notification.title
+ existing.created_at = datetime.utcnow()
+ db.commit()
+ db.refresh(existing)
+ return existing
+
db_notification = Notification(
recipient_id=recipient_id,
sender_id=sender_id,
diff --git a/backend/app/tests/test_notifications.py b/backend/app/tests/test_notifications.py
new file mode 100644
index 00000000..c7cfb109
--- /dev/null
+++ b/backend/app/tests/test_notifications.py
@@ -0,0 +1,224 @@
+import pytest
+import uuid
+from sqlalchemy import create_engine
+from sqlalchemy.orm import sessionmaker
+from fastapi.testclient import TestClient
+
+from app.database.base import Base
+from app.database.session import get_db
+from app.dependencies import get_current_user
+from app.main import app
+
+# Import all models to register on Base.metadata
+from app.models.user import User
+from app.models.project import Project, ProjectStage, ProjectVisibility
+from app.models.follower import Follower # noqa: F401
+from app.models.conversation import Conversation, ConversationType
+from app.models.conversation_member import ConversationMember
+from app.models.message import Message, MessageType # noqa: F401
+from app.models.notification import Notification, NotificationType # noqa: F401
+from app.models.application import Application, ApplicationStatus # noqa: F401
+from app.models.builder_flare import BuilderFlare, FlareStatus
+from app.models.project_member import ProjectMember, MemberRole
+
+from app.services.follower_service import FollowerService
+from app.services.message_service import MessageService
+from app.services.application_service import ApplicationService
+from app.services.notification_service import NotificationService
+from app.schemas.message import MessageCreate
+from app.schemas.application import ApplicationCreate
+
+from sqlalchemy.pool import StaticPool
+
+# Setup in-memory SQLite database
+engine = create_engine(
+ "sqlite:///:memory:",
+ connect_args={"check_same_thread": False},
+ poolclass=StaticPool,
+)
+TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
+
+Base.metadata.create_all(bind=engine)
+
+@pytest.fixture(scope="function")
+def db():
+ # Recreate schema for clean database per test
+ Base.metadata.drop_all(bind=engine)
+ Base.metadata.create_all(bind=engine)
+ db = TestingSessionLocal()
+ try:
+ yield db
+ finally:
+ db.close()
+
+@pytest.fixture(scope="function")
+def client(db):
+ def override_get_db():
+ try:
+ yield db
+ finally:
+ pass
+ app.dependency_overrides[get_db] = override_get_db
+ yield TestClient(app)
+ app.dependency_overrides.clear()
+
+def create_test_user(db, email, username):
+ user = User(
+ first_name="Test",
+ last_name="User",
+ username=username,
+ email=email,
+ password_hash="hashed_password",
+ is_active=True,
+ is_verified=True,
+ is_superuser=False
+ )
+ db.add(user)
+ db.commit()
+ db.refresh(user)
+ return user
+
+def create_test_project(db, owner_id):
+ project = Project(
+ owner_id=owner_id,
+ title="Test Project",
+ slug=f"test-project-{uuid.uuid4().hex[:6]}",
+ description="A cool test project",
+ stage=ProjectStage.IDEA,
+ visibility=ProjectVisibility.PUBLIC
+ )
+ db.add(project)
+ db.commit()
+ db.refresh(project)
+ return project
+
+def test_follow_notification(db):
+ user1 = create_test_user(db, "user1@example.com", "user1")
+ user2 = create_test_user(db, "user2@example.com", "user2")
+
+ # User 1 follows User 2
+ FollowerService.follow_user(db, follower_id=user1.id, following_id=user2.id)
+
+ # Check notification triggered
+ notifications = NotificationService.list_notifications(db, recipient_id=user2.id)
+ assert len(notifications) == 1
+ notification = notifications[0]
+ assert notification.type == NotificationType.FOLLOW
+ assert notification.recipient_id == user2.id
+ assert notification.sender_id == user1.id
+ assert "started following you" in notification.message
+
+ # Test duplicate prevention (sending again should reuse/update instead of creating new row)
+ # We delete follower relationship first to allow refollow if needed, or trigger manually
+ from app.schemas.notification import NotificationCreate
+ notification_data = NotificationCreate(
+ recipient_id=user2.id,
+ type=NotificationType.FOLLOW,
+ title="New Follower",
+ message="Test User started following you."
+ )
+ NotificationService.create_notification(db, recipient_id=user2.id, sender_id=user1.id, notification=notification_data)
+
+ notifications = NotificationService.list_notifications(db, recipient_id=user2.id)
+ # Still only 1 unread follow notification
+ assert len(notifications) == 1
+
+def test_message_notification(db):
+ user1 = create_test_user(db, "user1@example.com", "user1")
+ user2 = create_test_user(db, "user2@example.com", "user2")
+
+ # Create conversation and add members
+ conv = Conversation(type=ConversationType.DIRECT, created_by=user1.id)
+ db.add(conv)
+ db.commit()
+ db.refresh(conv)
+
+ member1 = ConversationMember(conversation_id=conv.id, user_id=user1.id)
+ member2 = ConversationMember(conversation_id=conv.id, user_id=user2.id)
+ db.add_all([member1, member2])
+ db.commit()
+
+ # User 1 sends message to conversation
+ msg_create = MessageCreate(content="Hello there!", type=MessageType.TEXT)
+ MessageService.send_message(db, conversation_id=conv.id, sender_id=user1.id, message=msg_create)
+
+ # User 2 should get notification, User 1 should not
+ notif_user2 = NotificationService.list_notifications(db, recipient_id=user2.id)
+ assert len(notif_user2) == 1
+ assert notif_user2[0].type == NotificationType.MESSAGE
+ assert notif_user2[0].sender_id == user1.id
+
+ notif_user1 = NotificationService.list_notifications(db, recipient_id=user1.id)
+ assert len(notif_user1) == 0
+
+def test_application_notifications(db):
+ owner = create_test_user(db, "owner@example.com", "owner")
+ applicant = create_test_user(db, "applicant@example.com", "applicant")
+ project = create_test_project(db, owner.id)
+
+ flare = BuilderFlare(
+ project_id=project.id,
+ created_by=owner.id,
+ title="Frontend Developer",
+ description="Looking for react developer",
+ role="Frontend",
+ status=FlareStatus.OPEN
+ )
+ db.add(flare)
+ db.commit()
+ db.refresh(flare)
+
+ # Applicant submits application
+ app_create = ApplicationCreate(message="I want to join")
+ application = ApplicationService.create_application(
+ db, applicant_id=applicant.id, project_id=project.id, flare_id=flare.id, application=app_create
+ )
+
+ # Accept application
+ ApplicationService.accept_application(db, application)
+ notifs = NotificationService.list_notifications(db, recipient_id=applicant.id)
+ assert len(notifs) == 1
+ assert notifs[0].type == NotificationType.APPLICATION_ACCEPTED
+ assert notifs[0].sender_id == owner.id
+
+ # Reset notifications and test reject
+ db.delete(notifs[0])
+ db.commit()
+
+ ApplicationService.reject_application(db, application)
+ notifs = NotificationService.list_notifications(db, recipient_id=applicant.id)
+ assert len(notifs) == 1
+ assert notifs[0].type == NotificationType.APPLICATION_REJECTED
+
+def test_project_invite_endpoint_and_notification(db, client):
+ owner = create_test_user(db, "owner@example.com", "owner")
+ invitee = create_test_user(db, "invitee@example.com", "invitee")
+ project = create_test_project(db, owner.id)
+
+ # Authenticate as owner
+ app.dependency_overrides[get_current_user] = lambda: owner
+
+ # Post project invite
+ response = client.post(f"/api/projects/projects/{project.id}/invite/{invitee.id}")
+ assert response.status_code == 201
+ assert response.json()["message"] == "User invited successfully"
+
+ # Check project member is created with is_active = False
+ from sqlalchemy import and_, select
+ stmt = select(ProjectMember).where(
+ and_(
+ ProjectMember.project_id == project.id,
+ ProjectMember.user_id == invitee.id
+ )
+ )
+ member = db.scalar(stmt)
+ assert member is not None
+ assert member.is_active is False
+ assert member.role == MemberRole.MEMBER
+
+ # Check notification was created for invitee
+ notifs = NotificationService.list_notifications(db, recipient_id=invitee.id)
+ assert len(notifs) == 1
+ assert notifs[0].type == NotificationType.PROJECT_INVITE
+ assert notifs[0].sender_id == owner.id
+ assert "invited to join" in notifs[0].message
diff --git a/backend/logs/devlink.log b/backend/logs/devlink.log
deleted file mode 100644
index dbd06f18..00000000
--- a/backend/logs/devlink.log
+++ /dev/null
@@ -1,273 +0,0 @@
-[2026-06-27 04:31:37] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:31:38] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:31:38] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:32:06] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:32:07] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:32:07] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:34:03] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 04:34:04] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:34:04] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:36:47] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:36:48] [INFO] [watchfiles.main] 5 changes detected
-[2026-06-27 04:36:48] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:38:11] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:38:12] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:38:12] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:38:24] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:38:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:38:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:39:06] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:39:06] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:39:47] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:39:48] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:39:48] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:40:13] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:40:14] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:40:14] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:40:56] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:40:56] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:41:06] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:41:06] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:41:07] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:41:08] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:41:08] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:41:26] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 04:41:26] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:42:24] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:42:24] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:42:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:42:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:42:43] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:42:44] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:42:44] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:43:12] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:43:13] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:43:13] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:43:33] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:43:34] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:43:34] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:43:38] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:43:38] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:43:39] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:43:39] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:44:49] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 04:44:50] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:44:50] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:46:30] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:46:31] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:46:32] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:46:32] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:46:52] [INFO] [watchfiles.main] 3 changes detected
-[2026-06-27 04:46:52] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:46:53] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:47:07] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:47:07] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:47:23] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:47:24] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:47:24] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:47:33] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:47:33] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:47:34] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:47:34] [INFO] [watchfiles.main] 5 changes detected
-[2026-06-27 04:48:31] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:48:32] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:48:33] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:48:33] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:48:37] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:48:38] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:48:38] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:48:54] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:48:54] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:48:58] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:48:58] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:48:59] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:48:59] [INFO] [watchfiles.main] 5 changes detected
-[2026-06-27 04:49:35] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:49:36] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:49:37] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:49:37] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:49:43] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:49:43] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:50:00] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:50:00] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:50:08] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:50:09] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:50:09] [INFO] [watchfiles.main] 3 changes detected
-[2026-06-27 04:50:09] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 04:50:51] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:50:51] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:50:59] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:50:59] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:51:15] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:51:15] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:51:21] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:51:22] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:51:22] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:51:22] [INFO] [watchfiles.main] 6 changes detected
-[2026-06-27 04:51:57] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:51:58] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:51:58] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:52:06] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:52:06] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:52:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:52:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:52:30] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:52:31] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:52:31] [INFO] [watchfiles.main] 3 changes detected
-[2026-06-27 04:52:32] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 04:52:32] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:53:11] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:53:11] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:53:22] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:53:23] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:53:24] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:53:24] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:53:36] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:53:37] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:53:37] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:53:40] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:53:41] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:53:41] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:53:41] [INFO] [watchfiles.main] 6 changes detected
-[2026-06-27 04:54:21] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:54:22] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:54:22] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:54:34] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:54:34] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:54:47] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:54:47] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:54:56] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:54:56] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:54:57] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:54:57] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 04:54:58] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:54:58] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:55:24] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:55:24] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:55:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:55:26] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:55:26] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:55:34] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:55:34] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:55:51] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:55:51] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:55:55] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:55:55] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:55:56] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:55:56] [INFO] [watchfiles.main] 5 changes detected
-[2026-06-27 04:57:18] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:57:19] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:57:20] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:57:21] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:57:22] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:57:22] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:57:26] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:57:26] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:57:54] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:57:54] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:57:58] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:57:58] [INFO] [watchfiles.main] 3 changes detected
-[2026-06-27 04:57:59] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 04:57:59] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:58:52] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:58:53] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:58:54] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:58:54] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:59:08] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:59:08] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:59:38] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:59:39] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:59:39] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:59:42] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:59:42] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 04:59:42] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 04:59:43] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 04:59:43] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:00:48] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:00:49] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:00:49] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:00:50] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:00:50] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:01:00] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:01:01] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:01:01] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:01:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:01:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:01:29] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:01:29] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:01:30] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 05:01:31] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:01:31] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:15] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:15] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:16] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:17] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:17] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:24] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:52] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:53] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:54] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:02:54] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:03:03] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:03:03] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:03:03] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:03:04] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 05:03:05] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:03:05] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:04:14] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:04:15] [INFO] [watchfiles.main] 3 changes detected
-[2026-06-27 05:04:15] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:04:16] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:04:24] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:04:24] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:04:46] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:04:46] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:04:55] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:04:56] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:04:56] [INFO] [watchfiles.main] 3 changes detected
-[2026-06-27 05:04:56] [INFO] [watchfiles.main] 3 changes detected
-[2026-06-27 05:04:57] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:04:57] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:05:31] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:05:32] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:05:32] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:05:33] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:05:33] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:05:49] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:05:50] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:05:50] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:06:03] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:06:04] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:06:04] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:06:11] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:06:11] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:06:12] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:06:12] [INFO] [watchfiles.main] 5 changes detected
-[2026-06-27 05:07:26] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:07:26] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:07:33] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:07:33] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:07:52] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:07:52] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:08:00] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:08:00] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:08:00] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:08:01] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 05:08:01] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:08:45] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:08:45] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:08:55] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:08:56] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:08:57] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:08:57] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:09:18] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:09:18] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:09:25] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:09:25] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:09:26] [INFO] [watchfiles.main] 2 changes detected
-[2026-06-27 05:09:26] [INFO] [watchfiles.main] 4 changes detected
-[2026-06-27 05:09:27] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:09:28] [INFO] [watchfiles.main] 1 change detected
-[2026-06-27 05:09:28] [INFO] [watchfiles.main] 1 change detected
diff --git a/docs/public_portfolio_documentation.md b/docs/public_portfolio_documentation.md
new file mode 100644
index 00000000..28e3adbd
--- /dev/null
+++ b/docs/public_portfolio_documentation.md
@@ -0,0 +1,91 @@
+# DevLink Shareable Public Portfolio Pages Documentation
+
+This document consolidates all plans, walkthroughs, troubleshooting fixes, and test results for the **Shareable Public Portfolio Pages** feature implemented today.
+
+---
+
+## 1. Overview & Goal
+
+The goal was to build a beautiful, interactive, and shareable public portfolio page for every builder on DevLink. This portfolio lives outside the main dashboard application shell, making it a perfect personal landing page that developers can link to in their CVs, social bios, or GitHub profiles.
+
+### Key Features:
+1. **Standalone Route (`/portfolio/$username`):** A standalone route that bypasses the sidebar and dashboard layouts.
+2. **5 Premium Visual Themes:**
+ - **Modern Neon (Dark):** Soft purple/violet neon accent glows and grids.
+ - **Minimalist Warm (Light):** Serene stone background, elegant serif typography.
+ - **Cyberpunk Console (Retro):** Monospace font, green/pink console retro borders, scanline overlays.
+ - **Glassmorphism (Frosted):** Frosted glass panels on top of a multi-color mesh gradient backdrop.
+ - **Slate Pro (Sleek):** Modern slate-gray dark design with emerald borders and geometric layout.
+3. **Live Template Customizer Panel:** A floating widget allowing users to change layouts, choose accents, toggle layout sections (Projects, thoughts/flares, or hiring form), and save their default preferences.
+4. **Hiring Lead/Contact Form:** Direct contact form that routes client inquiries straight to the builder's DevLink notifications.
+
+---
+
+## 2. Completed Checklist
+
+- [x] Integrate "Shareable Portfolio" dashboard link/card in user profile screen ([_app.profile.$username.tsx](file:///c:/Users/singh/OneDrive/Desktop/ECSOC2026/devlink/frontend/src/routes/_app.profile.$username.tsx))
+- [x] Implement the standalone route ([portfolio.$username.tsx](file:///c:/Users/singh/OneDrive/Desktop/ECSOC2026/devlink/frontend/src/routes/portfolio.$username.tsx)) with 5 custom templates
+- [x] Build the Customizer Panel for template, accent, and section display controls
+- [x] Code the contact/hiring form with mock notification delivery to `localStorage`
+- [x] Troubleshoot and resolve TypeScript compilation / route generation issues
+- [x] Run local servers (backend & frontend) and verify the portfolio page functions cleanly
+
+---
+
+## 3. Implementation Details
+
+### Standalone Route
+- Defined route `Route = createFileRoute("/portfolio/$username")` directly under `src/routes/` to skip the `_app` shell template.
+- Loads data dynamically: fetches the builder info, filters matching projects (where the project owner handle matches), and loads flares created by the developer.
+
+### Integrated Banner
+- Placed on the main profile screen ([_app.profile.$username.tsx](file:///c:/Users/singh/OneDrive/Desktop/ECSOC2026/devlink/frontend/src/routes/_app.profile.$username.tsx)).
+- Gives developers direct controls: **View Public Page** and **Copy Link**.
+- Offers visitors a prominent button to view the builder's external showcase.
+
+### Notification Sync
+- Integrated form submissions directly with `localStorage` (stored under `devlink-notifications`).
+- The dashboard notifications resolver automatically prepends these simulated recruiter messages, making them display as real-time notifications in the developer's main feed.
+
+---
+
+## 4. Troubleshooting & Route Compilation Fixes
+
+Today we encountered and resolved a critical issue where the newly added route `/portfolio/$username` was not registered, resulting in the TypeScript error:
+`Argument of type '"/portfolio/$username"' is not assignable to parameter of type 'keyof FileRoutesByPath | undefined'`.
+
+Here is the root cause analysis and resolution:
+
+### Root Cause 1: Duplicate Import Syntax Error
+In [\_app.projects.$projectId.tsx](file:///c:/Users/singh/OneDrive/Desktop/ECSOC2026/devlink/frontend/src/routes/_app.projects.$projectId.tsx), duplicate import statements for `ArrowLeft`, `useState`, `cn`, `builders`, and `activity` caused the TypeScript generator to crash:
+`SyntaxError: Identifier 'ArrowLeft' has already been declared`.
+
+* **Resolution:** Merged and cleaned up the import declarations at the top of the file.
+
+### Root Cause 2: Broken HTML/JSX Markup
+In the same project detail file [\_app.projects.$projectId.tsx](file:///c:/Users/singh/OneDrive/Desktop/ECSOC2026/devlink/frontend/src/routes/_app.projects.$projectId.tsx), a duplicate stats block was inserted without matching closing tags:
+`SyntaxError: Expected corresponding JSX closing tag for
`.
+
+* **Resolution:** Cleaned up the nested layout, removed the duplicated block, and balanced the tags correctly.
+
+### Root Cause 3: Mock Data Type Mismatch
+In [seed.ts](file:///c:/Users/singh/OneDrive/Desktop/ECSOC2026/devlink/frontend/src/mocks/seed.ts), project status fields were using invalid string values (e.g. `"active"`, `"planning"`, `"shipped"`) instead of matching the strict union definition: `status: "recruiting" | "in-progress" | "completed" | "archived"`.
+
+* **Resolution:** Mapped all mock project statuses to their valid type values:
+ - `"active"` -> `"in-progress"`
+ - `"planning"` -> `"recruiting"`
+ - `"shipped"` -> `"completed"`
+
+After executing these fixes, running `npx @tanstack/router-cli generate` successfully regenerated the routing tree [routeTree.gen.ts](file:///c:/Users/singh/OneDrive/Desktop/ECSOC2026/devlink/frontend/src/routeTree.gen.ts) and resolved all TypeScript compilation issues.
+
+---
+
+## 5. Manual & E2E Testing Summary
+
+* **Vite Dev Server Port:** Frontend verified running successfully on `http://localhost:8080/`.
+* **Target Portfolio Tested:** `http://localhost:8080/portfolio/priya_dev`
+* **Verification Results:**
+ 1. The portfolio loads stand-alone without the sidebar navigation dashboard.
+ 2. Priya Sharma's description, skills stack, matching projects, and flares display correctly.
+ 3. Customization panel operates as expected and stores settings under local storage.
+ 4. Submitting the recruitment/contact form successfully pushes simulated notifications into the builder's notifications feed.
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 9c89bb02..b9427d33 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -86,19 +86,6 @@
"vite": "^8.0.16"
}
},
- "node_modules/@alloc/quick-lru": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
- "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/@babel/code-frame": {
"version": "7.29.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
@@ -495,9 +482,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz",
- "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==",
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz",
+ "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -507,7 +494,7 @@
"globals": "^14.0.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
- "js-yaml": "^4.1.1",
+ "js-yaml": "^4.3.0",
"minimatch": "^3.1.5",
"strip-json-comments": "^3.1.1"
},
@@ -532,9 +519,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.39.4",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz",
- "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==",
+ "version": "9.39.5",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz",
+ "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -569,31 +556,31 @@
}
},
"node_modules/@floating-ui/core": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz",
- "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz",
+ "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==",
"license": "MIT",
"dependencies": {
- "@floating-ui/utils": "^0.2.11"
+ "@floating-ui/utils": "^0.2.12"
}
},
"node_modules/@floating-ui/dom": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz",
- "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz",
+ "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==",
"license": "MIT",
"dependencies": {
- "@floating-ui/core": "^1.7.5",
- "@floating-ui/utils": "^0.2.11"
+ "@floating-ui/core": "^1.8.0",
+ "@floating-ui/utils": "^0.2.12"
}
},
"node_modules/@floating-ui/react-dom": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz",
- "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==",
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.9.tgz",
+ "integrity": "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==",
"license": "MIT",
"dependencies": {
- "@floating-ui/dom": "^1.7.6"
+ "@floating-ui/dom": "^1.8.0"
},
"peerDependencies": {
"react": ">=16.8.0",
@@ -601,9 +588,9 @@
}
},
"node_modules/@floating-ui/utils": {
- "version": "0.2.11",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz",
- "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==",
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz",
+ "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==",
"license": "MIT"
},
"node_modules/@fontsource/inter": {
@@ -739,12 +726,12 @@
}
},
"node_modules/@lottiefiles/dotlottie-react": {
- "version": "0.19.7",
- "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.19.7.tgz",
- "integrity": "sha512-uozfELOplVo0PwD2E3yy9IndpjKVa4oWErDWFos3cHaqwsUrRLlJNpRDM8aFsWdw5e3N3/GHbKcsGxSeytsPWg==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.19.9.tgz",
+ "integrity": "sha512-G07YYM5CLOJrqmNglsMvxlVVV4dsjJvC+S2sdtL101LoWOC9rTPxUb1GCyuTTMF3qhxgIXdylCciVHQnF1nU0A==",
"license": "MIT",
"dependencies": {
- "@lottiefiles/dotlottie-web": "0.76.0"
+ "@lottiefiles/dotlottie-web": "0.77.1"
},
"engines": {
"node": ">=18.17.0",
@@ -755,9 +742,9 @@
}
},
"node_modules/@lottiefiles/dotlottie-web": {
- "version": "0.76.0",
- "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.76.0.tgz",
- "integrity": "sha512-uWJ86UJM6hjN4MY2aGSyyFcRQEAM4B9qDCnb/336dHab1zE6nyOF45b90t8xesZPwNtP/2moNGMrMQ1UJW6+lQ==",
+ "version": "0.77.1",
+ "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.77.1.tgz",
+ "integrity": "sha512-WHRQMyACH9VFCk3MI54IuqrTu5pbTnTrvQoJoyH76P6WHhkcNH+lINn3LduhbEciqI+DRKgdM4MwtOPoN2GbDA==",
"license": "MIT",
"engines": {
"node": ">=18.17.0",
@@ -765,9 +752,9 @@
}
},
"node_modules/@lovable.dev/vite-plugin-dev-server-bridge": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@lovable.dev/vite-plugin-dev-server-bridge/-/vite-plugin-dev-server-bridge-1.0.2.tgz",
- "integrity": "sha512-1c4XLFkpS614VxPyq+IX0us52vm5JWxdO1NfG2L1FjH0asKvHNu5//6wpnKHWmx60Y4HR1gcLaIiLACXIdeFyg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@lovable.dev/vite-plugin-dev-server-bridge/-/vite-plugin-dev-server-bridge-1.1.0.tgz",
+ "integrity": "sha512-NuIYWHEPRve+BMW9SyGFFQdigP7bcLvlVf7lW9LZHjBQveGp6vP3aaWzWUr2oP3WiLgBzr1gmw2pq7AcAHT+PQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -780,9 +767,9 @@
}
},
"node_modules/@lovable.dev/vite-plugin-hmr-gate": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@lovable.dev/vite-plugin-hmr-gate/-/vite-plugin-hmr-gate-1.1.1.tgz",
- "integrity": "sha512-ySRUzOoGQYhj4Pd9EjaA7i1+2RiaS5lSVZasun72wVZZmJfFIciGYGQQDUu88HISn4icz0sugQxFRJGCNlTggg==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@lovable.dev/vite-plugin-hmr-gate/-/vite-plugin-hmr-gate-1.1.2.tgz",
+ "integrity": "sha512-m3tOTEm78rPAFq6+ELNMS10pX786mFLdRYFnU/xIra+aJSSalnueVhdeIgmictfoqBQw8GZLgmpeASOXVI6w9g==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -795,16 +782,16 @@
}
},
"node_modules/@lovable.dev/vite-tanstack-config": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/@lovable.dev/vite-tanstack-config/-/vite-tanstack-config-2.6.4.tgz",
- "integrity": "sha512-eav5blPqeu6n054y+7UtbtwIOiIexB2U7gGvHJIo2rsLyDFkJL1QL3qKnmmax1FLIProfoYXuC0lq1QczFR+dw==",
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/@lovable.dev/vite-tanstack-config/-/vite-tanstack-config-2.7.2.tgz",
+ "integrity": "sha512-TwCXJNeCoUMvK3xWTOYAsUk+FpMKgQjKNPnyqsaCpHyHT8l7giEApRNXBXmSy9KJ+Ri8eZed6Exe0ID+Tg9VPA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@lovable.dev/vite-plugin-dev-server-bridge": "^1.0.2",
"@lovable.dev/vite-plugin-hmr-gate": "^1.1.1",
- "lightningcss": "^1.30.0",
- "lovable-tagger": "1.2.0"
+ "@tanstack/devtools-vite": "^0.8.1",
+ "lightningcss": "^1.30.0"
},
"peerDependencies": {
"@tailwindcss/vite": ">=4.0.0",
@@ -838,44 +825,6 @@
"@emnapi/runtime": "^1.7.1"
}
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/@oozcitak/dom": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-2.0.2.tgz",
@@ -924,185 +873,420 @@
"node": ">=20.0"
}
},
- "node_modules/@oxc-project/types": {
- "version": "0.137.0",
- "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz",
- "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==",
+ "node_modules/@oxc-parser/binding-android-arm-eabi": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.120.0.tgz",
+ "integrity": "sha512-WU3qtINx802wOl8RxAF1v0VvmC2O4D9M8Sv486nLeQ7iPHVmncYZrtBhB4SYyX+XZxj2PNnCcN+PW21jHgiOxg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
"license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/Boshen"
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/@pkgr/core": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz",
- "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==",
+ "node_modules/@oxc-parser/binding-android-arm64": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.120.0.tgz",
+ "integrity": "sha512-SEf80EHdhlbjZEgzeWm0ZA/br4GKMenDW3QB/gtyeTV1gStvvZeFi40ioHDZvds2m4Z9J1bUAUL8yn1/+A6iGg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/pkgr"
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/@radix-ui/number": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.2.tgz",
- "integrity": "sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==",
- "license": "MIT"
+ "node_modules/@oxc-parser/binding-darwin-arm64": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.120.0.tgz",
+ "integrity": "sha512-xVrrbCai8R8CUIBu3CjryutQnEYhZqs1maIqDvtUCFZb8vY33H7uh9mHpL3a0JBIKoBUKjPH8+rzyAeXnS2d6A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@radix-ui/primitive": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.4.tgz",
- "integrity": "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ==",
- "license": "MIT"
+ "node_modules/@oxc-parser/binding-darwin-x64": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.120.0.tgz",
+ "integrity": "sha512-xyHBbnJ6mydnQUH7MAcafOkkrNzQC6T+LXgDH/3InEq2BWl/g424IMRiJVSpVqGjB+p2bd0h0WRR8iIwzjU7rw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
},
- "node_modules/@radix-ui/react-accordion": {
- "version": "1.2.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.15.tgz",
- "integrity": "sha512-24Zz/0SYx8F2bSVThBnQrdJs2VbKelyuJordcFRRdA0fRAhrq/wSegGCqaQz34VQoiWqSMGYCYXEhynLSlyQlg==",
+ "node_modules/@oxc-parser/binding-freebsd-x64": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.120.0.tgz",
+ "integrity": "sha512-UMnVRllquXUYTeNfFKmxTTEdZ/ix1nLl0ducDzMSREoWYGVIHnOOxoKMWlCOvRr9Wk/HZqo2rh1jeumbPGPV9A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-collapsible": "1.1.15",
- "@radix-ui/react-collection": "1.1.11",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/@radix-ui/react-alert-dialog": {
- "version": "1.1.18",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.18.tgz",
- "integrity": "sha512-6c2cXpNlAgHDhKguK24XcWHHayMpK+lk7/WwBXBco+ZJ4Dv7xP++GBM280KgTD/HCRu3jSdfe8WQiZssonYaIA==",
+ "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.120.0.tgz",
+ "integrity": "sha512-tkvn2CQ7QdcsMnpfiX3fd3wA3EFsWKYlcQzq9cFw/xc89Al7W6Y4O0FgLVkVQpo0Tnq/qtE1XfkJOnRRA9S/NA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-dialog": "1.1.18",
- "@radix-ui/react-primitive": "2.1.7"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/@radix-ui/react-arrow": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.11.tgz",
- "integrity": "sha512-Kdil9BB1rIFC/khmf4hC35bn8701AJcizTU7G7cUbEbk5XqqbjDuHW60uUfKqO5WojjZcbAW51Q7P0hRmMLw8A==",
+ "node_modules/@oxc-parser/binding-linux-arm-musleabihf": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.120.0.tgz",
+ "integrity": "sha512-WN5y135Ic42gQDk9grbwY9++fDhqf8knN6fnP+0WALlAUh4odY/BDK1nfTJRSfpJD9P3r1BwU0m3pW2DU89whQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.7"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/@radix-ui/react-aspect-ratio": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.11.tgz",
- "integrity": "sha512-IUAhIVpBUvP5NNICjlaB1OFmtRLGqQqTF3ZOSGPoq3XeLXRFtHiWTRxSVEULgOd9GQR2c7tsYqDnhUennapZnw==",
+ "node_modules/@oxc-parser/binding-linux-arm64-gnu": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.120.0.tgz",
+ "integrity": "sha512-1GgQBCcXvFMw99EPdMy+4NZ3aYyXsxjf9kbUUg8HuAy3ZBXzOry5KfFEzT9nqmgZI1cuetvApkiJBZLAPo8uaw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.7"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/@radix-ui/react-avatar": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.2.1.tgz",
- "integrity": "sha512-+8PWoLLZv3AVb5m0pvoiOca/bQGzc9vPVb+982HB2x3Un0DpYEPM3zLMl4oqRpBsocJuNqLkiv/HXTnTrlwr4g==",
+ "node_modules/@oxc-parser/binding-linux-arm64-musl": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.120.0.tgz",
+ "integrity": "sha512-gmMQ70gsPdDBgpcErvJEoWNBr7bJooSLlvOBVBSGfOzlP5NvJ3bFvnUeZZ9d+dPrqSngtonf7nyzWUTUj/U+lw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
- "dependencies": {
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-is-hydrated": "0.1.1",
- "@radix-ui/react-use-layout-effect": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/@radix-ui/react-checkbox": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.6.tgz",
- "integrity": "sha512-eUEUoGMDpfkgHWSE97ZZaUJtzR1M7EKnNIpD1Q16+8JR9NWghcaqMulx9PuCQ720w0UclfYn6FEbCdd5Hx087g==",
+ "node_modules/@oxc-parser/binding-linux-ppc64-gnu": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.120.0.tgz",
+ "integrity": "sha512-T/kZuU0ajop0xhzVMwH5r3srC9Nqup5HaIo+3uFjIN5uPxa0LvSxC1ZqP4aQGJVW5G0z8/nCkjIfSMS91P/wzw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-linux-riscv64-gnu": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.120.0.tgz",
+ "integrity": "sha512-vn21KXLAXzaI3N5CZWlBr1iWeXLl9QFIMor7S1hUjUGTeUuWCoE6JZB040/ZNDwf+JXPX8Ao9KbmJq9FMC2iGw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-linux-riscv64-musl": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.120.0.tgz",
+ "integrity": "sha512-SUbUxlar007LTGmSLGIC5x/WJvwhdX+PwNzFJ9f/nOzZOrCFbOT4ikt7pJIRg1tXVsEfzk5mWpGO1NFiSs4PIw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-linux-s390x-gnu": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.120.0.tgz",
+ "integrity": "sha512-hYiPJTxyfJY2+lMBFk3p2bo0R9GN+TtpPFlRqVchL1qvLG+pznstramHNvJlw9AjaoRUHwp9IKR7UZQnRPGjgQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-linux-x64-gnu": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.120.0.tgz",
+ "integrity": "sha512-q+5jSVZkprJCIy3dzJpApat0InJaoxQLsJuD6DkX8hrUS61z2lHQ1Fe9L2+TYbKHXCLWbL0zXe7ovkIdopBGMQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-linux-x64-musl": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.120.0.tgz",
+ "integrity": "sha512-D9QDDZNnH24e7X4ftSa6ar/2hCavETfW3uk0zgcMIrZNy459O5deTbWrjGzZiVrSWigGtlQwzs2McBP0QsfV1w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-openharmony-arm64": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.120.0.tgz",
+ "integrity": "sha512-TBU8ZwOUWAOUWVfmI16CYWbvh4uQb9zHnGBHsw5Cp2JUVG044OIY1CSHODLifqzQIMTXvDvLzcL89GGdUIqNrA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-wasm32-wasi": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.120.0.tgz",
+ "integrity": "sha512-WG/FOZgDJCpJnuF3ToG/K28rcOmSY7FmFmfBKYb2fmLyhDzPpUldFGV7/Fz4ru0Iz/v4KPmf8xVgO8N3lO4KHA==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-win32-arm64-msvc": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.120.0.tgz",
+ "integrity": "sha512-1T0HKGcsz/BKo77t7+89L8Qvu4f9DoleKWHp3C5sJEcbCjDOLx3m9m722bWZTY+hANlUEs+yjlK+lBFsA+vrVQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-win32-ia32-msvc": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.120.0.tgz",
+ "integrity": "sha512-L7vfLzbOXsjBXV0rv/6Y3Jd9BRjPeCivINZAqrSyAOZN3moCopDN+Psq9ZrGNZtJzP8946MtlRFZ0Als0wBCOw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@oxc-parser/binding-win32-x64-msvc": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.120.0.tgz",
+ "integrity": "sha512-ys+upfqNtSu58huAhJMBKl3XCkGzyVFBlMlGPzHeFKgpFF/OdgNs1MMf8oaJIbgMH8ZxgGF7qfue39eJohmKIg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@oxc-project/types": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.120.0.tgz",
+ "integrity": "sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/Boshen"
+ }
+ },
+ "node_modules/@pkgr/core": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz",
+ "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/pkgr"
+ }
+ },
+ "node_modules/@radix-ui/number": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.2.tgz",
+ "integrity": "sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==",
+ "license": "MIT"
+ },
+ "node_modules/@radix-ui/primitive": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.5.tgz",
+ "integrity": "sha512-d86WIWFYNtGA0H/d8exstrTRTp7eWJYlYJbtNofxr/3ljupZYn6EFDG/Qgu/0Kc8v7yMUxySagqJsL1+PdYjWg==",
+ "license": "MIT"
+ },
+ "node_modules/@radix-ui/react-accordion": {
+ "version": "1.2.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.16.tgz",
+ "integrity": "sha512-BpZJNmetujnGgUI6OX0jEhEmlA46WPqgub8Rv09Kyquwd0cc1ndMKpiPYCjmBU6KSSRPAMtgLpEoZSG/tdNIWQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-collapsible": "1.1.16",
+ "@radix-ui/react-collection": "1.1.12",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-context": "1.2.0",
+ "@radix-ui/react-direction": "1.1.2",
+ "@radix-ui/react-id": "1.1.2",
"@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-previous": "1.1.2",
- "@radix-ui/react-use-size": "1.1.2"
+ "@radix-ui/react-use-controllable-state": "1.2.3"
},
"peerDependencies": {
"@types/react": "*",
@@ -1119,20 +1303,17 @@
}
}
},
- "node_modules/@radix-ui/react-collapsible": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.15.tgz",
- "integrity": "sha512-8A1zibu5skAQ+UVbaeNH5hVMibiFCRJzgMuM14LTWGttnTZKQL9jwYnhAbHRuxrtCqPXa4JvvnVUq1pTNgyZYw==",
+ "node_modules/@radix-ui/react-alert-dialog": {
+ "version": "1.1.19",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.19.tgz",
+ "integrity": "sha512-FA7n1f6D/DwGE0+AWxiY5LacNbbExQuEgMubeG06idEaH+mSLuf9dp/qBNqOnvbTQ+4gZ2ue1RATF1Ub91Mg5g==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-presence": "1.1.6",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "@radix-ui/react-context": "1.2.0",
+ "@radix-ui/react-dialog": "1.1.19",
+ "@radix-ui/react-primitive": "2.1.7"
},
"peerDependencies": {
"@types/react": "*",
@@ -1149,16 +1330,13 @@
}
}
},
- "node_modules/@radix-ui/react-collection": {
+ "node_modules/@radix-ui/react-arrow": {
"version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.11.tgz",
- "integrity": "sha512-djW9+zeg137KQdlPtmE8xnaD+K2rcXXMWFrSg0hsmYZ6HRbdTA7tDHFgpaW9+huWVEu0RCabL+985T4TA0BE7g==",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.11.tgz",
+ "integrity": "sha512-Kdil9BB1rIFC/khmf4hC35bn8701AJcizTU7G7cUbEbk5XqqbjDuHW60uUfKqO5WojjZcbAW51Q7P0hRmMLw8A==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-slot": "1.3.0"
+ "@radix-ui/react-primitive": "2.1.7"
},
"peerDependencies": {
"@types/react": "*",
@@ -1175,47 +1353,70 @@
}
}
},
- "node_modules/@radix-ui/react-compose-refs": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.3.tgz",
- "integrity": "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==",
+ "node_modules/@radix-ui/react-aspect-ratio": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.11.tgz",
+ "integrity": "sha512-IUAhIVpBUvP5NNICjlaB1OFmtRLGqQqTF3ZOSGPoq3XeLXRFtHiWTRxSVEULgOd9GQR2c7tsYqDnhUennapZnw==",
"license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.1.7"
+ },
"peerDependencies": {
"@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
}
}
},
- "node_modules/@radix-ui/react-context": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.4.tgz",
- "integrity": "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg==",
+ "node_modules/@radix-ui/react-avatar": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.2.2.tgz",
+ "integrity": "sha512-sST0qh8GzOB7besQ3tMLWLyngnRuSk0gc/Hm+667KYKQFCt6Y6ZXv25WlqM7dIDK54ULCh5+CHmk4LIolzfz+A==",
"license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-context": "1.2.0",
+ "@radix-ui/react-primitive": "2.1.7",
+ "@radix-ui/react-use-callback-ref": "1.1.2",
+ "@radix-ui/react-use-is-hydrated": "0.1.1",
+ "@radix-ui/react-use-layout-effect": "1.1.2"
+ },
"peerDependencies": {
"@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
}
}
},
- "node_modules/@radix-ui/react-context-menu": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.3.2.tgz",
- "integrity": "sha512-qzsA/ZPhF6yMxBOTIk1nlCkoy2mswSbwYL+ErBa2iP0s4WWrlxmczArYqMcpVfEjmM7KJj/ADPXky0yZfbSxtQ==",
+ "node_modules/@radix-ui/react-checkbox": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.7.tgz",
+ "integrity": "sha512-JroKHfQBfh+fDuzpPsBC+pESkhuq8ql4hljTguz8MWnS35cISr3d/Jhl9kYrB44FlDtxCArYdDvTx+BSsJ64rQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-menu": "2.1.19",
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-compose-refs": "1.1.3",
+ "@radix-ui/react-context": "1.2.0",
+ "@radix-ui/react-presence": "1.1.7",
"@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3"
+ "@radix-ui/react-use-controllable-state": "1.2.3",
+ "@radix-ui/react-use-previous": "1.1.2",
+ "@radix-ui/react-use-size": "1.1.2"
},
"peerDependencies": {
"@types/react": "*",
@@ -1232,26 +1433,20 @@
}
}
},
- "node_modules/@radix-ui/react-dialog": {
- "version": "1.1.18",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.18.tgz",
- "integrity": "sha512-apa28mldjMgORmE6g/w3sCcA0Y9UAVeeDVoozN4i7kOw12mLl9RBchfzK3Nn6qxOWjrZhK1Lfy7f07kyzxtnBw==",
+ "node_modules/@radix-ui/react-collapsible": {
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.16.tgz",
+ "integrity": "sha512-opfXRe6nnzyGmCDPx+l1Aqo/RbqWtQal2FnsBqF9hhePp6j0LsRoBaRxcMOlTv+uYTJVtWYZKg9t9wTe+BA/ZA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-dismissable-layer": "1.1.14",
- "@radix-ui/react-focus-guards": "1.1.4",
- "@radix-ui/react-focus-scope": "1.1.11",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-presence": "1.1.7",
"@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-slot": "1.3.0",
"@radix-ui/react-use-controllable-state": "1.2.3",
- "aria-hidden": "^1.2.4",
- "react-remove-scroll": "^2.7.2"
+ "@radix-ui/react-use-layout-effect": "1.1.2"
},
"peerDependencies": {
"@types/react": "*",
@@ -1268,15 +1463,134 @@
}
}
},
- "node_modules/@radix-ui/react-direction": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.2.tgz",
- "integrity": "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==",
+ "node_modules/@radix-ui/react-collection": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.12.tgz",
+ "integrity": "sha512-nb67INpE0IahJKN7EYPp9m9YGwYeKlnzxT3MwXVkgCskaSJia97kG4T0ywpjNUSSnoJk/uvk12V8vbrEHEj+/Q==",
"license": "MIT",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.3",
+ "@radix-ui/react-context": "1.2.0",
+ "@radix-ui/react-primitive": "2.1.7",
+ "@radix-ui/react-slot": "1.3.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.3.tgz",
+ "integrity": "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-context": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.2.0.tgz",
+ "integrity": "sha512-fOE+JtN9rygNZkCnHRBEP0TAvLldlhyOxMsbwFvTP4nAs+nBmfnna+o/Zski2wkmY1YMrFC0aSzsHoLY47iLrg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-context-menu": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.3.3.tgz",
+ "integrity": "sha512-PS+gKE0z2prJ74Y0sM+brAGK4mYOHIR7TlcV5EJgUQ6E0xMvyswkK2X4yRqyganrzsRL+WCSKAPu0NQITICRWg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-context": "1.2.0",
+ "@radix-ui/react-menu": "2.1.20",
+ "@radix-ui/react-primitive": "2.1.7",
+ "@radix-ui/react-use-controllable-state": "1.2.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dialog": {
+ "version": "1.1.19",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.19.tgz",
+ "integrity": "sha512-+HhbN2+YtkRgVirjZ2afMeutQRuGOrdkWR5+EFC58SJojGmtyNQwYzgi6tHBpOxvFHefMtPeHdgtjz0BOGxFQg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-compose-refs": "1.1.3",
+ "@radix-ui/react-context": "1.2.0",
+ "@radix-ui/react-dismissable-layer": "1.1.15",
+ "@radix-ui/react-focus-guards": "1.1.4",
+ "@radix-ui/react-focus-scope": "1.1.12",
+ "@radix-ui/react-id": "1.1.2",
+ "@radix-ui/react-portal": "1.1.13",
+ "@radix-ui/react-presence": "1.1.7",
+ "@radix-ui/react-primitive": "2.1.7",
+ "@radix-ui/react-slot": "1.3.0",
+ "@radix-ui/react-use-controllable-state": "1.2.3",
+ "aria-hidden": "^1.2.4",
+ "react-remove-scroll": "^2.7.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-direction": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.2.tgz",
+ "integrity": "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
"peerDependenciesMeta": {
"@types/react": {
"optional": true
@@ -1284,12 +1598,12 @@
}
},
"node_modules/@radix-ui/react-dismissable-layer": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.14.tgz",
- "integrity": "sha512-4lUhWTWAjbDIqFrAPWJ3WqBOpO5YchVZ88X3nh6H9Lu5AFi5nCUeTPj3D8FSDmabmFeRe9ME0BDA4MwKTha5GQ==",
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.15.tgz",
+ "integrity": "sha512-b0XaRlzn2QKuo10XyNgi2DAJDf5XC9d1nD3FJcuvCjbR7+4Ad28zmZsLsqx+hvDEzMnRuZaZxZm9gYObV6RmRA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
"@radix-ui/react-compose-refs": "1.1.3",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-callback-ref": "1.1.2",
@@ -1311,16 +1625,16 @@
}
},
"node_modules/@radix-ui/react-dropdown-menu": {
- "version": "2.1.19",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.19.tgz",
- "integrity": "sha512-HZccBkbK0LOi8nYKIp5jll/zIRW0cCOmG6WWyqsSpmXCU+ZlcBbTqIwlBvPCu886C5RVu6c/kHV7xSP8IgYNHw==",
+ "version": "2.1.20",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.20.tgz",
+ "integrity": "sha512-slfm+rRaZRuQBvHq60lXvSVUPhid0IPtjSZzIuUlWZMUs01iYZNlGS3mJgRD3ChLQVBAYlKiL/tFyWGX+dz8Xw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-menu": "2.1.19",
+ "@radix-ui/react-menu": "2.1.20",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-controllable-state": "1.2.3"
},
@@ -1355,9 +1669,9 @@
}
},
"node_modules/@radix-ui/react-focus-scope": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.11.tgz",
- "integrity": "sha512-Mn88Vg2whaRocGJNOH+DKFqYm6ySFPQaiwHNxZPyjn99B52KAEJWWY9NP83+nWdk2HM3rdov+STu9AG471Rt9w==",
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.12.tgz",
+ "integrity": "sha512-jjk/lqTeNL0azUx5ZYzVrl4NgaDIrdzTNE4mABV9yBFI7FQqN7pIgzV1bTleUezP2QiTGA1BFTqY8MegDgWX9A==",
"license": "MIT",
"dependencies": {
"@radix-ui/react-compose-refs": "1.1.3",
@@ -1380,18 +1694,18 @@
}
},
"node_modules/@radix-ui/react-hover-card": {
- "version": "1.1.18",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.18.tgz",
- "integrity": "sha512-rt+Fx4HoCeEwFL2IdoV2QaPltqDLlzxN77i9nwB3Y70scFlfAHh1QCdE2TXKuFJtA1TNygb0oivnFBZifgtZOw==",
+ "version": "1.1.19",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.19.tgz",
+ "integrity": "sha512-2KTgMLQtKvicznQgbindEI2RZ3QbDIwU5gabjUPwFJsormjGDz+rUvO4NANmYwzEEpTcTONUt33vBHIfTIVSfw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-dismissable-layer": "1.1.14",
- "@radix-ui/react-popper": "1.3.2",
+ "@radix-ui/react-context": "1.2.0",
+ "@radix-ui/react-dismissable-layer": "1.1.15",
+ "@radix-ui/react-popper": "1.3.3",
"@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-presence": "1.1.7",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-controllable-state": "1.2.3"
},
@@ -1452,25 +1766,25 @@
}
},
"node_modules/@radix-ui/react-menu": {
- "version": "2.1.19",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.19.tgz",
- "integrity": "sha512-Mht9BVd1AIsNFVQr4KG3bIK7XQn5IXF0TL/2ObsrzOdc1loaly/+kBDL5roSCYn8j8XZkvpOD0WYLz2FQtH1Eg==",
+ "version": "2.1.20",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.20.tgz",
+ "integrity": "sha512-VsUrXxFe9d2ScbZF0fR/oPR1+qjyeLs5p0jzG8h90puMoA9bq4SirYlXbE+USRg9Q2qTeJSFNqjw2nts8jJe4w==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-collection": "1.1.11",
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-collection": "1.1.12",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.14",
+ "@radix-ui/react-dismissable-layer": "1.1.15",
"@radix-ui/react-focus-guards": "1.1.4",
- "@radix-ui/react-focus-scope": "1.1.11",
+ "@radix-ui/react-focus-scope": "1.1.12",
"@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-popper": "1.3.2",
+ "@radix-ui/react-popper": "1.3.3",
"@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-presence": "1.1.7",
"@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.14",
+ "@radix-ui/react-roving-focus": "1.1.15",
"@radix-ui/react-slot": "1.3.0",
"@radix-ui/react-use-callback-ref": "1.1.2",
"aria-hidden": "^1.2.4",
@@ -1492,20 +1806,20 @@
}
},
"node_modules/@radix-ui/react-menubar": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.19.tgz",
- "integrity": "sha512-Glt6mebxcgQvLeVkH3HiqV5bgQubE+31ELxLs7q0GlYI5k0XYkOkeuPrhXoylxK8eufvIt9CJjzY1TfFMXK3qw==",
+ "version": "1.1.20",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.20.tgz",
+ "integrity": "sha512-gzFZvybgmwYsFBWDqanycIoEYnhyk8MMnuLamdFVHUZYGp4COM+sqXiwbnn0VMWqGLeeU7GV7jm+dXRa+Wufag==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-collection": "1.1.11",
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-collection": "1.1.12",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-direction": "1.1.2",
"@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-menu": "2.1.19",
+ "@radix-ui/react-menu": "2.1.20",
"@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.14",
+ "@radix-ui/react-roving-focus": "1.1.15",
"@radix-ui/react-use-controllable-state": "1.2.3"
},
"peerDependencies": {
@@ -1524,19 +1838,19 @@
}
},
"node_modules/@radix-ui/react-navigation-menu": {
- "version": "1.2.17",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.17.tgz",
- "integrity": "sha512-fYeYQvbeNn5AQk2RBbpO7koLm2YbS00UYxC/IL2sgLlninEH5UNIv+X3E0KJ1Vy4WIo+dhN9w8GNqSHhbHWCIg==",
+ "version": "1.2.18",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.18.tgz",
+ "integrity": "sha512-K9HiuxZ6xCwSaHcIuUpxyhy4w5gpwzWjh9dHTSbMN3Ix4qAyVObS9RlU3zMycb0PO3v9Tpk0BXMwWvXOUbVXew==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-collection": "1.1.11",
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-collection": "1.1.12",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.14",
+ "@radix-ui/react-dismissable-layer": "1.1.15",
"@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-presence": "1.1.7",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-callback-ref": "1.1.2",
"@radix-ui/react-use-controllable-state": "1.2.3",
@@ -1560,21 +1874,21 @@
}
},
"node_modules/@radix-ui/react-popover": {
- "version": "1.1.18",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.18.tgz",
- "integrity": "sha512-qdXDes+eHlnMUGlBAAAe5EG7oOQvqsXuq4mq585diMudg80iB+jHbsSeG3+Q4eWNsogNyhqU2p/3i+Y0iEepqg==",
+ "version": "1.1.19",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.19.tgz",
+ "integrity": "sha512-jkrTdQVxnIB8fpn0NyyxW9CTB5aCXZZelVz5z+Xmii6g5WxMqS3fInNslZ63puP39+Puu4jYohUK31y3dT87gQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-dismissable-layer": "1.1.14",
+ "@radix-ui/react-context": "1.2.0",
+ "@radix-ui/react-dismissable-layer": "1.1.15",
"@radix-ui/react-focus-guards": "1.1.4",
- "@radix-ui/react-focus-scope": "1.1.11",
+ "@radix-ui/react-focus-scope": "1.1.12",
"@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-popper": "1.3.2",
+ "@radix-ui/react-popper": "1.3.3",
"@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-presence": "1.1.7",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-slot": "1.3.0",
"@radix-ui/react-use-controllable-state": "1.2.3",
@@ -1597,15 +1911,15 @@
}
},
"node_modules/@radix-ui/react-popper": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.3.2.tgz",
- "integrity": "sha512-3QXNeMkdshed1MR3LNoiCirBywRFPkD8ETJa/HlPuLwSajaQixf2ro+isoDNJlGABg9ug41XuZpINZJIle4XWg==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.3.3.tgz",
+ "integrity": "sha512-mS7dGpyjv6b+gsDjLF7e0ia1W4Im1B1hSCy2yuXlHuvnZxHKagfDaobt/KAKt27EpZMit2pss8eJBVyVjEWM+g==",
"license": "MIT",
"dependencies": {
"@floating-ui/react-dom": "^2.0.0",
"@radix-ui/react-arrow": "1.1.11",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-callback-ref": "1.1.2",
"@radix-ui/react-use-layout-effect": "1.1.2",
@@ -1653,9 +1967,9 @@
}
},
"node_modules/@radix-ui/react-presence": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.6.tgz",
- "integrity": "sha512-zdTk4PlUO0E18HnZ3wYbW0KkJJxWCdiNYp6g6X1PtONFhxVkg01vliTJAmwIszU6mHiyBOoW9P0rAugl5/hULQ==",
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.7.tgz",
+ "integrity": "sha512-zBZ4QM5XG3JRanDmqXYf3MD6th4AFXFmgU6KNMFzUaV6F3uw9I5/zjMUvFriSEn5ewo1nxuibvyxJdmLlDcslA==",
"license": "MIT",
"dependencies": {
"@radix-ui/react-use-layout-effect": "1.1.2"
@@ -1699,12 +2013,12 @@
}
},
"node_modules/@radix-ui/react-progress": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.11.tgz",
- "integrity": "sha512-KqiGJcFaZDc+BvveAgU3ZhACg2MvSUDrCBx4lRR/ZVRNal0bvt8lBpvnSkep9heeOuF8Qfw3fszLDX4OpQ2NVw==",
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.12.tgz",
+ "integrity": "sha512-ZPHyI0JyzoH/rP0tq2uRaIZTj/4s8+kAbqPz+e2N8+ejHvwPJ889dHhqn+vh7PNvNeq+boAoH9yzqeoShzwF2w==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-primitive": "2.1.7"
},
"peerDependencies": {
@@ -1723,18 +2037,18 @@
}
},
"node_modules/@radix-ui/react-radio-group": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.4.2.tgz",
- "integrity": "sha512-W8Uo9riHnlzLLWy+r2mVHUyuEWqD/+be4PZzbEvaGoFSBDHkm+GYWjtcE6u3AmPKNyfanWpnVfpZ2GqPCdzzsw==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.4.3.tgz",
+ "integrity": "sha512-WwZFjWV4s3aC1QtR3k04R+oANHtX2q6fgKlc7MCEiDNlnTxCZ3H8k3mHtEgVlOejystwk1WQgarQhNOQZ2bK1g==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-presence": "1.1.7",
"@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.14",
+ "@radix-ui/react-roving-focus": "1.1.15",
"@radix-ui/react-use-controllable-state": "1.2.3",
"@radix-ui/react-use-previous": "1.1.2",
"@radix-ui/react-use-size": "1.1.2"
@@ -1755,20 +2069,22 @@
}
},
"node_modules/@radix-ui/react-roving-focus": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.14.tgz",
- "integrity": "sha512-8Qcnx9447tx/aCBgw6Jenfqg4Skq+vqab9mCBmuGNipIS5YXvL275wbKEu7+ICYHIlAPgCduUMJH1XOYewKF6Q==",
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.15.tgz",
+ "integrity": "sha512-40svmmugfM3mUN7VUDGVE1tQGOhyi8enlGD0CNJEcMM36C1f71PKM21DFgNHUfem0XnA+d8H8oN3Z9ZpJjSslg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-collection": "1.1.11",
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-collection": "1.1.12",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-direction": "1.1.2",
"@radix-ui/react-id": "1.1.2",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-controllable-state": "1.2.3"
+ "@radix-ui/react-use-controllable-state": "1.2.3",
+ "@radix-ui/react-use-is-hydrated": "0.1.1",
+ "@radix-ui/react-use-layout-effect": "1.1.2"
},
"peerDependencies": {
"@types/react": "*",
@@ -1786,17 +2102,17 @@
}
},
"node_modules/@radix-ui/react-scroll-area": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.13.tgz",
- "integrity": "sha512-7tncSubo2G0UY1e8rk+72qe3XRzrGnOLtZQ1PL1KoBfRUNX0NrJT5akb+0kfwSCc3gVR4wdHqyhAQBDpDNOwDw==",
+ "version": "1.2.14",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.14.tgz",
+ "integrity": "sha512-bBODCWZK7JTbQLHs0uIP4f73wIWatakK4OS33UzkR1x897wu0PuO658a3f+6P2GEGyDzGYMuHRatMVoAk9WZTw==",
"license": "MIT",
"dependencies": {
"@radix-ui/number": "1.1.2",
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-presence": "1.1.7",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-callback-ref": "1.1.2",
"@radix-ui/react-use-layout-effect": "1.1.2"
@@ -1817,24 +2133,24 @@
}
},
"node_modules/@radix-ui/react-select": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.3.2.tgz",
- "integrity": "sha512-brXD6C/V0fVK0DDbscLVw6LsXrjQ+ay8jdOBaN+tLb4vsHsAMm6Gt6eT77wHX1Eq8GPtD5rJ+RxFtfDozsb4+Q==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.3.3.tgz",
+ "integrity": "sha512-L5RQTXz6Anxsf9CCv+pTgiAsUpyVj7rJxsGtmhFaEOJ++cVfXucv4qWfsIO0AIB4NAhi3yovWGVMKKS1Xf1Wrg==",
"license": "MIT",
"dependencies": {
"@radix-ui/number": "1.1.2",
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-collection": "1.1.11",
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-collection": "1.1.12",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.14",
+ "@radix-ui/react-dismissable-layer": "1.1.15",
"@radix-ui/react-focus-guards": "1.1.4",
- "@radix-ui/react-focus-scope": "1.1.11",
+ "@radix-ui/react-focus-scope": "1.1.12",
"@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-popper": "1.3.2",
+ "@radix-ui/react-popper": "1.3.3",
"@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-presence": "1.1.7",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-slot": "1.3.0",
"@radix-ui/react-use-callback-ref": "1.1.2",
@@ -1884,16 +2200,16 @@
}
},
"node_modules/@radix-ui/react-slider": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.4.2.tgz",
- "integrity": "sha512-qt5C1ppJz66aUDrH1VccjPrq7aFchK0wBrn6xsxlCHNUyE57dRRQ7lp1QFpF7OscMexZF8MCGBTVBlENHPkNiA==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.4.3.tgz",
+ "integrity": "sha512-CWVVj+XaTom0SKCqw1EUgb0NuiLwS+N3OFG73mVEezKEjgNIvZiu0EevMelSSU+CbX3owbqJweG2gPU31WGC5A==",
"license": "MIT",
"dependencies": {
"@radix-ui/number": "1.1.2",
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-collection": "1.1.11",
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-collection": "1.1.12",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-direction": "1.1.2",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-controllable-state": "1.2.3",
@@ -1935,14 +2251,14 @@
}
},
"node_modules/@radix-ui/react-switch": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.3.2.tgz",
- "integrity": "sha512-tgRBI3DdNwAJYE4BBZyZcz/HRRCvAsPkRvG1wvKc+41tBGMxPn/a87T/wikXAvyDypNQ9kaZwHbeZe+veHCGpA==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.3.3.tgz",
+ "integrity": "sha512-1+mlB4/lxJfk5tgJ4g+R5mUCbRpPE1T9+UsEyeLYbGgMtwiMgmuTnfKz4Mw1nHALHjuwyxw4MLd4cSHn6pNSlQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-controllable-state": "1.2.3",
"@radix-ui/react-use-previous": "1.1.2",
@@ -1964,18 +2280,18 @@
}
},
"node_modules/@radix-ui/react-tabs": {
- "version": "1.1.16",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.16.tgz",
- "integrity": "sha512-v3Ab2l7z6U7tRB4xA0IyKdq0OsqaO1o9ZjsIEoKKnSZ/l96mZz8aCTX0NCXw+YVHJXr8Km4d+Mn6/Q8YjXa+gw==",
+ "version": "1.1.17",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.17.tgz",
+ "integrity": "sha512-nRyXnrAVCwjeXcHbvEbLS6ndbTeKHG1RqCP4A8Gw5L4cemDzPXdD8rAmr6wet0v57R69wGvuIIsFjHSVkZiMzQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-direction": "1.1.2",
"@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-presence": "1.1.7",
"@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.14",
+ "@radix-ui/react-roving-focus": "1.1.15",
"@radix-ui/react-use-controllable-state": "1.2.3"
},
"peerDependencies": {
@@ -1994,12 +2310,12 @@
}
},
"node_modules/@radix-ui/react-toggle": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.13.tgz",
- "integrity": "sha512-bI2ILJrzwgmAsH05TsJ9pVrzqQwAip7OM2/krqAdYn0R16bl86UPWbe5VPHsALat0EnqpV01cGtkleaUKPNdNg==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.14.tgz",
+ "integrity": "sha512-QI/hB65XKWACA66P64A+aHxtLUgHJeJLkaQa+awUNXT6T3swndtY5DojeHA+vldrTspMTtFBd7HfZ9QGbM1Qrw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-controllable-state": "1.2.3"
},
@@ -2019,17 +2335,17 @@
}
},
"node_modules/@radix-ui/react-toggle-group": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.14.tgz",
- "integrity": "sha512-TK1vusNKb8IRhF23FTbRgUNZ9zfs5rGIyI7LfR3h26p9LrQ060i0uW9QWeD8baZMddaaP0DBGlIa6pbZG+mitg==",
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.15.tgz",
+ "integrity": "sha512-gIC5Q+Xljg7lmUdzSuDoy0t97yZn1sZl00Ra37ZvKrYdWnQLU6sWLd09yG8cIB9jUAlQfHgJ2ACAG00MFwsqSQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
+ "@radix-ui/react-context": "1.2.0",
"@radix-ui/react-direction": "1.1.2",
"@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.14",
- "@radix-ui/react-toggle": "1.1.13",
+ "@radix-ui/react-roving-focus": "1.1.15",
+ "@radix-ui/react-toggle": "1.1.14",
"@radix-ui/react-use-controllable-state": "1.2.3"
},
"peerDependencies": {
@@ -2048,19 +2364,19 @@
}
},
"node_modules/@radix-ui/react-tooltip": {
- "version": "1.2.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.11.tgz",
- "integrity": "sha512-8XZ6Py3y3W2nEzAUGCN5cfVKaUi+CVApcz1d6lrNVVf2hvYEixMRkq8k9ggPKnQUpRRuOV5avt8uvxViH2jLwA==",
+ "version": "1.2.12",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.12.tgz",
+ "integrity": "sha512-U3HoftgWnmla78vzQbLvKKb7bUYJxoiiqYFzp1wu/TBMyDqMZSuCl3aRICsD6EfVEwcJD2mumGDGUXLFVqQHKA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/primitive": "1.1.5",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-dismissable-layer": "1.1.14",
+ "@radix-ui/react-context": "1.2.0",
+ "@radix-ui/react-dismissable-layer": "1.1.15",
"@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-popper": "1.3.2",
+ "@radix-ui/react-popper": "1.3.3",
"@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-presence": "1.1.7",
"@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-slot": "1.3.0",
"@radix-ui/react-use-controllable-state": "1.2.3",
@@ -2244,9 +2560,9 @@
"license": "MIT"
},
"node_modules/@rolldown/binding-android-arm64": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz",
- "integrity": "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz",
+ "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==",
"cpu": [
"arm64"
],
@@ -2260,9 +2576,9 @@
}
},
"node_modules/@rolldown/binding-darwin-arm64": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz",
- "integrity": "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz",
+ "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==",
"cpu": [
"arm64"
],
@@ -2276,9 +2592,9 @@
}
},
"node_modules/@rolldown/binding-darwin-x64": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz",
- "integrity": "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz",
+ "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==",
"cpu": [
"x64"
],
@@ -2292,9 +2608,9 @@
}
},
"node_modules/@rolldown/binding-freebsd-x64": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz",
- "integrity": "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz",
+ "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==",
"cpu": [
"x64"
],
@@ -2308,9 +2624,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz",
- "integrity": "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz",
+ "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==",
"cpu": [
"arm"
],
@@ -2324,12 +2640,15 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-gnu": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz",
- "integrity": "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz",
+ "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==",
"cpu": [
"arm64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -2340,12 +2659,15 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-musl": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz",
- "integrity": "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz",
+ "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==",
"cpu": [
"arm64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -2356,12 +2678,15 @@
}
},
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz",
- "integrity": "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz",
+ "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==",
"cpu": [
"ppc64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -2372,12 +2697,15 @@
}
},
"node_modules/@rolldown/binding-linux-s390x-gnu": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz",
- "integrity": "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz",
+ "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==",
"cpu": [
"s390x"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -2388,12 +2716,15 @@
}
},
"node_modules/@rolldown/binding-linux-x64-gnu": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz",
- "integrity": "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz",
+ "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==",
"cpu": [
"x64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -2404,12 +2735,15 @@
}
},
"node_modules/@rolldown/binding-linux-x64-musl": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz",
- "integrity": "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz",
+ "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==",
"cpu": [
"x64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -2420,9 +2754,9 @@
}
},
"node_modules/@rolldown/binding-openharmony-arm64": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz",
- "integrity": "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz",
+ "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==",
"cpu": [
"arm64"
],
@@ -2436,9 +2770,9 @@
}
},
"node_modules/@rolldown/binding-wasm32-wasi": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz",
- "integrity": "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz",
+ "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==",
"cpu": [
"wasm32"
],
@@ -2475,9 +2809,9 @@
}
},
"node_modules/@rolldown/binding-win32-arm64-msvc": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz",
- "integrity": "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz",
+ "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==",
"cpu": [
"arm64"
],
@@ -2491,9 +2825,9 @@
}
},
"node_modules/@rolldown/binding-win32-x64-msvc": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz",
- "integrity": "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz",
+ "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==",
"cpu": [
"x64"
],
@@ -2653,6 +2987,9 @@
"cpu": [
"arm64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -2669,6 +3006,9 @@
"cpu": [
"arm64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -2685,6 +3025,9 @@
"cpu": [
"x64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -2701,6 +3044,9 @@
"cpu": [
"x64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -2785,6 +3131,86 @@
"vite": "^5.2.0 || ^6 || ^7 || ^8"
}
},
+ "node_modules/@tanstack/devtools-client": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/@tanstack/devtools-client/-/devtools-client-0.0.8.tgz",
+ "integrity": "sha512-cG3iZkGWCwN330bLBKa8+9r4Of2AXNoz2zUqcsy/4XsD3105ghVBx78cGyvJj9fSclNomPxoqAnDGXXhg1WLvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tanstack/devtools-event-client": "^0.5.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/devtools-event-bus": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@tanstack/devtools-event-bus/-/devtools-event-bus-0.4.2.tgz",
+ "integrity": "sha512-2LHzhwBFlKHCcklsQrGe8TeyjHd4XAF8nuCO6wHmva5fePUkJUULbu6CsCNAlGlCi0KkEsMXZSvRdR4HgMq4yA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ws": "^8.18.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/devtools-event-client": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@tanstack/devtools-event-client/-/devtools-event-client-0.5.0.tgz",
+ "integrity": "sha512-H+OH3zC6Vhu/K0NaVfQKknEKawc/+2PT+D3SB3Ox0V8SiMlTo0abbmH2rH0721R2aNYbjdMXA1oENOd8E2UVoA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "intent": "bin/intent.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/devtools-vite": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/devtools-vite/-/devtools-vite-0.8.1.tgz",
+ "integrity": "sha512-oQxOo0fI0bwhHtw/psFlIR0OS/bsKrirBxwnw2vuhCM4bjt3k4EZZsW/lvZ1+Vpouhts7LSyvngnxvGXbQ1sUQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tanstack/devtools-client": "0.0.8",
+ "@tanstack/devtools-event-bus": "0.4.2",
+ "chalk": "^5.6.2",
+ "launch-editor": "^2.11.1",
+ "magic-string": "^0.30.0",
+ "oxc-parser": "^0.120.0",
+ "picomatch": "^4.0.3"
+ },
+ "bin": {
+ "intent": "bin/intent.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
"node_modules/@tanstack/history": {
"version": "1.162.0",
"resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.162.0.tgz",
@@ -2825,14 +3251,14 @@
}
},
"node_modules/@tanstack/react-router": {
- "version": "1.170.16",
- "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.170.16.tgz",
- "integrity": "sha512-w6eq1IJklujs1tESazaK/FxH0+H2l8vm/QPuu1cD3oRW/ubgKneQpd7b64ti/8gUyEimzimJQZDmJr6YHfP5+g==",
+ "version": "1.170.17",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.170.17.tgz",
+ "integrity": "sha512-ppLkjCfSMaeug9rmFRYzOd4TIqWV+yTE7tzIny7alJsSnM7w4lzEZm6eqCehG0SPetpZ0R3K+UnanSmBgOAVcQ==",
"license": "MIT",
"dependencies": {
"@tanstack/history": "1.162.0",
"@tanstack/react-store": "^0.9.3",
- "@tanstack/router-core": "1.171.13",
+ "@tanstack/router-core": "1.171.14",
"isbot": "^5.1.22"
},
"engines": {
@@ -2848,19 +3274,19 @@
}
},
"node_modules/@tanstack/react-start": {
- "version": "1.168.26",
- "resolved": "https://registry.npmjs.org/@tanstack/react-start/-/react-start-1.168.26.tgz",
- "integrity": "sha512-ZzNecqKWC0p2643/kIcFUdsMrXZ8A4dXm4Yfe9zV/Y0u14MtSkh/Sk76RQYIU5S84VyDyKhHo0Ffh8HQbLdvFw==",
+ "version": "1.168.27",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-start/-/react-start-1.168.27.tgz",
+ "integrity": "sha512-rdGFDqfCW71gyofyAxaYxhelNKmeVjpmbpm0uFYbNHORCa///4aBxi7B7ecShibKv9O4GfJ66MPX5F0ozbm+ig==",
"license": "MIT",
"dependencies": {
- "@tanstack/react-router": "1.170.16",
- "@tanstack/react-start-client": "1.168.14",
- "@tanstack/react-start-rsc": "0.1.25",
- "@tanstack/react-start-server": "1.167.20",
+ "@tanstack/react-router": "1.170.17",
+ "@tanstack/react-start-client": "1.168.15",
+ "@tanstack/react-start-rsc": "0.1.26",
+ "@tanstack/react-start-server": "1.167.21",
"@tanstack/router-utils": "1.162.2",
- "@tanstack/start-client-core": "1.170.12",
- "@tanstack/start-plugin-core": "1.171.18",
- "@tanstack/start-server-core": "1.169.15",
+ "@tanstack/start-client-core": "1.170.13",
+ "@tanstack/start-plugin-core": "1.171.19",
+ "@tanstack/start-server-core": "1.169.16",
"pathe": "^2.0.3"
},
"engines": {
@@ -2889,14 +3315,14 @@
}
},
"node_modules/@tanstack/react-start-client": {
- "version": "1.168.14",
- "resolved": "https://registry.npmjs.org/@tanstack/react-start-client/-/react-start-client-1.168.14.tgz",
- "integrity": "sha512-oaz43fdOhBWfOPsdLkp3IejwYEXRyeaZ4CYexOPZx3eVXzm4LLozvNkkkBE9aje1sM5MVC2Yo6+cyv2HdVzkHQ==",
+ "version": "1.168.15",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-start-client/-/react-start-client-1.168.15.tgz",
+ "integrity": "sha512-pW50PHvadgi50iNCw6deUOvqc9rzs30SstyFZY2tcS9z1XlqTlELSvGowjxdu2m0ymtqm1emj1jau1iP7+3+PQ==",
"license": "MIT",
"dependencies": {
- "@tanstack/react-router": "1.170.16",
- "@tanstack/router-core": "1.171.13",
- "@tanstack/start-client-core": "1.170.12"
+ "@tanstack/react-router": "1.170.17",
+ "@tanstack/router-core": "1.171.14",
+ "@tanstack/start-client-core": "1.170.13"
},
"engines": {
"node": ">=22.12.0"
@@ -2911,19 +3337,19 @@
}
},
"node_modules/@tanstack/react-start-rsc": {
- "version": "0.1.25",
- "resolved": "https://registry.npmjs.org/@tanstack/react-start-rsc/-/react-start-rsc-0.1.25.tgz",
- "integrity": "sha512-Rwm6cjcS148y2XAebr8jyrwU0SqsRSkW4/CuXesoHg+G3IOnVRHV0HOylJfnznUTVuH1nVhfQRPI5uWPJaw2TA==",
+ "version": "0.1.26",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-start-rsc/-/react-start-rsc-0.1.26.tgz",
+ "integrity": "sha512-+FMm3qtT1gWsl0i5sG/Q70mh1k7tzZUsPBaqbg4v34zVJZ+XGn1mJb34x2w7z1M0/e7co6GkZfV8BRpczrs8UA==",
"license": "MIT",
"dependencies": {
- "@tanstack/react-router": "1.170.16",
- "@tanstack/router-core": "1.171.13",
+ "@tanstack/react-router": "1.170.17",
+ "@tanstack/router-core": "1.171.14",
"@tanstack/router-utils": "1.162.2",
- "@tanstack/start-client-core": "1.170.12",
+ "@tanstack/start-client-core": "1.170.13",
"@tanstack/start-fn-stubs": "1.162.0",
- "@tanstack/start-plugin-core": "1.171.18",
- "@tanstack/start-server-core": "1.169.15",
- "@tanstack/start-storage-context": "1.167.15",
+ "@tanstack/start-plugin-core": "1.171.19",
+ "@tanstack/start-server-core": "1.169.16",
+ "@tanstack/start-storage-context": "1.167.16",
"pathe": "^2.0.3"
},
"engines": {
@@ -2953,14 +3379,14 @@
}
},
"node_modules/@tanstack/react-start-server": {
- "version": "1.167.20",
- "resolved": "https://registry.npmjs.org/@tanstack/react-start-server/-/react-start-server-1.167.20.tgz",
- "integrity": "sha512-hg9xVI6yNDu+6NCalKz1h3Ea18HZEUu35i/ZMJz1WadwqcArLMp41nM1GNhOAtGIdpycrp9tT7ccqc9zuRMRpQ==",
+ "version": "1.167.21",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-start-server/-/react-start-server-1.167.21.tgz",
+ "integrity": "sha512-puJ7eFxaLuDzeM/tiLDJaXCA4uK+PZnEOoIC73zipsFqx865MGzrRS/GSZxeVxjavC5iHU+ZwC+rgI0qYSol1A==",
"license": "MIT",
"dependencies": {
- "@tanstack/react-router": "1.170.16",
- "@tanstack/router-core": "1.171.13",
- "@tanstack/start-server-core": "1.169.15"
+ "@tanstack/react-router": "1.170.17",
+ "@tanstack/router-core": "1.171.14",
+ "@tanstack/start-server-core": "1.169.16"
},
"engines": {
"node": ">=22.12.0"
@@ -2993,9 +3419,9 @@
}
},
"node_modules/@tanstack/router-core": {
- "version": "1.171.13",
- "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.171.13.tgz",
- "integrity": "sha512-+NOwEj1kO/6IGmpHRIZHasYxYWpyBQGNIZAST9aNrk9Q3YlU9SgqVnl1pbLa9qAKfeNdXQIRve0RQb/0kyDeDA==",
+ "version": "1.171.14",
+ "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.171.14.tgz",
+ "integrity": "sha512-Mo3hwx0qB0cJsVYGDjG0+Ouf7VV74h/vsoDMGztdlyzDanp4gBA2s7IVvm6hFrmQM6GpD9F0Z7SqD7OldfLE7g==",
"license": "MIT",
"dependencies": {
"@tanstack/history": "1.162.0",
@@ -3012,13 +3438,13 @@
}
},
"node_modules/@tanstack/router-generator": {
- "version": "1.167.17",
- "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.167.17.tgz",
- "integrity": "sha512-xtB9tB2Ws0tWR6Pi7nc3Qk9IYgoh1mQCKWjHqIl9tf6BNUpKoqniJoPAQ4+LGrK8FeZYU0o0p/qlZEyj9FAulA==",
+ "version": "1.167.18",
+ "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.167.18.tgz",
+ "integrity": "sha512-kFvM4caRds9Q3EXg64bZubJ6rbDxyV0YDSBSGvOGzmKspQPdz5Xrh0uj5T1Ov8avUUg+c761u04VQAaEzSBXRw==",
"license": "MIT",
"dependencies": {
"@babel/types": "^7.28.5",
- "@tanstack/router-core": "1.171.13",
+ "@tanstack/router-core": "1.171.14",
"@tanstack/router-utils": "1.162.2",
"@tanstack/virtual-file-routes": "1.162.0",
"jiti": "^2.7.0",
@@ -3044,16 +3470,16 @@
}
},
"node_modules/@tanstack/router-plugin": {
- "version": "1.168.18",
- "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.168.18.tgz",
- "integrity": "sha512-MofS28/axfnfnhOD2RSgJEaU882aX5RsAzhGz5Vc4XhAmvCjy919u9JrNs4QsTWFbTD1P7IJ8WFlFVsrg0pStg==",
+ "version": "1.168.19",
+ "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.168.19.tgz",
+ "integrity": "sha512-aFglwLc+bbPTgZlkXn3PvOwpjJAfgUyPGSuql4MP3XrqTTh6WkBiy2RYb6oaG5h0s7EKwivEuq85K3Y4V0Mt1g==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.28.5",
"@babel/template": "^7.27.2",
"@babel/types": "^7.28.5",
- "@tanstack/router-core": "1.171.13",
- "@tanstack/router-generator": "1.167.17",
+ "@tanstack/router-core": "1.171.14",
+ "@tanstack/router-generator": "1.167.18",
"@tanstack/router-utils": "1.162.2",
"chokidar": "^5.0.0",
"unplugin": "^3.0.0",
@@ -3068,7 +3494,7 @@
},
"peerDependencies": {
"@rsbuild/core": ">=1.0.2 || ^2.0.0",
- "@tanstack/react-router": "^1.170.15",
+ "@tanstack/react-router": "^1.170.17",
"vite": ">=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0",
"vite-plugin-solid": "^2.11.10 || ^3.0.0-0",
"webpack": ">=5.92.0"
@@ -3124,14 +3550,14 @@
}
},
"node_modules/@tanstack/start-client-core": {
- "version": "1.170.12",
- "resolved": "https://registry.npmjs.org/@tanstack/start-client-core/-/start-client-core-1.170.12.tgz",
- "integrity": "sha512-gwtZRMPUIAxmDV2AIQUhC0kSW262SV7BkHXEgy5B1woHQdrdsELuGOdJwdweLxrjyefORxk+9MYGqDY0Cxn0bw==",
+ "version": "1.170.13",
+ "resolved": "https://registry.npmjs.org/@tanstack/start-client-core/-/start-client-core-1.170.13.tgz",
+ "integrity": "sha512-o37M3msIK5ec87kPrIYJWXb1XPnjIe5/jrkGLXiXpFuVL99z7mhoBCzftKtVPtzqI8EElnRE/VGFYT9BHNnWcw==",
"license": "MIT",
"dependencies": {
- "@tanstack/router-core": "1.171.13",
+ "@tanstack/router-core": "1.171.14",
"@tanstack/start-fn-stubs": "1.162.0",
- "@tanstack/start-storage-context": "1.167.15",
+ "@tanstack/start-storage-context": "1.167.16",
"seroval": "^1.5.4"
},
"engines": {
@@ -3156,19 +3582,19 @@
}
},
"node_modules/@tanstack/start-plugin-core": {
- "version": "1.171.18",
- "resolved": "https://registry.npmjs.org/@tanstack/start-plugin-core/-/start-plugin-core-1.171.18.tgz",
- "integrity": "sha512-weuOOjRD03BiKcF9NYKL5QADEQOp3yGHb0qIsOX42ENz5XUE4in2fXcVYHjSwwpzs+XGhWIFLp5J385pOVPuZQ==",
+ "version": "1.171.19",
+ "resolved": "https://registry.npmjs.org/@tanstack/start-plugin-core/-/start-plugin-core-1.171.19.tgz",
+ "integrity": "sha512-+fpW3Z/2vPT8HDV1c5p2WC6/g2k/AV/ujdJVDcn/VFd+gXRtzSX1D/LfozlaDbhDoEsqOnAk/mGwjg60JkUA2Q==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "7.27.1",
"@babel/core": "^7.28.5",
"@babel/types": "^7.28.5",
- "@tanstack/router-core": "1.171.13",
- "@tanstack/router-generator": "1.167.17",
- "@tanstack/router-plugin": "1.168.18",
+ "@tanstack/router-core": "1.171.14",
+ "@tanstack/router-generator": "1.167.18",
+ "@tanstack/router-plugin": "1.168.19",
"@tanstack/router-utils": "1.162.2",
- "@tanstack/start-server-core": "1.169.15",
+ "@tanstack/start-server-core": "1.169.16",
"exsolve": "^1.0.7",
"lightningcss": "^1.32.0",
"pathe": "^2.0.3",
@@ -3226,15 +3652,15 @@
}
},
"node_modules/@tanstack/start-server-core": {
- "version": "1.169.15",
- "resolved": "https://registry.npmjs.org/@tanstack/start-server-core/-/start-server-core-1.169.15.tgz",
- "integrity": "sha512-V8ie2G2Ecb3Nklk8/QuKzulxb+tDUqgz6rjJe8Isdp4iKVXZu/TscItkUP/4Q5Bu7W4gUy3P25O6soC1oW1SXQ==",
+ "version": "1.169.16",
+ "resolved": "https://registry.npmjs.org/@tanstack/start-server-core/-/start-server-core-1.169.16.tgz",
+ "integrity": "sha512-lvAjQpH3nHJtd4xy0iHIaWbsTbyN9EBxuYCxbtXH0EpeBQPg+TCPhu9GQC9WbbA1rE//s82CpE55oYDQMqkU5A==",
"license": "MIT",
"dependencies": {
"@tanstack/history": "1.162.0",
- "@tanstack/router-core": "1.171.13",
- "@tanstack/start-client-core": "1.170.12",
- "@tanstack/start-storage-context": "1.167.15",
+ "@tanstack/router-core": "1.171.14",
+ "@tanstack/start-client-core": "1.170.13",
+ "@tanstack/start-storage-context": "1.167.16",
"fetchdts": "^0.1.6",
"h3-v2": "npm:h3@2.0.1-rc.20",
"seroval": "^1.5.4"
@@ -3248,12 +3674,12 @@
}
},
"node_modules/@tanstack/start-storage-context": {
- "version": "1.167.15",
- "resolved": "https://registry.npmjs.org/@tanstack/start-storage-context/-/start-storage-context-1.167.15.tgz",
- "integrity": "sha512-Jy0q4vdG6pv76N92+X+ag3fuOV2zINQagYyMN1/es7tPI1vzpKECIU8AqHqzI6ahkwaph7XDvmfUkiLJ3i4LOA==",
+ "version": "1.167.16",
+ "resolved": "https://registry.npmjs.org/@tanstack/start-storage-context/-/start-storage-context-1.167.16.tgz",
+ "integrity": "sha512-zTegxlij4BC1DbCrC6rsVlMOQVMzOuG5IllacZEkrUdhiFwMIMYpk0VWGH+d0ucx5RBkmv8e8GNX3AOVBWclfg==",
"license": "MIT",
"dependencies": {
- "@tanstack/router-core": "1.171.13"
+ "@tanstack/router-core": "1.171.14"
},
"engines": {
"node": ">=22.12.0"
@@ -3429,9 +3855,9 @@
}
},
"node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz",
+ "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==",
"license": "MIT",
"dependencies": {
"@types/unist": "*"
@@ -3460,9 +3886,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.20.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.0.tgz",
- "integrity": "sha512-QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==",
+ "version": "22.20.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz",
+ "integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -3495,17 +3921,17 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.62.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.62.1.tgz",
- "integrity": "sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA==",
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.63.0.tgz",
+ "integrity": "sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.62.1",
- "@typescript-eslint/type-utils": "8.62.1",
- "@typescript-eslint/utils": "8.62.1",
- "@typescript-eslint/visitor-keys": "8.62.1",
+ "@typescript-eslint/scope-manager": "8.63.0",
+ "@typescript-eslint/type-utils": "8.63.0",
+ "@typescript-eslint/utils": "8.63.0",
+ "@typescript-eslint/visitor-keys": "8.63.0",
"ignore": "^7.0.5",
"natural-compare": "^1.4.0",
"ts-api-utils": "^2.5.0"
@@ -3518,15 +3944,15 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.62.1",
+ "@typescript-eslint/parser": "^8.63.0",
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
- "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz",
+ "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3534,16 +3960,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.62.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.62.1.tgz",
- "integrity": "sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA==",
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.63.0.tgz",
+ "integrity": "sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.62.1",
- "@typescript-eslint/types": "8.62.1",
- "@typescript-eslint/typescript-estree": "8.62.1",
- "@typescript-eslint/visitor-keys": "8.62.1",
+ "@typescript-eslint/scope-manager": "8.63.0",
+ "@typescript-eslint/types": "8.63.0",
+ "@typescript-eslint/typescript-estree": "8.63.0",
+ "@typescript-eslint/visitor-keys": "8.63.0",
"debug": "^4.4.3"
},
"engines": {
@@ -3559,14 +3985,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.62.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.62.1.tgz",
- "integrity": "sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg==",
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.63.0.tgz",
+ "integrity": "sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.62.1",
- "@typescript-eslint/types": "^8.62.1",
+ "@typescript-eslint/tsconfig-utils": "^8.63.0",
+ "@typescript-eslint/types": "^8.63.0",
"debug": "^4.4.3"
},
"engines": {
@@ -3581,14 +4007,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.62.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.1.tgz",
- "integrity": "sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg==",
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.63.0.tgz",
+ "integrity": "sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.62.1",
- "@typescript-eslint/visitor-keys": "8.62.1"
+ "@typescript-eslint/types": "8.63.0",
+ "@typescript-eslint/visitor-keys": "8.63.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3599,9 +4025,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.62.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.1.tgz",
- "integrity": "sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g==",
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.63.0.tgz",
+ "integrity": "sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3616,15 +4042,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.62.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.62.1.tgz",
- "integrity": "sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg==",
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.63.0.tgz",
+ "integrity": "sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.62.1",
- "@typescript-eslint/typescript-estree": "8.62.1",
- "@typescript-eslint/utils": "8.62.1",
+ "@typescript-eslint/types": "8.63.0",
+ "@typescript-eslint/typescript-estree": "8.63.0",
+ "@typescript-eslint/utils": "8.63.0",
"debug": "^4.4.3",
"ts-api-utils": "^2.5.0"
},
@@ -3641,9 +4067,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.62.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.1.tgz",
- "integrity": "sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q==",
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.63.0.tgz",
+ "integrity": "sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3655,16 +4081,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.62.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.1.tgz",
- "integrity": "sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA==",
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.63.0.tgz",
+ "integrity": "sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.62.1",
- "@typescript-eslint/tsconfig-utils": "8.62.1",
- "@typescript-eslint/types": "8.62.1",
- "@typescript-eslint/visitor-keys": "8.62.1",
+ "@typescript-eslint/project-service": "8.63.0",
+ "@typescript-eslint/tsconfig-utils": "8.63.0",
+ "@typescript-eslint/types": "8.63.0",
+ "@typescript-eslint/visitor-keys": "8.63.0",
"debug": "^4.4.3",
"minimatch": "^10.2.2",
"semver": "^7.7.3",
@@ -3735,16 +4161,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.62.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.1.tgz",
- "integrity": "sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g==",
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.63.0.tgz",
+ "integrity": "sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.62.1",
- "@typescript-eslint/types": "8.62.1",
- "@typescript-eslint/typescript-estree": "8.62.1"
+ "@typescript-eslint/scope-manager": "8.63.0",
+ "@typescript-eslint/types": "8.63.0",
+ "@typescript-eslint/typescript-estree": "8.63.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3759,13 +4185,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.62.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.1.tgz",
- "integrity": "sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g==",
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.63.0.tgz",
+ "integrity": "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.62.1",
+ "@typescript-eslint/types": "8.63.0",
"eslint-visitor-keys": "^5.0.0"
},
"engines": {
@@ -3790,9 +4216,9 @@
}
},
"node_modules/@ungap/structured-clone": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.2.tgz",
- "integrity": "sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz",
+ "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==",
"license": "ISC"
},
"node_modules/@vitejs/plugin-react": {
@@ -3881,47 +4307,6 @@
"node": ">=14"
}
},
- "node_modules/any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/anymatch/node_modules/picomatch": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
- "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/arg": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -3970,9 +4355,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.10.40",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.40.tgz",
- "integrity": "sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==",
+ "version": "2.10.42",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz",
+ "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==",
"license": "Apache-2.0",
"bin": {
"baseline-browser-mapping": "dist/cli.cjs"
@@ -3981,23 +4366,10 @@
"node": ">=6.0.0"
}
},
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/brace-expansion": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz",
- "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==",
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz",
+ "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4005,23 +4377,10 @@
"concat-map": "0.0.1"
}
},
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/browserslist": {
- "version": "4.28.4",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.4.tgz",
- "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==",
+ "version": "4.28.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz",
+ "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==",
"funding": [
{
"type": "opencollective",
@@ -4038,10 +4397,10 @@
],
"license": "MIT",
"dependencies": {
- "baseline-browser-mapping": "^2.10.38",
- "caniuse-lite": "^1.0.30001799",
- "electron-to-chromium": "^1.5.376",
- "node-releases": "^2.0.48",
+ "baseline-browser-mapping": "^2.10.42",
+ "caniuse-lite": "^1.0.30001800",
+ "electron-to-chromium": "^1.5.387",
+ "node-releases": "^2.0.50",
"update-browserslist-db": "^1.2.3"
},
"bin": {
@@ -4061,20 +4420,10 @@
"node": ">=6"
}
},
- "node_modules/camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/caniuse-lite": {
- "version": "1.0.30001800",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001800.tgz",
- "integrity": "sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==",
+ "version": "1.0.30001803",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz",
+ "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==",
"funding": [
{
"type": "opencollective",
@@ -4102,17 +4451,13 @@
}
},
"node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
"engines": {
- "node": ">=10"
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
@@ -4240,16 +4585,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -4295,9 +4630,9 @@
}
},
"node_modules/crossws": {
- "version": "0.4.7",
- "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.4.7.tgz",
- "integrity": "sha512-N+BXE5AetLJ3/glz4DYLirKApAWg+V2guueoMenvAGVvqF/IA1PAzMYqYS+UfBkdz3tDXoQIevDaaxLy1Ch/4w==",
+ "version": "0.4.9",
+ "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.4.9.tgz",
+ "integrity": "sha512-iWx+1OMSG2aOHpjyf9AESOzkwsVdS49cXM9dVrI2PDhxU5l2RIWE/KG56gk4BbAnsMoycvniJ9OnOxO9LRzHVA==",
"devOptional": true,
"license": "MIT",
"peerDependencies": {
@@ -4309,19 +4644,6 @@
}
}
},
- "node_modules/cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/csstype": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
@@ -4580,13 +4902,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/didyoumean": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
- "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/diff": {
"version": "8.0.4",
"resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz",
@@ -4596,13 +4911,6 @@
"node": ">=0.3.1"
}
},
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/dom-helpers": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
@@ -4614,9 +4922,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.383",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.383.tgz",
- "integrity": "sha512-I2484/KkAvl8lm9VyjH2JnbOIV0d/UCqT7gbzs6l+o6Vmn9wgB66uVcKX+Vk6HrXtY6fbWTOEXuv8waDTuFNCw==",
+ "version": "1.5.389",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz",
+ "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==",
"license": "ISC"
},
"node_modules/embla-carousel": {
@@ -4661,16 +4969,16 @@
}
},
"node_modules/env-runner": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/env-runner/-/env-runner-0.1.15.tgz",
- "integrity": "sha512-Xiu7VUW1jlwEiZSGWJ5Wuv9D4iSC2JwIB3Bb/RI+1DBSCeCrCpdAwRvsi3e52wETPUBkV61b0Ixfi593hQmQ6w==",
+ "version": "0.1.16",
+ "resolved": "https://registry.npmjs.org/env-runner/-/env-runner-0.1.16.tgz",
+ "integrity": "sha512-2LRJM4P2KLX6J83QZZrMqvgCDt/D5ea7wPcI3yYiy5cG/9rX5QwdwZFx0D7ktWnjdRyZxYjttGGorb5nFqb1CA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "crossws": "^0.4.6",
+ "crossws": "^0.4.8",
"exsolve": "^1.1.0",
- "httpxy": "^0.5.3",
- "srvx": "^0.11.17"
+ "httpxy": "^0.5.4",
+ "srvx": "^0.11.19"
},
"bin": {
"env-runner": "dist/cli.mjs"
@@ -4696,16 +5004,6 @@
}
}
},
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -4729,9 +5027,9 @@
}
},
"node_modules/eslint": {
- "version": "9.39.4",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz",
- "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==",
+ "version": "9.39.5",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz",
+ "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4740,8 +5038,8 @@
"@eslint/config-array": "^0.21.2",
"@eslint/config-helpers": "^0.4.2",
"@eslint/core": "^0.17.0",
- "@eslint/eslintrc": "^3.3.5",
- "@eslint/js": "9.39.4",
+ "@eslint/eslintrc": "^3.3.6",
+ "@eslint/js": "9.39.5",
"@eslint/plugin-kit": "^0.4.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
@@ -4888,6 +5186,23 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
"node_modules/espree": {
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
@@ -4995,44 +5310,14 @@
"license": "Apache-2.0"
},
"node_modules/fast-equals": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz",
- "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==",
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.1.tgz",
+ "integrity": "sha512-DjlFSM5Pk9cGcL0q5QXl66eGzx0N6szNgaswwc5ZphlBohjTVJSnGgI+rJVOgOi65qUoQnDZN4nDqi33udtydQ==",
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -5047,16 +5332,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/fastq": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
- "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
"node_modules/fdir": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
@@ -5093,19 +5368,6 @@
"node": ">=16.0.0"
}
},
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -5185,16 +5447,6 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -5252,14 +5504,14 @@
"license": "ISC"
},
"node_modules/h3": {
- "version": "2.0.1-rc.22",
- "resolved": "https://registry.npmjs.org/h3/-/h3-2.0.1-rc.22.tgz",
- "integrity": "sha512-Esv0DMIuPkCTSWCA0vO73vcTqwzH1wjSrAO1TXNu/K3up1sZHa9EKMapbmxCDYBeymC3fVTk4qxp7ogQWQ+KgA==",
+ "version": "2.0.1-rc.24",
+ "resolved": "https://registry.npmjs.org/h3/-/h3-2.0.1-rc.24.tgz",
+ "integrity": "sha512-saxpbF+/oPUCVvdkrcjiXhH5b7US1tul9qe0w9t6FMMBXYeuTB1tPxSEY8AFsA6g9sT8VmQGN7jERxdX5ew1Ow==",
"dev": true,
"license": "MIT",
"dependencies": {
- "rou3": "^0.8.1",
- "srvx": "^0.11.15"
+ "rou3": "^0.9.1",
+ "srvx": "^0.11.21"
},
"bin": {
"h3": "bin/h3.mjs"
@@ -5268,7 +5520,7 @@
"node": ">=20.11.1"
},
"peerDependencies": {
- "crossws": "^0.4.1"
+ "crossws": "^0.4.9"
},
"peerDependenciesMeta": {
"crossws": {
@@ -5301,6 +5553,13 @@
}
}
},
+ "node_modules/h3/node_modules/rou3": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/rou3/-/rou3-0.9.1.tgz",
+ "integrity": "sha512-z/sSmzvtwMDDnxsPVhfWMuG6F6mbmhFDXoVqLmMfbpDD9qfV3GDmSQpf0+W296/ZDIpW2wcMmBfpVFzcnOi/nA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -5311,19 +5570,6 @@
"node": ">=8"
}
},
- "node_modules/hasown": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
- "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/hast-util-sanitize": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-5.0.2.tgz",
@@ -5397,9 +5643,9 @@
}
},
"node_modules/httpxy": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/httpxy/-/httpxy-0.5.4.tgz",
- "integrity": "sha512-URfeibL0kTH6VuIxxaJDXWQWEk8fKr+9L8MGv6CuAiNy0fGnoVhWbXBvJR1mkdsvCDUxvhX9cW60k2AhtH5s6w==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/httpxy/-/httpxy-0.5.5.tgz",
+ "integrity": "sha512-uDjmnPyp1q4Sgzf3w+J/Fc6UqcCEj0x4Wjp7OqK5dGhNeDgpyrAmnS6ey8QWrX3SWDon2DMKf9sBa5X9+CVyMA==",
"dev": true,
"license": "MIT"
},
@@ -5489,35 +5735,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.16.2",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
- "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/is-decimal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
@@ -5561,16 +5778,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
"node_modules/is-plain-obj": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
@@ -5584,9 +5791,9 @@
}
},
"node_modules/isbot": {
- "version": "5.1.44",
- "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.44.tgz",
- "integrity": "sha512-PGEHtwMnKbZpeSEXW2Utx+/JWed7dp6DiH0WWg33vGSDA7RUvpUeJSVlLrVkQ1RCpvDOUc/eH9ql7VsdbBZ8pA==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.2.0.tgz",
+ "integrity": "sha512-gbZiGCb4B5xaoxg9mS7koAyRdvJnArk10VLSHOgz6rtBG93/pi1xOFaVvXMKZ7JXgyZ8zAbNRK5uIBdIUTFSqw==",
"license": "Unlicense",
"engines": {
"node": ">=18"
@@ -5691,6 +5898,17 @@
"json-buffer": "3.0.1"
}
},
+ "node_modules/launch-editor": {
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.1.tgz",
+ "integrity": "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picocolors": "^1.1.1",
+ "shell-quote": "^1.8.4"
+ }
+ },
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -5781,879 +5999,261 @@
"cpu": [
"x64"
],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-freebsd-x64": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
- "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
- "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
- "cpu": [
- "arm"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
- "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
- "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
- "cpu": [
- "arm64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
- "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-musl": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
- "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-arm64-msvc": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
- "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
- "cpu": [
- "arm64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
- "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lilconfig": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
- "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antonk52"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
- "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
- "license": "MIT"
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/longest-streak": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
- "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "license": "MIT",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/lottie-react": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lottie-react/-/lottie-react-2.4.1.tgz",
- "integrity": "sha512-LQrH7jlkigIIv++wIyrOYFLHSKQpEY4zehPicL9bQsrt1rnoKRYCYgpCUe5maqylNtacy58/sQDZTkwMcTRxZw==",
- "license": "MIT",
- "dependencies": {
- "lottie-web": "^5.10.2"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/lottie-web": {
- "version": "5.13.0",
- "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.13.0.tgz",
- "integrity": "sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==",
- "license": "MIT"
- },
- "node_modules/lovable-tagger": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lovable-tagger/-/lovable-tagger-1.2.0.tgz",
- "integrity": "sha512-L7Qvc51gYlJSdvdIbUrUw/gsG9JFGBWOmW9vbVYwW7sBnI436p4M50aTh3wpBrdfdR38tHavUSNYLxCm8FBesw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "tailwindcss": "^3.4.17"
- },
- "peerDependencies": {
- "vite": ">=5.0.0 <9.0.0"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
- "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/android-arm": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
- "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/android-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
- "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/android-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
- "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
- "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/darwin-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
- "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
- "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
- "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/linux-arm": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
- "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/linux-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
- "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/linux-ia32": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
- "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/linux-loong64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
- "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
- "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
- "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
- "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/linux-s390x": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
- "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/linux-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
- "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lovable-tagger/node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
- "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
- "netbsd"
+ "darwin"
],
"engines": {
- "node": ">=18"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/lovable-tagger/node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
- "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
"cpu": [
"x64"
],
- "dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
- "netbsd"
+ "freebsd"
],
"engines": {
- "node": ">=18"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/lovable-tagger/node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
- "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
"cpu": [
- "arm64"
+ "arm"
],
- "dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
- "openbsd"
+ "linux"
],
"engines": {
- "node": ">=18"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/lovable-tagger/node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
- "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
"cpu": [
- "x64"
+ "arm64"
],
- "dev": true,
- "license": "MIT",
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
"optional": true,
"os": [
- "openbsd"
+ "linux"
],
"engines": {
- "node": ">=18"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/lovable-tagger/node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
- "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
"cpu": [
"arm64"
],
- "dev": true,
- "license": "MIT",
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
"optional": true,
"os": [
- "openharmony"
+ "linux"
],
"engines": {
- "node": ">=18"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/lovable-tagger/node_modules/@esbuild/sunos-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
- "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
"cpu": [
"x64"
],
- "dev": true,
- "license": "MIT",
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
"optional": true,
"os": [
- "sunos"
+ "linux"
],
"engines": {
- "node": ">=18"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/lovable-tagger/node_modules/@esbuild/win32-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
- "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
"cpu": [
- "arm64"
+ "x64"
],
- "dev": true,
- "license": "MIT",
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
"optional": true,
"os": [
- "win32"
+ "linux"
],
"engines": {
- "node": ">=18"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/lovable-tagger/node_modules/@esbuild/win32-ia32": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
- "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
"cpu": [
- "ia32"
+ "arm64"
],
- "dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=18"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/lovable-tagger/node_modules/@esbuild/win32-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
- "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
"cpu": [
"x64"
],
- "dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=18"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/lovable-tagger/node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
+ "p-locate": "^5.0.0"
},
"engines": {
- "node": ">= 8.10.0"
+ "node": ">=10"
},
"funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/lovable-tagger/node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
+ "node_modules/lodash": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
+ "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
+ "license": "MIT"
},
- "node_modules/lovable-tagger/node_modules/esbuild": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
- "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.12",
- "@esbuild/android-arm": "0.25.12",
- "@esbuild/android-arm64": "0.25.12",
- "@esbuild/android-x64": "0.25.12",
- "@esbuild/darwin-arm64": "0.25.12",
- "@esbuild/darwin-x64": "0.25.12",
- "@esbuild/freebsd-arm64": "0.25.12",
- "@esbuild/freebsd-x64": "0.25.12",
- "@esbuild/linux-arm": "0.25.12",
- "@esbuild/linux-arm64": "0.25.12",
- "@esbuild/linux-ia32": "0.25.12",
- "@esbuild/linux-loong64": "0.25.12",
- "@esbuild/linux-mips64el": "0.25.12",
- "@esbuild/linux-ppc64": "0.25.12",
- "@esbuild/linux-riscv64": "0.25.12",
- "@esbuild/linux-s390x": "0.25.12",
- "@esbuild/linux-x64": "0.25.12",
- "@esbuild/netbsd-arm64": "0.25.12",
- "@esbuild/netbsd-x64": "0.25.12",
- "@esbuild/openbsd-arm64": "0.25.12",
- "@esbuild/openbsd-x64": "0.25.12",
- "@esbuild/openharmony-arm64": "0.25.12",
- "@esbuild/sunos-x64": "0.25.12",
- "@esbuild/win32-arm64": "0.25.12",
- "@esbuild/win32-ia32": "0.25.12",
- "@esbuild/win32-x64": "0.25.12"
- }
- },
- "node_modules/lovable-tagger/node_modules/jiti": {
- "version": "1.21.7",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
- "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true,
- "license": "MIT",
- "bin": {
- "jiti": "bin/jiti.js"
- }
+ "license": "MIT"
},
- "node_modules/lovable-tagger/node_modules/picomatch": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
- "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
- "dev": true,
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
"license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
"funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/lovable-tagger/node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"license": "MIT",
"dependencies": {
- "picomatch": "^2.2.1"
+ "js-tokens": "^3.0.0 || ^4.0.0"
},
- "engines": {
- "node": ">=8.10.0"
+ "bin": {
+ "loose-envify": "cli.js"
}
},
- "node_modules/lovable-tagger/node_modules/tailwindcss": {
- "version": "3.4.19",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz",
- "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==",
- "dev": true,
+ "node_modules/lottie-react": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lottie-react/-/lottie-react-2.4.1.tgz",
+ "integrity": "sha512-LQrH7jlkigIIv++wIyrOYFLHSKQpEY4zehPicL9bQsrt1rnoKRYCYgpCUe5maqylNtacy58/sQDZTkwMcTRxZw==",
"license": "MIT",
"dependencies": {
- "@alloc/quick-lru": "^5.2.0",
- "arg": "^5.0.2",
- "chokidar": "^3.6.0",
- "didyoumean": "^1.2.2",
- "dlv": "^1.1.3",
- "fast-glob": "^3.3.2",
- "glob-parent": "^6.0.2",
- "is-glob": "^4.0.3",
- "jiti": "^1.21.7",
- "lilconfig": "^3.1.3",
- "micromatch": "^4.0.8",
- "normalize-path": "^3.0.0",
- "object-hash": "^3.0.0",
- "picocolors": "^1.1.1",
- "postcss": "^8.4.47",
- "postcss-import": "^15.1.0",
- "postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0",
- "postcss-nested": "^6.2.0",
- "postcss-selector-parser": "^6.1.2",
- "resolve": "^1.22.8",
- "sucrase": "^3.35.0"
- },
- "bin": {
- "tailwind": "lib/cli.js",
- "tailwindcss": "lib/cli.js"
+ "lottie-web": "^5.10.2"
},
- "engines": {
- "node": ">=14.0.0"
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
+ "node_modules/lottie-web": {
+ "version": "5.13.0",
+ "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.13.0.tgz",
+ "integrity": "sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==",
+ "license": "MIT"
+ },
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -6973,16 +6573,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/micromark": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
@@ -7546,33 +7136,6 @@
],
"license": "MIT"
},
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/micromatch/node_modules/picomatch": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
- "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/minimatch": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
@@ -7607,18 +7170,6 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT"
},
- "node_modules/mz": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "any-promise": "^1.0.0",
- "object-assign": "^4.0.1",
- "thenify-all": "^1.0.0"
- }
- },
"node_modules/nanoid": {
"version": "3.3.15",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz",
@@ -7645,9 +7196,9 @@
"license": "MIT"
},
"node_modules/nf3": {
- "version": "0.3.18",
- "resolved": "https://registry.npmjs.org/nf3/-/nf3-0.3.18.tgz",
- "integrity": "sha512-lFvZrVZXN4FQYoV1iGiZ5RAzfzjbjQvm0MBdLvQKqvnOfkh09btu1tzI/RdIKrdIoRKL12XYlwdbcB0QwM3m6Q==",
+ "version": "0.3.21",
+ "resolved": "https://registry.npmjs.org/nf3/-/nf3-0.3.21.tgz",
+ "integrity": "sha512-DJ1Ss/jfUdqETSbouezgAyh6NmD3r2NnpX7Vhwz7nPTc8TvqFddJ/tMgYDwhWU4H/vTOUXDYG3sWsB9vGBX/HA==",
"dev": true,
"license": "MIT"
},
@@ -7717,13 +7268,11 @@
}
},
"node_modules/nitro/node_modules/lru-cache": {
- "version": "11.5.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz",
- "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==",
- "dev": true,
+ "version": "11.5.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz",
+ "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==",
+ "extraneous": true,
"license": "BlueOak-1.0.0",
- "optional": true,
- "peer": true,
"engines": {
"node": "20 || >=22"
}
@@ -7832,41 +7381,21 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.50",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.50.tgz",
- "integrity": "sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==",
+ "version": "2.0.51",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz",
+ "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-hash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
- "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
- "dev": true,
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"license": "MIT",
"engines": {
- "node": ">= 6"
+ "node": ">=0.10.0"
}
},
"node_modules/ocache": {
@@ -7911,6 +7440,44 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/oxc-parser": {
+ "version": "0.120.0",
+ "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.120.0.tgz",
+ "integrity": "sha512-WyPWZlcIm+Fkte63FGfgFB8mAAk33aH9h5N9lphXVOHSXEBFFsmYdOBedVKly363aWABjZdaj/m9lBfEY4wt+w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@oxc-project/types": "^0.120.0"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/Boshen"
+ },
+ "optionalDependencies": {
+ "@oxc-parser/binding-android-arm-eabi": "0.120.0",
+ "@oxc-parser/binding-android-arm64": "0.120.0",
+ "@oxc-parser/binding-darwin-arm64": "0.120.0",
+ "@oxc-parser/binding-darwin-x64": "0.120.0",
+ "@oxc-parser/binding-freebsd-x64": "0.120.0",
+ "@oxc-parser/binding-linux-arm-gnueabihf": "0.120.0",
+ "@oxc-parser/binding-linux-arm-musleabihf": "0.120.0",
+ "@oxc-parser/binding-linux-arm64-gnu": "0.120.0",
+ "@oxc-parser/binding-linux-arm64-musl": "0.120.0",
+ "@oxc-parser/binding-linux-ppc64-gnu": "0.120.0",
+ "@oxc-parser/binding-linux-riscv64-gnu": "0.120.0",
+ "@oxc-parser/binding-linux-riscv64-musl": "0.120.0",
+ "@oxc-parser/binding-linux-s390x-gnu": "0.120.0",
+ "@oxc-parser/binding-linux-x64-gnu": "0.120.0",
+ "@oxc-parser/binding-linux-x64-musl": "0.120.0",
+ "@oxc-parser/binding-openharmony-arm64": "0.120.0",
+ "@oxc-parser/binding-wasm32-wasi": "0.120.0",
+ "@oxc-parser/binding-win32-arm64-msvc": "0.120.0",
+ "@oxc-parser/binding-win32-ia32-msvc": "0.120.0",
+ "@oxc-parser/binding-win32-x64-msvc": "0.120.0"
+ }
+ },
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -8001,13 +7568,6 @@
"node": ">=8"
}
},
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/pathe": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
@@ -8021,9 +7581,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
- "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -8032,26 +7592,6 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
- "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/postcss": {
"version": "8.5.16",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz",
@@ -8080,140 +7620,6 @@
"node": "^10 || ^12 || >=14"
}
},
- "node_modules/postcss-import": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
- "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "postcss-value-parser": "^4.0.0",
- "read-cache": "^1.0.0",
- "resolve": "^1.1.7"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/postcss-js": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
- "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "camelcase-css": "^2.0.1"
- },
- "engines": {
- "node": "^12 || ^14 || >= 16"
- },
- "peerDependencies": {
- "postcss": "^8.4.21"
- }
- },
- "node_modules/postcss-load-config": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
- "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "lilconfig": "^3.1.1"
- },
- "engines": {
- "node": ">= 18"
- },
- "peerDependencies": {
- "jiti": ">=1.21.0",
- "postcss": ">=8.0.9",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "jiti": {
- "optional": true
- },
- "postcss": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- },
- "node_modules/postcss-nested": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
- "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "postcss-selector-parser": "^6.1.1"
- },
- "engines": {
- "node": ">=12.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.14"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.1.4",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz",
- "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -8225,9 +7631,9 @@
}
},
"node_modules/prettier": {
- "version": "3.9.4",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.4.tgz",
- "integrity": "sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==",
+ "version": "3.9.5",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.5.tgz",
+ "integrity": "sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==",
"license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
@@ -8289,27 +7695,6 @@
"node": ">=6"
}
},
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
"node_modules/react": {
"version": "19.2.7",
"resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz",
@@ -8354,9 +7739,9 @@
}
},
"node_modules/react-hook-form": {
- "version": "7.80.0",
- "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.80.0.tgz",
- "integrity": "sha512-4P+fk6oXsxY+6xSj7Euhc2sumQD8zQqCuVHoJwoyp9EchP+IUW9OESB7uHFJOKsIBQ4MQqYE84INJFqUCYNoOg==",
+ "version": "7.81.0",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.81.0.tgz",
+ "integrity": "sha512-ocbmr2p5KBMoAfj4WCUvped33lVi1Kd5DuDUvQDnB6VEAacOjPI/jMbtDdbhco4y9ct4xUuCmMY0b/C9L0QHjw==",
"license": "MIT",
"engines": {
"node": ">=18.0.0"
@@ -8460,9 +7845,9 @@
}
},
"node_modules/react-resizable-panels": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-4.12.0.tgz",
- "integrity": "sha512-t/Gp57qSCxGQ52ckhz+8lM7dnuymeU95TEzl2U203qEbGkSLHrtm7US2/ANzq/zOlja3CwPTAfCDuh1unv9mfw==",
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-4.12.1.tgz",
+ "integrity": "sha512-ElE/UpOvMLRWtAqbCgyizHXcbws8RPMyN3cBqmdY17Nxr5f01+DEwzOLqhgcy68GSnjtIUFgKWKl8aIgx5aypQ==",
"license": "MIT",
"peerDependencies": {
"react": "^18.0.0 || ^19.0.0",
@@ -8522,16 +7907,6 @@
"react-dom": ">=16.6.0"
}
},
- "node_modules/read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pify": "^2.3.0"
- }
- },
"node_modules/readdirp": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz",
@@ -8658,28 +8033,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/resolve": {
- "version": "1.22.12",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
- "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "is-core-module": "^2.16.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -8690,24 +8043,13 @@
"node": ">=4"
}
},
- "node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
"node_modules/rolldown": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz",
- "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz",
+ "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==",
"license": "MIT",
"dependencies": {
- "@oxc-project/types": "=0.137.0",
+ "@oxc-project/types": "=0.139.0",
"@rolldown/pluginutils": "^1.0.0"
},
"bin": {
@@ -8717,21 +8059,30 @@
"node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
- "@rolldown/binding-android-arm64": "1.1.3",
- "@rolldown/binding-darwin-arm64": "1.1.3",
- "@rolldown/binding-darwin-x64": "1.1.3",
- "@rolldown/binding-freebsd-x64": "1.1.3",
- "@rolldown/binding-linux-arm-gnueabihf": "1.1.3",
- "@rolldown/binding-linux-arm64-gnu": "1.1.3",
- "@rolldown/binding-linux-arm64-musl": "1.1.3",
- "@rolldown/binding-linux-ppc64-gnu": "1.1.3",
- "@rolldown/binding-linux-s390x-gnu": "1.1.3",
- "@rolldown/binding-linux-x64-gnu": "1.1.3",
- "@rolldown/binding-linux-x64-musl": "1.1.3",
- "@rolldown/binding-openharmony-arm64": "1.1.3",
- "@rolldown/binding-wasm32-wasi": "1.1.3",
- "@rolldown/binding-win32-arm64-msvc": "1.1.3",
- "@rolldown/binding-win32-x64-msvc": "1.1.3"
+ "@rolldown/binding-android-arm64": "1.1.5",
+ "@rolldown/binding-darwin-arm64": "1.1.5",
+ "@rolldown/binding-darwin-x64": "1.1.5",
+ "@rolldown/binding-freebsd-x64": "1.1.5",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.1.5",
+ "@rolldown/binding-linux-arm64-gnu": "1.1.5",
+ "@rolldown/binding-linux-arm64-musl": "1.1.5",
+ "@rolldown/binding-linux-ppc64-gnu": "1.1.5",
+ "@rolldown/binding-linux-s390x-gnu": "1.1.5",
+ "@rolldown/binding-linux-x64-gnu": "1.1.5",
+ "@rolldown/binding-linux-x64-musl": "1.1.5",
+ "@rolldown/binding-openharmony-arm64": "1.1.5",
+ "@rolldown/binding-wasm32-wasi": "1.1.5",
+ "@rolldown/binding-win32-arm64-msvc": "1.1.5",
+ "@rolldown/binding-win32-x64-msvc": "1.1.5"
+ }
+ },
+ "node_modules/rolldown/node_modules/@oxc-project/types": {
+ "version": "0.139.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz",
+ "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/Boshen"
}
},
"node_modules/rolldown/node_modules/@rolldown/pluginutils": {
@@ -8746,30 +8097,6 @@
"integrity": "sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==",
"license": "MIT"
},
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
"node_modules/scheduler": {
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
@@ -8786,18 +8113,18 @@
}
},
"node_modules/seroval": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.5.4.tgz",
- "integrity": "sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.5.5.tgz",
+ "integrity": "sha512-bSjOuPcwPKLSJNhr9+bZxA20nQxVle5J5MNsYRVE6cIg7KpRLXGupymePavu0jrxlPiPsr4xGZSB8yUY2sH2sw==",
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/seroval-plugins": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.5.4.tgz",
- "integrity": "sha512-S0xQPhUTefAhNvNWFg0c1J8qJArHt5KdtJ/cFAofo06KD1MVSeFWyl4iiu+ApDIuw0WhjpOfCdgConOfAnLgkw==",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.5.5.tgz",
+ "integrity": "sha512-+BDhqYM6CEn3x09v44dpa9p6974FuUB2dxk+Ctn04k0cO1Zt6QODTXfmEZK0eBaTe/fJBvP4NMGuNJ+R8T+QMg==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -8829,6 +8156,19 @@
"node": ">=8"
}
},
+ "node_modules/shell-quote": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.10.0.tgz",
+ "integrity": "sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/sonner": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz",
@@ -8868,9 +8208,9 @@
}
},
"node_modules/srvx": {
- "version": "0.11.18",
- "resolved": "https://registry.npmjs.org/srvx/-/srvx-0.11.18.tgz",
- "integrity": "sha512-7/EW5sPdC1bU7iq1tgTvCZqUQDkJdsqIVzYqBv7SuBfQQ10oWkKj4KYNOw0H4Ig26bXuUYDA7XTKxB+/HC5SRw==",
+ "version": "0.11.21",
+ "resolved": "https://registry.npmjs.org/srvx/-/srvx-0.11.21.tgz",
+ "integrity": "sha512-GWTHjKMeekX8CwJf4VU9Oo6mJpSGaflGMddbCvR+Cmmh9sslRMiGbAoqqZacE0r1ncARh6buCEETr2W52F8b1w==",
"license": "MIT",
"bin": {
"srvx": "bin/srvx.mjs"
@@ -8924,29 +8264,6 @@
"inline-style-parser": "0.2.7"
}
},
- "node_modules/sucrase": {
- "version": "3.35.1",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
- "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.2",
- "commander": "^4.0.0",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "tinyglobby": "^0.2.11",
- "ts-interface-checker": "^0.1.9"
- },
- "bin": {
- "sucrase": "bin/sucrase",
- "sucrase-node": "bin/sucrase-node"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -8960,19 +8277,6 @@
"node": ">=8"
}
},
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/synckit": {
"version": "0.11.13",
"resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz",
@@ -9018,29 +8322,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/thenify": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
- "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "any-promise": "^1.0.0"
- }
- },
- "node_modules/thenify-all": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
- "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "thenify": ">= 3.1.0 < 4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/tiny-invariant": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
@@ -9063,19 +8344,6 @@
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
"node_modules/trim-lines": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
@@ -9109,13 +8377,6 @@
"typescript": ">=4.8.4"
}
},
- "node_modules/ts-interface-checker": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/tsconfck": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz",
@@ -9180,16 +8441,16 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.62.1",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.62.1.tgz",
- "integrity": "sha512-vymnnM5g0AKQDSAyfP12nMIBvgwgA42syg74kkuZ4x1VuTzwQKwc5h9rGxeShCjny5o+zWAb6OEoz7XLgrIkIw==",
+ "version": "8.63.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.63.0.tgz",
+ "integrity": "sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.62.1",
- "@typescript-eslint/parser": "8.62.1",
- "@typescript-eslint/typescript-estree": "8.62.1",
- "@typescript-eslint/utils": "8.62.1"
+ "@typescript-eslint/eslint-plugin": "8.63.0",
+ "@typescript-eslint/parser": "8.63.0",
+ "@typescript-eslint/typescript-estree": "8.63.0",
+ "@typescript-eslint/utils": "8.63.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -9459,13 +8720,6 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/vaul": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz",
@@ -9530,15 +8784,15 @@
}
},
"node_modules/vite": {
- "version": "8.1.2",
- "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.2.tgz",
- "integrity": "sha512-6YYPbRXTxx6bRXmOn7XdnQAy5DQNHhDgtjhDHI13oe4pY93kkcdGJWxpGwOm++/Wh0QpQhDrpIoVMrmrsI5AGQ==",
+ "version": "8.1.4",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.4.tgz",
+ "integrity": "sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==",
"license": "MIT",
"dependencies": {
"lightningcss": "^1.32.0",
- "picomatch": "^4.0.4",
+ "picomatch": "^4.0.5",
"postcss": "^8.5.16",
- "rolldown": "~1.1.3",
+ "rolldown": "~1.1.4",
"tinyglobby": "^0.2.17"
},
"bin": {
@@ -9671,6 +8925,28 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ws": {
+ "version": "8.21.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
+ "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
"node_modules/xmlbuilder2": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-4.0.3.tgz",
diff --git a/frontend/src/mocks/seed.ts b/frontend/src/mocks/seed.ts
index 75c84b18..2d87cf5c 100644
--- a/frontend/src/mocks/seed.ts
+++ b/frontend/src/mocks/seed.ts
@@ -219,6 +219,14 @@ export const builders: Builder[] = [
];
export const projects: Project[] = [
+<<<<<<< HEAD
+ { id: "p1", name: "AI Chatbot", description: "Multi-agent customer support bot for SaaS.", stack: ["React", "Node.js", "MongoDB"], owner: "Nancy Patel", members: 4, stars: 24, forks: 12, progress: 75, status: "in-progress", icon: "๐ค", language: "JavaScript", difficulty: "intermediate", remote: true, paid: true, openSource: false, ai: true, web: true, frontend: true, backend: true },
+ { id: "p2", name: "AI SaaS Platform", description: "Full-stack platform with billing and dashboards.", stack: ["Next.js", "Python", "PostgreSQL"], owner: "Nancy Patel", members: 6, stars: 18, forks: 8, progress: 40, status: "in-progress", icon: "โจ", language: "Python", difficulty: "advanced", remote: true, paid: true, openSource: false, ai: true, web: true, frontend: true, backend: true },
+ { id: "p3", name: "DevOps Dashboard", description: "K8s deploy monitoring with drift detection.", stack: ["Docker", "Kubernetes", "AWS"], owner: "Nancy Patel", members: 3, stars: 16, forks: 6, progress: 60, status: "in-progress", icon: "๐", language: "Go", difficulty: "advanced", remote: true, paid: false, openSource: false, ai: false, web: true, backend: true },
+ { id: "p4", name: "Blockchain Wallet", description: "Non-custodial multi-chain wallet.", stack: ["Solidity", "Web3", "React"], owner: "Nancy Patel", members: 5, stars: 14, forks: 7, progress: 25, status: "recruiting", icon: "๐ช", language: "TypeScript", difficulty: "advanced", remote: true, paid: false, openSource: true, ai: false, web: true, mobile: true, frontend: true },
+ { id: "p5", name: "React Component Library", description: "Accessible component library with docs.", stack: ["TypeScript", "Tailwind", "Storybook"], owner: "Nancy Patel", members: 2, stars: 12, forks: 5, progress: 90, status: "in-progress", icon: "๐งฉ", language: "TypeScript", difficulty: "beginner", remote: true, paid: false, openSource: true, ai: false, web: true, frontend: true },
+ { id: "p6", name: "Open Source CRM", description: "Lightweight CRM with pipelines and reports.", stack: ["React", "Node.js", "MongoDB"], owner: "Community", members: 8, stars: 240, forks: 96, progress: 100, status: "completed", icon: "๐", language: "JavaScript", difficulty: "intermediate", remote: false, paid: false, openSource: true, ai: false, web: true, frontend: true, backend: true },
+=======
{
id: "p1",
name: "AI Chatbot",
@@ -349,6 +357,7 @@ export const projects: Project[] = [
frontend: true,
backend: true,
},
+>>>>>>> upstream/main
];
export const activity: Activity[] = [
diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts
index 2b5768f8..bfb1fc5f 100644
--- a/frontend/src/routeTree.gen.ts
+++ b/frontend/src/routeTree.gen.ts
@@ -13,6 +13,7 @@ import { Route as ForgotPasswordRouteImport } from './routes/forgot-password'
import { Route as AuthRouteImport } from './routes/auth'
import { Route as AppRouteImport } from './routes/_app'
import { Route as IndexRouteImport } from './routes/index'
+import { Route as PortfolioUsernameRouteImport } from './routes/portfolio.$username'
import { Route as AppSettingsRouteImport } from './routes/_app.settings'
import { Route as AppSearchRouteImport } from './routes/_app.search'
import { Route as AppProjectsRouteImport } from './routes/_app.projects'
@@ -48,6 +49,11 @@ const IndexRoute = IndexRouteImport.update({
path: '/',
getParentRoute: () => rootRouteImport,
} as any)
+const PortfolioUsernameRoute = PortfolioUsernameRouteImport.update({
+ id: '/portfolio/$username',
+ path: '/portfolio/$username',
+ getParentRoute: () => rootRouteImport,
+} as any)
const AppSettingsRoute = AppSettingsRouteImport.update({
id: '/settings',
path: '/settings',
@@ -140,6 +146,7 @@ export interface FileRoutesByFullPath {
'/projects': typeof AppProjectsRouteWithChildren
'/search': typeof AppSearchRoute
'/settings': typeof AppSettingsRoute
+ '/portfolio/$username': typeof PortfolioUsernameRoute
'/builders/$builderId': typeof AppBuildersBuilderIdRoute
'/messages/$conversationId': typeof AppMessagesConversationIdRoute
'/profile/$username': typeof AppProfileUsernameRoute
@@ -160,6 +167,7 @@ export interface FileRoutesByTo {
'/projects': typeof AppProjectsRouteWithChildren
'/search': typeof AppSearchRoute
'/settings': typeof AppSettingsRoute
+ '/portfolio/$username': typeof PortfolioUsernameRoute
'/builders/$builderId': typeof AppBuildersBuilderIdRoute
'/messages/$conversationId': typeof AppMessagesConversationIdRoute
'/profile/$username': typeof AppProfileUsernameRoute
@@ -182,6 +190,7 @@ export interface FileRoutesById {
'/_app/projects': typeof AppProjectsRouteWithChildren
'/_app/search': typeof AppSearchRoute
'/_app/settings': typeof AppSettingsRoute
+ '/portfolio/$username': typeof PortfolioUsernameRoute
'/_app/builders/$builderId': typeof AppBuildersBuilderIdRoute
'/_app/messages/$conversationId': typeof AppMessagesConversationIdRoute
'/_app/profile/$username': typeof AppProfileUsernameRoute
@@ -204,6 +213,7 @@ export interface FileRouteTypes {
| '/projects'
| '/search'
| '/settings'
+ | '/portfolio/$username'
| '/builders/$builderId'
| '/messages/$conversationId'
| '/profile/$username'
@@ -224,6 +234,7 @@ export interface FileRouteTypes {
| '/projects'
| '/search'
| '/settings'
+ | '/portfolio/$username'
| '/builders/$builderId'
| '/messages/$conversationId'
| '/profile/$username'
@@ -245,6 +256,7 @@ export interface FileRouteTypes {
| '/_app/projects'
| '/_app/search'
| '/_app/settings'
+ | '/portfolio/$username'
| '/_app/builders/$builderId'
| '/_app/messages/$conversationId'
| '/_app/profile/$username'
@@ -256,6 +268,7 @@ export interface RootRouteChildren {
AppRoute: typeof AppRouteWithChildren
AuthRoute: typeof AuthRoute
ForgotPasswordRoute: typeof ForgotPasswordRoute
+ PortfolioUsernameRoute: typeof PortfolioUsernameRoute
}
declare module '@tanstack/react-router' {
@@ -288,6 +301,13 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof IndexRouteImport
parentRoute: typeof rootRouteImport
}
+ '/portfolio/$username': {
+ id: '/portfolio/$username'
+ path: '/portfolio/$username'
+ fullPath: '/portfolio/$username'
+ preLoaderRoute: typeof PortfolioUsernameRouteImport
+ parentRoute: typeof rootRouteImport
+ }
'/_app/settings': {
id: '/_app/settings'
path: '/settings'
@@ -469,6 +489,7 @@ const rootRouteChildren: RootRouteChildren = {
AppRoute: AppRouteWithChildren,
AuthRoute: AuthRoute,
ForgotPasswordRoute: ForgotPasswordRoute,
+ PortfolioUsernameRoute: PortfolioUsernameRoute,
}
export const routeTree = rootRouteImport
._addFileChildren(rootRouteChildren)
diff --git a/frontend/src/routes/_app.profile.$username.tsx b/frontend/src/routes/_app.profile.$username.tsx
index a48b9ae0..81bbf042 100644
--- a/frontend/src/routes/_app.profile.$username.tsx
+++ b/frontend/src/routes/_app.profile.$username.tsx
@@ -1,7 +1,8 @@
-import { createFileRoute, notFound } from "@tanstack/react-router";
+import { createFileRoute, notFound, Link } from "@tanstack/react-router";
import { Card, TagChip, Avatar } from "@/components/shared/primitives";
import { builders, currentUser, projects } from "@/mocks/seed";
import { MapPin, Calendar, Link as LinkIcon } from "lucide-react";
+import { toast } from "sonner";
export const Route = createFileRoute("/_app/profile/$username")({
head: ({ params }) => ({
@@ -33,6 +34,55 @@ function ProfilePage() {
return (
+ {me ? (
+
+
+
+
+ ๐ Your Shareable Public Portfolio
+
+
+ Showcase your projects, skills, and flares with beautiful custom themes, custom layouts, and a direct contact form.
+
+
+
+
+ View Portfolio
+
+
+
+
+
+ ) : (
+
+
+
+ Looking for a more polished, professional view of {b.name}'s work?
+
+
+ View Public Portfolio
+
+
+
+ )}
+
diff --git a/frontend/src/routes/_app.projects.$projectId.tsx b/frontend/src/routes/_app.projects.$projectId.tsx
index 20612507..4b64df62 100644
--- a/frontend/src/routes/_app.projects.$projectId.tsx
+++ b/frontend/src/routes/_app.projects.$projectId.tsx
@@ -9,6 +9,7 @@ import { builders, activity, currentUser } from "@/mocks/seed";
import { Markdown } from "@/components/shared/Markdown";
import { BackButton } from "@/components/shared/BackButton";
+
export const Route = createFileRoute("/_app/projects/$projectId")({
head: ({ params }) => ({
meta: [
diff --git a/frontend/src/routes/portfolio.$username.tsx b/frontend/src/routes/portfolio.$username.tsx
new file mode 100644
index 00000000..ac69971d
--- /dev/null
+++ b/frontend/src/routes/portfolio.$username.tsx
@@ -0,0 +1,1232 @@
+import { createFileRoute, notFound, Link } from "@tanstack/react-router";
+import React, { useState, useEffect } from "react";
+import {
+ MapPin, Calendar, Link as LinkIcon, Github, Twitter, Linkedin,
+ Briefcase, Mail, Send, Settings, Sparkles, X, ChevronRight, Check,
+ Award, Eye, MessageSquare, Heart, Globe, ArrowLeft, Terminal, LayoutGrid
+} from "lucide-react";
+import { toast } from "sonner";
+import { builders, currentUser, projects as allProjects, flares as allFlares } from "@/mocks/seed";
+
+export const Route = createFileRoute("/portfolio/$username")({
+ head: ({ params }) => ({
+ meta: [
+ { title: `@${params.username}'s Public Portfolio โ DevLink` },
+ { name: "description", content: `Browse projects, skills, and get in touch with @${params.username}.` },
+ ],
+ }),
+ component: PortfolioPage,
+});
+
+interface PortfolioPrefs {
+ theme: "modern" | "warm" | "cyberpunk" | "glass" | "slate";
+ accent: "violet" | "emerald" | "amber" | "rose" | "cyan";
+ showProjects: boolean;
+ showFlares: boolean;
+ showContact: boolean;
+}
+
+const accentConfig = {
+ violet: {
+ text: "text-violet-500 dark:text-violet-450",
+ bg: "bg-violet-600 dark:bg-violet-500",
+ hoverBg: "hover:bg-violet-750 dark:hover:bg-violet-600",
+ border: "border-violet-500/30",
+ ring: "focus:ring-violet-500",
+ glow: "shadow-violet-500/20",
+ badge: "bg-violet-500/10 text-violet-600 dark:text-violet-400 border-violet-550/20",
+ hex: "#8b5cf6",
+ },
+ emerald: {
+ text: "text-emerald-500 dark:text-emerald-450",
+ bg: "bg-emerald-600 dark:bg-emerald-500",
+ hoverBg: "hover:bg-emerald-750 dark:hover:bg-emerald-600",
+ border: "border-emerald-500/30",
+ ring: "focus:ring-emerald-500",
+ glow: "shadow-emerald-500/20",
+ badge: "bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border-emerald-550/20",
+ hex: "#10b981",
+ },
+ amber: {
+ text: "text-amber-600 dark:text-amber-450",
+ bg: "bg-amber-600 dark:bg-amber-500",
+ hoverBg: "hover:bg-amber-750 dark:hover:bg-amber-600",
+ border: "border-amber-500/30",
+ ring: "focus:ring-amber-500",
+ glow: "shadow-amber-500/20",
+ badge: "bg-amber-500/10 text-amber-700 dark:text-amber-400 border-amber-550/20",
+ hex: "#d97706",
+ },
+ rose: {
+ text: "text-rose-500 dark:text-rose-450",
+ bg: "bg-rose-600 dark:bg-rose-500",
+ hoverBg: "hover:bg-rose-750 dark:hover:bg-rose-600",
+ border: "border-rose-500/30",
+ ring: "focus:ring-rose-500",
+ glow: "shadow-rose-500/20",
+ badge: "bg-rose-500/10 text-rose-600 dark:text-rose-400 border-rose-550/20",
+ hex: "#f43f5e",
+ },
+ cyan: {
+ text: "text-cyan-600 dark:text-cyan-455",
+ bg: "bg-cyan-600 dark:bg-cyan-500",
+ hoverBg: "hover:bg-cyan-750 dark:hover:bg-cyan-600",
+ border: "border-cyan-500/30",
+ ring: "focus:ring-cyan-500",
+ glow: "shadow-cyan-500/20",
+ badge: "bg-cyan-500/10 text-cyan-600 dark:text-cyan-400 border-cyan-550/20",
+ hex: "#0891b2",
+ },
+};
+
+function PortfolioPage() {
+ const { username } = Route.useParams();
+ const me = username === currentUser.handle;
+
+ // Find builder details
+ const b = builders.find((x) => x.handle === username) || (me ? {
+ id: "me",
+ name: currentUser.name,
+ handle: currentUser.handle,
+ role: "Full Stack Developer",
+ avatar: currentUser.avatar,
+ country: "India",
+ yearsExp: 3,
+ matchScore: 96,
+ skills: ["React", "Next.js", "TypeScript", "Node.js", "Python", "TailwindCSS"],
+ online: true,
+ bio: "Product engineer. Ships fast, sleeps sometimes. Love crafting delightful UX.",
+ } : null);
+
+ if (!b) throw notFound();
+
+ // Get matching projects and flares
+ const userProjects = allProjects.filter(p => p.owner === b.name || p.owner === b.handle);
+ const displayProjects = userProjects.length > 0
+ ? userProjects
+ : allProjects.filter(p => p.stack.some(skill => b.skills.includes(skill))).slice(0, 4);
+
+ const displayFlares = allFlares.filter(f => f.author.handle === b.handle || f.author.name === b.name);
+
+ // States
+ const [prefs, setPrefs] = useState
(() => {
+ if (typeof window !== "undefined") {
+ try {
+ const stored = localStorage.getItem(`devlink-portfolio-prefs-${username}`);
+ if (stored) return JSON.parse(stored);
+ } catch (e) {}
+ }
+ return {
+ theme: "modern",
+ accent: "violet",
+ showProjects: true,
+ showFlares: true,
+ showContact: true,
+ };
+ });
+
+ const [customizerOpen, setCustomizerOpen] = useState(false);
+ const [formData, setFormData] = useState({ name: "", email: "", role: "recruiter", message: "", budget: "" });
+ const [submitting, setSubmitting] = useState(false);
+
+ // Read config from URL query parameters (useful for preview links)
+ useEffect(() => {
+ if (typeof window !== "undefined") {
+ const params = new URLSearchParams(window.location.search);
+ const urlTheme = params.get("theme") as PortfolioPrefs["theme"];
+ const urlAccent = params.get("accent") as PortfolioPrefs["accent"];
+ const urlProjects = params.get("projects");
+ const urlFlares = params.get("flares");
+ const urlContact = params.get("contact");
+
+ if (urlTheme || urlAccent || urlProjects || urlFlares || urlContact) {
+ setPrefs(prev => ({
+ ...prev,
+ theme: urlTheme || prev.theme,
+ accent: urlAccent || prev.accent,
+ showProjects: urlProjects !== null ? urlProjects === "true" : prev.showProjects,
+ showFlares: urlFlares !== null ? urlFlares === "true" : prev.showFlares,
+ showContact: urlContact !== null ? urlContact === "true" : prev.showContact,
+ }));
+ }
+ }
+ }, []);
+
+ const handleSaveDefault = () => {
+ localStorage.setItem(`devlink-portfolio-prefs-${username}`, JSON.stringify(prefs));
+ toast.success("Theme preferences saved as your personal default!");
+ };
+
+ const handleCopyLink = () => {
+ const url = `${window.location.origin}/portfolio/${username}?theme=${prefs.theme}&accent=${prefs.accent}&projects=${prefs.showProjects}&flares=${prefs.showFlares}&contact=${prefs.showContact}`;
+ navigator.clipboard.writeText(url);
+ toast.success("Customized portfolio link copied to clipboard!");
+ };
+
+ const handleContactSubmit = (e: React.FormEvent) => {
+ e.preventDefault();
+ if (!formData.name || !formData.email || !formData.message) {
+ toast.error("Please fill in all required fields.");
+ return;
+ }
+ setSubmitting(true);
+ setTimeout(() => {
+ const budgetText = formData.budget ? ` (Project Budget: $${formData.budget})` : "";
+ const newNotification = {
+ id: `noti-${Date.now()}`,
+ kind: "invite" as const,
+ text: `๐ผ Recruitment Inquirer "${formData.name}" sent a portfolio message: "${formData.message}"${budgetText}. Reply to ${formData.email}.`,
+ ago: "Just now",
+ unread: true
+ };
+
+ try {
+ const stored = localStorage.getItem("devlink-notifications");
+ const currentNotis = stored ? JSON.parse(stored) : [];
+ localStorage.setItem("devlink-notifications", JSON.stringify([newNotification, ...currentNotis]));
+ } catch (e) {}
+
+ toast.success("Your message has been sent to " + b.name + "!");
+ setFormData({ name: "", email: "", role: "recruiter", message: "", budget: "" });
+ setSubmitting(false);
+ }, 1200);
+ };
+
+ const activeAccent = accentConfig[prefs.accent];
+
+ // ==========================================
+ // RENDER THEME STYLES
+ // ==========================================
+
+ // Theme 1: Modern Neon (Dark)
+ const renderModernNeon = () => (
+
+ {/* Glow auras */}
+
+
+
+ {/* Decorative Grid Lines */}
+
+
+
+
+
+ {/* Profile Card */}
+
+
+

+
+
+
+
+
+ {b.name}
+
+
{b.role}
+
+ {b.country}
+ Active Builder
+ devlink.io/portfolio/{b.handle}
+
+
+
{b.bio}
+
+
+
+
+ {/* Skills Section */}
+
+ Skills & Tech Stack
+
+ {b.skills.map(s => (
+
+ {s}
+
+ ))}
+
+
+
+ {/* Projects Section */}
+ {prefs.showProjects && (
+
+
+
Featured Projects
+ Total Projects ({displayProjects.length})
+
+
+ {displayProjects.map(p => (
+
+
+
+ {p.icon}
+
+ {p.status}
+
+
+
{p.name}
+
{p.description}
+
+
+
+ {p.stack.slice(0, 3).map(tech => (
+
+ {tech}
+
+ ))}
+
+
+
+ ))}
+
+
+ )}
+
+ {/* Flares Section */}
+ {prefs.showFlares && displayFlares.length > 0 && (
+
+ Latest Dev Thoughts
+
+ {displayFlares.map(f => (
+
+
{f.content}
+
+
+ {f.likes} likes
+ {f.comments} replies
+
+
{f.ago}
+
+
+ ))}
+
+
+ )}
+
+ {/* Contact Form */}
+ {prefs.showContact && (
+
+
+
Hire or Message {b.name}
+
Fill out this secure form. Your inquiry will arrive directly in their DevLink notification inbox.
+
+
+
+ )}
+
+
+ );
+
+ // Theme 2: Minimalist Warm (Light)
+ const renderMinimalistWarm = () => (
+
+
+
+
+
Back to DevLink
+
+
+ PORTFOLIO PREVIEW
+
+
+
+
+
+ {/* Profile Card */}
+
+
+

+
+
{b.name}
+
{b.role}
+
+ ๐ {b.country}
+ โจ 2026 ECSoc
+ ๐ {b.handle}
+
+
+
+
+
+
+
+ {/* Skills Section */}
+
+ Core Expertise
+
+ {b.skills.map(s => (
+
+ {s}
+
+ ))}
+
+
+
+ {/* Projects Section */}
+ {prefs.showProjects && (
+
+ Selected Works
+
+ {displayProjects.map(p => (
+
+
+
{p.icon}
+
{p.name}
+
{p.status}
+
+
+
{p.description}
+
+ {p.stack.map(tech => (
+
+ {tech}
+
+ ))}
+
+
+
+ ))}
+
+
+ )}
+
+ {/* Contact Form */}
+ {prefs.showContact && (
+
+
+
Initiate Inquiry
+
Reach out for collaborations, full-time engineering placement, or consulting projects.
+
+
+
+ )}
+
+
+ );
+
+ // Theme 3: Cyberpunk Grid
+ const renderCyberpunk = () => (
+
+ {/* Scanline effect */}
+
+
+
+
+
+
+ {/* Profile Card */}
+
+
+ [ BUILDER_ID: {b.id.toUpperCase()} ]
+
+
+

+
+
+
+ {b.name.toUpperCase()}
+
+
>> {b.role.toUpperCase()}
+
+ LOC: {b.country.toUpperCase()}
+ SCORE: {b.matchScore}%
+ NET: devlink.io/{b.handle}
+
+
+
+ {b.bio}
+
+
+
+
+
+ {/* Skills Section */}
+
+ [ // CORE_SKILLS ]
+
+ {b.skills.map(s => (
+
+ [{s.toUpperCase()}]
+
+ ))}
+
+
+
+ {/* Projects Section */}
+ {prefs.showProjects && (
+
+ [ // GRID_PROJECTS ]
+
+ {displayProjects.map(p => (
+
+
+
+ {p.icon} DATA_NODE
+ {p.status}
+
+
{p.name.toUpperCase()}
+
{p.description}
+
+
+ {p.stack.map(tech => (
+ #{tech.toUpperCase()}
+ ))}
+
+
+ ))}
+
+
+ )}
+
+ {/* Contact Form */}
+ {prefs.showContact && (
+
+
+
[ // TERMINAL_COMMUNICATIONS ]
+
ESTABLISH PORTFOLIO CONGESTION TUNNEL TO HOST DIRECTLY.
+
+
+
+ )}
+
+
+ );
+
+ // Theme 4: Glassmorphic Mesh
+ const renderGlass = () => (
+
+ {/* Background glowing blurred gradients */}
+
+
+
+
+
+
+
+
Back to dashboard
+
+
+ SECURE PORTFOLIO
+
+
+
+
+
+ {/* Profile Card */}
+
+
+

+
+
+
+
+
+ {b.name}
+
+
{b.role}
+
+ ๐ {b.country}
+ ๐ฅ Match Score: {b.matchScore}%
+ ๐ devlink.io/{b.handle}
+
+
+
{b.bio}
+
+
+
+
+ {/* Skills Section */}
+
+ Expertise
+
+ {b.skills.map(s => (
+
+ {s}
+
+ ))}
+
+
+
+ {/* Projects Section */}
+ {prefs.showProjects && (
+
+ Featured Operations
+
+ {displayProjects.map(p => (
+
+
+
+ {p.icon}
+
+ {p.status}
+
+
+
{p.name}
+
{p.description}
+
+
+ {p.stack.slice(0, 3).map(tech => (
+
+ {tech}
+
+ ))}
+
+
+ ))}
+
+
+ )}
+
+ {/* Contact Form */}
+ {prefs.showContact && (
+
+
+
Connect Channels
+
Submit hiring inquiries or collaboration request tokens directly to {b.name}.
+
+
+
+ )}
+
+
+ );
+
+ // Theme 5: Slate Professional
+ const renderSlate = () => (
+
+
+
+
+
Return to App
+
+
+
+ Active Portfolio
+
+
+
+
+
+
+ {/* Profile Card */}
+
+
+

+
+
+
+
{b.name}
+
{b.role}
+
+ ๐ {b.country}
+ ๐ Exp: {b.yearsExp} Years
+ ๐ @{b.handle}
+
+
+
{b.bio}
+
+
+
+
+ {/* Skills Section */}
+
+ Stack Expertise
+
+ {b.skills.map(s => (
+
+ {s}
+
+ ))}
+
+
+
+ {/* Projects Section */}
+ {prefs.showProjects && (
+
+ Featured Projects
+
+ {displayProjects.map(p => (
+
+
+
+
+ {p.icon}
+
{p.name}
+
+
+ {p.status}
+
+
+
{p.description}
+
+
+ {p.stack.slice(0, 3).map(tech => (
+
+ {tech}
+
+ ))}
+
+
+ ))}
+
+
+ )}
+
+ {/* Contact Form */}
+ {prefs.showContact && (
+
+
+
Contact & Hire
+
Submit inquiries directly to {b.name}. Leads are delivered to their DevLink dashboard.
+
+
+
+ )}
+
+
+ );
+
+ return (
+
+ {/* Floating Customizer Button */}
+ {me && (
+
+ )}
+
+ {/* Render selected theme */}
+ {prefs.theme === "modern" && renderModernNeon()}
+ {prefs.theme === "warm" && renderMinimalistWarm()}
+ {prefs.theme === "cyberpunk" && renderCyberpunk()}
+ {prefs.theme === "glass" && renderGlass()}
+ {prefs.theme === "slate" && renderSlate()}
+
+ {/* Floating Customizer Drawer */}
+ {customizerOpen && (
+
+ {/* Overlay */}
+
setCustomizerOpen(false)}
+ className="absolute inset-0 bg-black/60 backdrop-blur-sm"
+ />
+
+
+
+
+
+
+ Portfolio Customizer
+
+
+
+
+
+ Design how other people see your profile. Your selection will auto-load when they visit your public url.
+
+
+ {/* Theme selection */}
+
+
1. Layout Template
+
+ {[
+ { key: "modern", label: "Modern Neon" },
+ { key: "warm", label: "Minimalist Warm" },
+ { key: "cyberpunk", label: "Cyberpunk Console" },
+ { key: "glass", label: "Glassmorphism" },
+ { key: "slate", label: "Slate Pro" }
+ ].map(item => (
+
+ ))}
+
+
+
+ {/* Accent selection */}
+
+
2. Accent Color
+
+ {(Object.keys(accentConfig) as Array).map(c => (
+
+ ))}
+
+
+
+ {/* Toggle Visibility */}
+
+
+
+ {/* Action Buttons */}
+
+
+
+
+
+
+
+
+ )}
+
+ );
+}
diff --git a/frontend/src/services/index.ts b/frontend/src/services/index.ts
index 020b3eed..47866383 100644
--- a/frontend/src/services/index.ts
+++ b/frontend/src/services/index.ts
@@ -35,7 +35,18 @@ export const messagesService = {
};
export const notificationsService = {
- list: () => mock(seed.notifications),
+ list: () => {
+ if (typeof window !== "undefined") {
+ try {
+ const stored = localStorage.getItem("devlink-notifications");
+ if (stored) {
+ const local = JSON.parse(stored);
+ return mock([...local, ...seed.notifications]);
+ }
+ } catch (e) {}
+ }
+ return mock(seed.notifications);
+ },
};
export const hackathonsService = {