diff --git a/.env b/.env
index 1d44286e25..73f4e083a9 100644
--- a/.env
+++ b/.env
@@ -43,3 +43,10 @@ SENTRY_DSN=
# Configure these with your own Docker registry images
DOCKER_IMAGE_BACKEND=backend
DOCKER_IMAGE_FRONTEND=frontend
+
+AWS_ACCESS_KEY_ID=yourkey
+AWS_SECRET_ACCESS_KEY=yoursecret
+AWS_REGION=us-east-1
+S3_BUCKET=your-bucket-name
+
+OPENAI_API_KEY=yourkey
diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml
index 13569c2adc..c6045537cf 100644
--- a/.github/workflows/playwright.yml
+++ b/.github/workflows/playwright.yml
@@ -18,6 +18,12 @@ on:
jobs:
changes:
runs-on: ubuntu-latest
+ env:
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ AWS_REGION: ${{ secrets.AWS_REGION }}
+ S3_BUCKET: ${{ secrets.S3_BUCKET }}
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
# Set job outputs to values from filter step
outputs:
changed: ${{ steps.filter.outputs.changed }}
@@ -41,6 +47,12 @@ jobs:
if: ${{ needs.changes.outputs.changed == 'true' }}
timeout-minutes: 60
runs-on: ubuntu-latest
+ env:
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ AWS_REGION: ${{ secrets.AWS_REGION }}
+ S3_BUCKET: ${{ secrets.S3_BUCKET }}
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
strategy:
matrix:
shardIndex: [1, 2, 3, 4]
@@ -92,6 +104,12 @@ jobs:
# Merge reports after playwright-tests, even if some shards have failed
if: ${{ !cancelled() && needs.changes.outputs.changed == 'true' }}
runs-on: ubuntu-latest
+ env:
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ AWS_REGION: ${{ secrets.AWS_REGION }}
+ S3_BUCKET: ${{ secrets.S3_BUCKET }}
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v6
@@ -123,6 +141,12 @@ jobs:
needs:
- test-playwright
runs-on: ubuntu-latest
+ env:
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ AWS_REGION: ${{ secrets.AWS_REGION }}
+ S3_BUCKET: ${{ secrets.S3_BUCKET }}
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
diff --git a/.github/workflows/test-backend.yml b/.github/workflows/test-backend.yml
index e2976e64d5..9de53deda9 100644
--- a/.github/workflows/test-backend.yml
+++ b/.github/workflows/test-backend.yml
@@ -12,11 +12,17 @@ on:
jobs:
test-backend:
runs-on: ubuntu-latest
+ env:
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ AWS_REGION: ${{ secrets.AWS_REGION }}
+ S3_BUCKET: ${{ secrets.S3_BUCKET }}
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Set up Python
- uses: actions/setup-python@v6
+ uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Install uv
diff --git a/.github/workflows/test-docker-compose.yml b/.github/workflows/test-docker-compose.yml
index c14d9dd630..e856d211c9 100644
--- a/.github/workflows/test-docker-compose.yml
+++ b/.github/workflows/test-docker-compose.yml
@@ -10,17 +10,37 @@ on:
- synchronize
jobs:
-
test-docker-compose:
runs-on: ubuntu-latest
+ env:
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ AWS_REGION: ${{ secrets.AWS_REGION }}
+ S3_BUCKET: ${{ secrets.S3_BUCKET }}
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
+
steps:
- name: Checkout
uses: actions/checkout@v5
+ - name: Create .env for Docker Compose
+ run: |
+ echo "POSTGRES_USER=$POSTGRES_USER" >> backend/.env
+ echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> backend/.env
+ echo "POSTGRES_DB=$POSTGRES_DB" >> backend/.env
+ echo "POSTGRES_PORT=$POSTGRES_PORT" >> backend/.env
+ echo "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID" >> backend/.env
+ echo "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY" >> backend/.env
+ echo "AWS_REGION=$AWS_REGION" >> backend/.env
+ echo "S3_BUCKET=$S3_BUCKET" >> backend/.env
+ echo "STACK_NAME=study-assistant" >> backend/.env
+
- run: docker compose build
- run: docker compose down -v --remove-orphans
- - run: docker compose up -d --wait backend frontend adminer
+ - run: docker compose up -d --wait backend adminer frontend
+
- name: Test backend is up
run: curl http://localhost:8000/api/v1/utils/health-check
+
- name: Test frontend is up
run: curl http://localhost:5173
- run: docker compose down -v --remove-orphans
diff --git a/.gitignore b/.gitignore
index a6dd346572..7f7e7cef3f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ node_modules/
/playwright-report/
/blob-report/
/playwright/.cache/
+.DS_Store
diff --git a/backend/app/alembic/versions/d29f99ac75e5_add_question_answer_exam_examattempt_to_.py b/backend/app/alembic/versions/d29f99ac75e5_add_question_answer_exam_examattempt_to_.py
new file mode 100644
index 0000000000..8ae9267676
--- /dev/null
+++ b/backend/app/alembic/versions/d29f99ac75e5_add_question_answer_exam_examattempt_to_.py
@@ -0,0 +1,77 @@
+"""Add Question, Answer, Exam, ExamAttempt to the db
+
+Revision ID: d29f99ac75e5
+Revises: db14556d2858
+Create Date: 2025-10-08 11:21:23.657380
+
+"""
+from alembic import op
+import sqlalchemy as sa
+import sqlmodel.sql.sqltypes
+
+
+# revision identifiers, used by Alembic.
+revision = 'd29f99ac75e5'
+down_revision = 'db14556d2858'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.create_table('exam',
+ sa.Column('title', sa.Text(), nullable=False),
+ sa.Column('description', sa.Text(), nullable=True),
+ sa.Column('duration_minutes', sa.Integer(), nullable=True),
+ sa.Column('is_published', sa.Boolean(), nullable=False),
+ sa.Column('id', sa.Uuid(), nullable=False),
+ sa.Column('owner_id', sa.Uuid(), nullable=False),
+ sa.ForeignKeyConstraint(['owner_id'], ['user.id'], ),
+ sa.PrimaryKeyConstraint('id')
+ )
+ op.create_table('examattempt',
+ sa.Column('score', sa.Float(), nullable=True),
+ sa.Column('is_complete', sa.Boolean(), nullable=False),
+ sa.Column('id', sa.Uuid(), nullable=False),
+ sa.Column('exam_id', sa.Uuid(), nullable=False),
+ sa.Column('owner_id', sa.Uuid(), nullable=False),
+ sa.Column('completed_at', sa.DateTime(), nullable=True),
+ sa.Column('created_at', sa.DateTime(), nullable=False),
+ sa.Column('updated_at', sa.DateTime(), nullable=False),
+ sa.ForeignKeyConstraint(['exam_id'], ['exam.id'], ondelete='CASCADE'),
+ sa.ForeignKeyConstraint(['owner_id'], ['user.id'], ondelete='CASCADE'),
+ sa.PrimaryKeyConstraint('id')
+ )
+ op.create_table('question',
+ sa.Column('question', sa.Text(), nullable=False),
+ sa.Column('answer', sa.Text(), nullable=True),
+ sa.Column('id', sa.Uuid(), nullable=False),
+ sa.Column('type', sa.Enum('MULTIPLE_CHOICE', 'TRUE_FALSE', 'SHORT_ANSWER', name='questiontype'), nullable=False),
+ sa.Column('options', sa.JSON(), nullable=True),
+ sa.Column('exam_id', sa.Uuid(), nullable=False),
+ sa.ForeignKeyConstraint(['exam_id'], ['exam.id'], ),
+ sa.PrimaryKeyConstraint('id')
+ )
+ op.create_table('answer',
+ sa.Column('response', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
+ sa.Column('is_correct', sa.Boolean(), nullable=True),
+ sa.Column('explanation', sqlmodel.sql.sqltypes.AutoString(), nullable=True),
+ sa.Column('id', sa.Uuid(), nullable=False),
+ sa.Column('attempt_id', sa.Uuid(), nullable=False),
+ sa.Column('question_id', sa.Uuid(), nullable=False),
+ sa.Column('created_at', sa.DateTime(), nullable=False),
+ sa.Column('updated_at', sa.DateTime(), nullable=False),
+ sa.ForeignKeyConstraint(['attempt_id'], ['examattempt.id'], ),
+ sa.ForeignKeyConstraint(['question_id'], ['question.id'], ),
+ sa.PrimaryKeyConstraint('id')
+ )
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_table('answer')
+ op.drop_table('question')
+ op.drop_table('examattempt')
+ op.drop_table('exam')
+ # ### end Alembic commands ###
diff --git a/backend/app/alembic/versions/db14556d2858_add_document_model_to_the_db.py b/backend/app/alembic/versions/db14556d2858_add_document_model_to_the_db.py
new file mode 100644
index 0000000000..2e39017cd8
--- /dev/null
+++ b/backend/app/alembic/versions/db14556d2858_add_document_model_to_the_db.py
@@ -0,0 +1,51 @@
+"""Add Document model to the DB
+
+Revision ID: db14556d2858
+Revises: 1a31ce608336
+Create Date: 2025-10-07 13:48:49.351591
+
+"""
+from alembic import op
+import sqlalchemy as sa
+import sqlmodel.sql.sqltypes
+
+
+# revision identifiers, used by Alembic.
+revision = 'db14556d2858'
+down_revision = '1a31ce608336'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.create_table('document',
+ sa.Column('filename', sqlmodel.sql.sqltypes.AutoString(length=255), nullable=False),
+ sa.Column('s3_url', sqlmodel.sql.sqltypes.AutoString(length=255), nullable=True),
+ sa.Column('s3_key', sqlmodel.sql.sqltypes.AutoString(length=1024), nullable=True),
+ sa.Column('content_type', sqlmodel.sql.sqltypes.AutoString(length=255), nullable=True),
+ sa.Column('size', sa.Integer(), nullable=True),
+ sa.Column('id', sa.Uuid(), nullable=False),
+ sa.Column('owner_id', sa.Uuid(), nullable=False),
+ sa.Column('extracted_text', sa.Text(), nullable=True),
+ sa.Column('chunk_count', sa.Integer(), nullable=False),
+ sa.ForeignKeyConstraint(['owner_id'], ['user.id'], ondelete='CASCADE'),
+ sa.PrimaryKeyConstraint('id')
+ )
+ op.create_table('documentchunk',
+ sa.Column('text', sqlmodel.sql.sqltypes.AutoString(), nullable=False),
+ sa.Column('id', sa.Uuid(), nullable=False),
+ sa.Column('document_id', sa.Uuid(), nullable=False),
+ sa.Column('size', sa.Integer(), nullable=False),
+ sa.Column('type', sqlmodel.sql.sqltypes.AutoString(), nullable=True),
+ sa.ForeignKeyConstraint(['document_id'], ['document.id'], ondelete='CASCADE'),
+ sa.PrimaryKeyConstraint('id')
+ )
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_table('documentchunk')
+ op.drop_table('document')
+ # ### end Alembic commands ###
diff --git a/backend/app/api/main.py b/backend/app/api/main.py
index eac18c8e8f..930458d972 100644
--- a/backend/app/api/main.py
+++ b/backend/app/api/main.py
@@ -1,13 +1,25 @@
from fastapi import APIRouter
-from app.api.routes import items, login, private, users, utils
+from app.api.routes import (
+ documents,
+ exam_attempts,
+ exams,
+ items,
+ login,
+ private,
+ users,
+ utils,
+)
from app.core.config import settings
api_router = APIRouter()
+api_router.include_router(documents.router)
api_router.include_router(login.router)
api_router.include_router(users.router)
api_router.include_router(utils.router)
api_router.include_router(items.router)
+api_router.include_router(exams.router)
+api_router.include_router(exam_attempts.router)
if settings.ENVIRONMENT == "local":
diff --git a/backend/app/api/routes/documents.py b/backend/app/api/routes/documents.py
new file mode 100644
index 0000000000..64191fa352
--- /dev/null
+++ b/backend/app/api/routes/documents.py
@@ -0,0 +1,144 @@
+import uuid
+from typing import Any
+
+from fastapi import APIRouter, BackgroundTasks, File, HTTPException, UploadFile
+from sqlmodel import func, select
+
+from app.api.deps import CurrentUser, SessionDep
+from app.core.extractors import extract_text_and_save_to_db
+from app.core.s3 import generate_s3_url, upload_file_to_s3
+from app.models import (
+ Document,
+ DocumentCreate,
+ DocumentPublic,
+ DocumentsPublic,
+ DocumentUpdate,
+ Message,
+)
+
+router = APIRouter(prefix="/documents", tags=["documents"])
+
+
+@router.post("/", response_model=DocumentPublic)
+def create_document(
+ *,
+ session: SessionDep,
+ current_user: CurrentUser,
+ background_tasks: BackgroundTasks, # noqa: ARG001
+ file: UploadFile = File(...),
+) -> Any:
+ key = None
+ try:
+ key = upload_file_to_s3(file, str(current_user.id))
+ except Exception as e:
+ raise HTTPException(500, f"Failed to upload file. Error: {str(e)}")
+
+ try:
+ url = generate_s3_url(key)
+ except Exception:
+ raise HTTPException(500, f"Could not generate URL for file key: {key}")
+
+ document_in = DocumentCreate(
+ filename=file.filename,
+ content_type=file.content_type,
+ size=file.size,
+ s3_url=url,
+ s3_key=key,
+ )
+
+ document = Document.model_validate(
+ document_in, update={"owner_id": current_user.id}
+ )
+
+ session.add(document)
+ session.commit()
+ session.refresh(document)
+
+ # 3. Kick off background job
+ background_tasks.add_task(extract_text_and_save_to_db, key, str(document.id))
+ return document
+
+
+@router.get("/{id}", response_model=DocumentPublic)
+def read_document(session: SessionDep, current_user: CurrentUser, id: uuid.UUID) -> Any:
+ """
+ Get document by ID.
+ """
+ document = session.get(Document, id)
+ if not document:
+ raise HTTPException(status_code=404, detail="Document not found")
+ if not current_user.is_superuser and (document.owner_id != current_user.id):
+ raise HTTPException(status_code=400, detail="Not enough permissions")
+ return document
+
+
+@router.get("/", response_model=DocumentsPublic)
+def read_documents(
+ session: SessionDep, current_user: CurrentUser, skip: int = 0, limit: int = 100
+) -> Any:
+ """
+ Retrieve documents.
+ """
+
+ if current_user.is_superuser:
+ count_statement = select(func.count()).select_from(Document)
+ count = session.exec(count_statement).one()
+ statement = select(Document).offset(skip).limit(limit)
+ documents = session.exec(statement).all()
+ else:
+ count_statement = (
+ select(func.count())
+ .select_from(Document)
+ .where(Document.owner_id == current_user.id)
+ )
+ count = session.exec(count_statement).one()
+ statement = (
+ select(Document)
+ .where(Document.owner_id == current_user.id)
+ .offset(skip)
+ .limit(limit)
+ )
+ documents = session.exec(statement).all()
+
+ return DocumentsPublic(data=documents, count=count)
+
+
+@router.put("/{id}", response_model=DocumentPublic)
+def update_document(
+ *,
+ session: SessionDep,
+ current_user: CurrentUser,
+ id: uuid.UUID,
+ document_in: DocumentUpdate,
+) -> Any:
+ """
+ Update an document.
+ """
+ document = session.get(Document, id)
+ if not document:
+ raise HTTPException(status_code=404, detail="Document not found")
+ if not current_user.is_superuser and (document.owner_id != current_user.id):
+ raise HTTPException(status_code=400, detail="Not enough permissions")
+ update_dict = document_in.model_dump(exclude_unset=True)
+ document.sqlmodel_update(update_dict)
+ session.add(document)
+ session.commit()
+ session.refresh(document)
+ return document
+
+
+@router.delete("/{id}")
+def delete_document(
+ session: SessionDep, current_user: CurrentUser, id: uuid.UUID
+) -> Message:
+ """
+ Delete an document.
+ """
+ document = session.get(Document, id)
+ if not document:
+ raise HTTPException(status_code=404, detail="Document not found")
+ if not current_user.is_superuser and (document.owner_id != current_user.id):
+ raise HTTPException(status_code=400, detail="Not enough permissions")
+ session.delete(document)
+ session.commit()
+ return Message(message="Document deleted successfully")
diff --git a/backend/app/api/routes/exam_attempts.py b/backend/app/api/routes/exam_attempts.py
new file mode 100644
index 0000000000..b25fb185a7
--- /dev/null
+++ b/backend/app/api/routes/exam_attempts.py
@@ -0,0 +1,85 @@
+import uuid
+from typing import Any
+
+from fastapi import APIRouter, HTTPException
+
+from app import crud
+from app.api.deps import CurrentUser, SessionDep
+from app.models import (
+ Exam,
+ ExamAttempt,
+ ExamAttemptCreate,
+ ExamAttemptPublic,
+ ExamAttemptUpdate,
+)
+
+router = APIRouter(prefix="/exam-attempts", tags=["exam-attempts"])
+
+
+def get_exam_by_id(session: SessionDep, exam_in: ExamAttemptCreate) -> Exam | None:
+ exam = session.get(Exam, exam_in.exam_id)
+ return exam
+
+
+@router.post("/", response_model=ExamAttemptPublic)
+def create_exam_attempt(
+ session: SessionDep, current_user: CurrentUser, exam_in: ExamAttemptCreate
+) -> Any:
+ """
+ Create a new exam attempt for a specific exam.
+ """
+ exam = get_exam_by_id(session, exam_in)
+ if not exam:
+ raise HTTPException(status_code=404, detail="Exam not found")
+
+ if not current_user.is_superuser and exam.owner_id != current_user.id:
+ raise HTTPException(status_code=403, detail="Not enough permissions")
+
+ exam_attempt = crud.create_exam_attempt(
+ session=session, user_id=current_user.id, exam_in=exam_in
+ )
+ return exam_attempt
+
+
+@router.get("/{id}", response_model=ExamAttemptPublic)
+def read_exam_attempt(
+ session: SessionDep, current_user: CurrentUser, id: uuid.UUID
+) -> Any:
+ """
+ Get ExamAttempt by ID.
+ """
+ exam_attempt = session.get(ExamAttempt, id)
+ if not exam_attempt:
+ raise HTTPException(status_code=404, detail="Exam Attempt not found")
+ if not current_user.is_superuser and (exam_attempt.owner_id != current_user.id):
+ raise HTTPException(status_code=403, detail="Not enough permissions")
+
+ return exam_attempt
+
+
+@router.patch("/{attempt_id}", response_model=ExamAttemptPublic)
+def update_exam_attempt(
+ *,
+ attempt_id: uuid.UUID,
+ session: SessionDep,
+ exam_attempt_in: ExamAttemptUpdate,
+ current_user: CurrentUser,
+) -> Any:
+ """
+ Update an exam attempt with answers.
+ If `is_complete=True`, compute the score.
+ """
+ exam_attempt = session.get(ExamAttempt, attempt_id)
+ if not exam_attempt:
+ raise HTTPException(status_code=404, detail="Exam attempt not found")
+
+ if not current_user.is_superuser and exam_attempt.owner_id != current_user.id:
+ raise HTTPException(status_code=403, detail="Not allowed")
+
+ if exam_attempt.is_complete:
+ raise HTTPException(status_code=409, detail="Exam attempt is already completed")
+
+ exam_attempt = crud.update_exam_attempt(
+ session=session, db_exam_attempt=exam_attempt, exam_attempt_in=exam_attempt_in
+ )
+ return exam_attempt
diff --git a/backend/app/api/routes/exams.py b/backend/app/api/routes/exams.py
new file mode 100644
index 0000000000..9d82cc0862
--- /dev/null
+++ b/backend/app/api/routes/exams.py
@@ -0,0 +1,136 @@
+import uuid
+from typing import Any
+
+from fastapi import APIRouter, HTTPException
+from sqlmodel import func, select
+
+from app import crud
+from app.api.deps import CurrentUser, SessionDep
+from app.core.ai.openai import generate_questions_from_documents
+from app.models import (
+ Exam,
+ ExamCreate,
+ ExamPublic,
+ ExamsPublic,
+ ExamUpdate,
+ GenerateQuestionsRequest,
+ Message,
+ QuestionCreate,
+)
+
+router = APIRouter(prefix="/exams", tags=["exams"])
+
+
+@router.post("/generate", response_model=ExamPublic)
+async def generate_exam(
+ *,
+ session: SessionDep,
+ payload: GenerateQuestionsRequest,
+ current_user: CurrentUser,
+) -> ExamPublic:
+ # TODO: fix the hardcoding here
+ exam_in = ExamCreate(
+ title="Midterm Exam",
+ description="generated exam",
+ duration_minutes=30,
+ is_published=False,
+ )
+ db_exam = crud.create_db_exam(
+ session=session, exam_in=exam_in, owner_id=current_user.id
+ )
+
+ # 2. Generate questions
+ generated_questions: list[QuestionCreate] = await generate_questions_from_documents(
+ session, payload.document_ids
+ )
+
+ return crud.create_exam(
+ session=session,
+ db_exam=db_exam,
+ questions=generated_questions,
+ )
+
+
+@router.get("/{id}", response_model=ExamPublic)
+def read_exam(session: SessionDep, current_user: CurrentUser, id: uuid.UUID) -> Any:
+ """
+ Get exam by ID.
+ """
+ exam = session.get(Exam, id)
+ if not exam:
+ raise HTTPException(status_code=404, detail="Exam not found")
+ if not current_user.is_superuser and (exam.owner_id != current_user.id):
+ raise HTTPException(status_code=400, detail="Not enough permissions")
+ return exam
+
+
+@router.get("/", response_model=ExamsPublic)
+def read_exams(
+ session: SessionDep, current_user: CurrentUser, skip: int = 0, limit: int = 100
+) -> Any:
+ """
+ Retrieve exams.
+ """
+
+ if current_user.is_superuser:
+ count_statement = select(func.count()).select_from(Exam)
+ count = session.exec(count_statement).one()
+ statement = select(Exam).offset(skip).limit(limit)
+ exams = session.exec(statement).all()
+ else:
+ count_statement = (
+ select(func.count())
+ .select_from(Exam)
+ .where(Exam.owner_id == current_user.id)
+ )
+ count = session.exec(count_statement).one()
+ statement = (
+ select(Exam)
+ .where(Exam.owner_id == current_user.id)
+ .offset(skip)
+ .limit(limit)
+ )
+ exams = session.exec(statement).all()
+
+ return ExamsPublic(data=exams, count=count)
+
+
+@router.put("/{id}", response_model=ExamPublic)
+def update_exam(
+ *,
+ session: SessionDep,
+ current_user: CurrentUser,
+ id: uuid.UUID,
+ exam_in: ExamUpdate,
+) -> Any:
+ """
+ Update an exam.
+ """
+ exam = session.get(Exam, id)
+ if not exam:
+ raise HTTPException(status_code=404, detail="Exam not found")
+ if not current_user.is_superuser and (exam.owner_id != current_user.id):
+ raise HTTPException(status_code=403, detail="Not enough permissions")
+ update_dict = exam_in.model_dump(exclude_unset=True)
+ exam.sqlmodel_update(update_dict)
+ session.add(exam)
+ session.commit()
+ session.refresh(exam)
+ return exam
+
+
+@router.delete("/{id}")
+def delete_exam(
+ session: SessionDep, current_user: CurrentUser, id: uuid.UUID
+) -> Message:
+ """
+ Delete an exam.
+ """
+ exam = session.get(Exam, id)
+ if not exam:
+ raise HTTPException(status_code=404, detail="Exam not found")
+ if not current_user.is_superuser and (exam.owner_id != current_user.id):
+ raise HTTPException(status_code=403, detail="Not enough permissions")
+ session.delete(exam)
+ session.commit()
+ return Message(message="Exam deleted successfully")
diff --git a/backend/app/core/ai/openai.py b/backend/app/core/ai/openai.py
new file mode 100644
index 0000000000..9f730cb077
--- /dev/null
+++ b/backend/app/core/ai/openai.py
@@ -0,0 +1,103 @@
+import logging
+from typing import Any
+from uuid import UUID
+
+from fastapi import HTTPException
+from langchain_openai import ChatOpenAI
+from pydantic import ValidationError
+from sqlalchemy import select
+from sqlmodel import Session
+
+from app.core.config import settings
+from app.models import Document, QuestionCreate, QuestionOutput, QuestionType
+
+# Initialize logging
+logger = logging.getLogger(__name__)
+
+llm = ChatOpenAI(
+ model="gpt-4o-mini",
+ temperature=0.7,
+ max_completion_tokens=500,
+ api_key=settings.OPENAI_API_KEY, # type: ignore
+)
+
+structured_llm = llm.with_structured_output(QuestionOutput)
+
+
+def generate_questions_prompt(text: str, num_questions: int = 5) -> str:
+ return f"""
+Generate {num_questions} questions from the following document text.
+
+Each question must include:
+- question: the question text
+- answer: the correct answer (if known)
+- type: one of "multiple_choice", "true_false", or "short_answer"
+- options: list of options if type is "multiple_choice", otherwise leave empty.
+
+Document text:
+{text}
+"""
+
+
+def fetch_document_texts(session: Session, document_ids: list[UUID]) -> list[str]:
+ """Fetch extracted texts for given document IDs."""
+ try:
+ stmt = select(Document.extracted_text).where(Document.id.in_(document_ids)) # type: ignore[attr-defined, call-overload]
+ results = session.exec(stmt).all()
+ texts = [text for (text,) in results if text]
+ if not texts:
+ raise ValueError(f"No extracted texts found for documents: {document_ids}")
+ return texts
+ except Exception as e:
+ logger.error(f"Failed to fetch document texts for {document_ids}: {e}")
+ raise
+
+
+def validate_and_convert_question_item(q: Any) -> QuestionCreate | None:
+ """Validate LLM question item and convert to QuestionCreate."""
+ try:
+ return QuestionCreate(
+ question=q.question,
+ answer=q.answer,
+ type=QuestionType(q.type),
+ options=q.options or [],
+ )
+ except ValidationError as ve:
+ logger.error(f"Validation error for question item {q}: {ve}")
+ raise
+
+
+def parse_llm_output(llm_output: Any) -> list[QuestionCreate]:
+ """Parse LLM structured output into QuestionCreate list."""
+ questions: list[QuestionCreate] = []
+ for q in llm_output.questions:
+ qc = validate_and_convert_question_item(q)
+ if qc:
+ questions.append(qc)
+
+ return questions
+
+
+async def generate_questions_from_documents(
+ session: Session, document_ids: list[UUID], num_questions: int = 5
+) -> list[QuestionCreate]:
+ """Main function: fetch documents, generate questions via LLM, and return QuestionCreate objects."""
+ document_texts = fetch_document_texts(session, document_ids)
+ if not document_texts:
+ return []
+
+ prompt = generate_questions_prompt(
+ "\n".join(document_texts), num_questions=num_questions
+ )
+
+ try:
+ llm_output = structured_llm.invoke(prompt)
+ return parse_llm_output(llm_output)
+ except ValidationError as ve:
+ logger.error(f"Pydantic validation error: {ve}")
+ raise HTTPException(status_code=500, detail=f"LLM validation error: {ve}")
+ except Exception as e:
+ logger.error(f"Error generating questions from LLM: {e}")
+ raise HTTPException(
+ status_code=500, detail=f"Failed to generate questions: {e}"
+ )
diff --git a/backend/app/core/config.py b/backend/app/core/config.py
index 6a8ca50bb1..605257e79d 100644
--- a/backend/app/core/config.py
+++ b/backend/app/core/config.py
@@ -55,6 +55,12 @@ def all_cors_origins(self) -> list[str]:
POSTGRES_USER: str
POSTGRES_PASSWORD: str = ""
POSTGRES_DB: str = ""
+ AWS_ACCESS_KEY_ID: str = ""
+ AWS_SECRET_ACCESS_KEY: str = ""
+ AWS_REGION: str = "us-east-1"
+ S3_BUCKET: str = "test-bucket"
+
+ OPENAI_API_KEY: str = ""
@computed_field # type: ignore[prop-decorator]
@property
diff --git a/backend/app/core/extractors.py b/backend/app/core/extractors.py
new file mode 100644
index 0000000000..e4856576a7
--- /dev/null
+++ b/backend/app/core/extractors.py
@@ -0,0 +1,69 @@
+from langchain_text_splitters import CharacterTextSplitter
+from sqlmodel import Session, select
+
+from app.core.db import engine
+from app.core.s3 import extract_text_from_s3_file
+from app.models import Document, DocumentChunk
+
+
+def save_chunks_to_db(session: Session, document_id: str, chunks: list[str]) -> None:
+ """
+ Saves the text chunks to the database.
+ """
+ for chunk in chunks:
+ document_chunk = DocumentChunk(
+ document_id=document_id, text=chunk, size=len(chunk)
+ )
+ session.add(document_chunk)
+
+
+def perform_fixed_size_chunking(
+ text: str, chunk_size: int = 1000, chunk_overlap: int = 200
+) -> list[str]:
+ """
+ Performs fixed-size chunking on a document with specified overlap.
+
+ Args:
+ document (str): The text document to process
+ chunk_size (int): The target size of each chunk in characters
+ chunk_overlap (int): The number of characters of overlap between chunks
+
+ Returns:
+ list: The chunked documents with metadata
+ """
+ # Create the text splitter with optimal parameters
+ text_splitter = CharacterTextSplitter(
+ separator="\n\n",
+ chunk_size=chunk_size,
+ chunk_overlap=chunk_overlap,
+ length_function=len,
+ )
+
+ # Split the text into chunks
+ chunks = text_splitter.split_text(text)
+ return chunks
+
+
+def extract_text_and_save_to_db(s3_key: str, document_id: str) -> None:
+ try:
+ with Session(engine) as session:
+ text = extract_text_from_s3_file(key=s3_key)
+
+ chunks = perform_fixed_size_chunking(text)
+
+ document_query = select(Document).where(Document.id == document_id)
+ document = session.exec(document_query).first()
+
+ if not document:
+ raise Exception(f"Document with ID {document_id} not found")
+
+ save_chunks_to_db(session, document_id, chunks)
+
+ document.extracted_text = text
+ document.chunk_count = len(chunks)
+
+ session.add(document)
+ session.commit()
+
+ except Exception as e:
+ raise e
diff --git a/backend/app/core/s3.py b/backend/app/core/s3.py
new file mode 100644
index 0000000000..0c55bad4df
--- /dev/null
+++ b/backend/app/core/s3.py
@@ -0,0 +1,44 @@
+import os
+import tempfile
+import uuid
+
+import boto3
+import textract # type: ignore
+from fastapi import UploadFile
+
+from app.core.config import settings
+
+s3 = boto3.client(
+ "s3",
+ aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
+ aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
+ region_name=settings.AWS_REGION,
+)
+
+
+def upload_file_to_s3(file: UploadFile, user_id: str) -> str:
+ safe_filename = file.filename or ""
+ extension = safe_filename.split(".")[-1] if "." in safe_filename else ""
+ bucket = settings.S3_BUCKET
+ key = f"documents/{user_id}/{uuid.uuid4()}.{extension}"
+
+ try:
+ s3.upload_fileobj(file.file, bucket, key)
+ except Exception as e:
+ raise Exception(f"Failed to upload file to S3: {str(e)}")
+
+ return key
+
+
+def generate_s3_url(key: str) -> str:
+ return f"https://{settings.S3_BUCKET}.s3.amazonaws.com/{key}"
+
+
+def extract_text_from_s3_file(key: str) -> str:
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file:
+ s3.download_fileobj(settings.S3_BUCKET, key, tmp_file)
+ tmp_path = tmp_file.name
+
+ text = textract.process(tmp_path).decode("utf-8") or ""
+ os.remove(tmp_path)
+ return text
diff --git a/backend/app/crud.py b/backend/app/crud.py
index 905bf48724..19898b05c7 100644
--- a/backend/app/crud.py
+++ b/backend/app/crud.py
@@ -1,10 +1,32 @@
import uuid
from typing import Any
+from uuid import UUID
from sqlmodel import Session, select
from app.core.security import get_password_hash, verify_password
-from app.models import Item, ItemCreate, User, UserCreate, UserUpdate
+from app.models import (
+ Answer,
+ AnswerUpdate,
+ Document,
+ DocumentCreate,
+ DocumentPublic,
+ Exam,
+ ExamAttempt,
+ ExamAttemptCreate,
+ ExamAttemptPublic,
+ ExamAttemptUpdate,
+ ExamCreate,
+ ExamPublic,
+ Item,
+ ItemCreate,
+ Question,
+ QuestionCreate,
+ QuestionPublic,
+ User,
+ UserCreate,
+ UserUpdate,
+)
def create_user(*, session: Session, user_create: UserCreate) -> User:
@@ -52,3 +74,157 @@ def create_item(*, session: Session, item_in: ItemCreate, owner_id: uuid.UUID) -
session.commit()
session.refresh(db_item)
return db_item
+
+
+# --- Document ---
+def create_document(
+ *,
+ session: Session,
+ document_in: DocumentCreate,
+ owner_id: UUID,
+ extracted_text: str | None = None,
+) -> DocumentPublic:
+ # Validate input and attach owner_id
+ update: dict[str, str] = {"owner_id": str(owner_id)}
+ if extracted_text is not None:
+ update["extracted_text"] = extracted_text
+ db_document = Document.model_validate(document_in, update=update)
+ session.add(db_document)
+ session.commit()
+ session.refresh(db_document)
+ # Return Public model for API
+ return DocumentPublic.model_validate(db_document)
+
+
+def create_question(
+ *, session: Session, question_in: QuestionCreate, exam_id: UUID
+) -> QuestionPublic:
+ db_question = Question(
+ question=question_in.question,
+ answer=question_in.answer,
+ type=question_in.type,
+ options=question_in.options or [],
+ exam_id=exam_id,
+ )
+ session.add(db_question)
+ session.commit()
+ session.refresh(db_question)
+ return QuestionPublic.model_validate(db_question)
+
+
+def create_db_exam(*, session: Session, exam_in: ExamCreate, owner_id: UUID) -> Exam:
+ db_exam = Exam(
+ title=exam_in.title,
+ description=exam_in.description,
+ duration_minutes=exam_in.duration_minutes,
+ is_published=exam_in.is_published,
+ owner_id=owner_id,
+ )
+ session.add(db_exam)
+ session.commit()
+ session.refresh(db_exam)
+ return db_exam
+
+
+def create_exam(
+ *, session: Session, db_exam: Exam, questions: list[QuestionCreate]
+) -> ExamPublic:
+ for question in questions:
+ create_question(session=session, question_in=question, exam_id=db_exam.id)
+
+ session.refresh(db_exam, attribute_names=["questions"])
+ return ExamPublic.model_validate(db_exam)
+
+
+def create_exam_attempt(
+ *, session: Session, exam_in: ExamAttemptCreate, user_id: UUID
+) -> ExamAttemptPublic:
+ exam_attempt = ExamAttempt(**exam_in.model_dump(), owner_id=user_id)
+
+ session.add(exam_attempt)
+ session.commit()
+ return ExamAttemptPublic.model_validate(exam_attempt)
+
+
+def score_exam_attempt(session: Session, exam_attempt: ExamAttempt) -> float:
+ """
+ Compute score for an exam attempt and update each answer's is_correct.
+ Returns the total score as a float.
+ """
+ total_questions = len(exam_attempt.answers)
+ correct_count = 0
+
+ for answer in exam_attempt.answers:
+ question = answer.question # relationship
+ if not question.answer:
+ continue # skip if no answer key
+
+ # Mark whether answer is correct
+ is_correct = answer.response.strip().lower() == question.answer.strip().lower()
+ answer.is_correct = is_correct
+ session.add(answer)
+
+ if is_correct:
+ correct_count += 1
+
+ # Compute score as percentage
+ score = (correct_count / total_questions) * 100 if total_questions else 0
+ exam_attempt.score = score
+ session.add(exam_attempt)
+ session.commit()
+ session.refresh(exam_attempt)
+
+ return score
+
+
+def update_answers(
+ *, session: Session, attempt_id: uuid.UUID, answers_in: list[AnswerUpdate]
+) -> list[Answer]:
+ updated_answers = []
+ for answer_in in answers_in:
+ answer = session.get(Answer, answer_in.id)
+ if not answer:
+ raise ValueError(f"Answer {answer_in.id} not found")
+ if answer.attempt_id != attempt_id:
+ raise ValueError(
+ f"Answer {answer_in.id} does not belong to exam attempt {attempt_id}"
+ )
+ answer.response = answer_in.response
+ session.add(answer)
+ updated_answers.append(answer)
+
+ session.commit()
+ return updated_answers
+
+
+def update_exam_attempt(
+ *,
+ session: Session,
+ db_exam_attempt: ExamAttempt,
+ exam_attempt_in: ExamAttemptUpdate,
+) -> Any:
+ """
+ Update an exam attempt, including its answers.
+ If `is_complete=True`, compute the score.
+ """
+ # Update attempt-level fields
+ if exam_attempt_in.is_complete is not None:
+ db_exam_attempt.is_complete = exam_attempt_in.is_complete
+
+ # Delegate answers
+ if exam_attempt_in.answers:
+ update_answers(
+ session=session,
+ attempt_id=db_exam_attempt.id,
+ answers_in=exam_attempt_in.answers,
+ )
+
+ session.add(db_exam_attempt)
+
+ # Score if exam is submitted - do this before commit
+ if db_exam_attempt.is_complete:
+ score_exam_attempt(session=session, exam_attempt=db_exam_attempt)
+
+ session.commit()
+ session.refresh(db_exam_attempt)
+ return ExamAttemptPublic.model_validate(db_exam_attempt)
diff --git a/backend/app/models.py b/backend/app/models.py
index 2389b4a532..8c56e3afdf 100644
--- a/backend/app/models.py
+++ b/backend/app/models.py
@@ -1,7 +1,15 @@
import uuid
+from datetime import datetime, timezone
+from enum import Enum
+from pydantic import BaseModel as PydanticBaseModel
+
+# from pgvector.sqlalchemy import Vector # type: ignore
from pydantic import EmailStr
-from sqlmodel import Field, Relationship, SQLModel
+from pydantic import Field as PydanticField
+from sqlalchemy import Column, Text
+from sqlmodel import JSON, Field, Relationship, SQLModel
+from sqlmodel import Enum as SAEnum
# Shared properties
@@ -44,6 +52,12 @@ class User(UserBase, table=True):
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
hashed_password: str
items: list["Item"] = Relationship(back_populates="owner", cascade_delete=True)
+ documents: list["Document"] = Relationship(
+ back_populates="owner", cascade_delete=True
+ )
+ exams: list["Exam"] = Relationship(
+ back_populates="owner", sa_relationship_kwargs={"cascade": "all, delete-orphan"}
+ )
# Properties to return via API, id is always required
@@ -72,6 +86,233 @@ class ItemUpdate(ItemBase):
title: str | None = Field(default=None, min_length=1, max_length=255) # type: ignore
+class ExamBase(SQLModel):
+ title: str = Field(sa_column=Column(Text, nullable=False))
+ description: str | None = Field(default=None, sa_column=Column(Text))
+ duration_minutes: int | None = Field(default=None)
+ is_published: bool = Field(default=False)
+
+
+class Exam(ExamBase, table=True):
+ id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
+ owner_id: uuid.UUID = Field(foreign_key="user.id", nullable=False)
+ owner: User | None = Relationship(back_populates="exams")
+ questions: list["Question"] = Relationship(
+ back_populates="exam", sa_relationship_kwargs={"cascade": "all, delete-orphan"}
+ )
+ exam_attempts: list["ExamAttempt"] = Relationship(
+ back_populates="exam", sa_relationship_kwargs={"cascade": "all, delete-orphan"}
+ )
+
+
+class ExamPublic(ExamBase):
+ id: uuid.UUID
+ owner_id: uuid.UUID
+ questions: list["QuestionPublic"] = PydanticField(default_factory=list)
+
+
+class ExamsPublic(SQLModel):
+ data: list[ExamPublic]
+ count: int
+
+
+class ExamCreate(ExamBase):
+ title: str = Field(min_length=1, max_length=255)
+ description: str | None = Field(default=None, max_length=1000)
+ duration_minutes: int | None = Field(
+ default=None, ge=1
+ ) # Must be at least 1 minute
+
+
+class ExamUpdate(SQLModel):
+ title: str | None = Field(default=None, max_length=255)
+ description: str | None = Field(default=None, max_length=1000)
+ duration_minutes: int | None = Field(default=None, ge=1)
+ is_published: bool | None = None
+
+
+class QuestionType(str, Enum):
+ MULTIPLE_CHOICE = "multiple_choice"
+ TRUE_FALSE = "true_false"
+ SHORT_ANSWER = "short_answer"
+
+
+class QuestionBase(SQLModel):
+ question: str = Field(sa_column=Column(Text, nullable=False))
+ # TODO: Get the answer from generated questions for test grading
+ answer: str | None = Field(default=None, sa_column=Column(Text, nullable=True))
+
+
+class Question(QuestionBase, table=True):
+ id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
+ type: QuestionType = Field(
+ default=QuestionType.SHORT_ANSWER,
+ sa_column=Column(SAEnum(QuestionType), nullable=False),
+ )
+ options: list[str] = Field(default_factory=list, sa_column=Column(JSON))
+ exam_id: uuid.UUID = Field(foreign_key="exam.id", nullable=False)
+ exam: Exam | None = Relationship(back_populates="questions")
+ answers: list["Answer"] = Relationship(
+ back_populates="question",
+ sa_relationship_kwargs={"cascade": "all, delete-orphan"},
+ )
+
+
+# Define response model for a question
+class QuestionPublic(QuestionBase):
+ id: uuid.UUID
+ type: QuestionType
+ options: list[str] = [] # optional, only for multiple choice
+
+
+# Properties to receive on document creation
+class QuestionCreate(QuestionBase):
+ type: QuestionType
+ options: list[str] = [] # optional, only for multiple choice
+
+
+class GenerateQuestionsRequest(SQLModel):
+ document_ids: list[uuid.UUID]
+ # maybe add difficulty, number of questions, etc.
+
+
+class ExamAttemptBase(SQLModel):
+ score: float | None = None
+ is_complete: bool = Field(default=False)
+
+
+class AnswerBase(SQLModel):
+ response: str
+ is_correct: bool | None = None
+ explanation: str | None = None
+
+
+class AnswerPublic(AnswerBase):
+ id: uuid.UUID
+ question_id: uuid.UUID
+ created_at: datetime
+ updated_at: datetime
+
+
+class AnswerUpdate(SQLModel):
+ id: uuid.UUID
+ response: str
+
+
+class ExamAttemptPublic(ExamAttemptBase):
+ id: uuid.UUID
+ exam_id: uuid.UUID
+ completed_at: datetime | None = None
+ created_at: datetime
+ updated_at: datetime
+
+
+class ExamAttemptCreate(ExamAttemptBase):
+ exam_id: uuid.UUID
+
+
+class ExamAttemptUpdate(SQLModel):
+ is_complete: bool | None = None
+ answers: list["AnswerUpdate"] | None = None
+
+
+class ExamAttempt(ExamAttemptBase, table=True):
+ id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
+ exam_id: uuid.UUID = Field(
+ foreign_key="exam.id", nullable=False, ondelete="CASCADE"
+ )
+ owner_id: uuid.UUID = Field(
+ foreign_key="user.id", nullable=False, ondelete="CASCADE"
+ )
+ exam: Exam | None = Relationship(back_populates="exam_attempts")
+ answers: list["Answer"] = Relationship(back_populates="exam_attempt")
+
+ completed_at: datetime | None = None
+ created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
+ updated_at: datetime = Field(
+ default_factory=lambda: datetime.now(timezone.utc),
+ sa_column_kwargs={"onupdate": lambda: datetime.now(timezone.utc)},
+ )
+
+
+class Answer(AnswerBase, table=True):
+ id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
+ attempt_id: uuid.UUID = Field(foreign_key="examattempt.id", nullable=False)
+ exam_attempt: "ExamAttempt" = Relationship(back_populates="answers")
+ question: "Question" = Relationship(back_populates="answers")
+ question_id: uuid.UUID = Field(foreign_key="question.id", nullable=False)
+ created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
+ updated_at: datetime = Field(
+ default_factory=lambda: datetime.now(timezone.utc),
+ sa_column_kwargs={"onupdate": lambda: datetime.now(timezone.utc)},
+ )
+
+
+# Shared properties
+class DocumentBase(SQLModel):
+ filename: str = Field(min_length=1, max_length=255)
+ s3_url: str | None = Field(
+ default=None, max_length=255
+ ) # URL to the document in S3
+ s3_key: str | None = Field(default=None, max_length=1024)
+ content_type: str | None = Field(default=None, max_length=255)
+ size: int | None = Field(default=None, ge=0) # Size in bytes
+
+
+# Properties to receive on document creation
+class DocumentCreate(DocumentBase):
+ pass
+
+
+# Properties to receive on document update
+class DocumentUpdate(DocumentBase):
+ filename: str | None = Field(default=None, min_length=1, max_length=255) # type: ignore
+
+
+# Database model, database table inferred from class name
+class Document(DocumentBase, table=True):
+ id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
+ owner_id: uuid.UUID = Field(
+ foreign_key="user.id", nullable=False, ondelete="CASCADE"
+ )
+ owner: User | None = Relationship(back_populates="documents")
+ extracted_text: str | None = Field(
+ default=None, sa_column=Column(Text, nullable=True)
+ )
+ chunks: list["DocumentChunk"] = Relationship(back_populates="document")
+ chunk_count: int = 0 # Number of chunks created for this document
+
+
+class DocumentPublic(DocumentBase):
+ id: uuid.UUID
+ owner_id: uuid.UUID
+ filename: str
+ content_type: str | None = None
+ size: int | None = None
+ extracted_text: str | None = None
+
+
+class DocumentsPublic(SQLModel):
+ data: list[DocumentPublic]
+ count: int
+
+
+class DocumentChunkBase(SQLModel):
+ text: str
+ # TODO: vectorize for RAG
+ # vector: list[float] | None = Field(default=None, sa_column=Column(Vector(1536)))
+
+
+class DocumentChunk(DocumentChunkBase, table=True):
+ id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
+ document_id: uuid.UUID = Field(
+ foreign_key="document.id", nullable=False, ondelete="CASCADE"
+ )
+ document: Document | None = Relationship(back_populates="chunks")
+ size: int = Field(ge=0) # Number of characters in the chunk
+ type: str | None = "fixed-size"
+
+
# Database model, database table inferred from class name
class Item(ItemBase, table=True):
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
@@ -111,3 +352,25 @@ class TokenPayload(SQLModel):
class NewPassword(SQLModel):
token: str
new_password: str = Field(min_length=8, max_length=40)
+
+
+# Pydantic models for question items and outputs here:
+
+
+class QuestionItem(PydanticBaseModel):
+ question: str
+ answer: str | None
+ type: str
+ options: list[str] | None = None
+
+
+class QuestionOutput(PydanticBaseModel):
+ questions: list[QuestionItem]
+
+
+# Fix forward references for all Pydantic/SQLModel models
+AnswerUpdate.model_rebuild()
+ExamAttemptUpdate.model_rebuild()
+Answer.model_rebuild()
+ExamAttempt.model_rebuild()
+Question.model_rebuild()
diff --git a/backend/app/tests/api/routes/test_documents.py b/backend/app/tests/api/routes/test_documents.py
new file mode 100644
index 0000000000..c91be3d487
--- /dev/null
+++ b/backend/app/tests/api/routes/test_documents.py
@@ -0,0 +1,147 @@
+import io
+import uuid
+from unittest.mock import patch
+
+from fastapi.testclient import TestClient
+from sqlmodel import Session
+
+from app.core.config import settings
+from tests.utils.document import create_random_document
+
+
+def skip_test_create_document_real_s3(
+ client: TestClient, superuser_token_headers: dict[str, str]
+) -> None:
+ """Test creating a document with a file upload with the real S3 service."""
+ file_content = b"%PDF-1.4 test file content"
+
+ response = client.post(
+ f"{settings.API_V1_STR}/documents/",
+ headers=superuser_token_headers,
+ files={"file": ("example.pdf", io.BytesIO(file_content), "application/pdf")},
+ )
+
+ assert response.status_code == 200
+ content = response.json()
+ assert "id" in content, "actual response: " + str(content)
+ # assert content["title"] == metadata["title"]
+ # assert content["description"] == metadata["description"]
+ # assert "id" in content
+ # assert "owner_id" in content
+
+
+def flakey_test_create_document(
+ client: TestClient, superuser_token_headers: dict[str, str]
+) -> None:
+ """Test creating a document with a file upload using mocked S3."""
+ # TODO: fix me! need to use the mocked S3 upload here
+ file_content = b"%PDF-1.4 test file content"
+
+ with patch(
+ "app.api.routes.documents.upload_file_to_s3", return_value="document-slug"
+ ):
+ response = client.post(
+ f"{settings.API_V1_STR}/documents/",
+ headers=superuser_token_headers,
+ files={
+ "file": ("example.pdf", io.BytesIO(file_content), "application/pdf")
+ },
+ )
+
+ assert response.status_code == 200, "Unexpected response status code"
+ content = response.json()
+ assert "id" in content, "actual response: " + str(content)
+ assert "document-slug" in content["s3_url"], "S3 URL should match mocked value"
+ assert content["filename"] == "example.pdf", "Filename should match uploaded file"
+
+
+def test_read_document(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ document = create_random_document(db)
+ response = client.get(
+ f"{settings.API_V1_STR}/documents/{document.id}",
+ headers=superuser_token_headers,
+ )
+ assert response.status_code == 200
+ content = response.json()
+ assert content["size"] == document.size
+ assert content["filename"] == document.filename
+ assert content["content_type"] == document.content_type
+ assert content["s3_url"] == document.s3_url
+ assert content["s3_key"] == document.s3_key
+ assert content["id"] == str(document.id)
+ assert content["owner_id"] == str(document.owner_id)
+
+
+def test_read_documents(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ create_random_document(db)
+ create_random_document(db)
+ response = client.get(
+ f"{settings.API_V1_STR}/documents/",
+ headers=superuser_token_headers,
+ )
+ assert response.status_code == 200
+ content = response.json()
+ assert len(content["data"]) >= 2
+
+
+def test_update_document(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ document = create_random_document(db)
+ data = {"s3_key": "UpdatedKey"}
+ response = client.put(
+ f"{settings.API_V1_STR}/documents/{document.id}",
+ headers=superuser_token_headers,
+ json=data,
+ )
+ assert response.status_code == 200
+ content = response.json()
+ assert content["size"] == document.size
+ assert content["filename"] == document.filename
+ assert content["content_type"] == document.content_type
+ assert content["s3_url"] == document.s3_url
+ assert content["s3_key"] == "UpdatedKey"
+ assert content["id"] == str(document.id)
+ assert content["owner_id"] == str(document.owner_id)
+
+
+def test_delete_document(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ document = create_random_document(db)
+ response = client.delete(
+ f"{settings.API_V1_STR}/documents/{document.id}",
+ headers=superuser_token_headers,
+ )
+ assert response.status_code == 200
+ content = response.json()
+ assert content["message"] == "Document deleted successfully"
+
+
+def test_delete_document_not_found(
+ client: TestClient, superuser_token_headers: dict[str, str]
+) -> None:
+ response = client.delete(
+ f"{settings.API_V1_STR}/documents/{uuid.uuid4()}",
+ headers=superuser_token_headers,
+ )
+ assert response.status_code == 404
+ content = response.json()
+ assert content["detail"] == "Document not found"
+
+
+def test_delete_document_not_enough_permissions(
+ client: TestClient, normal_user_token_headers: dict[str, str], db: Session
+) -> None:
+ document = create_random_document(db)
+ response = client.delete(
+ f"{settings.API_V1_STR}/documents/{document.id}",
+ headers=normal_user_token_headers,
+ )
+ assert response.status_code == 400
+ content = response.json()
+ assert content["detail"] == "Not enough permissions"
diff --git a/backend/pyproject.toml b/backend/pyproject.toml
index d72454c28a..1272405e06 100644
--- a/backend/pyproject.toml
+++ b/backend/pyproject.toml
@@ -21,6 +21,11 @@ dependencies = [
"pydantic-settings<3.0.0,>=2.2.1",
"sentry-sdk[fastapi]<2.0.0,>=1.40.6",
"pyjwt<3.0.0,>=2.8.0",
+ "langchain-text-splitters>=0.3.11",
+ "boto3>=1.40.47",
+ "textract>=1.6.5",
+ "types-boto3>=1.40.47",
+ "langchain-openai>=0.3.35",
]
[tool.uv]
diff --git a/backend/tests/api/routes/test_documents.py b/backend/tests/api/routes/test_documents.py
new file mode 100644
index 0000000000..5224e31026
--- /dev/null
+++ b/backend/tests/api/routes/test_documents.py
@@ -0,0 +1,146 @@
+import io
+import uuid
+from unittest.mock import patch
+
+from fastapi.testclient import TestClient
+from sqlmodel import Session
+
+from app.core.config import settings
+from tests.utils.document import create_random_document # type: ignore
+
+
+def skip_test_create_document_real_s3(
+ client: TestClient, superuser_token_headers: dict[str, str]
+) -> None:
+ """Test creating a document with a file upload with the real S3 service."""
+ file_content = b"%PDF-1.4 test file content"
+
+ response = client.post(
+ f"{settings.API_V1_STR}/documents/",
+ headers=superuser_token_headers,
+ files={"file": ("example.pdf", io.BytesIO(file_content), "application/pdf")},
+ )
+
+ assert response.status_code == 200
+ content = response.json()
+ assert "id" in content, "actual response: " + str(content)
+ # assert content["title"] == metadata["title"]
+ # assert content["description"] == metadata["description"]
+ # assert "id" in content
+ # assert "owner_id" in content
+
+
+def flakey_test_create_document(
+ client: TestClient, superuser_token_headers: dict[str, str]
+) -> None:
+ """Test creating a document with a file upload using mocked S3."""
+ file_content = b"%PDF-1.4 test file content"
+
+ with patch(
+ "app.api.routes.documents.upload_file_to_s3", return_value="document-slug"
+ ):
+ response = client.post(
+ f"{settings.API_V1_STR}/documents/",
+ headers=superuser_token_headers,
+ files={
+ "file": ("example.pdf", io.BytesIO(file_content), "application/pdf")
+ },
+ )
+
+ assert response.status_code == 200, "Unexpected response status code"
+ content = response.json()
+ assert "id" in content, "actual response: " + str(content)
+ assert "document-slug" in content["s3_url"], "S3 URL should match mocked value"
+ assert content["filename"] == "example.pdf", "Filename should match uploaded file"
+
+
+def test_read_document(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ document = create_random_document(db)
+ response = client.get(
+ f"{settings.API_V1_STR}/documents/{document.id}",
+ headers=superuser_token_headers,
+ )
+ assert response.status_code == 200
+ content = response.json()
+ assert content["size"] == document.size
+ assert content["filename"] == document.filename
+ assert content["content_type"] == document.content_type
+ assert content["s3_url"] == document.s3_url
+ assert content["s3_key"] == document.s3_key
+ assert content["id"] == str(document.id)
+ assert content["owner_id"] == str(document.owner_id)
+
+
+def test_read_documents(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ create_random_document(db)
+ create_random_document(db)
+ response = client.get(
+ f"{settings.API_V1_STR}/documents/",
+ headers=superuser_token_headers,
+ )
+ assert response.status_code == 200
+ content = response.json()
+ assert len(content["data"]) >= 2
+
+
+def test_update_document(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ document = create_random_document(db)
+ data = {"s3_key": "UpdatedKey"}
+ response = client.put(
+ f"{settings.API_V1_STR}/documents/{document.id}",
+ headers=superuser_token_headers,
+ json=data,
+ )
+ assert response.status_code == 200
+ content = response.json()
+ assert content["size"] == document.size
+ assert content["filename"] == document.filename
+ assert content["content_type"] == document.content_type
+ assert content["s3_url"] == document.s3_url
+ assert content["s3_key"] == "UpdatedKey"
+ assert content["id"] == str(document.id)
+ assert content["owner_id"] == str(document.owner_id)
+
+
+def test_delete_document(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ document = create_random_document(db)
+ response = client.delete(
+ f"{settings.API_V1_STR}/documents/{document.id}",
+ headers=superuser_token_headers,
+ )
+ assert response.status_code == 200
+ content = response.json()
+ assert content["message"] == "Document deleted successfully"
+
+
+def test_delete_document_not_found(
+ client: TestClient, superuser_token_headers: dict[str, str]
+) -> None:
+ response = client.delete(
+ f"{settings.API_V1_STR}/documents/{uuid.uuid4()}",
+ headers=superuser_token_headers,
+ )
+ assert response.status_code == 404
+ content = response.json()
+ assert content["detail"] == "Document not found"
+
+
+def test_delete_document_not_enough_permissions(
+ client: TestClient, normal_user_token_headers: dict[str, str], db: Session
+) -> None:
+ document = create_random_document(db)
+ response = client.delete(
+ f"{settings.API_V1_STR}/documents/{document.id}",
+ headers=normal_user_token_headers,
+ )
+ assert response.status_code == 400
+ content = response.json()
+ assert content["detail"] == "Not enough permissions"
diff --git a/backend/tests/api/routes/test_exam_attempts.py b/backend/tests/api/routes/test_exam_attempts.py
new file mode 100644
index 0000000000..46c225079d
--- /dev/null
+++ b/backend/tests/api/routes/test_exam_attempts.py
@@ -0,0 +1,243 @@
+import uuid
+
+from fastapi.testclient import TestClient
+from sqlmodel import Session
+
+from app.core.config import settings
+from app.models import (
+ Answer,
+ AnswerUpdate,
+ ExamAttempt,
+ ExamAttemptUpdate,
+ Question,
+)
+from tests.utils.exam import create_exam_with_attempt_and_answer, create_random_exam
+from tests.utils.user import create_random_user, create_random_user_with_password
+
+AnswerUpdate.model_rebuild()
+ExamAttemptUpdate.model_rebuild()
+Answer.model_rebuild()
+ExamAttempt.model_rebuild()
+Question.model_rebuild()
+
+_ = [AnswerUpdate, ExamAttemptUpdate, Answer, ExamAttempt, Question]
+
+
+def test_create_exam_attempt_success(
+ client: TestClient,
+ superuser_token_headers: dict[str, str],
+ db: Session,
+) -> None:
+ """Test creating an exam attempt successfully."""
+ exam = create_random_exam(db)
+
+ response = client.post(
+ f"{settings.API_V1_STR}/exam-attempts/",
+ headers=superuser_token_headers,
+ json={"exam_id": str(exam.id)},
+ )
+
+ assert response.status_code == 200
+ data = response.json()
+ assert data["exam_id"] == str(exam.id)
+
+
+def test_create_exam_attempt_not_found(
+ client: TestClient,
+ superuser_token_headers: dict[str, str],
+) -> None:
+ """Test creating an attempt for a nonexistent exam."""
+
+ payload = {"exam_id": str(uuid.uuid4())}
+
+ response = client.post(
+ f"{settings.API_V1_STR}/exam-attempts/",
+ headers=superuser_token_headers,
+ json=payload,
+ )
+
+ assert response.status_code == 404
+
+
+def test_create_exam_attempt_not_enough_permissions(
+ client: TestClient,
+ normal_user_token_headers: dict[str, str],
+ db: Session,
+) -> None:
+ """Test that a normal user cannot create an attempt for someone else's exam."""
+
+ exam = create_random_exam(db)
+
+ response = client.post(
+ f"{settings.API_V1_STR}/exam-attempts/",
+ headers=normal_user_token_headers,
+ json={"exam_id": str(exam.id)},
+ )
+
+ assert response.status_code == 403
+ assert response.json()["detail"] == "Not enough permissions"
+
+
+def test_read_exam_attempt(
+ client: TestClient,
+ superuser_token_headers: dict[str, str],
+ db: Session,
+) -> None:
+ """Test reading an existing exam attempt."""
+
+ # Create an exam and an attempt
+ exam = create_random_exam(db)
+ exam_attempt = ExamAttempt(exam_id=exam.id, owner_id=exam.owner_id)
+ db.add(exam_attempt)
+ db.commit()
+ db.refresh(exam_attempt)
+
+ response = client.get(
+ f"{settings.API_V1_STR}/exam-attempts/{exam_attempt.id}",
+ headers=superuser_token_headers,
+ )
+
+ assert response.status_code == 200
+ content = response.json()
+ assert content["id"] == str(exam_attempt.id)
+ assert content["exam_id"] == str(exam.id)
+
+
+def test_read_exam_attempt_not_found(
+ client: TestClient,
+ superuser_token_headers: dict[str, str],
+) -> None:
+ """Test reading an exam attempt that does not exist."""
+
+ response = client.get(
+ f"{settings.API_V1_STR}/exam-attempts/{uuid.uuid4()}",
+ headers=superuser_token_headers,
+ )
+
+ assert response.status_code == 404
+ assert response.json()["detail"] == "Exam Attempt not found"
+
+
+def test_read_exam_attempt_not_enough_permissions(
+ client: TestClient,
+ normal_user_token_headers: dict[str, str],
+ db: Session,
+) -> None:
+ """Test that a normal user cannot read another user's exam attempt."""
+
+ # Create an exam and attempt owned by another user
+ exam = create_random_exam(db)
+ exam_attempt = ExamAttempt(exam_id=exam.id, owner_id=exam.owner_id)
+ db.add(exam_attempt)
+ db.commit()
+ db.refresh(exam_attempt)
+
+ response = client.get(
+ f"{settings.API_V1_STR}/exam-attempts/{exam_attempt.id}",
+ headers=normal_user_token_headers,
+ )
+
+ assert response.status_code == 403
+ assert response.json()["detail"] == "Not enough permissions"
+
+
+def test_update_exam_attempt_success(client: TestClient, db: Session) -> None:
+ """Test updating an existing exam attempt."""
+ user, password = create_random_user_with_password(db)
+ login_data = {"username": user.email, "password": password}
+ r = client.post(f"{settings.API_V1_STR}/login/access-token", data=login_data)
+ token = r.json()["access_token"]
+ headers = {"Authorization": f"Bearer {token}"}
+
+ exam, question, exam_attempt, answer = create_exam_with_attempt_and_answer(
+ db, owner_id=user.id
+ )
+
+ payload = {"answers": [{"id": str(answer.id), "response": "4"}]}
+ response = client.patch(
+ f"{settings.API_V1_STR}/exam-attempts/{exam_attempt.id}",
+ headers=headers,
+ json=payload,
+ )
+
+ assert response.status_code == 200
+
+
+def test_update_exam_attempt_locked(client: TestClient, db: Session) -> None:
+ """Test updating a completed exam attempt."""
+ # 1️⃣ Create a random user and their token
+ user, password = create_random_user_with_password(db)
+ login_data = {"username": user.email, "password": password}
+ r = client.post(f"{settings.API_V1_STR}/login/access-token", data=login_data)
+ token = r.json()["access_token"]
+ headers = {"Authorization": f"Bearer {token}"}
+
+ # 2️⃣ Create exam attempt owned by this user and mark it as complete
+ exam, question, exam_attempt, answer = create_exam_with_attempt_and_answer(
+ db, owner_id=user.id
+ )
+ exam_attempt.is_complete = True
+ db.add(exam_attempt)
+ db.commit()
+ db.refresh(exam_attempt)
+
+ # 3️⃣ Attempt to update the completed exam attempt
+ payload = {
+ "answers": [
+ {
+ "id": str(answer.id),
+ "response": "new answer",
+ }
+ ]
+ }
+
+ response = client.patch(
+ f"{settings.API_V1_STR}/exam-attempts/{exam_attempt.id}",
+ headers=headers,
+ json=payload,
+ )
+
+ # 4️⃣ Assertions
+ assert response.status_code == 409
+ assert response.json()["detail"] == "Exam attempt is already completed"
+
+
+def test_update_exam_attempt_not_found(
+ client: TestClient,
+ superuser_token_headers: dict[str, str],
+) -> None:
+ """Test updating an exam attempt that does not exist."""
+ payload = {"answers": [{"id": str(uuid.uuid4()), "response": "4"}]}
+
+ response = client.patch(
+ f"{settings.API_V1_STR}/exam-attempts/{uuid.uuid4()}",
+ headers=superuser_token_headers,
+ json=payload,
+ )
+
+ assert response.status_code == 404
+ assert response.json()["detail"] == "Exam attempt not found"
+
+
+def test_update_exam_attempt_not_enough_permissions(
+ client: TestClient,
+ normal_user_token_headers: dict[str, str],
+ db: Session,
+) -> None:
+ """Test that a normal user cannot update another user's exam attempt."""
+ user = create_random_user(db)
+
+ exam, question, exam_attempt, answer = create_exam_with_attempt_and_answer(
+ db, owner_id=user.id
+ )
+
+ payload = {"answers": [{"id": str(uuid.uuid4()), "response": "4"}]}
+
+ response = client.patch(
+ f"{settings.API_V1_STR}/exam-attempts/{exam_attempt.id}",
+ headers=normal_user_token_headers,
+ json=payload,
+ )
+
+ assert response.status_code == 403
+ assert response.json()["detail"] == "Not allowed"
diff --git a/backend/tests/api/routes/test_exams.py b/backend/tests/api/routes/test_exams.py
new file mode 100644
index 0000000000..f129493a1e
--- /dev/null
+++ b/backend/tests/api/routes/test_exams.py
@@ -0,0 +1,185 @@
+import uuid
+from unittest.mock import patch
+
+from fastapi.testclient import TestClient
+from sqlmodel import Session
+
+from app.core.config import settings
+from app.models import QuestionCreate, QuestionType
+from tests.utils.document import create_random_documents
+from tests.utils.exam import create_random_exam
+
+
+def test_generate_exam(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ """Test generating questions from documents using mocked OpenAI."""
+
+ # Create some test documents
+ documents = create_random_documents(db)
+ document_ids = [str(doc.id) for doc in documents]
+
+ # Mock questions as QuestionCreate (input to DB), no owner_id yet
+ mock_questions = [
+ QuestionCreate(
+ question=f"Generated question {i}",
+ answer=None,
+ type=QuestionType.SHORT_ANSWER,
+ options=[],
+ )
+ for i in range(1, 5)
+ ]
+
+ payload = {"document_ids": document_ids}
+
+ with patch(
+ "app.api.routes.exams.generate_questions_from_documents",
+ return_value=mock_questions,
+ ):
+ response = client.post(
+ f"{settings.API_V1_STR}/exams/generate",
+ headers=superuser_token_headers,
+ json=payload,
+ )
+
+ # Response should now contain ExamPublic object with id and owner_id
+ assert response.status_code == 200, "Unexpected response status code"
+ content = response.json()
+ assert len(content) > 0, "Should generate at least one exam"
+ # The route attaches owner_id and id
+
+ # assert "id" in content[0], "Generated exam should have an ID"
+ # assert "owner_id" in content[0], "Generated exam should have an owner ID"
+
+ assert len(content["questions"]) == len(
+ mock_questions
+ ), "Number of questions in exam should match generated questions"
+
+
+def skip_test_generate_exam_real(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ """Test generating questions from documents using real OpenAI."""
+
+ # Create some test documents
+ documents = create_random_documents(db)
+ document_ids = [str(doc.id) for doc in documents]
+
+ assert documents[
+ 0
+ ].extracted_text, f"Documents should have extracted text. documents: {documents}"
+
+ payload = {"document_ids": document_ids}
+
+ response = client.post(
+ f"{settings.API_V1_STR}/exams/generate",
+ headers=superuser_token_headers,
+ json=payload,
+ )
+
+ # Response should now contain ExamPublic object with id and owner_id
+ assert response.status_code == 200, "Unexpected response status code"
+ content = response.json()
+ assert len(content) > 0, "Should generate at least one exam"
+ # The route attaches owner_id and id
+
+ # assert "id" in content[0], "Generated exam should have an ID"
+ # assert "owner_id" in content[0], "Generated exam should have an owner ID"
+
+ assert (
+ len(content["questions"]) == 5
+ ), f"Number of questions in exam should match generated questions. content: {content}"
+
+
+def test_read_exam(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ exam = create_random_exam(db)
+ response = client.get(
+ f"{settings.API_V1_STR}/exams/{exam.id}",
+ headers=superuser_token_headers,
+ )
+ content = response.json()
+ assert response.status_code == 200, f"content: {content}"
+
+ assert content["title"] == exam.title, f"content: {content}"
+ assert content["is_published"] == exam.is_published
+ assert content.get("questions")
+ assert content["description"] == exam.description
+ assert content["duration_minutes"] == exam.duration_minutes
+ assert content["id"] == str(exam.id)
+ assert content["owner_id"] == str(exam.owner_id)
+
+
+def test_read_exams(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ create_random_exam(db)
+ create_random_exam(db)
+ response = client.get(
+ f"{settings.API_V1_STR}/exams/",
+ headers=superuser_token_headers,
+ )
+ assert response.status_code == 200
+ content = response.json()
+ assert len(content["data"]) >= 2
+
+
+def test_update_exam(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ exam = create_random_exam(db)
+ data = {"title": "UpdatedKey"}
+ response = client.put(
+ f"{settings.API_V1_STR}/exams/{exam.id}",
+ headers=superuser_token_headers,
+ json=data,
+ )
+ content = response.json()
+ assert response.status_code == 200
+
+ assert content["title"] == data["title"]
+ assert content["is_published"] == exam.is_published
+ assert content.get("questions")
+ assert content["description"] == exam.description
+ assert content["duration_minutes"] == exam.duration_minutes
+ assert content["id"] == str(exam.id)
+ assert content["owner_id"] == str(exam.owner_id)
+
+
+def test_delete_exam(
+ client: TestClient, superuser_token_headers: dict[str, str], db: Session
+) -> None:
+ exam = create_random_exam(db)
+ response = client.delete(
+ f"{settings.API_V1_STR}/exams/{exam.id}",
+ headers=superuser_token_headers,
+ )
+ assert response.status_code == 200
+ content = response.json()
+ assert content["message"] == "Exam deleted successfully"
+
+
+def test_delete_exam_not_found(
+ client: TestClient, superuser_token_headers: dict[str, str]
+) -> None:
+ response = client.delete(
+ f"{settings.API_V1_STR}/exams/{uuid.uuid4()}",
+ headers=superuser_token_headers,
+ )
+ assert response.status_code == 404
+ content = response.json()
+ assert content["detail"] == "Exam not found"
+
+
+def test_delete_exam_not_enough_permissions(
+ client: TestClient, normal_user_token_headers: dict[str, str], db: Session
+) -> None:
+ exam = create_random_exam(db)
+ response = client.delete(
+ f"{settings.API_V1_STR}/exams/{exam.id}",
+ headers=normal_user_token_headers,
+ )
+ assert response.status_code == 403
+ content = response.json()
+ assert content["detail"] == "Not enough permissions"
diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py
index 8ddab7b321..e44487c6c9 100644
--- a/backend/tests/conftest.py
+++ b/backend/tests/conftest.py
@@ -7,7 +7,7 @@
from app.core.config import settings
from app.core.db import engine, init_db
from app.main import app
-from app.models import Item, User
+from app.models import Answer, Document, Exam, Question, User
from tests.utils.user import authentication_token_from_email
from tests.utils.utils import get_superuser_token_headers
@@ -17,7 +17,13 @@ def db() -> Generator[Session, None, None]:
with Session(engine) as session:
init_db(session)
yield session
- statement = delete(Item)
+ statement = delete(Answer)
+ session.execute(statement)
+ statement = delete(Question)
+ session.execute(statement)
+ statement = delete(Exam)
+ session.execute(statement)
+ statement = delete(Document)
session.execute(statement)
statement = delete(User)
session.execute(statement)
diff --git a/backend/tests/core/test_extractors.py b/backend/tests/core/test_extractors.py
new file mode 100644
index 0000000000..c48222706c
--- /dev/null
+++ b/backend/tests/core/test_extractors.py
@@ -0,0 +1,30 @@
+from unittest.mock import MagicMock, patch
+
+from app.core.extractors import extract_text_and_save_to_db, perform_fixed_size_chunking
+
+
+def test_extract_text_and_save_chunks_to_db() -> None:
+ fake_text = "abcdefghij"
+ fake_s3_key = "some-s3-key"
+ fake_doc_id = "123e4567-e89b-12d3-a456-426614174000"
+
+ mock_document = MagicMock()
+ mock_document.id = fake_doc_id
+
+ with patch(
+ "app.core.extractors.extract_text_from_s3_file", return_value=fake_text
+ ) as _, patch("app.core.extractors.Session") as session_class_mock, patch(
+ "app.core.extractors.save_chunks_to_db"
+ ) as save_chunks_mock:
+ session_instance = MagicMock()
+ session_class_mock.return_value.__enter__.return_value = session_instance
+ session_instance.exec.return_value.first.return_value = mock_document
+
+ # Run function
+ extract_text_and_save_to_db(fake_s3_key, fake_doc_id)
+
+ # Check chunking worked
+ expected_chunks = perform_fixed_size_chunking(fake_text)
+ save_chunks_mock.assert_called_once_with(
+ session_instance, fake_doc_id, expected_chunks
+ )
diff --git a/backend/tests/utils/document.py b/backend/tests/utils/document.py
new file mode 100644
index 0000000000..9cd9f59613
--- /dev/null
+++ b/backend/tests/utils/document.py
@@ -0,0 +1,33 @@
+from sqlmodel import Session
+
+from app import crud
+from app.models import DocumentCreate, DocumentPublic, User
+from tests.utils.user import create_random_user
+from tests.utils.utils import random_lower_string
+
+
+def create_random_document(db: Session, user: User | None = None) -> DocumentPublic:
+ user = user or create_random_user(db)
+ owner_id = user.id
+ assert owner_id is not None
+ title = random_lower_string()
+ extracted_text = f"Extracted text for {title} by {owner_id}"
+ document_in = DocumentCreate(
+ filename=f"{title}.pdf",
+ content_type="application/pdf",
+ size=1024,
+ s3_url=f"https://example-bucket.s3.amazonaws.com/{title}.pdf",
+ s3_key=f"{owner_id}/{title}.pdf",
+ title=title,
+ )
+ return crud.create_document(
+ session=db,
+ document_in=document_in,
+ owner_id=owner_id,
+ extracted_text=extracted_text,
+ )
+
+
+def create_random_documents(db: Session) -> list[DocumentPublic]:
+ user = create_random_user(db)
+ return [create_random_document(db, user) for _ in range(3)]
diff --git a/backend/tests/utils/exam.py b/backend/tests/utils/exam.py
new file mode 100644
index 0000000000..8ab0450f90
--- /dev/null
+++ b/backend/tests/utils/exam.py
@@ -0,0 +1,126 @@
+import uuid
+from typing import Any
+
+from sqlmodel import Session
+
+from app import crud
+from app.models import (
+ Answer,
+ Exam,
+ ExamAttempt,
+ ExamCreate,
+ ExamPublic,
+ Question,
+ QuestionCreate,
+ User,
+)
+from tests.utils.user import create_random_user
+from tests.utils.utils import random_lower_string
+
+
+def create_random_exam(
+ db: Session, user: User | None = None, with_questions: bool = True
+) -> ExamPublic:
+ user = user or create_random_user(db)
+ owner_id = user.id
+ assert owner_id is not None
+
+ title = random_lower_string()
+ exam_in = ExamCreate(
+ title=title,
+ description=f"Randomly generated exam for {title}",
+ duration_minutes=30,
+ is_published=False,
+ )
+
+ db_exam = crud.create_db_exam(session=db, exam_in=exam_in, owner_id=owner_id)
+
+ questions: list[QuestionCreate] = []
+ if with_questions:
+ for i in range(3):
+ questions.append(
+ QuestionCreate(
+ question=f"What is the answer to question {i+1} of {title}?",
+ answer=f"Answer {i+1}",
+ type="multiple_choice",
+ exam_id=db_exam.id,
+ )
+ )
+
+ return crud.create_exam(session=db, db_exam=db_exam, questions=questions)
+
+
+def create_random_exams(db: Session, user: User | None = None) -> list[ExamPublic]:
+ user = user or create_random_user(db)
+ return [create_random_exam(db, user) for _ in range(3)]
+
+
+def create_exam_with_attempt(
+ db: Session,
+ question_text: str = "What is 2+2?",
+ correct_answer: str = "4",
+ question_type: str = "short_answer",
+) -> Any:
+ """
+ Helper to create an exam, a question, and an attempt.
+ Returns (exam, question, attempt).
+ """
+ exam = create_random_exam(db)
+
+ question = Question(
+ question=question_text,
+ answer=correct_answer,
+ type=question_type,
+ exam_id=exam.id,
+ )
+ db.add(question)
+ db.commit()
+ db.refresh(question)
+
+ exam_attempt = ExamAttempt(exam_id=exam.id, owner_id=exam.owner_id)
+ db.add(exam_attempt)
+ db.commit()
+ db.refresh(exam_attempt)
+
+ return [exam, question, exam_attempt]
+
+
+def create_exam_with_attempt_and_answer(db: Session, owner_id: uuid.UUID) -> Any:
+ """
+ Helper to create:
+ - an exam owned by `owner_id`
+ - a question for that exam
+ - an exam attempt for that exam & owner
+ - an initial answer for that attempt
+ Returns: (exam, question, exam_attempt, answer)
+ """
+ # Create exam
+ exam = Exam(title="Sample Exam", owner_id=owner_id)
+ db.add(exam)
+ db.commit()
+ db.refresh(exam)
+
+ # Create question
+ question = Question(
+ question="What is 2+2?",
+ answer="4",
+ type="short_answer",
+ exam_id=exam.id,
+ )
+ db.add(question)
+ db.commit()
+ db.refresh(question)
+
+ # Create exam attempt
+ exam_attempt = ExamAttempt(exam_id=exam.id, owner_id=owner_id)
+ db.add(exam_attempt)
+ db.commit()
+ db.refresh(exam_attempt)
+
+ # Add initial answer (wrong for testing)
+ answer = Answer(response="3", attempt_id=exam_attempt.id, question_id=question.id)
+ db.add(answer)
+ db.commit()
+ db.refresh(answer)
+
+ return exam, question, exam_attempt, answer
diff --git a/backend/tests/utils/user.py b/backend/tests/utils/user.py
index 5867431ed8..b5cc07865e 100644
--- a/backend/tests/utils/user.py
+++ b/backend/tests/utils/user.py
@@ -27,6 +27,14 @@ def create_random_user(db: Session) -> User:
return user
+def create_random_user_with_password(db: Session) -> tuple[User, str]:
+ email = random_email()
+ password = random_lower_string()
+ user_in = UserCreate(email=email, password=password)
+ user = crud.create_user(session=db, user_create=user_in)
+ return user, password
+
+
def authentication_token_from_email(
*, client: TestClient, email: str, db: Session
) -> dict[str, str]:
diff --git a/backend/uv.lock b/backend/uv.lock
index e746adbb88..28c2cf74d8 100644
--- a/backend/uv.lock
+++ b/backend/uv.lock
@@ -1,5 +1,5 @@
version = 1
-revision = 3
+revision = 2
requires-python = ">=3.10, <4.0"
resolution-markers = [
"python_full_version < '3.13'",
@@ -52,11 +52,14 @@ source = { editable = "." }
dependencies = [
{ name = "alembic" },
{ name = "bcrypt" },
+ { name = "boto3" },
{ name = "email-validator" },
{ name = "emails" },
{ name = "fastapi", extra = ["standard"] },
{ name = "httpx" },
{ name = "jinja2" },
+ { name = "langchain-openai" },
+ { name = "langchain-text-splitters" },
{ name = "passlib", extra = ["bcrypt"] },
{ name = "psycopg", extra = ["binary"] },
{ name = "pydantic" },
@@ -66,6 +69,8 @@ dependencies = [
{ name = "sentry-sdk", extra = ["fastapi"] },
{ name = "sqlmodel" },
{ name = "tenacity" },
+ { name = "textract" },
+ { name = "types-boto3" },
]
[package.dev-dependencies]
@@ -82,11 +87,14 @@ dev = [
requires-dist = [
{ name = "alembic", specifier = ">=1.12.1,<2.0.0" },
{ name = "bcrypt", specifier = "==4.3.0" },
+ { name = "boto3", specifier = ">=1.40.47" },
{ name = "email-validator", specifier = ">=2.1.0.post1,<3.0.0.0" },
{ name = "emails", specifier = ">=0.6,<1.0" },
{ name = "fastapi", extras = ["standard"], specifier = ">=0.114.2,<1.0.0" },
{ name = "httpx", specifier = ">=0.25.1,<1.0.0" },
{ name = "jinja2", specifier = ">=3.1.4,<4.0.0" },
+ { name = "langchain-openai", specifier = ">=0.3.35" },
+ { name = "langchain-text-splitters", specifier = ">=0.3.11" },
{ name = "passlib", extras = ["bcrypt"], specifier = ">=1.7.4,<2.0.0" },
{ name = "psycopg", extras = ["binary"], specifier = ">=3.1.13,<4.0.0" },
{ name = "pydantic", specifier = ">2.0" },
@@ -96,6 +104,8 @@ requires-dist = [
{ name = "sentry-sdk", extras = ["fastapi"], specifier = ">=1.40.6,<2.0.0" },
{ name = "sqlmodel", specifier = ">=0.0.21,<1.0.0" },
{ name = "tenacity", specifier = ">=8.2.3,<9.0.0" },
+ { name = "textract", specifier = ">=1.6.5" },
+ { name = "types-boto3", specifier = ">=1.40.47" },
]
[package.metadata.requires-dev]
@@ -108,6 +118,15 @@ dev = [
{ name = "types-passlib", specifier = ">=1.7.7.20240106,<2.0.0.0" },
]
+[[package]]
+name = "argcomplete"
+version = "1.10.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ae/28/07d2cfe0838f998ea2eafab59f52b0ceb1e70adb1831fa14b958a9fa6c5c/argcomplete-1.10.3.tar.gz", hash = "sha256:a37f522cf3b6a34abddfedb61c4546f60023b3799b22d1cd971eacdc0861530a", size = 50173, upload-time = "2019-11-26T19:12:49.157Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ae/8e/6b293f883fdbd29b9c8170db44bddff9e7de224d8cf1eb4287f69f1766e5/argcomplete-1.10.3-py2.py3-none-any.whl", hash = "sha256:d8ea63ebaec7f59e56e7b2a386b1d1c7f1a7ae87902c9ee17d377eaa557f06fa", size = 36576, upload-time = "2019-11-26T19:12:46.646Z" },
+]
+
[[package]]
name = "bcrypt"
version = "4.3.0"
@@ -166,6 +185,58 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/63/13/47bba97924ebe86a62ef83dc75b7c8a881d53c535f83e2c54c4bd701e05c/bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:57967b7a28d855313a963aaea51bf6df89f833db4320da458e5b3c5ab6d4c938", size = 280110, upload-time = "2025-02-28T01:24:05.896Z" },
]
+[[package]]
+name = "beautifulsoup4"
+version = "4.8.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "soupsieve" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/52/ba/0e121661f529e7f456e903bf5c4d255b8051d8ce2b5e629c5212efe4c3f1/beautifulsoup4-4.8.2.tar.gz", hash = "sha256:05fd825eb01c290877657a56df4c6e4c311b3965bda790c613a3d6fb01a5462a", size = 298650, upload-time = "2019-12-24T22:28:22.187Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/cb/a1/c698cf319e9cfed6b17376281bd0efc6bfc8465698f54170ef60a485ab5d/beautifulsoup4-4.8.2-py3-none-any.whl", hash = "sha256:9fbb4d6e48ecd30bcacc5b63b94088192dcda178513b2ae3c394229f8911b887", size = 106874, upload-time = "2019-12-24T22:28:20.142Z" },
+]
+
+[[package]]
+name = "boto3"
+version = "1.40.47"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "botocore" },
+ { name = "jmespath" },
+ { name = "s3transfer" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/af/32/16ffef2a7ca05babd5d36d512b07bd318feb6af87aa83ced29d565f6a6be/boto3-1.40.47.tar.gz", hash = "sha256:c0ea31655c41b3f9bf46bc370520eafc081ba4c3e79fa564b60e976663abf7e7", size = 111607, upload-time = "2025-10-07T19:26:37.684Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c7/25/a3ad490d4ab04417cf887fc52ce266cacde2f15b8d46ec45cc40583f22cd/boto3-1.40.47-py3-none-any.whl", hash = "sha256:33b291200cbb042ca8faac0b52a5d460850712641930d32335b75bc65e88653c", size = 139346, upload-time = "2025-10-07T19:26:35.481Z" },
+]
+
+[[package]]
+name = "botocore"
+version = "1.40.47"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "jmespath" },
+ { name = "python-dateutil" },
+ { name = "urllib3" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5f/9e/65a9507f6f4d7ea1f3050a2b555faac7f4afa074ce9bb1dd12aa6fd19fc3/botocore-1.40.47.tar.gz", hash = "sha256:8eb950046ba8afc99dedb0268282b4f9a61bca2c7a6415036bff2beee5e180ca", size = 14401848, upload-time = "2025-10-07T19:26:26.686Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a2/16/96226328857ab02123bc7b6dc08e27aa5bd1cfa1c553a922239263014ce8/botocore-1.40.47-py3-none-any.whl", hash = "sha256:0845c5bc49fc9d45938ff3609df7ec1eff0d26c1a4edcd03e16ad2194c3a9a56", size = 14072266, upload-time = "2025-10-07T19:26:22.79Z" },
+]
+
+[[package]]
+name = "botocore-stubs"
+version = "1.40.33"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "types-awscrt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ae/94/16f8e1f41feaa38f1350aa5a4c60c5724b6c8524ca0e6c28523bf5070e74/botocore_stubs-1.40.33.tar.gz", hash = "sha256:89c51ae0b28d9d79fde8c497cf908ddf872ce027d2737d4d4ba473fde9cdaa82", size = 42742, upload-time = "2025-09-17T20:25:56.388Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/af/7b/6d8fe12a955b16094460e89ea7c4e063f131f4b3bd461b96bcd625d0c79e/botocore_stubs-1.40.33-py3-none-any.whl", hash = "sha256:ad21fee32cbdc7ad4730f29baf88424c7086bf88a745f8e43660ca3e9a7e5f89", size = 66843, upload-time = "2025-09-17T20:25:54.052Z" },
+]
+
[[package]]
name = "cachetools"
version = "5.5.0"
@@ -195,11 +266,11 @@ wheels = [
[[package]]
name = "chardet"
-version = "5.2.0"
+version = "3.0.4"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618, upload-time = "2023-08-01T19:23:02.662Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", size = 1868453, upload-time = "2017-06-08T14:34:35.581Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385, upload-time = "2023-08-01T19:23:00.661Z" },
+ { url = "https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691", size = 133356, upload-time = "2017-06-08T14:34:33.552Z" },
]
[[package]]
@@ -277,6 +348,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
]
+[[package]]
+name = "compressed-rtf"
+version = "1.0.7"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b7/0c/929a4e8ef9d7143f54d77dadb5f370cc7b98534b1bd6e1124d0abe8efb24/compressed_rtf-1.0.7.tar.gz", hash = "sha256:7c30859334839f3cdc7d10796af5b434bb326b9df7cb5a65e95a8eacb2951b0e", size = 8152, upload-time = "2025-03-24T22:39:32.062Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/07/1d/62f5bf92e12335eb63517f42671ed78512d48bbc69e02a942dd7b90f03f0/compressed_rtf-1.0.7-py3-none-any.whl", hash = "sha256:b7904921d78c67a0a4b7fff9fb361a00ae2b447b6edca010ce321cd98fa0fcc0", size = 7968, upload-time = "2025-03-24T23:03:57.433Z" },
+]
+
[[package]]
name = "coverage"
version = "7.6.1"
@@ -366,6 +446,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784", size = 468850, upload-time = "2023-12-12T07:13:59.966Z" },
]
+[[package]]
+name = "distro"
+version = "1.9.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" },
+]
+
[[package]]
name = "dnspython"
version = "2.6.1"
@@ -375,6 +464,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/87/a1/8c5287991ddb8d3e4662f71356d9656d91ab3a36618c3dd11b280df0d255/dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50", size = 307696, upload-time = "2024-02-18T18:48:46.786Z" },
]
+[[package]]
+name = "docx2txt"
+version = "0.9"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ea/07/4486a038624e885e227fe79111914c01f55aa70a51920ff1a7f2bd216d10/docx2txt-0.9.tar.gz", hash = "sha256:18013f6229b14909028b19aa7bf4f8f3d6e4632d7b089ab29f7f0a4d1f660e28", size = 3613, upload-time = "2025-03-24T20:59:25.21Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d6/51/756e71bec48ece0ecc2a10e921ef2756e197dcb7e478f2b43673b6683902/docx2txt-0.9-py3-none-any.whl", hash = "sha256:e3718c0653fd6f2fcf4b51b02a61452ad1c38a4c163bcf0a6fd9486cd38f529a", size = 4025, upload-time = "2025-03-24T20:59:24.394Z" },
+]
+
+[[package]]
+name = "ebcdic"
+version = "1.1.1"
+source = { registry = "https://pypi.org/simple" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0d/2f/633031205333bee5f9f93761af8268746aa75f38754823aabb8570eb245b/ebcdic-1.1.1-py2.py3-none-any.whl", hash = "sha256:33b4cb729bc2d0bf46cc1847b0e5946897cb8d3f53520c5b9aa5fa98d7e735f1", size = 128537, upload-time = "2019-08-09T00:54:35.544Z" },
+]
+
[[package]]
name = "email-validator"
version = "2.3.0"
@@ -414,6 +520,22 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453, upload-time = "2024-07-12T22:25:58.476Z" },
]
+[[package]]
+name = "extract-msg"
+version = "0.29.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "compressed-rtf" },
+ { name = "ebcdic" },
+ { name = "imapclient" },
+ { name = "olefile" },
+ { name = "tzlocal" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b9/70/60c17682d8b95077c526fe8374061f309fa647836f7783ee14b1277a9d9b/extract_msg-0.29.0.tar.gz", hash = "sha256:ae6ce5f78fddb582350cb49bbf2776eadecdbf3c74b7a305dced42bd187a5401", size = 72891, upload-time = "2022-01-14T06:12:57.822Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/da/dc/511f62860fc076fc4e27bfbb1bc6b1f2b61e694d68007853d983d1877bdf/extract_msg-0.29.0-py2.py3-none-any.whl", hash = "sha256:a8885dc385d0c88c4b87fb2a573727c0115cd2ef5157956cf183878f940eef28", size = 72912, upload-time = "2022-01-14T06:12:56.361Z" },
+]
+
[[package]]
name = "fastapi"
version = "0.115.0"
@@ -600,6 +722,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" },
]
+[[package]]
+name = "imapclient"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ea/31/883f78210ed7578f6dd41e4dbc3ad5e7c6127a51e56513b8b7bb7efdf9b3/IMAPClient-2.1.0.zip", hash = "sha256:60ba79758cc9f13ec910d7a3df9acaaf2bb6c458720d9a02ec33a41352fd1b99", size = 248423, upload-time = "2018-09-05T11:20:32.002Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/dc/39/e1c2c2c6e2356ab6ea81fcfc0a74b044b311d6a91a45300811d9a6077ef7/IMAPClient-2.1.0-py2.py3-none-any.whl", hash = "sha256:3eeb97b9aa8faab0caa5024d74bfde59408fbd542781246f6960873c7bf0dd01", size = 73972, upload-time = "2018-09-05T11:20:29.064Z" },
+]
+
[[package]]
name = "iniconfig"
version = "2.0.0"
@@ -621,6 +755,171 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
]
+[[package]]
+name = "jiter"
+version = "0.11.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/9d/c0/a3bb4cc13aced219dd18191ea66e874266bd8aa7b96744e495e1c733aa2d/jiter-0.11.0.tar.gz", hash = "sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4", size = 167094, upload-time = "2025-09-15T09:20:38.212Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/25/21/7dd1235a19e26979be6098e87e4cced2e061752f3a40a17bbce6dea7fae1/jiter-0.11.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3893ce831e1c0094a83eeaf56c635a167d6fa8cc14393cc14298fd6fdc2a2449", size = 309875, upload-time = "2025-09-15T09:18:48.41Z" },
+ { url = "https://files.pythonhosted.org/packages/71/f9/462b54708aa85b135733ccba70529dd68a18511bf367a87c5fd28676c841/jiter-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:25c625b9b61b5a8725267fdf867ef2e51b429687f6a4eef211f4612e95607179", size = 316505, upload-time = "2025-09-15T09:18:51.057Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/40/14e2eeaac6a47bff27d213834795472355fd39769272eb53cb7aa83d5aa8/jiter-0.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd4ca85fb6a62cf72e1c7f5e34ddef1b660ce4ed0886ec94a1ef9777d35eaa1f", size = 337613, upload-time = "2025-09-15T09:18:52.358Z" },
+ { url = "https://files.pythonhosted.org/packages/d3/ed/a5f1f8419c92b150a7c7fb5ccba1fb1e192887ad713d780e70874f0ce996/jiter-0.11.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:572208127034725e79c28437b82414028c3562335f2b4f451d98136d0fc5f9cd", size = 361438, upload-time = "2025-09-15T09:18:54.637Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/f5/70682c023dfcdd463a53faf5d30205a7d99c51d70d3e303c932d0936e5a2/jiter-0.11.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:494ba627c7f550ad3dabb21862864b8f2216098dc18ff62f37b37796f2f7c325", size = 486180, upload-time = "2025-09-15T09:18:56.158Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/39/020d08cbab4eab48142ad88b837c41eb08a15c0767fdb7c0d3265128a44b/jiter-0.11.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8da18a99f58bca3ecc2d2bba99cac000a924e115b6c4f0a2b98f752b6fbf39a", size = 376681, upload-time = "2025-09-15T09:18:57.553Z" },
+ { url = "https://files.pythonhosted.org/packages/52/10/b86733f6e594cf51dd142f37c602d8df87c554c5844958deaab0de30eb5d/jiter-0.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ffd3b0fff3fabbb02cc09910c08144db6bb5697a98d227a074401e01ee63dd", size = 348685, upload-time = "2025-09-15T09:18:59.208Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/ee/8861665e83a9e703aa5f65fddddb6225428e163e6b0baa95a7f9a8fb9aae/jiter-0.11.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8fe6530aa738a4f7d4e4702aa8f9581425d04036a5f9e25af65ebe1f708f23be", size = 385573, upload-time = "2025-09-15T09:19:00.593Z" },
+ { url = "https://files.pythonhosted.org/packages/25/74/05afec03600951f128293813b5a208c9ba1bf587c57a344c05a42a69e1b1/jiter-0.11.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e35d66681c133a03d7e974e7eedae89720fe8ca3bd09f01a4909b86a8adf31f5", size = 516669, upload-time = "2025-09-15T09:19:02.369Z" },
+ { url = "https://files.pythonhosted.org/packages/93/d1/2e5bfe147cfbc2a5eef7f73eb75dc5c6669da4fa10fc7937181d93af9495/jiter-0.11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c59459beca2fbc9718b6f1acb7bfb59ebc3eb4294fa4d40e9cb679dafdcc6c60", size = 508767, upload-time = "2025-09-15T09:19:04.011Z" },
+ { url = "https://files.pythonhosted.org/packages/87/50/597f71307e10426b5c082fd05d38c615ddbdd08c3348d8502963307f0652/jiter-0.11.0-cp310-cp310-win32.whl", hash = "sha256:b7b0178417b0dcfc5f259edbc6db2b1f5896093ed9035ee7bab0f2be8854726d", size = 205476, upload-time = "2025-09-15T09:19:05.594Z" },
+ { url = "https://files.pythonhosted.org/packages/c7/86/1e5214b3272e311754da26e63edec93a183811d4fc2e0118addec365df8b/jiter-0.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:11df2bf99fb4754abddd7f5d940a48e51f9d11624d6313ca4314145fcad347f0", size = 204708, upload-time = "2025-09-15T09:19:06.955Z" },
+ { url = "https://files.pythonhosted.org/packages/38/55/a69fefeef09c2eaabae44b935a1aa81517e49639c0a0c25d861cb18cd7ac/jiter-0.11.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222", size = 309503, upload-time = "2025-09-15T09:19:08.191Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/d5/a6aba9e6551f32f9c127184f398208e4eddb96c59ac065c8a92056089d28/jiter-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d", size = 317688, upload-time = "2025-09-15T09:19:09.918Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/f3/5e86f57c1883971cdc8535d0429c2787bf734840a231da30a3be12850562/jiter-0.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7", size = 337418, upload-time = "2025-09-15T09:19:11.078Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/4f/a71d8a24c2a70664970574a8e0b766663f5ef788f7fe1cc20ee0c016d488/jiter-0.11.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d", size = 361423, upload-time = "2025-09-15T09:19:13.286Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/e5/b09076f4e7fd9471b91e16f9f3dc7330b161b738f3b39b2c37054a36e26a/jiter-0.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09", size = 486367, upload-time = "2025-09-15T09:19:14.546Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/f1/98cb3a36f5e62f80cd860f0179f948d9eab5a316d55d3e1bab98d9767af5/jiter-0.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789", size = 376335, upload-time = "2025-09-15T09:19:15.939Z" },
+ { url = "https://files.pythonhosted.org/packages/9f/d8/ec74886497ea393c29dbd7651ddecc1899e86404a6b1f84a3ddab0ab59fd/jiter-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347", size = 348981, upload-time = "2025-09-15T09:19:17.568Z" },
+ { url = "https://files.pythonhosted.org/packages/24/93/d22ad7fa3b86ade66c86153ceea73094fc2af8b20c59cb7fceab9fea4704/jiter-0.11.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648", size = 385797, upload-time = "2025-09-15T09:19:19.121Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/bd/e25ff4a4df226e9b885f7cb01ee4b9dc74e3000e612d6f723860d71a1f34/jiter-0.11.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4", size = 516597, upload-time = "2025-09-15T09:19:20.301Z" },
+ { url = "https://files.pythonhosted.org/packages/be/fb/beda613db7d93ffa2fdd2683f90f2f5dce8daf4bc2d0d2829e7de35308c6/jiter-0.11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1", size = 508853, upload-time = "2025-09-15T09:19:22.075Z" },
+ { url = "https://files.pythonhosted.org/packages/20/64/c5b0d93490634e41e38e2a15de5d54fdbd2c9f64a19abb0f95305b63373c/jiter-0.11.0-cp311-cp311-win32.whl", hash = "sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982", size = 205140, upload-time = "2025-09-15T09:19:23.351Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/e6/c347c0e6f5796e97d4356b7e5ff0ce336498b7f4ef848fae621a56f1ccf3/jiter-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7", size = 204311, upload-time = "2025-09-15T09:19:24.591Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/b5/3009b112b8f673e568ef79af9863d8309a15f0a8cdcc06ed6092051f377e/jiter-0.11.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada", size = 305510, upload-time = "2025-09-15T09:19:25.893Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/82/15514244e03b9e71e086bbe2a6de3e4616b48f07d5f834200c873956fb8c/jiter-0.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99", size = 316521, upload-time = "2025-09-15T09:19:27.525Z" },
+ { url = "https://files.pythonhosted.org/packages/92/94/7a2e905f40ad2d6d660e00b68d818f9e29fb87ffe82774f06191e93cbe4a/jiter-0.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6", size = 338214, upload-time = "2025-09-15T09:19:28.727Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/9c/5791ed5bdc76f12110158d3316a7a3ec0b1413d018b41c5ed399549d3ad5/jiter-0.11.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1", size = 361280, upload-time = "2025-09-15T09:19:30.013Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/7f/b7d82d77ff0d2cb06424141000176b53a9e6b16a1125525bb51ea4990c2e/jiter-0.11.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4", size = 487895, upload-time = "2025-09-15T09:19:31.424Z" },
+ { url = "https://files.pythonhosted.org/packages/42/44/10a1475d46f1fc1fd5cc2e82c58e7bca0ce5852208e0fa5df2f949353321/jiter-0.11.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72", size = 378421, upload-time = "2025-09-15T09:19:32.746Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/5f/0dc34563d8164d31d07bc09d141d3da08157a68dcd1f9b886fa4e917805b/jiter-0.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591", size = 347932, upload-time = "2025-09-15T09:19:34.612Z" },
+ { url = "https://files.pythonhosted.org/packages/f7/de/b68f32a4fcb7b4a682b37c73a0e5dae32180140cd1caf11aef6ad40ddbf2/jiter-0.11.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09", size = 386959, upload-time = "2025-09-15T09:19:35.994Z" },
+ { url = "https://files.pythonhosted.org/packages/76/0a/c08c92e713b6e28972a846a81ce374883dac2f78ec6f39a0dad9f2339c3a/jiter-0.11.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5", size = 517187, upload-time = "2025-09-15T09:19:37.426Z" },
+ { url = "https://files.pythonhosted.org/packages/89/b5/4a283bec43b15aad54fcae18d951f06a2ec3f78db5708d3b59a48e9c3fbd/jiter-0.11.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206", size = 509461, upload-time = "2025-09-15T09:19:38.761Z" },
+ { url = "https://files.pythonhosted.org/packages/34/a5/f8bad793010534ea73c985caaeef8cc22dfb1fedb15220ecdf15c623c07a/jiter-0.11.0-cp312-cp312-win32.whl", hash = "sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b", size = 206664, upload-time = "2025-09-15T09:19:40.096Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/42/5823ec2b1469395a160b4bf5f14326b4a098f3b6898fbd327366789fa5d3/jiter-0.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c", size = 203520, upload-time = "2025-09-15T09:19:41.798Z" },
+ { url = "https://files.pythonhosted.org/packages/97/c4/d530e514d0f4f29b2b68145e7b389cbc7cac7f9c8c23df43b04d3d10fa3e/jiter-0.11.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:4441a91b80a80249f9a6452c14b2c24708f139f64de959943dfeaa6cb915e8eb", size = 305021, upload-time = "2025-09-15T09:19:43.523Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/77/796a19c567c5734cbfc736a6f987affc0d5f240af8e12063c0fb93990ffa/jiter-0.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ff85fc6d2a431251ad82dbd1ea953affb5a60376b62e7d6809c5cd058bb39471", size = 314384, upload-time = "2025-09-15T09:19:44.849Z" },
+ { url = "https://files.pythonhosted.org/packages/14/9c/824334de0b037b91b6f3fa9fe5a191c83977c7ec4abe17795d3cb6d174cf/jiter-0.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5e86126d64706fd28dfc46f910d496923c6f95b395138c02d0e252947f452bd", size = 337389, upload-time = "2025-09-15T09:19:46.094Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/95/ed4feab69e6cf9b2176ea29d4ef9d01a01db210a3a2c8a31a44ecdc68c38/jiter-0.11.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ad8bd82165961867a10f52010590ce0b7a8c53da5ddd8bbb62fef68c181b921", size = 360519, upload-time = "2025-09-15T09:19:47.494Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/0c/2ad00f38d3e583caba3909d95b7da1c3a7cd82c0aa81ff4317a8016fb581/jiter-0.11.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b42c2cd74273455ce439fd9528db0c6e84b5623cb74572305bdd9f2f2961d3df", size = 487198, upload-time = "2025-09-15T09:19:49.116Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/8b/919b64cf3499b79bdfba6036da7b0cac5d62d5c75a28fb45bad7819e22f0/jiter-0.11.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0062dab98172dd0599fcdbf90214d0dcde070b1ff38a00cc1b90e111f071982", size = 377835, upload-time = "2025-09-15T09:19:50.468Z" },
+ { url = "https://files.pythonhosted.org/packages/29/7f/8ebe15b6e0a8026b0d286c083b553779b4dd63db35b43a3f171b544de91d/jiter-0.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64", size = 347655, upload-time = "2025-09-15T09:19:51.726Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/64/332127cef7e94ac75719dda07b9a472af6158ba819088d87f17f3226a769/jiter-0.11.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:25a5b1110cca7329fd0daf5060faa1234be5c11e988948e4f1a1923b6a457fe1", size = 386135, upload-time = "2025-09-15T09:19:53.075Z" },
+ { url = "https://files.pythonhosted.org/packages/20/c8/557b63527442f84c14774159948262a9d4fabb0d61166f11568f22fc60d2/jiter-0.11.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:bf11807e802a214daf6c485037778843fadd3e2ec29377ae17e0706ec1a25758", size = 516063, upload-time = "2025-09-15T09:19:54.447Z" },
+ { url = "https://files.pythonhosted.org/packages/86/13/4164c819df4a43cdc8047f9a42880f0ceef5afeb22e8b9675c0528ebdccd/jiter-0.11.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166", size = 508139, upload-time = "2025-09-15T09:19:55.764Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/70/6e06929b401b331d41ddb4afb9f91cd1168218e3371972f0afa51c9f3c31/jiter-0.11.0-cp313-cp313-win32.whl", hash = "sha256:8e36924dad32c48d3c5e188d169e71dc6e84d6cb8dedefea089de5739d1d2f80", size = 206369, upload-time = "2025-09-15T09:19:57.048Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/0d/8185b8e15de6dce24f6afae63380e16377dd75686d56007baa4f29723ea1/jiter-0.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:452d13e4fd59698408087235259cebe67d9d49173b4dacb3e8d35ce4acf385d6", size = 202538, upload-time = "2025-09-15T09:19:58.35Z" },
+ { url = "https://files.pythonhosted.org/packages/13/3a/d61707803260d59520721fa326babfae25e9573a88d8b7b9cb54c5423a59/jiter-0.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:089f9df9f69532d1339e83142438668f52c97cd22ee2d1195551c2b1a9e6cf33", size = 313737, upload-time = "2025-09-15T09:19:59.638Z" },
+ { url = "https://files.pythonhosted.org/packages/cd/cc/c9f0eec5d00f2a1da89f6bdfac12b8afdf8d5ad974184863c75060026457/jiter-0.11.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03", size = 346183, upload-time = "2025-09-15T09:20:01.442Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/87/fc632776344e7aabbab05a95a0075476f418c5d29ab0f2eec672b7a1f0ac/jiter-0.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a4d71d7ea6ea8786291423fe209acf6f8d398a0759d03e7f24094acb8ab686ba", size = 204225, upload-time = "2025-09-15T09:20:03.102Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/3b/e7f45be7d3969bdf2e3cd4b816a7a1d272507cd0edd2d6dc4b07514f2d9a/jiter-0.11.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9a6dff27eca70930bdbe4cbb7c1a4ba8526e13b63dc808c0670083d2d51a4a72", size = 304414, upload-time = "2025-09-15T09:20:04.357Z" },
+ { url = "https://files.pythonhosted.org/packages/06/32/13e8e0d152631fcc1907ceb4943711471be70496d14888ec6e92034e2caf/jiter-0.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b1ae2a7593a62132c7d4c2abbee80bbbb94fdc6d157e2c6cc966250c564ef774", size = 314223, upload-time = "2025-09-15T09:20:05.631Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/7e/abedd5b5a20ca083f778d96bba0d2366567fcecb0e6e34ff42640d5d7a18/jiter-0.11.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b13a431dba4b059e9e43019d3022346d009baf5066c24dcdea321a303cde9f0", size = 337306, upload-time = "2025-09-15T09:20:06.917Z" },
+ { url = "https://files.pythonhosted.org/packages/ac/e2/30d59bdc1204c86aa975ec72c48c482fee6633120ee9c3ab755e4dfefea8/jiter-0.11.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:af62e84ca3889604ebb645df3b0a3f3bcf6b92babbff642bd214616f57abb93a", size = 360565, upload-time = "2025-09-15T09:20:08.283Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/88/567288e0d2ed9fa8f7a3b425fdaf2cb82b998633c24fe0d98f5417321aa8/jiter-0.11.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6f3b32bb723246e6b351aecace52aba78adb8eeb4b2391630322dc30ff6c773", size = 486465, upload-time = "2025-09-15T09:20:09.613Z" },
+ { url = "https://files.pythonhosted.org/packages/18/6e/7b72d09273214cadd15970e91dd5ed9634bee605176107db21e1e4205eb1/jiter-0.11.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:adcab442f4a099a358a7f562eaa54ed6456fb866e922c6545a717be51dbed7d7", size = 377581, upload-time = "2025-09-15T09:20:10.884Z" },
+ { url = "https://files.pythonhosted.org/packages/58/52/4db456319f9d14deed325f70102577492e9d7e87cf7097bda9769a1fcacb/jiter-0.11.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2", size = 347102, upload-time = "2025-09-15T09:20:12.175Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/b4/433d5703c38b26083aec7a733eb5be96f9c6085d0e270a87ca6482cbf049/jiter-0.11.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e7d0bed3b187af8b47a981d9742ddfc1d9b252a7235471ad6078e7e4e5fe75c2", size = 386477, upload-time = "2025-09-15T09:20:13.428Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/7a/a60bfd9c55b55b07c5c441c5085f06420b6d493ce9db28d069cc5b45d9f3/jiter-0.11.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:f6fe0283e903ebc55f1a6cc569b8c1f3bf4abd026fed85e3ff8598a9e6f982f0", size = 516004, upload-time = "2025-09-15T09:20:14.848Z" },
+ { url = "https://files.pythonhosted.org/packages/2e/46/f8363e5ecc179b4ed0ca6cb0a6d3bfc266078578c71ff30642ea2ce2f203/jiter-0.11.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73", size = 507855, upload-time = "2025-09-15T09:20:16.176Z" },
+ { url = "https://files.pythonhosted.org/packages/90/33/396083357d51d7ff0f9805852c288af47480d30dd31d8abc74909b020761/jiter-0.11.0-cp314-cp314-win32.whl", hash = "sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2", size = 205802, upload-time = "2025-09-15T09:20:17.661Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/ab/eb06ca556b2551d41de7d03bf2ee24285fa3d0c58c5f8d95c64c9c3281b1/jiter-0.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40", size = 313405, upload-time = "2025-09-15T09:20:18.918Z" },
+ { url = "https://files.pythonhosted.org/packages/af/22/7ab7b4ec3a1c1f03aef376af11d23b05abcca3fb31fbca1e7557053b1ba2/jiter-0.11.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406", size = 347102, upload-time = "2025-09-15T09:20:20.16Z" },
+ { url = "https://files.pythonhosted.org/packages/70/f3/ce100253c80063a7b8b406e1d1562657fd4b9b4e1b562db40e68645342fb/jiter-0.11.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7", size = 336380, upload-time = "2025-09-15T09:20:36.867Z" },
+]
+
+[[package]]
+name = "jmespath"
+version = "1.0.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/00/2a/e867e8531cf3e36b41201936b7fa7ba7b5702dbef42922193f05c8976cd6/jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe", size = 25843, upload-time = "2022-06-17T18:00:12.224Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256, upload-time = "2022-06-17T18:00:10.251Z" },
+]
+
+[[package]]
+name = "jsonpatch"
+version = "1.33"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "jsonpointer" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/42/78/18813351fe5d63acad16aec57f94ec2b70a09e53ca98145589e185423873/jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c", size = 21699, upload-time = "2023-06-26T12:07:29.144Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", size = 12898, upload-time = "2023-06-16T21:01:28.466Z" },
+]
+
+[[package]]
+name = "jsonpointer"
+version = "3.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114, upload-time = "2024-06-10T19:24:42.462Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595, upload-time = "2024-06-10T19:24:40.698Z" },
+]
+
+[[package]]
+name = "langchain-core"
+version = "0.3.78"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "jsonpatch" },
+ { name = "langsmith" },
+ { name = "packaging" },
+ { name = "pydantic" },
+ { name = "pyyaml" },
+ { name = "tenacity" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a8/04/0035bd1df8d0fb534afceabe3ba0a87c5af8c5020177650e9aa79aca3495/langchain_core-0.3.78.tar.gz", hash = "sha256:a174a2061f8659b916fd2b1c7d174b3ddd07be7ca45a07aaec442696df5101b6", size = 580473, upload-time = "2025-10-03T16:52:37.025Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9c/a7/ff35c108c4863c1bb99724a4253ff2324aea5789d689dd59424c07df1199/langchain_core-0.3.78-py3-none-any.whl", hash = "sha256:dafc4f7e9fd008f680bf0ffe5904dbaa45992abdb92627b68eccb7b4089cbbf0", size = 449610, upload-time = "2025-10-03T16:52:35.428Z" },
+]
+
+[[package]]
+name = "langchain-openai"
+version = "0.3.35"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "langchain-core" },
+ { name = "openai" },
+ { name = "tiktoken" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/fb/96/06d0d25a37e05a0ff2d918f0a4b0bf0732aed6a43b472b0b68426ce04ef8/langchain_openai-0.3.35.tar.gz", hash = "sha256:fa985fd041c3809da256a040c98e8a43e91c6d165b96dcfeb770d8bd457bf76f", size = 786635, upload-time = "2025-10-06T15:09:28.463Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d8/d5/c90c5478215c20ee71d8feaf676f7ffd78d0568f8c98bd83f81ce7562ed7/langchain_openai-0.3.35-py3-none-any.whl", hash = "sha256:76d5707e6e81fd461d33964ad618bd326cb661a1975cef7c1cb0703576bdada5", size = 75952, upload-time = "2025-10-06T15:09:27.137Z" },
+]
+
+[[package]]
+name = "langchain-text-splitters"
+version = "0.3.11"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "langchain-core" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/11/43/dcda8fd25f0b19cb2835f2f6bb67f26ad58634f04ac2d8eae00526b0fa55/langchain_text_splitters-0.3.11.tar.gz", hash = "sha256:7a50a04ada9a133bbabb80731df7f6ddac51bc9f1b9cab7fa09304d71d38a6cc", size = 46458, upload-time = "2025-08-31T23:02:58.316Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/58/0d/41a51b40d24ff0384ec4f7ab8dd3dcea8353c05c973836b5e289f1465d4f/langchain_text_splitters-0.3.11-py3-none-any.whl", hash = "sha256:cf079131166a487f1372c8ab5d0bfaa6c0a4291733d9c43a34a16ac9bcd6a393", size = 33845, upload-time = "2025-08-31T23:02:57.195Z" },
+]
+
+[[package]]
+name = "langsmith"
+version = "0.4.33"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "httpx" },
+ { name = "orjson", marker = "platform_python_implementation != 'PyPy'" },
+ { name = "packaging" },
+ { name = "pydantic" },
+ { name = "requests" },
+ { name = "requests-toolbelt" },
+ { name = "zstandard" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c3/63/8e70c22fad0fd9e7a76c748bcb1ba45db1399d98849559d3e7f162ffeb06/langsmith-0.4.33.tar.gz", hash = "sha256:a8deb12bd332b816ee1896a8003c252882c92f27a3ee9a623ce821f49d1d13f4", size = 964776, upload-time = "2025-10-07T17:05:33.817Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ee/0b/b3d2e07bf09ce16994ed68a98b72699ded2d40bc9ff4b5eb031faedc8e42/langsmith-0.4.33-py3-none-any.whl", hash = "sha256:41d474f744617c79d61791a855ce2cf57294955ce8376c150484f9520700a7e5", size = 387335, upload-time = "2025-10-07T17:05:32.118Z" },
+]
+
[[package]]
name = "lxml"
version = "5.3.0"
@@ -830,6 +1129,111 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" },
]
+[[package]]
+name = "olefile"
+version = "0.47"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/69/1b/077b508e3e500e1629d366249c3ccb32f95e50258b231705c09e3c7a4366/olefile-0.47.zip", hash = "sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c", size = 112240, upload-time = "2023-12-01T16:22:53.025Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/17/d3/b64c356a907242d719fc668b71befd73324e47ab46c8ebbbede252c154b2/olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f", size = 114565, upload-time = "2023-12-01T16:22:51.518Z" },
+]
+
+[[package]]
+name = "openai"
+version = "2.2.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "anyio" },
+ { name = "distro" },
+ { name = "httpx" },
+ { name = "jiter" },
+ { name = "pydantic" },
+ { name = "sniffio" },
+ { name = "tqdm" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b8/b1/8201e321a7d64a25c6f5a560320272d8be70547add40311fceb916518632/openai-2.2.0.tar.gz", hash = "sha256:bc49d077a8bf0e370eec4d038bc05e232c20855a19df0b58e5b3e5a8da7d33e0", size = 588512, upload-time = "2025-10-06T18:08:13.665Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/cb/92/6aeef1836e66dfec7f7f160a4f06d7041be7f6ccfc47a2f0f5738b332245/openai-2.2.0-py3-none-any.whl", hash = "sha256:d222e63436e33f3134a3d7ce490dc2d2f146fa98036eb65cc225df3ce163916f", size = 998972, upload-time = "2025-10-06T18:08:11.775Z" },
+]
+
+[[package]]
+name = "orjson"
+version = "3.11.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/be/4d/8df5f83256a809c22c4d6792ce8d43bb503be0fb7a8e4da9025754b09658/orjson-3.11.3.tar.gz", hash = "sha256:1c0603b1d2ffcd43a411d64797a19556ef76958aef1c182f22dc30860152a98a", size = 5482394, upload-time = "2025-08-26T17:46:43.171Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9b/64/4a3cef001c6cd9c64256348d4c13a7b09b857e3e1cbb5185917df67d8ced/orjson-3.11.3-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:29cb1f1b008d936803e2da3d7cba726fc47232c45df531b29edf0b232dd737e7", size = 238600, upload-time = "2025-08-26T17:44:36.875Z" },
+ { url = "https://files.pythonhosted.org/packages/10/ce/0c8c87f54f79d051485903dc46226c4d3220b691a151769156054df4562b/orjson-3.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97dceed87ed9139884a55db8722428e27bd8452817fbf1869c58b49fecab1120", size = 123526, upload-time = "2025-08-26T17:44:39.574Z" },
+ { url = "https://files.pythonhosted.org/packages/ef/d0/249497e861f2d438f45b3ab7b7b361484237414945169aa285608f9f7019/orjson-3.11.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58533f9e8266cb0ac298e259ed7b4d42ed3fa0b78ce76860626164de49e0d467", size = 128075, upload-time = "2025-08-26T17:44:40.672Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/64/00485702f640a0fd56144042a1ea196469f4a3ae93681871564bf74fa996/orjson-3.11.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c212cfdd90512fe722fa9bd620de4d46cda691415be86b2e02243242ae81873", size = 130483, upload-time = "2025-08-26T17:44:41.788Z" },
+ { url = "https://files.pythonhosted.org/packages/64/81/110d68dba3909171bf3f05619ad0cf187b430e64045ae4e0aa7ccfe25b15/orjson-3.11.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff835b5d3e67d9207343effb03760c00335f8b5285bfceefd4dc967b0e48f6a", size = 132539, upload-time = "2025-08-26T17:44:43.12Z" },
+ { url = "https://files.pythonhosted.org/packages/79/92/dba25c22b0ddfafa1e6516a780a00abac28d49f49e7202eb433a53c3e94e/orjson-3.11.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5aa4682912a450c2db89cbd92d356fef47e115dffba07992555542f344d301b", size = 135390, upload-time = "2025-08-26T17:44:44.199Z" },
+ { url = "https://files.pythonhosted.org/packages/44/1d/ca2230fd55edbd87b58a43a19032d63a4b180389a97520cc62c535b726f9/orjson-3.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7d18dd34ea2e860553a579df02041845dee0af8985dff7f8661306f95504ddf", size = 132966, upload-time = "2025-08-26T17:44:45.719Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/b9/96bbc8ed3e47e52b487d504bd6861798977445fbc410da6e87e302dc632d/orjson-3.11.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d8b11701bc43be92ea42bd454910437b355dfb63696c06fe953ffb40b5f763b4", size = 131349, upload-time = "2025-08-26T17:44:46.862Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/3c/418fbd93d94b0df71cddf96b7fe5894d64a5d890b453ac365120daec30f7/orjson-3.11.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:90368277087d4af32d38bd55f9da2ff466d25325bf6167c8f382d8ee40cb2bbc", size = 404087, upload-time = "2025-08-26T17:44:48.079Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/a9/2bfd58817d736c2f63608dec0c34857339d423eeed30099b126562822191/orjson-3.11.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fd7ff459fb393358d3a155d25b275c60b07a2c83dcd7ea962b1923f5a1134569", size = 146067, upload-time = "2025-08-26T17:44:49.302Z" },
+ { url = "https://files.pythonhosted.org/packages/33/ba/29023771f334096f564e48d82ed855a0ed3320389d6748a9c949e25be734/orjson-3.11.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f8d902867b699bcd09c176a280b1acdab57f924489033e53d0afe79817da37e6", size = 135506, upload-time = "2025-08-26T17:44:50.558Z" },
+ { url = "https://files.pythonhosted.org/packages/39/62/b5a1eca83f54cb3aa11a9645b8a22f08d97dbd13f27f83aae7c6666a0a05/orjson-3.11.3-cp310-cp310-win32.whl", hash = "sha256:bb93562146120bb51e6b154962d3dadc678ed0fce96513fa6bc06599bb6f6edc", size = 136352, upload-time = "2025-08-26T17:44:51.698Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/c0/7ebfaa327d9a9ed982adc0d9420dbce9a3fec45b60ab32c6308f731333fa/orjson-3.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:976c6f1975032cc327161c65d4194c549f2589d88b105a5e3499429a54479770", size = 131539, upload-time = "2025-08-26T17:44:52.974Z" },
+ { url = "https://files.pythonhosted.org/packages/cd/8b/360674cd817faef32e49276187922a946468579fcaf37afdfb6c07046e92/orjson-3.11.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9d2ae0cc6aeb669633e0124531f342a17d8e97ea999e42f12a5ad4adaa304c5f", size = 238238, upload-time = "2025-08-26T17:44:54.214Z" },
+ { url = "https://files.pythonhosted.org/packages/05/3d/5fa9ea4b34c1a13be7d9046ba98d06e6feb1d8853718992954ab59d16625/orjson-3.11.3-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:ba21dbb2493e9c653eaffdc38819b004b7b1b246fb77bfc93dc016fe664eac91", size = 127713, upload-time = "2025-08-26T17:44:55.596Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/5f/e18367823925e00b1feec867ff5f040055892fc474bf5f7875649ecfa586/orjson-3.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00f1a271e56d511d1569937c0447d7dce5a99a33ea0dec76673706360a051904", size = 123241, upload-time = "2025-08-26T17:44:57.185Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/bd/3c66b91c4564759cf9f473251ac1650e446c7ba92a7c0f9f56ed54f9f0e6/orjson-3.11.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b67e71e47caa6680d1b6f075a396d04fa6ca8ca09aafb428731da9b3ea32a5a6", size = 127895, upload-time = "2025-08-26T17:44:58.349Z" },
+ { url = "https://files.pythonhosted.org/packages/82/b5/dc8dcd609db4766e2967a85f63296c59d4722b39503e5b0bf7fd340d387f/orjson-3.11.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7d012ebddffcce8c85734a6d9e5f08180cd3857c5f5a3ac70185b43775d043d", size = 130303, upload-time = "2025-08-26T17:44:59.491Z" },
+ { url = "https://files.pythonhosted.org/packages/48/c2/d58ec5fd1270b2aa44c862171891adc2e1241bd7dab26c8f46eb97c6c6f1/orjson-3.11.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd759f75d6b8d1b62012b7f5ef9461d03c804f94d539a5515b454ba3a6588038", size = 132366, upload-time = "2025-08-26T17:45:00.654Z" },
+ { url = "https://files.pythonhosted.org/packages/73/87/0ef7e22eb8dd1ef940bfe3b9e441db519e692d62ed1aae365406a16d23d0/orjson-3.11.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6890ace0809627b0dff19cfad92d69d0fa3f089d3e359a2a532507bb6ba34efb", size = 135180, upload-time = "2025-08-26T17:45:02.424Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/6a/e5bf7b70883f374710ad74faf99bacfc4b5b5a7797c1d5e130350e0e28a3/orjson-3.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9d4a5e041ae435b815e568537755773d05dac031fee6a57b4ba70897a44d9d2", size = 132741, upload-time = "2025-08-26T17:45:03.663Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/0c/4577fd860b6386ffaa56440e792af01c7882b56d2766f55384b5b0e9d39b/orjson-3.11.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d68bf97a771836687107abfca089743885fb664b90138d8761cce61d5625d55", size = 131104, upload-time = "2025-08-26T17:45:04.939Z" },
+ { url = "https://files.pythonhosted.org/packages/66/4b/83e92b2d67e86d1c33f2ea9411742a714a26de63641b082bdbf3d8e481af/orjson-3.11.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bfc27516ec46f4520b18ef645864cee168d2a027dbf32c5537cb1f3e3c22dac1", size = 403887, upload-time = "2025-08-26T17:45:06.228Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/e5/9eea6a14e9b5ceb4a271a1fd2e1dec5f2f686755c0fab6673dc6ff3433f4/orjson-3.11.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f66b001332a017d7945e177e282a40b6997056394e3ed7ddb41fb1813b83e824", size = 145855, upload-time = "2025-08-26T17:45:08.338Z" },
+ { url = "https://files.pythonhosted.org/packages/45/78/8d4f5ad0c80ba9bf8ac4d0fc71f93a7d0dc0844989e645e2074af376c307/orjson-3.11.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:212e67806525d2561efbfe9e799633b17eb668b8964abed6b5319b2f1cfbae1f", size = 135361, upload-time = "2025-08-26T17:45:09.625Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/5f/16386970370178d7a9b438517ea3d704efcf163d286422bae3b37b88dbb5/orjson-3.11.3-cp311-cp311-win32.whl", hash = "sha256:6e8e0c3b85575a32f2ffa59de455f85ce002b8bdc0662d6b9c2ed6d80ab5d204", size = 136190, upload-time = "2025-08-26T17:45:10.962Z" },
+ { url = "https://files.pythonhosted.org/packages/09/60/db16c6f7a41dd8ac9fb651f66701ff2aeb499ad9ebc15853a26c7c152448/orjson-3.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:6be2f1b5d3dc99a5ce5ce162fc741c22ba9f3443d3dd586e6a1211b7bc87bc7b", size = 131389, upload-time = "2025-08-26T17:45:12.285Z" },
+ { url = "https://files.pythonhosted.org/packages/3e/2a/bb811ad336667041dea9b8565c7c9faf2f59b47eb5ab680315eea612ef2e/orjson-3.11.3-cp311-cp311-win_arm64.whl", hash = "sha256:fafb1a99d740523d964b15c8db4eabbfc86ff29f84898262bf6e3e4c9e97e43e", size = 126120, upload-time = "2025-08-26T17:45:13.515Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/b0/a7edab2a00cdcb2688e1c943401cb3236323e7bfd2839815c6131a3742f4/orjson-3.11.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8c752089db84333e36d754c4baf19c0e1437012242048439c7e80eb0e6426e3b", size = 238259, upload-time = "2025-08-26T17:45:15.093Z" },
+ { url = "https://files.pythonhosted.org/packages/e1/c6/ff4865a9cc398a07a83342713b5932e4dc3cb4bf4bc04e8f83dedfc0d736/orjson-3.11.3-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:9b8761b6cf04a856eb544acdd82fc594b978f12ac3602d6374a7edb9d86fd2c2", size = 127633, upload-time = "2025-08-26T17:45:16.417Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/e6/e00bea2d9472f44fe8794f523e548ce0ad51eb9693cf538a753a27b8bda4/orjson-3.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b13974dc8ac6ba22feaa867fc19135a3e01a134b4f7c9c28162fed4d615008a", size = 123061, upload-time = "2025-08-26T17:45:17.673Z" },
+ { url = "https://files.pythonhosted.org/packages/54/31/9fbb78b8e1eb3ac605467cb846e1c08d0588506028b37f4ee21f978a51d4/orjson-3.11.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f83abab5bacb76d9c821fd5c07728ff224ed0e52d7a71b7b3de822f3df04e15c", size = 127956, upload-time = "2025-08-26T17:45:19.172Z" },
+ { url = "https://files.pythonhosted.org/packages/36/88/b0604c22af1eed9f98d709a96302006915cfd724a7ebd27d6dd11c22d80b/orjson-3.11.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6fbaf48a744b94091a56c62897b27c31ee2da93d826aa5b207131a1e13d4064", size = 130790, upload-time = "2025-08-26T17:45:20.586Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/9d/1c1238ae9fffbfed51ba1e507731b3faaf6b846126a47e9649222b0fd06f/orjson-3.11.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc779b4f4bba2847d0d2940081a7b6f7b5877e05408ffbb74fa1faf4a136c424", size = 132385, upload-time = "2025-08-26T17:45:22.036Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/b5/c06f1b090a1c875f337e21dd71943bc9d84087f7cdf8c6e9086902c34e42/orjson-3.11.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd4b909ce4c50faa2192da6bb684d9848d4510b736b0611b6ab4020ea6fd2d23", size = 135305, upload-time = "2025-08-26T17:45:23.4Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/26/5f028c7d81ad2ebbf84414ba6d6c9cac03f22f5cd0d01eb40fb2d6a06b07/orjson-3.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:524b765ad888dc5518bbce12c77c2e83dee1ed6b0992c1790cc5fb49bb4b6667", size = 132875, upload-time = "2025-08-26T17:45:25.182Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/d4/b8df70d9cfb56e385bf39b4e915298f9ae6c61454c8154a0f5fd7efcd42e/orjson-3.11.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:84fd82870b97ae3cdcea9d8746e592b6d40e1e4d4527835fc520c588d2ded04f", size = 130940, upload-time = "2025-08-26T17:45:27.209Z" },
+ { url = "https://files.pythonhosted.org/packages/da/5e/afe6a052ebc1a4741c792dd96e9f65bf3939d2094e8b356503b68d48f9f5/orjson-3.11.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fbecb9709111be913ae6879b07bafd4b0785b44c1eb5cac8ac76da048b3885a1", size = 403852, upload-time = "2025-08-26T17:45:28.478Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/90/7bbabafeb2ce65915e9247f14a56b29c9334003536009ef5b122783fe67e/orjson-3.11.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9dba358d55aee552bd868de348f4736ca5a4086d9a62e2bfbbeeb5629fe8b0cc", size = 146293, upload-time = "2025-08-26T17:45:29.86Z" },
+ { url = "https://files.pythonhosted.org/packages/27/b3/2d703946447da8b093350570644a663df69448c9d9330e5f1d9cce997f20/orjson-3.11.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eabcf2e84f1d7105f84580e03012270c7e97ecb1fb1618bda395061b2a84a049", size = 135470, upload-time = "2025-08-26T17:45:31.243Z" },
+ { url = "https://files.pythonhosted.org/packages/38/70/b14dcfae7aff0e379b0119c8a812f8396678919c431efccc8e8a0263e4d9/orjson-3.11.3-cp312-cp312-win32.whl", hash = "sha256:3782d2c60b8116772aea8d9b7905221437fdf53e7277282e8d8b07c220f96cca", size = 136248, upload-time = "2025-08-26T17:45:32.567Z" },
+ { url = "https://files.pythonhosted.org/packages/35/b8/9e3127d65de7fff243f7f3e53f59a531bf6bb295ebe5db024c2503cc0726/orjson-3.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:79b44319268af2eaa3e315b92298de9a0067ade6e6003ddaef72f8e0bedb94f1", size = 131437, upload-time = "2025-08-26T17:45:34.949Z" },
+ { url = "https://files.pythonhosted.org/packages/51/92/a946e737d4d8a7fd84a606aba96220043dcc7d6988b9e7551f7f6d5ba5ad/orjson-3.11.3-cp312-cp312-win_arm64.whl", hash = "sha256:0e92a4e83341ef79d835ca21b8bd13e27c859e4e9e4d7b63defc6e58462a3710", size = 125978, upload-time = "2025-08-26T17:45:36.422Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/79/8932b27293ad35919571f77cb3693b5906cf14f206ef17546052a241fdf6/orjson-3.11.3-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:af40c6612fd2a4b00de648aa26d18186cd1322330bd3a3cc52f87c699e995810", size = 238127, upload-time = "2025-08-26T17:45:38.146Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/82/cb93cd8cf132cd7643b30b6c5a56a26c4e780c7a145db6f83de977b540ce/orjson-3.11.3-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:9f1587f26c235894c09e8b5b7636a38091a9e6e7fe4531937534749c04face43", size = 127494, upload-time = "2025-08-26T17:45:39.57Z" },
+ { url = "https://files.pythonhosted.org/packages/a4/b8/2d9eb181a9b6bb71463a78882bcac1027fd29cf62c38a40cc02fc11d3495/orjson-3.11.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61dcdad16da5bb486d7227a37a2e789c429397793a6955227cedbd7252eb5a27", size = 123017, upload-time = "2025-08-26T17:45:40.876Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/14/a0e971e72d03b509190232356d54c0f34507a05050bd026b8db2bf2c192c/orjson-3.11.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11c6d71478e2cbea0a709e8a06365fa63da81da6498a53e4c4f065881d21ae8f", size = 127898, upload-time = "2025-08-26T17:45:42.188Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/af/dc74536722b03d65e17042cc30ae586161093e5b1f29bccda24765a6ae47/orjson-3.11.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff94112e0098470b665cb0ed06efb187154b63649403b8d5e9aedeb482b4548c", size = 130742, upload-time = "2025-08-26T17:45:43.511Z" },
+ { url = "https://files.pythonhosted.org/packages/62/e6/7a3b63b6677bce089fe939353cda24a7679825c43a24e49f757805fc0d8a/orjson-3.11.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae8b756575aaa2a855a75192f356bbda11a89169830e1439cfb1a3e1a6dde7be", size = 132377, upload-time = "2025-08-26T17:45:45.525Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/cd/ce2ab93e2e7eaf518f0fd15e3068b8c43216c8a44ed82ac2b79ce5cef72d/orjson-3.11.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9416cc19a349c167ef76135b2fe40d03cea93680428efee8771f3e9fb66079d", size = 135313, upload-time = "2025-08-26T17:45:46.821Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/b4/f98355eff0bd1a38454209bbc73372ce351ba29933cb3e2eba16c04b9448/orjson-3.11.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b822caf5b9752bc6f246eb08124c3d12bf2175b66ab74bac2ef3bbf9221ce1b2", size = 132908, upload-time = "2025-08-26T17:45:48.126Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/92/8f5182d7bc2a1bed46ed960b61a39af8389f0ad476120cd99e67182bfb6d/orjson-3.11.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:414f71e3bdd5573893bf5ecdf35c32b213ed20aa15536fe2f588f946c318824f", size = 130905, upload-time = "2025-08-26T17:45:49.414Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/60/c41ca753ce9ffe3d0f67b9b4c093bdd6e5fdb1bc53064f992f66bb99954d/orjson-3.11.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:828e3149ad8815dc14468f36ab2a4b819237c155ee1370341b91ea4c8672d2ee", size = 403812, upload-time = "2025-08-26T17:45:51.085Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/13/e4a4f16d71ce1868860db59092e78782c67082a8f1dc06a3788aef2b41bc/orjson-3.11.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac9e05f25627ffc714c21f8dfe3a579445a5c392a9c8ae7ba1d0e9fb5333f56e", size = 146277, upload-time = "2025-08-26T17:45:52.851Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/8b/bafb7f0afef9344754a3a0597a12442f1b85a048b82108ef2c956f53babd/orjson-3.11.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e44fbe4000bd321d9f3b648ae46e0196d21577cf66ae684a96ff90b1f7c93633", size = 135418, upload-time = "2025-08-26T17:45:54.806Z" },
+ { url = "https://files.pythonhosted.org/packages/60/d4/bae8e4f26afb2c23bea69d2f6d566132584d1c3a5fe89ee8c17b718cab67/orjson-3.11.3-cp313-cp313-win32.whl", hash = "sha256:2039b7847ba3eec1f5886e75e6763a16e18c68a63efc4b029ddf994821e2e66b", size = 136216, upload-time = "2025-08-26T17:45:57.182Z" },
+ { url = "https://files.pythonhosted.org/packages/88/76/224985d9f127e121c8cad882cea55f0ebe39f97925de040b75ccd4b33999/orjson-3.11.3-cp313-cp313-win_amd64.whl", hash = "sha256:29be5ac4164aa8bdcba5fa0700a3c9c316b411d8ed9d39ef8a882541bd452fae", size = 131362, upload-time = "2025-08-26T17:45:58.56Z" },
+ { url = "https://files.pythonhosted.org/packages/e2/cf/0dce7a0be94bd36d1346be5067ed65ded6adb795fdbe3abd234c8d576d01/orjson-3.11.3-cp313-cp313-win_arm64.whl", hash = "sha256:18bd1435cb1f2857ceb59cfb7de6f92593ef7b831ccd1b9bfb28ca530e539dce", size = 125989, upload-time = "2025-08-26T17:45:59.95Z" },
+ { url = "https://files.pythonhosted.org/packages/ef/77/d3b1fef1fc6aaeed4cbf3be2b480114035f4df8fa1a99d2dac1d40d6e924/orjson-3.11.3-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cf4b81227ec86935568c7edd78352a92e97af8da7bd70bdfdaa0d2e0011a1ab4", size = 238115, upload-time = "2025-08-26T17:46:01.669Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/6d/468d21d49bb12f900052edcfbf52c292022d0a323d7828dc6376e6319703/orjson-3.11.3-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:bc8bc85b81b6ac9fc4dae393a8c159b817f4c2c9dee5d12b773bddb3b95fc07e", size = 127493, upload-time = "2025-08-26T17:46:03.466Z" },
+ { url = "https://files.pythonhosted.org/packages/67/46/1e2588700d354aacdf9e12cc2d98131fb8ac6f31ca65997bef3863edb8ff/orjson-3.11.3-cp314-cp314-manylinux_2_34_aarch64.whl", hash = "sha256:88dcfc514cfd1b0de038443c7b3e6a9797ffb1b3674ef1fd14f701a13397f82d", size = 122998, upload-time = "2025-08-26T17:46:04.803Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/94/11137c9b6adb3779f1b34fd98be51608a14b430dbc02c6d41134fbba484c/orjson-3.11.3-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:d61cd543d69715d5fc0a690c7c6f8dcc307bc23abef9738957981885f5f38229", size = 132915, upload-time = "2025-08-26T17:46:06.237Z" },
+ { url = "https://files.pythonhosted.org/packages/10/61/dccedcf9e9bcaac09fdabe9eaee0311ca92115699500efbd31950d878833/orjson-3.11.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2b7b153ed90ababadbef5c3eb39549f9476890d339cf47af563aea7e07db2451", size = 130907, upload-time = "2025-08-26T17:46:07.581Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/fd/0e935539aa7b08b3ca0f817d73034f7eb506792aae5ecc3b7c6e679cdf5f/orjson-3.11.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7909ae2460f5f494fecbcd10613beafe40381fd0316e35d6acb5f3a05bfda167", size = 403852, upload-time = "2025-08-26T17:46:08.982Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/2b/50ae1a5505cd1043379132fdb2adb8a05f37b3e1ebffe94a5073321966fd/orjson-3.11.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:2030c01cbf77bc67bee7eef1e7e31ecf28649353987775e3583062c752da0077", size = 146309, upload-time = "2025-08-26T17:46:10.576Z" },
+ { url = "https://files.pythonhosted.org/packages/cd/1d/a473c158e380ef6f32753b5f39a69028b25ec5be331c2049a2201bde2e19/orjson-3.11.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a0169ebd1cbd94b26c7a7ad282cf5c2744fce054133f959e02eb5265deae1872", size = 135424, upload-time = "2025-08-26T17:46:12.386Z" },
+ { url = "https://files.pythonhosted.org/packages/da/09/17d9d2b60592890ff7382e591aa1d9afb202a266b180c3d4049b1ec70e4a/orjson-3.11.3-cp314-cp314-win32.whl", hash = "sha256:0c6d7328c200c349e3a4c6d8c83e0a5ad029bdc2d417f234152bf34842d0fc8d", size = 136266, upload-time = "2025-08-26T17:46:13.853Z" },
+ { url = "https://files.pythonhosted.org/packages/15/58/358f6846410a6b4958b74734727e582ed971e13d335d6c7ce3e47730493e/orjson-3.11.3-cp314-cp314-win_amd64.whl", hash = "sha256:317bbe2c069bbc757b1a2e4105b64aacd3bc78279b66a6b9e51e846e4809f804", size = 131351, upload-time = "2025-08-26T17:46:15.27Z" },
+ { url = "https://files.pythonhosted.org/packages/28/01/d6b274a0635be0468d4dbd9cafe80c47105937a0d42434e805e67cd2ed8b/orjson-3.11.3-cp314-cp314-win_arm64.whl", hash = "sha256:e8f6a7a27d7b7bec81bd5924163e9af03d49bbb63013f107b48eb5d16db711bc", size = 125985, upload-time = "2025-08-26T17:46:16.67Z" },
+]
+
[[package]]
name = "packaging"
version = "24.1"
@@ -853,6 +1257,123 @@ bcrypt = [
{ name = "bcrypt" },
]
+[[package]]
+name = "pdfminer-six"
+version = "20191110"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "chardet" },
+ { name = "pycryptodome" },
+ { name = "six" },
+ { name = "sortedcontainers" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e8/31/7acc148333749d6a8ef7cbf25902bdf59a462811a69d040a9a259916b6bd/pdfminer.six-20191110.tar.gz", hash = "sha256:141a53ec491bee6d45bf9b2c7f82601426fb5d32636bcf6b9c8a8f3b6431fea6", size = 10280313, upload-time = "2019-11-10T11:31:02.556Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/cb/83/200b2723bcbf1d1248a8a7d16e6dd6cb970b5331397b11948428d7ebcf37/pdfminer.six-20191110-py2.py3-none-any.whl", hash = "sha256:ca2ca58f3ac66a486bce53a6ddba95dc2b27781612915fa41c444790ba9cd2a8", size = 5606096, upload-time = "2019-11-10T11:30:50.803Z" },
+]
+
+[[package]]
+name = "pillow"
+version = "11.3.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4c/5d/45a3553a253ac8763f3561371432a90bdbe6000fbdcf1397ffe502aa206c/pillow-11.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b9c17fd4ace828b3003dfd1e30bff24863e0eb59b535e8f80194d9cc7ecf860", size = 5316554, upload-time = "2025-07-01T09:13:39.342Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/c8/67c12ab069ef586a25a4a79ced553586748fad100c77c0ce59bb4983ac98/pillow-11.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:65dc69160114cdd0ca0f35cb434633c75e8e7fad4cf855177a05bf38678f73ad", size = 4686548, upload-time = "2025-07-01T09:13:41.835Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/bd/6741ebd56263390b382ae4c5de02979af7f8bd9807346d068700dd6d5cf9/pillow-11.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7107195ddc914f656c7fc8e4a5e1c25f32e9236ea3ea860f257b0436011fddd0", size = 5859742, upload-time = "2025-07-03T13:09:47.439Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/0b/c412a9e27e1e6a829e6ab6c2dca52dd563efbedf4c9c6aa453d9a9b77359/pillow-11.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc3e831b563b3114baac7ec2ee86819eb03caa1a2cef0b481a5675b59c4fe23b", size = 7633087, upload-time = "2025-07-03T13:09:51.796Z" },
+ { url = "https://files.pythonhosted.org/packages/59/9d/9b7076aaf30f5dd17e5e5589b2d2f5a5d7e30ff67a171eb686e4eecc2adf/pillow-11.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1f182ebd2303acf8c380a54f615ec883322593320a9b00438eb842c1f37ae50", size = 5963350, upload-time = "2025-07-01T09:13:43.865Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/16/1a6bf01fb622fb9cf5c91683823f073f053005c849b1f52ed613afcf8dae/pillow-11.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4445fa62e15936a028672fd48c4c11a66d641d2c05726c7ec1f8ba6a572036ae", size = 6631840, upload-time = "2025-07-01T09:13:46.161Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/e6/6ff7077077eb47fde78739e7d570bdcd7c10495666b6afcd23ab56b19a43/pillow-11.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71f511f6b3b91dd543282477be45a033e4845a40278fa8dcdbfdb07109bf18f9", size = 6074005, upload-time = "2025-07-01T09:13:47.829Z" },
+ { url = "https://files.pythonhosted.org/packages/c3/3a/b13f36832ea6d279a697231658199e0a03cd87ef12048016bdcc84131601/pillow-11.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:040a5b691b0713e1f6cbe222e0f4f74cd233421e105850ae3b3c0ceda520f42e", size = 6708372, upload-time = "2025-07-01T09:13:52.145Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/e4/61b2e1a7528740efbc70b3d581f33937e38e98ef3d50b05007267a55bcb2/pillow-11.3.0-cp310-cp310-win32.whl", hash = "sha256:89bd777bc6624fe4115e9fac3352c79ed60f3bb18651420635f26e643e3dd1f6", size = 6277090, upload-time = "2025-07-01T09:13:53.915Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/d3/60c781c83a785d6afbd6a326ed4d759d141de43aa7365725cbcd65ce5e54/pillow-11.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:19d2ff547c75b8e3ff46f4d9ef969a06c30ab2d4263a9e287733aa8b2429ce8f", size = 6985988, upload-time = "2025-07-01T09:13:55.699Z" },
+ { url = "https://files.pythonhosted.org/packages/9f/28/4f4a0203165eefb3763939c6789ba31013a2e90adffb456610f30f613850/pillow-11.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:819931d25e57b513242859ce1876c58c59dc31587847bf74cfe06b2e0cb22d2f", size = 2422899, upload-time = "2025-07-01T09:13:57.497Z" },
+ { url = "https://files.pythonhosted.org/packages/db/26/77f8ed17ca4ffd60e1dcd220a6ec6d71210ba398cfa33a13a1cd614c5613/pillow-11.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1cd110edf822773368b396281a2293aeb91c90a2db00d78ea43e7e861631b722", size = 5316531, upload-time = "2025-07-01T09:13:59.203Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/39/ee475903197ce709322a17a866892efb560f57900d9af2e55f86db51b0a5/pillow-11.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c412fddd1b77a75aa904615ebaa6001f169b26fd467b4be93aded278266b288", size = 4686560, upload-time = "2025-07-01T09:14:01.101Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/90/442068a160fd179938ba55ec8c97050a612426fae5ec0a764e345839f76d/pillow-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d", size = 5870978, upload-time = "2025-07-03T13:09:55.638Z" },
+ { url = "https://files.pythonhosted.org/packages/13/92/dcdd147ab02daf405387f0218dcf792dc6dd5b14d2573d40b4caeef01059/pillow-11.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494", size = 7641168, upload-time = "2025-07-03T13:10:00.37Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/db/839d6ba7fd38b51af641aa904e2960e7a5644d60ec754c046b7d2aee00e5/pillow-11.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58", size = 5973053, upload-time = "2025-07-01T09:14:04.491Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/2f/d7675ecae6c43e9f12aa8d58b6012683b20b6edfbdac7abcb4e6af7a3784/pillow-11.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f", size = 6640273, upload-time = "2025-07-01T09:14:06.235Z" },
+ { url = "https://files.pythonhosted.org/packages/45/ad/931694675ede172e15b2ff03c8144a0ddaea1d87adb72bb07655eaffb654/pillow-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e", size = 6082043, upload-time = "2025-07-01T09:14:07.978Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/04/ba8f2b11fc80d2dd462d7abec16351b45ec99cbbaea4387648a44190351a/pillow-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94", size = 6715516, upload-time = "2025-07-01T09:14:10.233Z" },
+ { url = "https://files.pythonhosted.org/packages/48/59/8cd06d7f3944cc7d892e8533c56b0acb68399f640786313275faec1e3b6f/pillow-11.3.0-cp311-cp311-win32.whl", hash = "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0", size = 6274768, upload-time = "2025-07-01T09:14:11.921Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/cc/29c0f5d64ab8eae20f3232da8f8571660aa0ab4b8f1331da5c2f5f9a938e/pillow-11.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac", size = 6986055, upload-time = "2025-07-01T09:14:13.623Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/df/90bd886fabd544c25addd63e5ca6932c86f2b701d5da6c7839387a076b4a/pillow-11.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd", size = 2423079, upload-time = "2025-07-01T09:14:15.268Z" },
+ { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload-time = "2025-07-01T09:14:17.648Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload-time = "2025-07-01T09:14:19.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload-time = "2025-07-03T13:10:04.448Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload-time = "2025-07-03T13:10:10.391Z" },
+ { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload-time = "2025-07-01T09:14:21.63Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload-time = "2025-07-01T09:14:23.321Z" },
+ { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload-time = "2025-07-01T09:14:25.237Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload-time = "2025-07-01T09:14:27.053Z" },
+ { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload-time = "2025-07-01T09:14:30.104Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload-time = "2025-07-01T09:14:31.899Z" },
+ { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload-time = "2025-07-01T09:14:33.709Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload-time = "2025-07-01T09:14:35.276Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload-time = "2025-07-01T09:14:37.203Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload-time = "2025-07-01T09:14:39.344Z" },
+ { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload-time = "2025-07-01T09:14:41.843Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload-time = "2025-07-01T09:14:44.008Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload-time = "2025-07-03T13:10:15.628Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload-time = "2025-07-03T13:10:21.857Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload-time = "2025-07-01T09:14:45.698Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload-time = "2025-07-01T09:14:47.415Z" },
+ { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload-time = "2025-07-01T09:14:49.636Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload-time = "2025-07-01T09:14:51.962Z" },
+ { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload-time = "2025-07-01T09:14:54.142Z" },
+ { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload-time = "2025-07-01T09:14:56.436Z" },
+ { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload-time = "2025-07-01T09:14:58.072Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload-time = "2025-07-01T09:14:59.79Z" },
+ { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload-time = "2025-07-01T09:15:01.648Z" },
+ { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload-time = "2025-07-03T13:10:27.018Z" },
+ { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload-time = "2025-07-03T13:10:33.01Z" },
+ { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload-time = "2025-07-01T09:15:03.365Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload-time = "2025-07-01T09:15:05.655Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload-time = "2025-07-01T09:15:07.358Z" },
+ { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload-time = "2025-07-01T09:15:09.317Z" },
+ { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload-time = "2025-07-01T09:15:11.311Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload-time = "2025-07-01T09:15:13.164Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload-time = "2025-07-01T09:15:15.695Z" },
+ { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520, upload-time = "2025-07-01T09:15:17.429Z" },
+ { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116, upload-time = "2025-07-01T09:15:19.423Z" },
+ { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload-time = "2025-07-03T13:10:38.404Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload-time = "2025-07-03T13:10:44.987Z" },
+ { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload-time = "2025-07-01T09:15:21.237Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload-time = "2025-07-01T09:15:23.186Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload-time = "2025-07-01T09:15:25.1Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload-time = "2025-07-01T09:15:27.378Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload-time = "2025-07-01T09:15:29.294Z" },
+ { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload-time = "2025-07-01T09:15:31.128Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload-time = "2025-07-01T09:15:33.328Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129, upload-time = "2025-07-01T09:15:35.194Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580, upload-time = "2025-07-01T09:15:37.114Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload-time = "2025-07-03T13:10:50.248Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload-time = "2025-07-03T13:10:56.432Z" },
+ { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload-time = "2025-07-01T09:15:39.436Z" },
+ { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload-time = "2025-07-01T09:15:41.269Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload-time = "2025-07-01T09:15:43.13Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload-time = "2025-07-01T09:15:44.937Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload-time = "2025-07-01T09:15:46.673Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload-time = "2025-07-01T09:15:48.512Z" },
+ { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload-time = "2025-07-01T09:15:50.399Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/8b/209bd6b62ce8367f47e68a218bffac88888fdf2c9fcf1ecadc6c3ec1ebc7/pillow-11.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3cee80663f29e3843b68199b9d6f4f54bd1d4a6b59bdd91bceefc51238bcb967", size = 5270556, upload-time = "2025-07-01T09:16:09.961Z" },
+ { url = "https://files.pythonhosted.org/packages/2e/e6/231a0b76070c2cfd9e260a7a5b504fb72da0a95279410fa7afd99d9751d6/pillow-11.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b5f56c3f344f2ccaf0dd875d3e180f631dc60a51b314295a3e681fe8cf851fbe", size = 4654625, upload-time = "2025-07-01T09:16:11.913Z" },
+ { url = "https://files.pythonhosted.org/packages/13/f4/10cf94fda33cb12765f2397fc285fa6d8eb9c29de7f3185165b702fc7386/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c", size = 4874207, upload-time = "2025-07-03T13:11:10.201Z" },
+ { url = "https://files.pythonhosted.org/packages/72/c9/583821097dc691880c92892e8e2d41fe0a5a3d6021f4963371d2f6d57250/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25", size = 6583939, upload-time = "2025-07-03T13:11:15.68Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/8e/5c9d410f9217b12320efc7c413e72693f48468979a013ad17fd690397b9a/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27", size = 4957166, upload-time = "2025-07-01T09:16:13.74Z" },
+ { url = "https://files.pythonhosted.org/packages/62/bb/78347dbe13219991877ffb3a91bf09da8317fbfcd4b5f9140aeae020ad71/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be5463ac478b623b9dd3937afd7fb7ab3d79dd290a28e2b6df292dc75063eb8a", size = 5581482, upload-time = "2025-07-01T09:16:16.107Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/28/1000353d5e61498aaeaaf7f1e4b49ddb05f2c6575f9d4f9f914a3538b6e1/pillow-11.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8dc70ca24c110503e16918a658b869019126ecfe03109b754c402daff12b3d9f", size = 6984596, upload-time = "2025-07-01T09:16:18.07Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/e3/6fa84033758276fb31da12e5fb66ad747ae83b93c67af17f8c6ff4cc8f34/pillow-11.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c8ec7a017ad1bd562f93dbd8505763e688d388cde6e4a010ae1486916e713e6", size = 5270566, upload-time = "2025-07-01T09:16:19.801Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/ee/e8d2e1ab4892970b561e1ba96cbd59c0d28cf66737fc44abb2aec3795a4e/pillow-11.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9ab6ae226de48019caa8074894544af5b53a117ccb9d3b3dcb2871464c829438", size = 4654618, upload-time = "2025-07-01T09:16:21.818Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/6d/17f80f4e1f0761f02160fc433abd4109fa1548dcfdca46cfdadaf9efa565/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3", size = 4874248, upload-time = "2025-07-03T13:11:20.738Z" },
+ { url = "https://files.pythonhosted.org/packages/de/5f/c22340acd61cef960130585bbe2120e2fd8434c214802f07e8c03596b17e/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c", size = 6583963, upload-time = "2025-07-03T13:11:26.283Z" },
+ { url = "https://files.pythonhosted.org/packages/31/5e/03966aedfbfcbb4d5f8aa042452d3361f325b963ebbadddac05b122e47dd/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361", size = 4957170, upload-time = "2025-07-01T09:16:23.762Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/2d/e082982aacc927fc2cab48e1e731bdb1643a1406acace8bed0900a61464e/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7", size = 5581505, upload-time = "2025-07-01T09:16:25.593Z" },
+ { url = "https://files.pythonhosted.org/packages/34/e7/ae39f538fd6844e982063c3a5e4598b8ced43b9633baa3a85ef33af8c05c/pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8", size = 6984598, upload-time = "2025-07-01T09:16:27.732Z" },
+]
+
[[package]]
name = "platformdirs"
version = "4.3.6"
@@ -972,6 +1493,41 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/49/e3/633d6d05e40651acb30458e296c90e878fa4caf3b3c21bb9e6adc912b811/psycopg_binary-3.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:7c357cf87e8d7612cfe781225be7669f35038a765d1b53ec9605f6c5aef9ee85", size = 2913412, upload-time = "2024-09-15T21:06:21.959Z" },
]
+[[package]]
+name = "pycryptodome"
+version = "3.23.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/8e/a6/8452177684d5e906854776276ddd34eca30d1b1e15aa1ee9cefc289a33f5/pycryptodome-3.23.0.tar.gz", hash = "sha256:447700a657182d60338bab09fdb27518f8856aecd80ae4c6bdddb67ff5da44ef", size = 4921276, upload-time = "2025-05-17T17:21:45.242Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/04/5d/bdb09489b63cd34a976cc9e2a8d938114f7a53a74d3dd4f125ffa49dce82/pycryptodome-3.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:0011f7f00cdb74879142011f95133274741778abba114ceca229adbf8e62c3e4", size = 2495152, upload-time = "2025-05-17T17:20:20.833Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/ce/7840250ed4cc0039c433cd41715536f926d6e86ce84e904068eb3244b6a6/pycryptodome-3.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:90460fc9e088ce095f9ee8356722d4f10f86e5be06e2354230a9880b9c549aae", size = 1639348, upload-time = "2025-05-17T17:20:23.171Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/f0/991da24c55c1f688d6a3b5a11940567353f74590734ee4a64294834ae472/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4764e64b269fc83b00f682c47443c2e6e85b18273712b98aa43bcb77f8570477", size = 2184033, upload-time = "2025-05-17T17:20:25.424Z" },
+ { url = "https://files.pythonhosted.org/packages/54/16/0e11882deddf00f68b68dd4e8e442ddc30641f31afeb2bc25588124ac8de/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb8f24adb74984aa0e5d07a2368ad95276cf38051fe2dc6605cbcf482e04f2a7", size = 2270142, upload-time = "2025-05-17T17:20:27.808Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/fc/4347fea23a3f95ffb931f383ff28b3f7b1fe868739182cb76718c0da86a1/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d97618c9c6684a97ef7637ba43bdf6663a2e2e77efe0f863cce97a76af396446", size = 2309384, upload-time = "2025-05-17T17:20:30.765Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/d9/c5261780b69ce66d8cfab25d2797bd6e82ba0241804694cd48be41add5eb/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9a53a4fe5cb075075d515797d6ce2f56772ea7e6a1e5e4b96cf78a14bac3d265", size = 2183237, upload-time = "2025-05-17T17:20:33.736Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/6f/3af2ffedd5cfa08c631f89452c6648c4d779e7772dfc388c77c920ca6bbf/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:763d1d74f56f031788e5d307029caef067febf890cd1f8bf61183ae142f1a77b", size = 2343898, upload-time = "2025-05-17T17:20:36.086Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/dc/9060d807039ee5de6e2f260f72f3d70ac213993a804f5e67e0a73a56dd2f/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:954af0e2bd7cea83ce72243b14e4fb518b18f0c1649b576d114973e2073b273d", size = 2269197, upload-time = "2025-05-17T17:20:38.414Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/34/e6c8ca177cb29dcc4967fef73f5de445912f93bd0343c9c33c8e5bf8cde8/pycryptodome-3.23.0-cp313-cp313t-win32.whl", hash = "sha256:257bb3572c63ad8ba40b89f6fc9d63a2a628e9f9708d31ee26560925ebe0210a", size = 1768600, upload-time = "2025-05-17T17:20:40.688Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/1d/89756b8d7ff623ad0160f4539da571d1f594d21ee6d68be130a6eccb39a4/pycryptodome-3.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6501790c5b62a29fcb227bd6b62012181d886a767ce9ed03b303d1f22eb5c625", size = 1799740, upload-time = "2025-05-17T17:20:42.413Z" },
+ { url = "https://files.pythonhosted.org/packages/5d/61/35a64f0feaea9fd07f0d91209e7be91726eb48c0f1bfc6720647194071e4/pycryptodome-3.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:9a77627a330ab23ca43b48b130e202582e91cc69619947840ea4d2d1be21eb39", size = 1703685, upload-time = "2025-05-17T17:20:44.388Z" },
+ { url = "https://files.pythonhosted.org/packages/db/6c/a1f71542c969912bb0e106f64f60a56cc1f0fabecf9396f45accbe63fa68/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:187058ab80b3281b1de11c2e6842a357a1f71b42cb1e15bce373f3d238135c27", size = 2495627, upload-time = "2025-05-17T17:20:47.139Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/4e/a066527e079fc5002390c8acdd3aca431e6ea0a50ffd7201551175b47323/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cfb5cd445280c5b0a4e6187a7ce8de5a07b5f3f897f235caa11f1f435f182843", size = 1640362, upload-time = "2025-05-17T17:20:50.392Z" },
+ { url = "https://files.pythonhosted.org/packages/50/52/adaf4c8c100a8c49d2bd058e5b551f73dfd8cb89eb4911e25a0c469b6b4e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67bd81fcbe34f43ad9422ee8fd4843c8e7198dd88dd3d40e6de42ee65fbe1490", size = 2182625, upload-time = "2025-05-17T17:20:52.866Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/e9/a09476d436d0ff1402ac3867d933c61805ec2326c6ea557aeeac3825604e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8987bd3307a39bc03df5c8e0e3d8be0c4c3518b7f044b0f4c15d1aa78f52575", size = 2268954, upload-time = "2025-05-17T17:20:55.027Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/c5/ffe6474e0c551d54cab931918127c46d70cab8f114e0c2b5a3c071c2f484/pycryptodome-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa0698f65e5b570426fc31b8162ed4603b0c2841cbb9088e2b01641e3065915b", size = 2308534, upload-time = "2025-05-17T17:20:57.279Z" },
+ { url = "https://files.pythonhosted.org/packages/18/28/e199677fc15ecf43010f2463fde4c1a53015d1fe95fb03bca2890836603a/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:53ecbafc2b55353edcebd64bf5da94a2a2cdf5090a6915bcca6eca6cc452585a", size = 2181853, upload-time = "2025-05-17T17:20:59.322Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/ea/4fdb09f2165ce1365c9eaefef36625583371ee514db58dc9b65d3a255c4c/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:156df9667ad9f2ad26255926524e1c136d6664b741547deb0a86a9acf5ea631f", size = 2342465, upload-time = "2025-05-17T17:21:03.83Z" },
+ { url = "https://files.pythonhosted.org/packages/22/82/6edc3fc42fe9284aead511394bac167693fb2b0e0395b28b8bedaa07ef04/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:dea827b4d55ee390dc89b2afe5927d4308a8b538ae91d9c6f7a5090f397af1aa", size = 2267414, upload-time = "2025-05-17T17:21:06.72Z" },
+ { url = "https://files.pythonhosted.org/packages/59/fe/aae679b64363eb78326c7fdc9d06ec3de18bac68be4b612fc1fe8902693c/pycryptodome-3.23.0-cp37-abi3-win32.whl", hash = "sha256:507dbead45474b62b2bbe318eb1c4c8ee641077532067fec9c1aa82c31f84886", size = 1768484, upload-time = "2025-05-17T17:21:08.535Z" },
+ { url = "https://files.pythonhosted.org/packages/54/2f/e97a1b8294db0daaa87012c24a7bb714147c7ade7656973fd6c736b484ff/pycryptodome-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:c75b52aacc6c0c260f204cbdd834f76edc9fb0d8e0da9fbf8352ef58202564e2", size = 1799636, upload-time = "2025-05-17T17:21:10.393Z" },
+ { url = "https://files.pythonhosted.org/packages/18/3d/f9441a0d798bf2b1e645adc3265e55706aead1255ccdad3856dbdcffec14/pycryptodome-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:11eeeb6917903876f134b56ba11abe95c0b0fd5e3330def218083c7d98bbcb3c", size = 1703675, upload-time = "2025-05-17T17:21:13.146Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/12/e33935a0709c07de084d7d58d330ec3f4daf7910a18e77937affdb728452/pycryptodome-3.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ddb95b49df036ddd264a0ad246d1be5b672000f12d6961ea2c267083a5e19379", size = 1623886, upload-time = "2025-05-17T17:21:20.614Z" },
+ { url = "https://files.pythonhosted.org/packages/22/0b/aa8f9419f25870889bebf0b26b223c6986652bdf071f000623df11212c90/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e95564beb8782abfd9e431c974e14563a794a4944c29d6d3b7b5ea042110b4", size = 1672151, upload-time = "2025-05-17T17:21:22.666Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/5e/63f5cbde2342b7f70a39e591dbe75d9809d6338ce0b07c10406f1a140cdc/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14e15c081e912c4b0d75632acd8382dfce45b258667aa3c67caf7a4d4c13f630", size = 1664461, upload-time = "2025-05-17T17:21:25.225Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/92/608fbdad566ebe499297a86aae5f2a5263818ceeecd16733006f1600403c/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7fc76bf273353dc7e5207d172b83f569540fc9a28d63171061c42e361d22353", size = 1702440, upload-time = "2025-05-17T17:21:27.991Z" },
+ { url = "https://files.pythonhosted.org/packages/d1/92/2eadd1341abd2989cce2e2740b4423608ee2014acb8110438244ee97d7ff/pycryptodome-3.23.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:45c69ad715ca1a94f778215a11e66b7ff989d792a4d63b68dc586a1da1392ff5", size = 1803005, upload-time = "2025-05-17T17:21:31.37Z" },
+]
+
[[package]]
name = "pydantic"
version = "2.12.3"
@@ -1180,6 +1736,20 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546, upload-time = "2024-12-16T19:45:44.423Z" },
]
+[[package]]
+name = "python-pptx"
+version = "0.6.23"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "lxml" },
+ { name = "pillow" },
+ { name = "xlsxwriter" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/20/e7/aeaf794b2d440da609684494075e64cfada248026ecb265807d0668cdd00/python-pptx-0.6.23.tar.gz", hash = "sha256:587497ff28e779ab18dbb074f6d4052893c85dedc95ed75df319364f331fedee", size = 10083771, upload-time = "2023-11-02T21:35:31.525Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/72/49/6eee83072983473e9905ffddd5c2032b9a0ca4616425560d6d582287b467/python_pptx-0.6.23-py3-none-any.whl", hash = "sha256:dd0527194627a2b7cc05f3ba23ecaa2d9a0d5ac9b6193a28ed1b7a716f4217d4", size = 471575, upload-time = "2023-11-02T21:35:21.747Z" },
+]
+
[[package]]
name = "pyyaml"
version = "6.0.2"
@@ -1224,6 +1794,113 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" },
]
+[[package]]
+name = "regex"
+version = "2025.9.18"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/49/d3/eaa0d28aba6ad1827ad1e716d9a93e1ba963ada61887498297d3da715133/regex-2025.9.18.tar.gz", hash = "sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4", size = 400917, upload-time = "2025-09-19T00:38:35.79Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7e/d8/7e06171db8e55f917c5b8e89319cea2d86982e3fc46b677f40358223dece/regex-2025.9.18-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:12296202480c201c98a84aecc4d210592b2f55e200a1d193235c4db92b9f6788", size = 484829, upload-time = "2025-09-19T00:35:05.215Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/70/bf91bb39e5bedf75ce730ffbaa82ca585584d13335306d637458946b8b9f/regex-2025.9.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:220381f1464a581f2ea988f2220cf2a67927adcef107d47d6897ba5a2f6d51a4", size = 288993, upload-time = "2025-09-19T00:35:08.154Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/89/69f79b28365eda2c46e64c39d617d5f65a2aa451a4c94de7d9b34c2dc80f/regex-2025.9.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:87f681bfca84ebd265278b5daa1dcb57f4db315da3b5d044add7c30c10442e61", size = 286624, upload-time = "2025-09-19T00:35:09.717Z" },
+ { url = "https://files.pythonhosted.org/packages/44/31/81e62955726c3a14fcc1049a80bc716765af6c055706869de5e880ddc783/regex-2025.9.18-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34d674cbba70c9398074c8a1fcc1a79739d65d1105de2a3c695e2b05ea728251", size = 780473, upload-time = "2025-09-19T00:35:11.013Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/23/07072b7e191fbb6e213dc03b2f5b96f06d3c12d7deaded84679482926fc7/regex-2025.9.18-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:385c9b769655cb65ea40b6eea6ff763cbb6d69b3ffef0b0db8208e1833d4e746", size = 849290, upload-time = "2025-09-19T00:35:12.348Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/f0/aec7f6a01f2a112210424d77c6401b9015675fb887ced7e18926df4ae51e/regex-2025.9.18-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8900b3208e022570ae34328712bef6696de0804c122933414014bae791437ab2", size = 897335, upload-time = "2025-09-19T00:35:14.058Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/90/2e5f9da89d260de7d0417ead91a1bc897f19f0af05f4f9323313b76c47f2/regex-2025.9.18-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c204e93bf32cd7a77151d44b05eb36f469d0898e3fba141c026a26b79d9914a0", size = 789946, upload-time = "2025-09-19T00:35:15.403Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/d5/1c712c7362f2563d389be66bae131c8bab121a3fabfa04b0b5bfc9e73c51/regex-2025.9.18-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3acc471d1dd7e5ff82e6cacb3b286750decd949ecd4ae258696d04f019817ef8", size = 780787, upload-time = "2025-09-19T00:35:17.061Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/92/c54cdb4aa41009632e69817a5aa452673507f07e341076735a2f6c46a37c/regex-2025.9.18-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6479d5555122433728760e5f29edb4c2b79655a8deb681a141beb5c8a025baea", size = 773632, upload-time = "2025-09-19T00:35:18.57Z" },
+ { url = "https://files.pythonhosted.org/packages/db/99/75c996dc6a2231a8652d7ad0bfbeaf8a8c77612d335580f520f3ec40e30b/regex-2025.9.18-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:431bd2a8726b000eb6f12429c9b438a24062a535d06783a93d2bcbad3698f8a8", size = 844104, upload-time = "2025-09-19T00:35:20.259Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/f7/25aba34cc130cb6844047dbfe9716c9b8f9629fee8b8bec331aa9241b97b/regex-2025.9.18-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0cc3521060162d02bd36927e20690129200e5ac9d2c6d32b70368870b122db25", size = 834794, upload-time = "2025-09-19T00:35:22.002Z" },
+ { url = "https://files.pythonhosted.org/packages/51/eb/64e671beafa0ae29712268421597596d781704973551312b2425831d4037/regex-2025.9.18-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a021217b01be2d51632ce056d7a837d3fa37c543ede36e39d14063176a26ae29", size = 778535, upload-time = "2025-09-19T00:35:23.298Z" },
+ { url = "https://files.pythonhosted.org/packages/26/33/c0ebc0b07bd0bf88f716cca240546b26235a07710ea58e271cfe390ae273/regex-2025.9.18-cp310-cp310-win32.whl", hash = "sha256:4a12a06c268a629cb67cc1d009b7bb0be43e289d00d5111f86a2efd3b1949444", size = 264115, upload-time = "2025-09-19T00:35:25.206Z" },
+ { url = "https://files.pythonhosted.org/packages/59/39/aeb11a4ae68faaec2498512cadae09f2d8a91f1f65730fe62b9bffeea150/regex-2025.9.18-cp310-cp310-win_amd64.whl", hash = "sha256:47acd811589301298c49db2c56bde4f9308d6396da92daf99cba781fa74aa450", size = 276143, upload-time = "2025-09-19T00:35:26.785Z" },
+ { url = "https://files.pythonhosted.org/packages/29/04/37f2d3fc334a1031fc2767c9d89cec13c2e72207c7e7f6feae8a47f4e149/regex-2025.9.18-cp310-cp310-win_arm64.whl", hash = "sha256:16bd2944e77522275e5ee36f867e19995bcaa533dcb516753a26726ac7285442", size = 268473, upload-time = "2025-09-19T00:35:28.39Z" },
+ { url = "https://files.pythonhosted.org/packages/58/61/80eda662fc4eb32bfedc331f42390974c9e89c7eac1b79cd9eea4d7c458c/regex-2025.9.18-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a", size = 484832, upload-time = "2025-09-19T00:35:30.011Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/d9/33833d9abddf3f07ad48504ddb53fe3b22f353214bbb878a72eee1e3ddbf/regex-2025.9.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8", size = 288994, upload-time = "2025-09-19T00:35:31.733Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/b3/526ee96b0d70ea81980cbc20c3496fa582f775a52e001e2743cc33b2fa75/regex-2025.9.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414", size = 286619, upload-time = "2025-09-19T00:35:33.221Z" },
+ { url = "https://files.pythonhosted.org/packages/65/4f/c2c096b02a351b33442aed5895cdd8bf87d372498d2100927c5a053d7ba3/regex-2025.9.18-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a", size = 792454, upload-time = "2025-09-19T00:35:35.361Z" },
+ { url = "https://files.pythonhosted.org/packages/24/15/b562c9d6e47c403c4b5deb744f8b4bf6e40684cf866c7b077960a925bdff/regex-2025.9.18-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4", size = 858723, upload-time = "2025-09-19T00:35:36.949Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/01/dba305409849e85b8a1a681eac4c03ed327d8de37895ddf9dc137f59c140/regex-2025.9.18-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a", size = 905899, upload-time = "2025-09-19T00:35:38.723Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/d0/c51d1e6a80eab11ef96a4cbad17fc0310cf68994fb01a7283276b7e5bbd6/regex-2025.9.18-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f", size = 798981, upload-time = "2025-09-19T00:35:40.416Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/5e/72db90970887bbe02296612bd61b0fa31e6d88aa24f6a4853db3e96c575e/regex-2025.9.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a", size = 781900, upload-time = "2025-09-19T00:35:42.077Z" },
+ { url = "https://files.pythonhosted.org/packages/50/ff/596be45eea8e9bc31677fde243fa2904d00aad1b32c31bce26c3dbba0b9e/regex-2025.9.18-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9", size = 852952, upload-time = "2025-09-19T00:35:43.751Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/1b/2dfa348fa551e900ed3f5f63f74185b6a08e8a76bc62bc9c106f4f92668b/regex-2025.9.18-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2", size = 844355, upload-time = "2025-09-19T00:35:45.309Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/bf/aefb1def27fe33b8cbbb19c75c13aefccfbef1c6686f8e7f7095705969c7/regex-2025.9.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95", size = 787254, upload-time = "2025-09-19T00:35:46.904Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/4e/8ef042e7cf0dbbb401e784e896acfc1b367b95dfbfc9ada94c2ed55a081f/regex-2025.9.18-cp311-cp311-win32.whl", hash = "sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07", size = 264129, upload-time = "2025-09-19T00:35:48.597Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/7d/c4fcabf80dcdd6821c0578ad9b451f8640b9110fb3dcb74793dd077069ff/regex-2025.9.18-cp311-cp311-win_amd64.whl", hash = "sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9", size = 276160, upload-time = "2025-09-19T00:36:00.45Z" },
+ { url = "https://files.pythonhosted.org/packages/64/f8/0e13c8ae4d6df9d128afaba138342d532283d53a4c1e7a8c93d6756c8f4a/regex-2025.9.18-cp311-cp311-win_arm64.whl", hash = "sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df", size = 268471, upload-time = "2025-09-19T00:36:02.149Z" },
+ { url = "https://files.pythonhosted.org/packages/b0/99/05859d87a66ae7098222d65748f11ef7f2dff51bfd7482a4e2256c90d72b/regex-2025.9.18-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e", size = 486335, upload-time = "2025-09-19T00:36:03.661Z" },
+ { url = "https://files.pythonhosted.org/packages/97/7e/d43d4e8b978890932cf7b0957fce58c5b08c66f32698f695b0c2c24a48bf/regex-2025.9.18-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a", size = 289720, upload-time = "2025-09-19T00:36:05.471Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/3b/ff80886089eb5dcf7e0d2040d9aaed539e25a94300403814bb24cc775058/regex-2025.9.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab", size = 287257, upload-time = "2025-09-19T00:36:07.072Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/66/243edf49dd8720cba8d5245dd4d6adcb03a1defab7238598c0c97cf549b8/regex-2025.9.18-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5", size = 797463, upload-time = "2025-09-19T00:36:08.399Z" },
+ { url = "https://files.pythonhosted.org/packages/df/71/c9d25a1142c70432e68bb03211d4a82299cd1c1fbc41db9409a394374ef5/regex-2025.9.18-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742", size = 862670, upload-time = "2025-09-19T00:36:10.101Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/8f/329b1efc3a64375a294e3a92d43372bf1a351aa418e83c21f2f01cf6ec41/regex-2025.9.18-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425", size = 910881, upload-time = "2025-09-19T00:36:12.223Z" },
+ { url = "https://files.pythonhosted.org/packages/35/9e/a91b50332a9750519320ed30ec378b74c996f6befe282cfa6bb6cea7e9fd/regex-2025.9.18-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352", size = 802011, upload-time = "2025-09-19T00:36:13.901Z" },
+ { url = "https://files.pythonhosted.org/packages/a4/1d/6be3b8d7856b6e0d7ee7f942f437d0a76e0d5622983abbb6d21e21ab9a17/regex-2025.9.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d", size = 786668, upload-time = "2025-09-19T00:36:15.391Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/ce/4a60e53df58bd157c5156a1736d3636f9910bdcc271d067b32b7fcd0c3a8/regex-2025.9.18-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56", size = 856578, upload-time = "2025-09-19T00:36:16.845Z" },
+ { url = "https://files.pythonhosted.org/packages/86/e8/162c91bfe7217253afccde112868afb239f94703de6580fb235058d506a6/regex-2025.9.18-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e", size = 849017, upload-time = "2025-09-19T00:36:18.597Z" },
+ { url = "https://files.pythonhosted.org/packages/35/34/42b165bc45289646ea0959a1bc7531733e90b47c56a72067adfe6b3251f6/regex-2025.9.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282", size = 788150, upload-time = "2025-09-19T00:36:20.464Z" },
+ { url = "https://files.pythonhosted.org/packages/79/5d/cdd13b1f3c53afa7191593a7ad2ee24092a5a46417725ffff7f64be8342d/regex-2025.9.18-cp312-cp312-win32.whl", hash = "sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459", size = 264536, upload-time = "2025-09-19T00:36:21.922Z" },
+ { url = "https://files.pythonhosted.org/packages/e0/f5/4a7770c9a522e7d2dc1fa3ffc83ab2ab33b0b22b447e62cffef186805302/regex-2025.9.18-cp312-cp312-win_amd64.whl", hash = "sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77", size = 275501, upload-time = "2025-09-19T00:36:23.4Z" },
+ { url = "https://files.pythonhosted.org/packages/df/05/9ce3e110e70d225ecbed455b966003a3afda5e58e8aec2964042363a18f4/regex-2025.9.18-cp312-cp312-win_arm64.whl", hash = "sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5", size = 268601, upload-time = "2025-09-19T00:36:25.092Z" },
+ { url = "https://files.pythonhosted.org/packages/d2/c7/5c48206a60ce33711cf7dcaeaed10dd737733a3569dc7e1dce324dd48f30/regex-2025.9.18-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2", size = 485955, upload-time = "2025-09-19T00:36:26.822Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/be/74fc6bb19a3c491ec1ace943e622b5a8539068771e8705e469b2da2306a7/regex-2025.9.18-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb", size = 289583, upload-time = "2025-09-19T00:36:28.577Z" },
+ { url = "https://files.pythonhosted.org/packages/25/c4/9ceaa433cb5dc515765560f22a19578b95b92ff12526e5a259321c4fc1a0/regex-2025.9.18-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af", size = 287000, upload-time = "2025-09-19T00:36:30.161Z" },
+ { url = "https://files.pythonhosted.org/packages/7d/e6/68bc9393cb4dc68018456568c048ac035854b042bc7c33cb9b99b0680afa/regex-2025.9.18-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29", size = 797535, upload-time = "2025-09-19T00:36:31.876Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/1c/ebae9032d34b78ecfe9bd4b5e6575b55351dc8513485bb92326613732b8c/regex-2025.9.18-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f", size = 862603, upload-time = "2025-09-19T00:36:33.344Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/74/12332c54b3882557a4bcd2b99f8be581f5c6a43cf1660a85b460dd8ff468/regex-2025.9.18-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68", size = 910829, upload-time = "2025-09-19T00:36:34.826Z" },
+ { url = "https://files.pythonhosted.org/packages/86/70/ba42d5ed606ee275f2465bfc0e2208755b06cdabd0f4c7c4b614d51b57ab/regex-2025.9.18-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783", size = 802059, upload-time = "2025-09-19T00:36:36.664Z" },
+ { url = "https://files.pythonhosted.org/packages/da/c5/fcb017e56396a7f2f8357412638d7e2963440b131a3ca549be25774b3641/regex-2025.9.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac", size = 786781, upload-time = "2025-09-19T00:36:38.168Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/ee/21c4278b973f630adfb3bcb23d09d83625f3ab1ca6e40ebdffe69901c7a1/regex-2025.9.18-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e", size = 856578, upload-time = "2025-09-19T00:36:40.129Z" },
+ { url = "https://files.pythonhosted.org/packages/87/0b/de51550dc7274324435c8f1539373ac63019b0525ad720132866fff4a16a/regex-2025.9.18-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23", size = 849119, upload-time = "2025-09-19T00:36:41.651Z" },
+ { url = "https://files.pythonhosted.org/packages/60/52/383d3044fc5154d9ffe4321696ee5b2ee4833a28c29b137c22c33f41885b/regex-2025.9.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f", size = 788219, upload-time = "2025-09-19T00:36:43.575Z" },
+ { url = "https://files.pythonhosted.org/packages/20/bd/2614fc302671b7359972ea212f0e3a92df4414aaeacab054a8ce80a86073/regex-2025.9.18-cp313-cp313-win32.whl", hash = "sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d", size = 264517, upload-time = "2025-09-19T00:36:45.503Z" },
+ { url = "https://files.pythonhosted.org/packages/07/0f/ab5c1581e6563a7bffdc1974fb2d25f05689b88e2d416525271f232b1946/regex-2025.9.18-cp313-cp313-win_amd64.whl", hash = "sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d", size = 275481, upload-time = "2025-09-19T00:36:46.965Z" },
+ { url = "https://files.pythonhosted.org/packages/49/22/ee47672bc7958f8c5667a587c2600a4fba8b6bab6e86bd6d3e2b5f7cac42/regex-2025.9.18-cp313-cp313-win_arm64.whl", hash = "sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb", size = 268598, upload-time = "2025-09-19T00:36:48.314Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/83/6887e16a187c6226cb85d8301e47d3b73ecc4505a3a13d8da2096b44fd76/regex-2025.9.18-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2", size = 489765, upload-time = "2025-09-19T00:36:49.996Z" },
+ { url = "https://files.pythonhosted.org/packages/51/c5/e2f7325301ea2916ff301c8d963ba66b1b2c1b06694191df80a9c4fea5d0/regex-2025.9.18-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3", size = 291228, upload-time = "2025-09-19T00:36:51.654Z" },
+ { url = "https://files.pythonhosted.org/packages/91/60/7d229d2bc6961289e864a3a3cfebf7d0d250e2e65323a8952cbb7e22d824/regex-2025.9.18-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12", size = 289270, upload-time = "2025-09-19T00:36:53.118Z" },
+ { url = "https://files.pythonhosted.org/packages/3c/d7/b4f06868ee2958ff6430df89857fbf3d43014bbf35538b6ec96c2704e15d/regex-2025.9.18-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0", size = 806326, upload-time = "2025-09-19T00:36:54.631Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/e4/bca99034a8f1b9b62ccf337402a8e5b959dd5ba0e5e5b2ead70273df3277/regex-2025.9.18-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6", size = 871556, upload-time = "2025-09-19T00:36:56.208Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/df/e06ffaf078a162f6dd6b101a5ea9b44696dca860a48136b3ae4a9caf25e2/regex-2025.9.18-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef", size = 913817, upload-time = "2025-09-19T00:36:57.807Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/05/25b05480b63292fd8e84800b1648e160ca778127b8d2367a0a258fa2e225/regex-2025.9.18-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a", size = 811055, upload-time = "2025-09-19T00:36:59.762Z" },
+ { url = "https://files.pythonhosted.org/packages/70/97/7bc7574655eb651ba3a916ed4b1be6798ae97af30104f655d8efd0cab24b/regex-2025.9.18-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d", size = 794534, upload-time = "2025-09-19T00:37:01.405Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/c2/d5da49166a52dda879855ecdba0117f073583db2b39bb47ce9a3378a8e9e/regex-2025.9.18-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368", size = 866684, upload-time = "2025-09-19T00:37:03.441Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/2d/0a5c4e6ec417de56b89ff4418ecc72f7e3feca806824c75ad0bbdae0516b/regex-2025.9.18-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90", size = 853282, upload-time = "2025-09-19T00:37:04.985Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/8e/d656af63e31a86572ec829665d6fa06eae7e144771e0330650a8bb865635/regex-2025.9.18-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7", size = 797830, upload-time = "2025-09-19T00:37:06.697Z" },
+ { url = "https://files.pythonhosted.org/packages/db/ce/06edc89df8f7b83ffd321b6071be4c54dc7332c0f77860edc40ce57d757b/regex-2025.9.18-cp313-cp313t-win32.whl", hash = "sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e", size = 267281, upload-time = "2025-09-19T00:37:08.568Z" },
+ { url = "https://files.pythonhosted.org/packages/83/9a/2b5d9c8b307a451fd17068719d971d3634ca29864b89ed5c18e499446d4a/regex-2025.9.18-cp313-cp313t-win_amd64.whl", hash = "sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730", size = 278724, upload-time = "2025-09-19T00:37:10.023Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/70/177d31e8089a278a764f8ec9a3faac8d14a312d622a47385d4b43905806f/regex-2025.9.18-cp313-cp313t-win_arm64.whl", hash = "sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a", size = 269771, upload-time = "2025-09-19T00:37:13.041Z" },
+ { url = "https://files.pythonhosted.org/packages/44/b7/3b4663aa3b4af16819f2ab6a78c4111c7e9b066725d8107753c2257448a5/regex-2025.9.18-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129", size = 486130, upload-time = "2025-09-19T00:37:14.527Z" },
+ { url = "https://files.pythonhosted.org/packages/80/5b/4533f5d7ac9c6a02a4725fe8883de2aebc713e67e842c04cf02626afb747/regex-2025.9.18-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea", size = 289539, upload-time = "2025-09-19T00:37:16.356Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/8d/5ab6797c2750985f79e9995fad3254caa4520846580f266ae3b56d1cae58/regex-2025.9.18-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1", size = 287233, upload-time = "2025-09-19T00:37:18.025Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/1e/95afcb02ba8d3a64e6ffeb801718ce73471ad6440c55d993f65a4a5e7a92/regex-2025.9.18-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47", size = 797876, upload-time = "2025-09-19T00:37:19.609Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/fb/720b1f49cec1f3b5a9fea5b34cd22b88b5ebccc8c1b5de9cc6f65eed165a/regex-2025.9.18-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379", size = 863385, upload-time = "2025-09-19T00:37:21.65Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/ca/e0d07ecf701e1616f015a720dc13b84c582024cbfbb3fc5394ae204adbd7/regex-2025.9.18-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203", size = 910220, upload-time = "2025-09-19T00:37:23.723Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/45/bba86413b910b708eca705a5af62163d5d396d5f647ed9485580c7025209/regex-2025.9.18-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164", size = 801827, upload-time = "2025-09-19T00:37:25.684Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/a6/740fbd9fcac31a1305a8eed30b44bf0f7f1e042342be0a4722c0365ecfca/regex-2025.9.18-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb", size = 786843, upload-time = "2025-09-19T00:37:27.62Z" },
+ { url = "https://files.pythonhosted.org/packages/80/a7/0579e8560682645906da640c9055506465d809cb0f5415d9976f417209a6/regex-2025.9.18-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743", size = 857430, upload-time = "2025-09-19T00:37:29.362Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/9b/4dc96b6c17b38900cc9fee254fc9271d0dde044e82c78c0811b58754fde5/regex-2025.9.18-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282", size = 848612, upload-time = "2025-09-19T00:37:31.42Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/6a/6f659f99bebb1775e5ac81a3fb837b85897c1a4ef5acffd0ff8ffe7e67fb/regex-2025.9.18-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773", size = 787967, upload-time = "2025-09-19T00:37:34.019Z" },
+ { url = "https://files.pythonhosted.org/packages/61/35/9e35665f097c07cf384a6b90a1ac11b0b1693084a0b7a675b06f760496c6/regex-2025.9.18-cp314-cp314-win32.whl", hash = "sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788", size = 269847, upload-time = "2025-09-19T00:37:35.759Z" },
+ { url = "https://files.pythonhosted.org/packages/af/64/27594dbe0f1590b82de2821ebfe9a359b44dcb9b65524876cd12fabc447b/regex-2025.9.18-cp314-cp314-win_amd64.whl", hash = "sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3", size = 278755, upload-time = "2025-09-19T00:37:37.367Z" },
+ { url = "https://files.pythonhosted.org/packages/30/a3/0cd8d0d342886bd7d7f252d701b20ae1a3c72dc7f34ef4b2d17790280a09/regex-2025.9.18-cp314-cp314-win_arm64.whl", hash = "sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d", size = 271873, upload-time = "2025-09-19T00:37:39.125Z" },
+ { url = "https://files.pythonhosted.org/packages/99/cb/8a1ab05ecf404e18b54348e293d9b7a60ec2bd7aa59e637020c5eea852e8/regex-2025.9.18-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306", size = 489773, upload-time = "2025-09-19T00:37:40.968Z" },
+ { url = "https://files.pythonhosted.org/packages/93/3b/6543c9b7f7e734d2404fa2863d0d710c907bef99d4598760ed4563d634c3/regex-2025.9.18-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946", size = 291221, upload-time = "2025-09-19T00:37:42.901Z" },
+ { url = "https://files.pythonhosted.org/packages/cd/91/e9fdee6ad6bf708d98c5d17fded423dcb0661795a49cba1b4ffb8358377a/regex-2025.9.18-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f", size = 289268, upload-time = "2025-09-19T00:37:44.823Z" },
+ { url = "https://files.pythonhosted.org/packages/94/a6/bc3e8a918abe4741dadeaeb6c508e3a4ea847ff36030d820d89858f96a6c/regex-2025.9.18-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95", size = 806659, upload-time = "2025-09-19T00:37:46.684Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/71/ea62dbeb55d9e6905c7b5a49f75615ea1373afcad95830047e4e310db979/regex-2025.9.18-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b", size = 871701, upload-time = "2025-09-19T00:37:48.882Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/90/fbe9dedb7dad24a3a4399c0bae64bfa932ec8922a0a9acf7bc88db30b161/regex-2025.9.18-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3", size = 913742, upload-time = "2025-09-19T00:37:51.015Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/1c/47e4a8c0e73d41eb9eb9fdeba3b1b810110a5139a2526e82fd29c2d9f867/regex-2025.9.18-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571", size = 811117, upload-time = "2025-09-19T00:37:52.686Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/da/435f29fddfd015111523671e36d30af3342e8136a889159b05c1d9110480/regex-2025.9.18-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad", size = 794647, upload-time = "2025-09-19T00:37:54.626Z" },
+ { url = "https://files.pythonhosted.org/packages/23/66/df5e6dcca25c8bc57ce404eebc7342310a0d218db739d7882c9a2b5974a3/regex-2025.9.18-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494", size = 866747, upload-time = "2025-09-19T00:37:56.367Z" },
+ { url = "https://files.pythonhosted.org/packages/82/42/94392b39b531f2e469b2daa40acf454863733b674481fda17462a5ffadac/regex-2025.9.18-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b", size = 853434, upload-time = "2025-09-19T00:37:58.39Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/f8/dcc64c7f7bbe58842a8f89622b50c58c3598fbbf4aad0a488d6df2c699f1/regex-2025.9.18-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41", size = 798024, upload-time = "2025-09-19T00:38:00.397Z" },
+ { url = "https://files.pythonhosted.org/packages/20/8d/edf1c5d5aa98f99a692313db813ec487732946784f8f93145e0153d910e5/regex-2025.9.18-cp314-cp314t-win32.whl", hash = "sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096", size = 273029, upload-time = "2025-09-19T00:38:02.383Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/24/02d4e4f88466f17b145f7ea2b2c11af3a942db6222429c2c146accf16054/regex-2025.9.18-cp314-cp314t-win_amd64.whl", hash = "sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a", size = 282680, upload-time = "2025-09-19T00:38:04.102Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/a3/c64894858aaaa454caa7cc47e2f225b04d3ed08ad649eacf58d45817fad2/regex-2025.9.18-cp314-cp314t-win_arm64.whl", hash = "sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01", size = 273034, upload-time = "2025-09-19T00:38:05.807Z" },
+]
+
[[package]]
name = "requests"
version = "2.32.3"
@@ -1239,6 +1916,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928, upload-time = "2024-05-29T15:37:47.027Z" },
]
+[[package]]
+name = "requests-toolbelt"
+version = "1.0.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "requests" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" },
+]
+
[[package]]
name = "rich"
version = "13.8.1"
@@ -1277,6 +1966,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/8e/a8/4abb5a9f58f51e4b1ea386be5ab2e547035bc1ee57200d1eca2f8909a33e/ruff-0.6.7-py3-none-win_arm64.whl", hash = "sha256:b28f0d5e2f771c1fe3c7a45d3f53916fc74a480698c4b5731f0bea61e52137c8", size = 8618044, upload-time = "2024-09-21T17:35:53.123Z" },
]
+[[package]]
+name = "s3transfer"
+version = "0.14.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "botocore" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/62/74/8d69dcb7a9efe8baa2046891735e5dfe433ad558ae23d9e3c14c633d1d58/s3transfer-0.14.0.tar.gz", hash = "sha256:eff12264e7c8b4985074ccce27a3b38a485bb7f7422cc8046fee9be4983e4125", size = 151547, upload-time = "2025-09-09T19:23:31.089Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl", hash = "sha256:ea3b790c7077558ed1f02a3072fb3cb992bbbd253392f4b6e9e8976941c7d456", size = 85712, upload-time = "2025-09-09T19:23:30.041Z" },
+]
+
[[package]]
name = "sentry-sdk"
version = "1.45.1"
@@ -1306,11 +2007,11 @@ wheels = [
[[package]]
name = "six"
-version = "1.16.0"
+version = "1.12.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041, upload-time = "2021-05-05T14:18:18.379Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz", hash = "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73", size = 32725, upload-time = "2018-12-10T00:59:58.966Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053, upload-time = "2021-05-05T14:18:17.237Z" },
+ { url = "https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl", hash = "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", size = 10586, upload-time = "2018-12-10T00:59:57.273Z" },
]
[[package]]
@@ -1322,6 +2023,32 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" },
]
+[[package]]
+name = "sortedcontainers"
+version = "2.4.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" },
+]
+
+[[package]]
+name = "soupsieve"
+version = "2.8"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6d/e6/21ccce3262dd4889aa3332e5a119a3491a95e8f60939870a3a035aabac0d/soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f", size = 103472, upload-time = "2025-08-27T15:39:51.78Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c", size = 36679, upload-time = "2025-08-27T15:39:50.179Z" },
+]
+
+[[package]]
+name = "speechrecognition"
+version = "3.8.1"
+source = { registry = "https://pypi.org/simple" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/26/e1/7f5678cd94ec1234269d23756dbdaa4c8cfaed973412f88ae8adf7893a50/SpeechRecognition-3.8.1-py2.py3-none-any.whl", hash = "sha256:4d8f73a0c05ec70331c3bacaa89ecc06dfa8d9aba0899276664cda06ab597e8e", size = 32833456, upload-time = "2017-12-05T13:58:29.977Z" },
+]
+
[[package]]
name = "sqlalchemy"
version = "2.0.35"
@@ -1393,6 +2120,88 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d2/3f/8ba87d9e287b9d385a02a7114ddcef61b26f86411e121c9003eb509a1773/tenacity-8.5.0-py3-none-any.whl", hash = "sha256:b594c2a5945830c267ce6b79a166228323ed52718f30302c1359836112346687", size = 28165, upload-time = "2024-07-05T07:25:29.591Z" },
]
+[[package]]
+name = "textract"
+version = "1.6.5"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "argcomplete" },
+ { name = "beautifulsoup4" },
+ { name = "chardet" },
+ { name = "docx2txt" },
+ { name = "extract-msg" },
+ { name = "pdfminer-six" },
+ { name = "python-pptx" },
+ { name = "six" },
+ { name = "speechrecognition" },
+ { name = "xlrd" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/81/9f/dd29fcec368f007d44e51f0273489d5172a6d32ed9c796df5054fbb31c9f/textract-1.6.5.tar.gz", hash = "sha256:68f0f09056885821e6c43d8538987518daa94057c306679f2857cc5ee66ad850", size = 17871, upload-time = "2022-03-10T10:49:31.93Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6b/3e/ac16b6bf28edf78296aea7d0cb416b49ed30282ac8c711662541015ee6f3/textract-1.6.5-py3-none-any.whl", hash = "sha256:0accd78ec42864e3e3827f9ef798ced9aac4727b664303b724a198fed73fa438", size = 23140, upload-time = "2022-03-10T10:49:30.384Z" },
+]
+
+[[package]]
+name = "tiktoken"
+version = "0.12.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "regex" },
+ { name = "requests" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/4d017d0f76ec3171d469d80fc03dfbb4e48a4bcaddaa831b31d526f05edc/tiktoken-0.12.0.tar.gz", hash = "sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931", size = 37806, upload-time = "2025-10-06T20:22:45.419Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/89/b3/2cb7c17b6c4cf8ca983204255d3f1d95eda7213e247e6947a0ee2c747a2c/tiktoken-0.12.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970", size = 1051991, upload-time = "2025-10-06T20:21:34.098Z" },
+ { url = "https://files.pythonhosted.org/packages/27/0f/df139f1df5f6167194ee5ab24634582ba9a1b62c6b996472b0277ec80f66/tiktoken-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16", size = 995798, upload-time = "2025-10-06T20:21:35.579Z" },
+ { url = "https://files.pythonhosted.org/packages/ef/5d/26a691f28ab220d5edc09b9b787399b130f24327ef824de15e5d85ef21aa/tiktoken-0.12.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030", size = 1129865, upload-time = "2025-10-06T20:21:36.675Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/94/443fab3d4e5ebecac895712abd3849b8da93b7b7dec61c7db5c9c7ebe40c/tiktoken-0.12.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134", size = 1152856, upload-time = "2025-10-06T20:21:37.873Z" },
+ { url = "https://files.pythonhosted.org/packages/54/35/388f941251b2521c70dd4c5958e598ea6d2c88e28445d2fb8189eecc1dfc/tiktoken-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a", size = 1195308, upload-time = "2025-10-06T20:21:39.577Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/00/c6681c7f833dd410576183715a530437a9873fa910265817081f65f9105f/tiktoken-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892", size = 1255697, upload-time = "2025-10-06T20:21:41.154Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/d2/82e795a6a9bafa034bf26a58e68fe9a89eeaaa610d51dbeb22106ba04f0a/tiktoken-0.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1", size = 879375, upload-time = "2025-10-06T20:21:43.201Z" },
+ { url = "https://files.pythonhosted.org/packages/de/46/21ea696b21f1d6d1efec8639c204bdf20fde8bafb351e1355c72c5d7de52/tiktoken-0.12.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb", size = 1051565, upload-time = "2025-10-06T20:21:44.566Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/d9/35c5d2d9e22bb2a5f74ba48266fb56c63d76ae6f66e02feb628671c0283e/tiktoken-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa", size = 995284, upload-time = "2025-10-06T20:21:45.622Z" },
+ { url = "https://files.pythonhosted.org/packages/01/84/961106c37b8e49b9fdcf33fe007bb3a8fdcc380c528b20cc7fbba80578b8/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc", size = 1129201, upload-time = "2025-10-06T20:21:47.074Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/d0/3d9275198e067f8b65076a68894bb52fd253875f3644f0a321a720277b8a/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded", size = 1152444, upload-time = "2025-10-06T20:21:48.139Z" },
+ { url = "https://files.pythonhosted.org/packages/78/db/a58e09687c1698a7c592e1038e01c206569b86a0377828d51635561f8ebf/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd", size = 1195080, upload-time = "2025-10-06T20:21:49.246Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/1b/a9e4d2bf91d515c0f74afc526fd773a812232dd6cda33ebea7f531202325/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967", size = 1255240, upload-time = "2025-10-06T20:21:50.274Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/15/963819345f1b1fb0809070a79e9dd96938d4ca41297367d471733e79c76c/tiktoken-0.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def", size = 879422, upload-time = "2025-10-06T20:21:51.734Z" },
+ { url = "https://files.pythonhosted.org/packages/a4/85/be65d39d6b647c79800fd9d29241d081d4eeb06271f383bb87200d74cf76/tiktoken-0.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8", size = 1050728, upload-time = "2025-10-06T20:21:52.756Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/42/6573e9129bc55c9bf7300b3a35bef2c6b9117018acca0dc760ac2d93dffe/tiktoken-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b", size = 994049, upload-time = "2025-10-06T20:21:53.782Z" },
+ { url = "https://files.pythonhosted.org/packages/66/c5/ed88504d2f4a5fd6856990b230b56d85a777feab84e6129af0822f5d0f70/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37", size = 1129008, upload-time = "2025-10-06T20:21:54.832Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/90/3dae6cc5436137ebd38944d396b5849e167896fc2073da643a49f372dc4f/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad", size = 1152665, upload-time = "2025-10-06T20:21:56.129Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/fe/26df24ce53ffde419a42f5f53d755b995c9318908288c17ec3f3448313a3/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5", size = 1194230, upload-time = "2025-10-06T20:21:57.546Z" },
+ { url = "https://files.pythonhosted.org/packages/20/cc/b064cae1a0e9fac84b0d2c46b89f4e57051a5f41324e385d10225a984c24/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3", size = 1254688, upload-time = "2025-10-06T20:21:58.619Z" },
+ { url = "https://files.pythonhosted.org/packages/81/10/b8523105c590c5b8349f2587e2fdfe51a69544bd5a76295fc20f2374f470/tiktoken-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd", size = 878694, upload-time = "2025-10-06T20:21:59.876Z" },
+ { url = "https://files.pythonhosted.org/packages/00/61/441588ee21e6b5cdf59d6870f86beb9789e532ee9718c251b391b70c68d6/tiktoken-0.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3", size = 1050802, upload-time = "2025-10-06T20:22:00.96Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/05/dcf94486d5c5c8d34496abe271ac76c5b785507c8eae71b3708f1ad9b45a/tiktoken-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160", size = 993995, upload-time = "2025-10-06T20:22:02.788Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/70/5163fe5359b943f8db9946b62f19be2305de8c3d78a16f629d4165e2f40e/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa", size = 1128948, upload-time = "2025-10-06T20:22:03.814Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/da/c028aa0babf77315e1cef357d4d768800c5f8a6de04d0eac0f377cb619fa/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be", size = 1151986, upload-time = "2025-10-06T20:22:05.173Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/5a/886b108b766aa53e295f7216b509be95eb7d60b166049ce2c58416b25f2a/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a", size = 1194222, upload-time = "2025-10-06T20:22:06.265Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/f8/4db272048397636ac7a078d22773dd2795b1becee7bc4922fe6207288d57/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3", size = 1255097, upload-time = "2025-10-06T20:22:07.403Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/32/45d02e2e0ea2be3a9ed22afc47d93741247e75018aac967b713b2941f8ea/tiktoken-0.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697", size = 879117, upload-time = "2025-10-06T20:22:08.418Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/76/994fc868f88e016e6d05b0da5ac24582a14c47893f4474c3e9744283f1d5/tiktoken-0.12.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16", size = 1050309, upload-time = "2025-10-06T20:22:10.939Z" },
+ { url = "https://files.pythonhosted.org/packages/f6/b8/57ef1456504c43a849821920d582a738a461b76a047f352f18c0b26c6516/tiktoken-0.12.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a", size = 993712, upload-time = "2025-10-06T20:22:12.115Z" },
+ { url = "https://files.pythonhosted.org/packages/72/90/13da56f664286ffbae9dbcfadcc625439142675845baa62715e49b87b68b/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27", size = 1128725, upload-time = "2025-10-06T20:22:13.541Z" },
+ { url = "https://files.pythonhosted.org/packages/05/df/4f80030d44682235bdaecd7346c90f67ae87ec8f3df4a3442cb53834f7e4/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb", size = 1151875, upload-time = "2025-10-06T20:22:14.559Z" },
+ { url = "https://files.pythonhosted.org/packages/22/1f/ae535223a8c4ef4c0c1192e3f9b82da660be9eb66b9279e95c99288e9dab/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e", size = 1194451, upload-time = "2025-10-06T20:22:15.545Z" },
+ { url = "https://files.pythonhosted.org/packages/78/a7/f8ead382fce0243cb625c4f266e66c27f65ae65ee9e77f59ea1653b6d730/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25", size = 1253794, upload-time = "2025-10-06T20:22:16.624Z" },
+ { url = "https://files.pythonhosted.org/packages/93/e0/6cc82a562bc6365785a3ff0af27a2a092d57c47d7a81d9e2295d8c36f011/tiktoken-0.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f", size = 878777, upload-time = "2025-10-06T20:22:18.036Z" },
+ { url = "https://files.pythonhosted.org/packages/72/05/3abc1db5d2c9aadc4d2c76fa5640134e475e58d9fbb82b5c535dc0de9b01/tiktoken-0.12.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646", size = 1050188, upload-time = "2025-10-06T20:22:19.563Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/7b/50c2f060412202d6c95f32b20755c7a6273543b125c0985d6fa9465105af/tiktoken-0.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88", size = 993978, upload-time = "2025-10-06T20:22:20.702Z" },
+ { url = "https://files.pythonhosted.org/packages/14/27/bf795595a2b897e271771cd31cb847d479073497344c637966bdf2853da1/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff", size = 1129271, upload-time = "2025-10-06T20:22:22.06Z" },
+ { url = "https://files.pythonhosted.org/packages/f5/de/9341a6d7a8f1b448573bbf3425fa57669ac58258a667eb48a25dfe916d70/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830", size = 1151216, upload-time = "2025-10-06T20:22:23.085Z" },
+ { url = "https://files.pythonhosted.org/packages/75/0d/881866647b8d1be4d67cb24e50d0c26f9f807f994aa1510cb9ba2fe5f612/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b", size = 1194860, upload-time = "2025-10-06T20:22:24.602Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/1e/b651ec3059474dab649b8d5b69f5c65cd8fcd8918568c1935bd4136c9392/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b", size = 1254567, upload-time = "2025-10-06T20:22:25.671Z" },
+ { url = "https://files.pythonhosted.org/packages/80/57/ce64fd16ac390fafde001268c364d559447ba09b509181b2808622420eec/tiktoken-0.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3", size = 921067, upload-time = "2025-10-06T20:22:26.753Z" },
+ { url = "https://files.pythonhosted.org/packages/ac/a4/72eed53e8976a099539cdd5eb36f241987212c29629d0a52c305173e0a68/tiktoken-0.12.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365", size = 1050473, upload-time = "2025-10-06T20:22:27.775Z" },
+ { url = "https://files.pythonhosted.org/packages/e6/d7/0110b8f54c008466b19672c615f2168896b83706a6611ba6e47313dbc6e9/tiktoken-0.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e", size = 993855, upload-time = "2025-10-06T20:22:28.799Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/77/4f268c41a3957c418b084dd576ea2fad2e95da0d8e1ab705372892c2ca22/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63", size = 1129022, upload-time = "2025-10-06T20:22:29.981Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/2b/fc46c90fe5028bd094cd6ee25a7db321cb91d45dc87531e2bdbb26b4867a/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0", size = 1150736, upload-time = "2025-10-06T20:22:30.996Z" },
+ { url = "https://files.pythonhosted.org/packages/28/c0/3c7a39ff68022ddfd7d93f3337ad90389a342f761c4d71de99a3ccc57857/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a", size = 1194908, upload-time = "2025-10-06T20:22:32.073Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/0d/c1ad6f4016a3968c048545f5d9b8ffebf577774b2ede3e2e352553b685fe/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0", size = 1253706, upload-time = "2025-10-06T20:22:33.385Z" },
+ { url = "https://files.pythonhosted.org/packages/af/df/c7891ef9d2712ad774777271d39fdef63941ffba0a9d59b7ad1fd2765e57/tiktoken-0.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71", size = 920667, upload-time = "2025-10-06T20:22:34.444Z" },
+]
+
[[package]]
name = "tomli"
version = "2.0.1"
@@ -1402,6 +2211,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", size = 12757, upload-time = "2022-02-08T10:54:02.017Z" },
]
+[[package]]
+name = "tqdm"
+version = "4.67.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" },
+]
+
[[package]]
name = "typer"
version = "0.12.5"
@@ -1417,6 +2238,29 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a8/2b/886d13e742e514f704c33c4caa7df0f3b89e5a25ef8db02aa9ca3d9535d5/typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b", size = 47288, upload-time = "2024-08-24T21:17:55.451Z" },
]
+[[package]]
+name = "types-awscrt"
+version = "0.27.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/56/ce/5d84526a39f44c420ce61b16654193f8437d74b54f21597ea2ac65d89954/types_awscrt-0.27.6.tar.gz", hash = "sha256:9d3f1865a93b8b2c32f137514ac88cb048b5bc438739945ba19d972698995bfb", size = 16937, upload-time = "2025-08-13T01:54:54.659Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ac/af/e3d20e3e81d235b3964846adf46a334645a8a9b25a0d3d472743eb079552/types_awscrt-0.27.6-py3-none-any.whl", hash = "sha256:18aced46da00a57f02eb97637a32e5894dc5aa3dc6a905ba3e5ed85b9f3c526b", size = 39626, upload-time = "2025-08-13T01:54:53.454Z" },
+]
+
+[[package]]
+name = "types-boto3"
+version = "1.40.47"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "botocore-stubs" },
+ { name = "types-s3transfer" },
+ { name = "typing-extensions", marker = "python_full_version < '3.12'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/76/54/2fb58e5eaf9e818b4eafa9e453dfc8916fc79ac469168d44170f1ef01c9f/types_boto3-1.40.47.tar.gz", hash = "sha256:28c1d76658845c3a9eac277ba8093815ff1809a086abcf28da0afe3aa2dd1247", size = 101195, upload-time = "2025-10-07T19:42:19.897Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/39/2a/b14a9548891798d4093d7d108cc463d1acf999a04cea81be349c54732636/types_boto3-1.40.47-py3-none-any.whl", hash = "sha256:2c2123ec5b5865aea73859118338b43214674fc57973d4c5ad05cf3d82c74c8d", size = 69590, upload-time = "2025-10-07T19:42:15.818Z" },
+]
+
[[package]]
name = "types-passlib"
version = "1.7.7.20240819"
@@ -1426,6 +2270,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f1/4b/606ac25e89908e4577cd1aa19ffbebe55a6720cff69303db68701f3cc388/types_passlib-1.7.7.20240819-py3-none-any.whl", hash = "sha256:c4d299083497b66e12258c7b77c08952574213fdf7009da3135d8181a6a25f23", size = 33240, upload-time = "2024-08-19T02:32:51.874Z" },
]
+[[package]]
+name = "types-s3transfer"
+version = "0.13.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a5/c5/23946fac96c9dd5815ec97afd1c8ad6d22efa76c04a79a4823f2f67692a5/types_s3transfer-0.13.1.tar.gz", hash = "sha256:ce488d79fdd7d3b9d39071939121eca814ec65de3aa36bdce1f9189c0a61cc80", size = 14181, upload-time = "2025-08-31T16:57:06.93Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8e/dc/b3f9b5c93eed6ffe768f4972661250584d5e4f248b548029026964373bcd/types_s3transfer-0.13.1-py3-none-any.whl", hash = "sha256:4ff730e464a3fd3785b5541f0f555c1bd02ad408cf82b6b7a95429f6b0d26b4a", size = 19617, upload-time = "2025-08-31T16:57:05.73Z" },
+]
+
[[package]]
name = "typing-extensions"
version = "4.15.0"
@@ -1456,6 +2309,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/65/58/f9c9e6be752e9fcb8b6a0ee9fb87e6e7a1f6bcab2cdc73f02bb7ba91ada0/tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252", size = 345370, upload-time = "2024-02-11T23:22:38.223Z" },
]
+[[package]]
+name = "tzlocal"
+version = "5.3.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "tzdata", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/8b/2e/c14812d3d4d9cd1773c6be938f89e5735a1f11a9f184ac3639b93cef35d5/tzlocal-5.3.1.tar.gz", hash = "sha256:cceffc7edecefea1f595541dbd6e990cb1ea3d19bf01b2809f362a03dd7921fd", size = 30761, upload-time = "2025-03-05T21:17:41.549Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl", hash = "sha256:eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d", size = 18026, upload-time = "2025-03-05T21:17:39.857Z" },
+]
+
[[package]]
name = "urllib3"
version = "2.2.3"
@@ -1653,3 +2518,111 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/63/0b/a1b528d36934f833e20f6da1032b995bf093d55cb416b9f2266f229fb237/websockets-13.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e2620453c075abeb0daa949a292e19f56de518988e079c36478bacf9546ced23", size = 159192, upload-time = "2024-09-21T17:34:02.656Z" },
{ url = "https://files.pythonhosted.org/packages/56/27/96a5cd2626d11c8280656c6c71d8ab50fe006490ef9971ccd154e0c42cd2/websockets-13.1-py3-none-any.whl", hash = "sha256:a9a396a6ad26130cdae92ae10c36af09d9bfe6cafe69670fd3b6da9b07b4044f", size = 152134, upload-time = "2024-09-21T17:34:19.904Z" },
]
+
+[[package]]
+name = "xlrd"
+version = "1.2.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/aa/05/ec9d4fcbbb74bbf4da9f622b3b61aec541e4eccf31d3c60c5422ec027ce2/xlrd-1.2.0.tar.gz", hash = "sha256:546eb36cee8db40c3eaa46c351e67ffee6eeb5fa2650b71bc4c758a29a1b29b2", size = 554079, upload-time = "2018-12-15T17:47:48.133Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b0/16/63576a1a001752e34bf8ea62e367997530dc553b689356b9879339cf45a4/xlrd-1.2.0-py2.py3-none-any.whl", hash = "sha256:e551fb498759fa3a5384a94ccd4c3c02eb7c00ea424426e212ac0c57be9dfbde", size = 103251, upload-time = "2018-12-15T17:47:45.792Z" },
+]
+
+[[package]]
+name = "xlsxwriter"
+version = "3.2.9"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940, upload-time = "2025-09-16T00:16:21.63Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315, upload-time = "2025-09-16T00:16:20.108Z" },
+]
+
+[[package]]
+name = "zstandard"
+version = "0.25.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513, upload-time = "2025-09-14T22:15:54.002Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/56/7a/28efd1d371f1acd037ac64ed1c5e2b41514a6cc937dd6ab6a13ab9f0702f/zstandard-0.25.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e59fdc271772f6686e01e1b3b74537259800f57e24280be3f29c8a0deb1904dd", size = 795256, upload-time = "2025-09-14T22:15:56.415Z" },
+ { url = "https://files.pythonhosted.org/packages/96/34/ef34ef77f1ee38fc8e4f9775217a613b452916e633c4f1d98f31db52c4a5/zstandard-0.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4d441506e9b372386a5271c64125f72d5df6d2a8e8a2a45a0ae09b03cb781ef7", size = 640565, upload-time = "2025-09-14T22:15:58.177Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/1b/4fdb2c12eb58f31f28c4d28e8dc36611dd7205df8452e63f52fb6261d13e/zstandard-0.25.0-cp310-cp310-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:ab85470ab54c2cb96e176f40342d9ed41e58ca5733be6a893b730e7af9c40550", size = 5345306, upload-time = "2025-09-14T22:16:00.165Z" },
+ { url = "https://files.pythonhosted.org/packages/73/28/a44bdece01bca027b079f0e00be3b6bd89a4df180071da59a3dd7381665b/zstandard-0.25.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e05ab82ea7753354bb054b92e2f288afb750e6b439ff6ca78af52939ebbc476d", size = 5055561, upload-time = "2025-09-14T22:16:02.22Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/74/68341185a4f32b274e0fc3410d5ad0750497e1acc20bd0f5b5f64ce17785/zstandard-0.25.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:78228d8a6a1c177a96b94f7e2e8d012c55f9c760761980da16ae7546a15a8e9b", size = 5402214, upload-time = "2025-09-14T22:16:04.109Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/67/f92e64e748fd6aaffe01e2b75a083c0c4fd27abe1c8747fee4555fcee7dd/zstandard-0.25.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b6bd67528ee8b5c5f10255735abc21aa106931f0dbaf297c7be0c886353c3d0", size = 5449703, upload-time = "2025-09-14T22:16:06.312Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/e5/6d36f92a197c3c17729a2125e29c169f460538a7d939a27eaaa6dcfcba8e/zstandard-0.25.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4b6d83057e713ff235a12e73916b6d356e3084fd3d14ced499d84240f3eecee0", size = 5556583, upload-time = "2025-09-14T22:16:08.457Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/83/41939e60d8d7ebfe2b747be022d0806953799140a702b90ffe214d557638/zstandard-0.25.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9174f4ed06f790a6869b41cba05b43eeb9a35f8993c4422ab853b705e8112bbd", size = 5045332, upload-time = "2025-09-14T22:16:10.444Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/87/d3ee185e3d1aa0133399893697ae91f221fda79deb61adbe998a7235c43f/zstandard-0.25.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:25f8f3cd45087d089aef5ba3848cd9efe3ad41163d3400862fb42f81a3a46701", size = 5572283, upload-time = "2025-09-14T22:16:12.128Z" },
+ { url = "https://files.pythonhosted.org/packages/0a/1d/58635ae6104df96671076ac7d4ae7816838ce7debd94aecf83e30b7121b0/zstandard-0.25.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3756b3e9da9b83da1796f8809dd57cb024f838b9eeafde28f3cb472012797ac1", size = 4959754, upload-time = "2025-09-14T22:16:14.225Z" },
+ { url = "https://files.pythonhosted.org/packages/75/d6/57e9cb0a9983e9a229dd8fd2e6e96593ef2aa82a3907188436f22b111ccd/zstandard-0.25.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:81dad8d145d8fd981b2962b686b2241d3a1ea07733e76a2f15435dfb7fb60150", size = 5266477, upload-time = "2025-09-14T22:16:16.343Z" },
+ { url = "https://files.pythonhosted.org/packages/d1/a9/ee891e5edf33a6ebce0a028726f0bbd8567effe20fe3d5808c42323e8542/zstandard-0.25.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a5a419712cf88862a45a23def0ae063686db3d324cec7edbe40509d1a79a0aab", size = 5440914, upload-time = "2025-09-14T22:16:18.453Z" },
+ { url = "https://files.pythonhosted.org/packages/58/08/a8522c28c08031a9521f27abc6f78dbdee7312a7463dd2cfc658b813323b/zstandard-0.25.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e7360eae90809efd19b886e59a09dad07da4ca9ba096752e61a2e03c8aca188e", size = 5819847, upload-time = "2025-09-14T22:16:20.559Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/11/4c91411805c3f7b6f31c60e78ce347ca48f6f16d552fc659af6ec3b73202/zstandard-0.25.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:75ffc32a569fb049499e63ce68c743155477610532da1eb38e7f24bf7cd29e74", size = 5363131, upload-time = "2025-09-14T22:16:22.206Z" },
+ { url = "https://files.pythonhosted.org/packages/ef/d6/8c4bd38a3b24c4c7676a7a3d8de85d6ee7a983602a734b9f9cdefb04a5d6/zstandard-0.25.0-cp310-cp310-win32.whl", hash = "sha256:106281ae350e494f4ac8a80470e66d1fe27e497052c8d9c3b95dc4cf1ade81aa", size = 436469, upload-time = "2025-09-14T22:16:25.002Z" },
+ { url = "https://files.pythonhosted.org/packages/93/90/96d50ad417a8ace5f841b3228e93d1bb13e6ad356737f42e2dde30d8bd68/zstandard-0.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea9d54cc3d8064260114a0bbf3479fc4a98b21dffc89b3459edd506b69262f6e", size = 506100, upload-time = "2025-09-14T22:16:23.569Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/83/c3ca27c363d104980f1c9cee1101cc8ba724ac8c28a033ede6aab89585b1/zstandard-0.25.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c", size = 795254, upload-time = "2025-09-14T22:16:26.137Z" },
+ { url = "https://files.pythonhosted.org/packages/ac/4d/e66465c5411a7cf4866aeadc7d108081d8ceba9bc7abe6b14aa21c671ec3/zstandard-0.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3f79487c687b1fc69f19e487cd949bf3aae653d181dfb5fde3bf6d18894706f", size = 640559, upload-time = "2025-09-14T22:16:27.973Z" },
+ { url = "https://files.pythonhosted.org/packages/12/56/354fe655905f290d3b147b33fe946b0f27e791e4b50a5f004c802cb3eb7b/zstandard-0.25.0-cp311-cp311-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:0bbc9a0c65ce0eea3c34a691e3c4b6889f5f3909ba4822ab385fab9057099431", size = 5348020, upload-time = "2025-09-14T22:16:29.523Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/13/2b7ed68bd85e69a2069bcc72141d378f22cae5a0f3b353a2c8f50ef30c1b/zstandard-0.25.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:01582723b3ccd6939ab7b3a78622c573799d5d8737b534b86d0e06ac18dbde4a", size = 5058126, upload-time = "2025-09-14T22:16:31.811Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/dd/fdaf0674f4b10d92cb120ccff58bbb6626bf8368f00ebfd2a41ba4a0dc99/zstandard-0.25.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5f1ad7bf88535edcf30038f6919abe087f606f62c00a87d7e33e7fc57cb69fcc", size = 5405390, upload-time = "2025-09-14T22:16:33.486Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/67/354d1555575bc2490435f90d67ca4dd65238ff2f119f30f72d5cde09c2ad/zstandard-0.25.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:06acb75eebeedb77b69048031282737717a63e71e4ae3f77cc0c3b9508320df6", size = 5452914, upload-time = "2025-09-14T22:16:35.277Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/1f/e9cfd801a3f9190bf3e759c422bbfd2247db9d7f3d54a56ecde70137791a/zstandard-0.25.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9300d02ea7c6506f00e627e287e0492a5eb0371ec1670ae852fefffa6164b072", size = 5559635, upload-time = "2025-09-14T22:16:37.141Z" },
+ { url = "https://files.pythonhosted.org/packages/21/88/5ba550f797ca953a52d708c8e4f380959e7e3280af029e38fbf47b55916e/zstandard-0.25.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfd06b1c5584b657a2892a6014c2f4c20e0db0208c159148fa78c65f7e0b0277", size = 5048277, upload-time = "2025-09-14T22:16:38.807Z" },
+ { url = "https://files.pythonhosted.org/packages/46/c0/ca3e533b4fa03112facbe7fbe7779cb1ebec215688e5df576fe5429172e0/zstandard-0.25.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f373da2c1757bb7f1acaf09369cdc1d51d84131e50d5fa9863982fd626466313", size = 5574377, upload-time = "2025-09-14T22:16:40.523Z" },
+ { url = "https://files.pythonhosted.org/packages/12/9b/3fb626390113f272abd0799fd677ea33d5fc3ec185e62e6be534493c4b60/zstandard-0.25.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6c0e5a65158a7946e7a7affa6418878ef97ab66636f13353b8502d7ea03c8097", size = 4961493, upload-time = "2025-09-14T22:16:43.3Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/d3/23094a6b6a4b1343b27ae68249daa17ae0651fcfec9ed4de09d14b940285/zstandard-0.25.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c8e167d5adf59476fa3e37bee730890e389410c354771a62e3c076c86f9f7778", size = 5269018, upload-time = "2025-09-14T22:16:45.292Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/a7/bb5a0c1c0f3f4b5e9d5b55198e39de91e04ba7c205cc46fcb0f95f0383c1/zstandard-0.25.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:98750a309eb2f020da61e727de7d7ba3c57c97cf6213f6f6277bb7fb42a8e065", size = 5443672, upload-time = "2025-09-14T22:16:47.076Z" },
+ { url = "https://files.pythonhosted.org/packages/27/22/503347aa08d073993f25109c36c8d9f029c7d5949198050962cb568dfa5e/zstandard-0.25.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:22a086cff1b6ceca18a8dd6096ec631e430e93a8e70a9ca5efa7561a00f826fa", size = 5822753, upload-time = "2025-09-14T22:16:49.316Z" },
+ { url = "https://files.pythonhosted.org/packages/e2/be/94267dc6ee64f0f8ba2b2ae7c7a2df934a816baaa7291db9e1aa77394c3c/zstandard-0.25.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:72d35d7aa0bba323965da807a462b0966c91608ef3a48ba761678cb20ce5d8b7", size = 5366047, upload-time = "2025-09-14T22:16:51.328Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/a3/732893eab0a3a7aecff8b99052fecf9f605cf0fb5fb6d0290e36beee47a4/zstandard-0.25.0-cp311-cp311-win32.whl", hash = "sha256:f5aeea11ded7320a84dcdd62a3d95b5186834224a9e55b92ccae35d21a8b63d4", size = 436484, upload-time = "2025-09-14T22:16:55.005Z" },
+ { url = "https://files.pythonhosted.org/packages/43/a3/c6155f5c1cce691cb80dfd38627046e50af3ee9ddc5d0b45b9b063bfb8c9/zstandard-0.25.0-cp311-cp311-win_amd64.whl", hash = "sha256:daab68faadb847063d0c56f361a289c4f268706b598afbf9ad113cbe5c38b6b2", size = 506183, upload-time = "2025-09-14T22:16:52.753Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/3e/8945ab86a0820cc0e0cdbf38086a92868a9172020fdab8a03ac19662b0e5/zstandard-0.25.0-cp311-cp311-win_arm64.whl", hash = "sha256:22a06c5df3751bb7dc67406f5374734ccee8ed37fc5981bf1ad7041831fa1137", size = 462533, upload-time = "2025-09-14T22:16:53.878Z" },
+ { url = "https://files.pythonhosted.org/packages/82/fc/f26eb6ef91ae723a03e16eddb198abcfce2bc5a42e224d44cc8b6765e57e/zstandard-0.25.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7b3c3a3ab9daa3eed242d6ecceead93aebbb8f5f84318d82cee643e019c4b73b", size = 795738, upload-time = "2025-09-14T22:16:56.237Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/1c/d920d64b22f8dd028a8b90e2d756e431a5d86194caa78e3819c7bf53b4b3/zstandard-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:913cbd31a400febff93b564a23e17c3ed2d56c064006f54efec210d586171c00", size = 640436, upload-time = "2025-09-14T22:16:57.774Z" },
+ { url = "https://files.pythonhosted.org/packages/53/6c/288c3f0bd9fcfe9ca41e2c2fbfd17b2097f6af57b62a81161941f09afa76/zstandard-0.25.0-cp312-cp312-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64", size = 5343019, upload-time = "2025-09-14T22:16:59.302Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/15/efef5a2f204a64bdb5571e6161d49f7ef0fffdbca953a615efbec045f60f/zstandard-0.25.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dffecc361d079bb48d7caef5d673c88c8988d3d33fb74ab95b7ee6da42652ea", size = 5063012, upload-time = "2025-09-14T22:17:01.156Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/37/a6ce629ffdb43959e92e87ebdaeebb5ac81c944b6a75c9c47e300f85abdf/zstandard-0.25.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7149623bba7fdf7e7f24312953bcf73cae103db8cae49f8154dd1eadc8a29ecb", size = 5394148, upload-time = "2025-09-14T22:17:03.091Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/79/2bf870b3abeb5c070fe2d670a5a8d1057a8270f125ef7676d29ea900f496/zstandard-0.25.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6a573a35693e03cf1d67799fd01b50ff578515a8aeadd4595d2a7fa9f3ec002a", size = 5451652, upload-time = "2025-09-14T22:17:04.979Z" },
+ { url = "https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902", size = 5546993, upload-time = "2025-09-14T22:17:06.781Z" },
+ { url = "https://files.pythonhosted.org/packages/85/c7/3483ad9ff0662623f3648479b0380d2de5510abf00990468c286c6b04017/zstandard-0.25.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:10ef2a79ab8e2974e2075fb984e5b9806c64134810fac21576f0668e7ea19f8f", size = 5046806, upload-time = "2025-09-14T22:17:08.415Z" },
+ { url = "https://files.pythonhosted.org/packages/08/b3/206883dd25b8d1591a1caa44b54c2aad84badccf2f1de9e2d60a446f9a25/zstandard-0.25.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aaf21ba8fb76d102b696781bddaa0954b782536446083ae3fdaa6f16b25a1c4b", size = 5576659, upload-time = "2025-09-14T22:17:10.164Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/31/76c0779101453e6c117b0ff22565865c54f48f8bd807df2b00c2c404b8e0/zstandard-0.25.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1869da9571d5e94a85a5e8d57e4e8807b175c9e4a6294e3b66fa4efb074d90f6", size = 4953933, upload-time = "2025-09-14T22:17:11.857Z" },
+ { url = "https://files.pythonhosted.org/packages/18/e1/97680c664a1bf9a247a280a053d98e251424af51f1b196c6d52f117c9720/zstandard-0.25.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:809c5bcb2c67cd0ed81e9229d227d4ca28f82d0f778fc5fea624a9def3963f91", size = 5268008, upload-time = "2025-09-14T22:17:13.627Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/73/316e4010de585ac798e154e88fd81bb16afc5c5cb1a72eeb16dd37e8024a/zstandard-0.25.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f27662e4f7dbf9f9c12391cb37b4c4c3cb90ffbd3b1fb9284dadbbb8935fa708", size = 5433517, upload-time = "2025-09-14T22:17:16.103Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/60/dd0f8cfa8129c5a0ce3ea6b7f70be5b33d2618013a161e1ff26c2b39787c/zstandard-0.25.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:99c0c846e6e61718715a3c9437ccc625de26593fea60189567f0118dc9db7512", size = 5814292, upload-time = "2025-09-14T22:17:17.827Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/5f/75aafd4b9d11b5407b641b8e41a57864097663699f23e9ad4dbb91dc6bfe/zstandard-0.25.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:474d2596a2dbc241a556e965fb76002c1ce655445e4e3bf38e5477d413165ffa", size = 5360237, upload-time = "2025-09-14T22:17:19.954Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/8d/0309daffea4fcac7981021dbf21cdb2e3427a9e76bafbcdbdf5392ff99a4/zstandard-0.25.0-cp312-cp312-win32.whl", hash = "sha256:23ebc8f17a03133b4426bcc04aabd68f8236eb78c3760f12783385171b0fd8bd", size = 436922, upload-time = "2025-09-14T22:17:24.398Z" },
+ { url = "https://files.pythonhosted.org/packages/79/3b/fa54d9015f945330510cb5d0b0501e8253c127cca7ebe8ba46a965df18c5/zstandard-0.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffef5a74088f1e09947aecf91011136665152e0b4b359c42be3373897fb39b01", size = 506276, upload-time = "2025-09-14T22:17:21.429Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/6b/8b51697e5319b1f9ac71087b0af9a40d8a6288ff8025c36486e0c12abcc4/zstandard-0.25.0-cp312-cp312-win_arm64.whl", hash = "sha256:181eb40e0b6a29b3cd2849f825e0fa34397f649170673d385f3598ae17cca2e9", size = 462679, upload-time = "2025-09-14T22:17:23.147Z" },
+ { url = "https://files.pythonhosted.org/packages/35/0b/8df9c4ad06af91d39e94fa96cc010a24ac4ef1378d3efab9223cc8593d40/zstandard-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec996f12524f88e151c339688c3897194821d7f03081ab35d31d1e12ec975e94", size = 795735, upload-time = "2025-09-14T22:17:26.042Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/06/9ae96a3e5dcfd119377ba33d4c42a7d89da1efabd5cb3e366b156c45ff4d/zstandard-0.25.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a1a4ae2dec3993a32247995bdfe367fc3266da832d82f8438c8570f989753de1", size = 640440, upload-time = "2025-09-14T22:17:27.366Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/14/933d27204c2bd404229c69f445862454dcc101cd69ef8c6068f15aaec12c/zstandard-0.25.0-cp313-cp313-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:e96594a5537722fdfb79951672a2a63aec5ebfb823e7560586f7484819f2a08f", size = 5343070, upload-time = "2025-09-14T22:17:28.896Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/db/ddb11011826ed7db9d0e485d13df79b58586bfdec56e5c84a928a9a78c1c/zstandard-0.25.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bfc4e20784722098822e3eee42b8e576b379ed72cca4a7cb856ae733e62192ea", size = 5063001, upload-time = "2025-09-14T22:17:31.044Z" },
+ { url = "https://files.pythonhosted.org/packages/db/00/87466ea3f99599d02a5238498b87bf84a6348290c19571051839ca943777/zstandard-0.25.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:457ed498fc58cdc12fc48f7950e02740d4f7ae9493dd4ab2168a47c93c31298e", size = 5394120, upload-time = "2025-09-14T22:17:32.711Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/95/fc5531d9c618a679a20ff6c29e2b3ef1d1f4ad66c5e161ae6ff847d102a9/zstandard-0.25.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:fd7a5004eb1980d3cefe26b2685bcb0b17989901a70a1040d1ac86f1d898c551", size = 5451230, upload-time = "2025-09-14T22:17:34.41Z" },
+ { url = "https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e735494da3db08694d26480f1493ad2cf86e99bdd53e8e9771b2752a5c0246a", size = 5547173, upload-time = "2025-09-14T22:17:36.084Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/d5/ba05ed95c6b8ec30bd468dfeab20589f2cf709b5c940483e31d991f2ca58/zstandard-0.25.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3a39c94ad7866160a4a46d772e43311a743c316942037671beb264e395bdd611", size = 5046736, upload-time = "2025-09-14T22:17:37.891Z" },
+ { url = "https://files.pythonhosted.org/packages/50/d5/870aa06b3a76c73eced65c044b92286a3c4e00554005ff51962deef28e28/zstandard-0.25.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:172de1f06947577d3a3005416977cce6168f2261284c02080e7ad0185faeced3", size = 5576368, upload-time = "2025-09-14T22:17:40.206Z" },
+ { url = "https://files.pythonhosted.org/packages/5d/35/398dc2ffc89d304d59bc12f0fdd931b4ce455bddf7038a0a67733a25f550/zstandard-0.25.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3c83b0188c852a47cd13ef3bf9209fb0a77fa5374958b8c53aaa699398c6bd7b", size = 4954022, upload-time = "2025-09-14T22:17:41.879Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/5c/36ba1e5507d56d2213202ec2b05e8541734af5f2ce378c5d1ceaf4d88dc4/zstandard-0.25.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1673b7199bbe763365b81a4f3252b8e80f44c9e323fc42940dc8843bfeaf9851", size = 5267889, upload-time = "2025-09-14T22:17:43.577Z" },
+ { url = "https://files.pythonhosted.org/packages/70/e8/2ec6b6fb7358b2ec0113ae202647ca7c0e9d15b61c005ae5225ad0995df5/zstandard-0.25.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0be7622c37c183406f3dbf0cba104118eb16a4ea7359eeb5752f0794882fc250", size = 5433952, upload-time = "2025-09-14T22:17:45.271Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/01/b5f4d4dbc59ef193e870495c6f1275f5b2928e01ff5a81fecb22a06e22fb/zstandard-0.25.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:5f5e4c2a23ca271c218ac025bd7d635597048b366d6f31f420aaeb715239fc98", size = 5814054, upload-time = "2025-09-14T22:17:47.08Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/e5/fbd822d5c6f427cf158316d012c5a12f233473c2f9c5fe5ab1ae5d21f3d8/zstandard-0.25.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f187a0bb61b35119d1926aee039524d1f93aaf38a9916b8c4b78ac8514a0aaf", size = 5360113, upload-time = "2025-09-14T22:17:48.893Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/e0/69a553d2047f9a2c7347caa225bb3a63b6d7704ad74610cb7823baa08ed7/zstandard-0.25.0-cp313-cp313-win32.whl", hash = "sha256:7030defa83eef3e51ff26f0b7bfb229f0204b66fe18e04359ce3474ac33cbc09", size = 436936, upload-time = "2025-09-14T22:17:52.658Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/82/b9c06c870f3bd8767c201f1edbdf9e8dc34be5b0fbc5682c4f80fe948475/zstandard-0.25.0-cp313-cp313-win_amd64.whl", hash = "sha256:1f830a0dac88719af0ae43b8b2d6aef487d437036468ef3c2ea59c51f9d55fd5", size = 506232, upload-time = "2025-09-14T22:17:50.402Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/57/60c3c01243bb81d381c9916e2a6d9e149ab8627c0c7d7abb2d73384b3c0c/zstandard-0.25.0-cp313-cp313-win_arm64.whl", hash = "sha256:85304a43f4d513f5464ceb938aa02c1e78c2943b29f44a750b48b25ac999a049", size = 462671, upload-time = "2025-09-14T22:17:51.533Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/5c/f8923b595b55fe49e30612987ad8bf053aef555c14f05bb659dd5dbe3e8a/zstandard-0.25.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e29f0cf06974c899b2c188ef7f783607dbef36da4c242eb6c82dcd8b512855e3", size = 795887, upload-time = "2025-09-14T22:17:54.198Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/09/d0a2a14fc3439c5f874042dca72a79c70a532090b7ba0003be73fee37ae2/zstandard-0.25.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:05df5136bc5a011f33cd25bc9f506e7426c0c9b3f9954f056831ce68f3b6689f", size = 640658, upload-time = "2025-09-14T22:17:55.423Z" },
+ { url = "https://files.pythonhosted.org/packages/5d/7c/8b6b71b1ddd517f68ffb55e10834388d4f793c49c6b83effaaa05785b0b4/zstandard-0.25.0-cp314-cp314-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:f604efd28f239cc21b3adb53eb061e2a205dc164be408e553b41ba2ffe0ca15c", size = 5379849, upload-time = "2025-09-14T22:17:57.372Z" },
+ { url = "https://files.pythonhosted.org/packages/a4/86/a48e56320d0a17189ab7a42645387334fba2200e904ee47fc5a26c1fd8ca/zstandard-0.25.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:223415140608d0f0da010499eaa8ccdb9af210a543fac54bce15babbcfc78439", size = 5058095, upload-time = "2025-09-14T22:17:59.498Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/ad/eb659984ee2c0a779f9d06dbfe45e2dc39d99ff40a319895df2d3d9a48e5/zstandard-0.25.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e54296a283f3ab5a26fc9b8b5d4978ea0532f37b231644f367aa588930aa043", size = 5551751, upload-time = "2025-09-14T22:18:01.618Z" },
+ { url = "https://files.pythonhosted.org/packages/61/b3/b637faea43677eb7bd42ab204dfb7053bd5c4582bfe6b1baefa80ac0c47b/zstandard-0.25.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ca54090275939dc8ec5dea2d2afb400e0f83444b2fc24e07df7fdef677110859", size = 6364818, upload-time = "2025-09-14T22:18:03.769Z" },
+ { url = "https://files.pythonhosted.org/packages/31/dc/cc50210e11e465c975462439a492516a73300ab8caa8f5e0902544fd748b/zstandard-0.25.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e09bb6252b6476d8d56100e8147b803befa9a12cea144bbe629dd508800d1ad0", size = 5560402, upload-time = "2025-09-14T22:18:05.954Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/ae/56523ae9c142f0c08efd5e868a6da613ae76614eca1305259c3bf6a0ed43/zstandard-0.25.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a9ec8c642d1ec73287ae3e726792dd86c96f5681eb8df274a757bf62b750eae7", size = 4955108, upload-time = "2025-09-14T22:18:07.68Z" },
+ { url = "https://files.pythonhosted.org/packages/98/cf/c899f2d6df0840d5e384cf4c4121458c72802e8bda19691f3b16619f51e9/zstandard-0.25.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a4089a10e598eae6393756b036e0f419e8c1d60f44a831520f9af41c14216cf2", size = 5269248, upload-time = "2025-09-14T22:18:09.753Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/c0/59e912a531d91e1c192d3085fc0f6fb2852753c301a812d856d857ea03c6/zstandard-0.25.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f67e8f1a324a900e75b5e28ffb152bcac9fbed1cc7b43f99cd90f395c4375344", size = 5430330, upload-time = "2025-09-14T22:18:11.966Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/1d/7e31db1240de2df22a58e2ea9a93fc6e38cc29353e660c0272b6735d6669/zstandard-0.25.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:9654dbc012d8b06fc3d19cc825af3f7bf8ae242226df5f83936cb39f5fdc846c", size = 5811123, upload-time = "2025-09-14T22:18:13.907Z" },
+ { url = "https://files.pythonhosted.org/packages/f6/49/fac46df5ad353d50535e118d6983069df68ca5908d4d65b8c466150a4ff1/zstandard-0.25.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4203ce3b31aec23012d3a4cf4a2ed64d12fea5269c49aed5e4c3611b938e4088", size = 5359591, upload-time = "2025-09-14T22:18:16.465Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/38/f249a2050ad1eea0bb364046153942e34abba95dd5520af199aed86fbb49/zstandard-0.25.0-cp314-cp314-win32.whl", hash = "sha256:da469dc041701583e34de852d8634703550348d5822e66a0c827d39b05365b12", size = 444513, upload-time = "2025-09-14T22:18:20.61Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/43/241f9615bcf8ba8903b3f0432da069e857fc4fd1783bd26183db53c4804b/zstandard-0.25.0-cp314-cp314-win_amd64.whl", hash = "sha256:c19bcdd826e95671065f8692b5a4aa95c52dc7a02a4c5a0cac46deb879a017a2", size = 516118, upload-time = "2025-09-14T22:18:17.849Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/ef/da163ce2450ed4febf6467d77ccb4cd52c4c30ab45624bad26ca0a27260c/zstandard-0.25.0-cp314-cp314-win_arm64.whl", hash = "sha256:d7541afd73985c630bafcd6338d2518ae96060075f9463d7dc14cfb33514383d", size = 476940, upload-time = "2025-09-14T22:18:19.088Z" },
+]
diff --git a/docker-compose.override.yml b/docker-compose.override.yml
index 0751abe901..de65023537 100644
--- a/docker-compose.override.yml
+++ b/docker-compose.override.yml
@@ -95,7 +95,7 @@ services:
frontend:
restart: "no"
ports:
- - "5173:80"
+ - "5173:3000"
build:
context: ./frontend
args:
diff --git a/docker-compose.yml b/docker-compose.yml
index b1aa17ed43..448727dbc4 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -73,6 +73,11 @@ services:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER?Variable not set}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD?Variable not set}
+ - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID?Variable not set}
+ - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY?Variable not set}
+ - AWS_REGION=${AWS_REGION?Variable not set}
+ - S3_BUCKET=${S3_BUCKET?Variable not set}
+ # - OPENAI_API_KEY=${OPENAI_API_KEY?Variable not set}
- SENTRY_DSN=${SENTRY_DSN}
backend:
diff --git a/frontend/.dockerignore b/frontend/.dockerignore
deleted file mode 100644
index f06235c460..0000000000
--- a/frontend/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-node_modules
-dist
diff --git a/frontend/.env b/frontend/.env
deleted file mode 100644
index 27fcbfe8c8..0000000000
--- a/frontend/.env
+++ /dev/null
@@ -1,2 +0,0 @@
-VITE_API_URL=http://localhost:8000
-MAILCATCHER_HOST=http://localhost:1080
diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json
new file mode 100644
index 0000000000..bffb357a71
--- /dev/null
+++ b/frontend/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": "next/core-web-vitals"
+}
diff --git a/frontend/.gitignore b/frontend/.gitignore
index 75e25e0ef4..307b5d639a 100644
--- a/frontend/.gitignore
+++ b/frontend/.gitignore
@@ -1,30 +1,37 @@
-# Logs
-logs
-*.log
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/.idea
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-dist-ssr
-*.local
-openapi.json
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
-/test-results/
-/playwright-report/
-/blob-report/
-/playwright/.cache/
-/playwright/.auth/
\ No newline at end of file
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/frontend/.nvmrc b/frontend/.nvmrc
deleted file mode 100644
index a45fd52cc5..0000000000
--- a/frontend/.nvmrc
+++ /dev/null
@@ -1 +0,0 @@
-24
diff --git a/frontend/Dockerfile b/frontend/Dockerfile
index ee30d000f3..f008512c89 100644
--- a/frontend/Dockerfile
+++ b/frontend/Dockerfile
@@ -1,23 +1,14 @@
-# Stage 0, "build-stage", based on Node.js, to build and compile the frontend
-FROM node:24 AS build-stage
+FROM node:24
WORKDIR /app
-COPY package*.json /app/
-
+COPY package*.json ./
RUN npm install
-COPY ./ /app/
-
-ARG VITE_API_URL=${VITE_API_URL}
+COPY . .
+ARG VITE_API_URL
RUN npm run build
-
-# Stage 1, based on Nginx, to have only the compiled app, ready for production with Nginx
-FROM nginx:1
-
-COPY --from=build-stage /app/dist/ /usr/share/nginx/html
-
-COPY ./nginx.conf /etc/nginx/conf.d/default.conf
-COPY ./nginx-backend-not-found.conf /etc/nginx/extra-conf.d/backend-not-found.conf
+EXPOSE 3000
+CMD ["npm", "start"]
diff --git a/frontend/LICENSE b/frontend/LICENSE
new file mode 100644
index 0000000000..cb92d4176b
--- /dev/null
+++ b/frontend/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 TailAdmin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/frontend/README.md b/frontend/README.md
index bbb73cb447..370fa7a990 100644
--- a/frontend/README.md
+++ b/frontend/README.md
@@ -1,154 +1,173 @@
-# FastAPI Project - Frontend
+# TailAdmin Next.js - Free Next.js Tailwind Admin Dashboard Template
-The frontend is built with [Vite](https://vitejs.dev/), [React](https://reactjs.org/), [TypeScript](https://www.typescriptlang.org/), [TanStack Query](https://tanstack.com/query), [TanStack Router](https://tanstack.com/router) and [Chakra UI](https://chakra-ui.com/).
+TailAdmin is a free and open-source admin dashboard template built on **Next.js and Tailwind CSS** providing developers with everything they need to create a feature-rich and data-driven: back-end, dashboard, or admin panel solution for any sort of web project.
-## Frontend development
+
-Before you begin, ensure that you have either the Node Version Manager (nvm) or Fast Node Manager (fnm) installed on your system.
+With TailAdmin Next.js, you get access to all the necessary dashboard UI components, elements, and pages required to build a high-quality and complete dashboard or admin panel. Whether you're building a dashboard or admin panel for a complex web application or a simple website.
-* To install fnm follow the [official fnm guide](https://github.com/Schniz/fnm#installation). If you prefer nvm, you can install it using the [official nvm guide](https://github.com/nvm-sh/nvm#installing-and-updating).
+TailAdmin utilizes the powerful features of **Next.js 15** and common features of Next.js such as server-side rendering (SSR), static site generation (SSG), and seamless API route integration. Combined with the advancements of **React 19** and the robustness of **TypeScript**, TailAdmin is the perfect solution to help get your project up and running quickly.
-* After installing either nvm or fnm, proceed to the `frontend` directory:
+## Overview
-```bash
-cd frontend
-```
-* If the Node.js version specified in the `.nvmrc` file isn't installed on your system, you can install it using the appropriate command:
+TailAdmin provides essential UI components and layouts for building feature-rich, data-driven admin dashboards and control panels. It's built on:
-```bash
-# If using fnm
-fnm install
+- Next.js 15.x
+- React 19
+- TypeScript
+- Tailwind CSS V4
-# If using nvm
-nvm install
-```
+### Quick Links
+- [✨ Visit Website](https://tailadmin.com)
+- [📄 Documentation](https://tailadmin.com/docs)
+- [⬇️ Download](https://tailadmin.com/download)
+- [🖌️ Figma Design File (Community Edition)](https://www.figma.com/community/file/1463141366275764364)
+- [⚡ Get PRO Version](https://tailadmin.com/pricing)
-* Once the installation is complete, switch to the installed version:
+### Demos
+- [Free Version](https://nextjs-free-demo.tailadmin.com)
+- [Pro Version](https://nextjs-demo.tailadmin.com)
-```bash
-# If using fnm
-fnm use
+### Other Versions
+- [HTML Version](https://github.com/TailAdmin/tailadmin-free-tailwind-dashboard-template)
+- [React Version](https://github.com/TailAdmin/free-react-tailwind-admin-dashboard)
+- [Vue.js Version](https://github.com/TailAdmin/vue-tailwind-admin-dashboard)
-# If using nvm
-nvm use
-```
+## Installation
-* Within the `frontend` directory, install the necessary NPM packages:
+### Prerequisites
+To get started with TailAdmin, ensure you have the following prerequisites installed and set up:
-```bash
-npm install
-```
+- Node.js 18.x or later (recommended to use Node.js 20.x or later)
-* And start the live server with the following `npm` script:
+### Cloning the Repository
+Clone the repository using the following command:
```bash
-npm run dev
+git clone https://github.com/TailAdmin/free-nextjs-admin-dashboard.git
```
-* Then open your browser at http://localhost:5173/.
-
-Notice that this live server is not running inside Docker, it's for local development, and that is the recommended workflow. Once you are happy with your frontend, you can build the frontend Docker image and start it, to test it in a production-like environment. But building the image at every change will not be as productive as running the local development server with live reload.
-
-Check the file `package.json` to see other available options.
-
-### Removing the frontend
-
-If you are developing an API-only app and want to remove the frontend, you can do it easily:
-
-* Remove the `./frontend` directory.
-
-* In the `docker-compose.yml` file, remove the whole service / section `frontend`.
-
-* In the `docker-compose.override.yml` file, remove the whole service / section `frontend` and `playwright`.
+> Windows Users: place the repository near the root of your drive if you face issues while cloning.
-Done, you have a frontend-less (api-only) app. 🤓
+1. Install dependencies:
+ ```bash
+ npm install
+ # or
+ yarn install
+ ```
+ > Use `--legacy-peer-deps` flag if you face peer-dependency error during installation.
----
+2. Start the development server:
+ ```bash
+ npm run dev
+ # or
+ yarn dev
+ ```
-If you want, you can also remove the `FRONTEND` environment variables from:
+## Components
-* `.env`
-* `./scripts/*.sh`
+TailAdmin is a pre-designed starting point for building a web-based dashboard using Next.js and Tailwind CSS. The template includes:
-But it would be only to clean them up, leaving them won't really have any effect either way.
+- Sophisticated and accessible sidebar
+- Data visualization components
+- Profile management and custom 404 page
+- Tables and Charts(Line and Bar)
+- Authentication forms and input elements
+- Alerts, Dropdowns, Modals, Buttons and more
+- Can't forget Dark Mode 🕶️
-## Generate Client
+All components are built with React and styled using Tailwind CSS for easy customization.
-### Automatically
+## Feature Comparison
-* Activate the backend virtual environment.
-* From the top level project directory, run the script:
+### Free Version
+- 1 Unique Dashboard
+- 30+ dashboard components
+- 50+ UI elements
+- Basic Figma design files
+- Community support
-```bash
-./scripts/generate-client.sh
-```
+### Pro Version
+- 5 Unique Dashboards: Analytics, Ecommerce, Marketing, CRM, Stocks (more coming soon)
+- 400+ dashboard components and UI elements
+- Complete Figma design file
+- Email support
-* Commit the changes.
+To learn more about pro version features and pricing, visit our [pricing page](https://tailadmin.com/pricing).
-### Manually
+## Changelog
-* Start the Docker Compose stack.
+### Version 2.0.2 - [March 25, 2025]
-* Download the OpenAPI JSON file from `http://localhost/api/v1/openapi.json` and copy it to a new file `openapi.json` at the root of the `frontend` directory.
+- Upgraded to Next v15.2.3 for [CVE-2025-29927](https://nextjs.org/blog/cve-2025-29927) concerns
+- Included overrides vectormap for packages to prevent peer dependency errors during installation.
+- Migrated from react-flatpickr to flatpickr package for React 19 support
-* To generate the frontend client, run:
+### Version 2.0.1 - [February 27, 2025]
-```bash
-npm run generate-client
-```
+#### Update Overview
-* Commit the changes.
+- Upgraded to Tailwind CSS v4 for better performance and efficiency.
+- Updated class usage to match the latest syntax and features.
+- Replaced deprecated class and optimized styles.
-Notice that everytime the backend changes (changing the OpenAPI schema), you should follow these steps again to update the frontend client.
+#### Next Steps
-## Using a Remote API
+- Run npm install or yarn install to update dependencies.
+- Check for any style changes or compatibility issues.
+- Refer to the Tailwind CSS v4 [Migration Guide](https://tailwindcss.com/docs/upgrade-guide) on this release. if needed.
+- This update keeps the project up to date with the latest Tailwind improvements. 🚀
-If you want to use a remote API, you can set the environment variable `VITE_API_URL` to the URL of the remote API. For example, you can set it in the `frontend/.env` file:
+### v2.0.0 (February 2025)
+A major update focused on Next.js 15 implementation and comprehensive redesign.
-```env
-VITE_API_URL=https://api.my-domain.example.com
-```
+#### Major Improvements
+- Complete redesign using Next.js 15 App Router and React Server Components
+- Enhanced user interface with Next.js-optimized components
+- Improved responsiveness and accessibility
+- New features including collapsible sidebar, chat screens, and calendar
+- Redesigned authentication using Next.js App Router and server actions
+- Updated data visualization using ApexCharts for React
-Then, when you run the frontend, it will use that URL as the base URL for the API.
+#### Breaking Changes
-## Code Structure
+- Migrated from Next.js 14 to Next.js 15
+- Chart components now use ApexCharts for React
+- Authentication flow updated to use Server Actions and middleware
-The frontend code is structured as follows:
+[Read more](https://tailadmin.com/docs/update-logs/nextjs) on this release.
-* `frontend/src` - The main frontend code.
-* `frontend/src/assets` - Static assets.
-* `frontend/src/client` - The generated OpenAPI client.
-* `frontend/src/components` - The different components of the frontend.
-* `frontend/src/hooks` - Custom hooks.
-* `frontend/src/routes` - The different routes of the frontend which include the pages.
-* `theme.tsx` - The Chakra UI custom theme.
+#### Breaking Changes
+- Migrated from Next.js 14 to Next.js 15
+- Chart components now use ApexCharts for React
+- Authentication flow updated to use Server Actions and middleware
-## End-to-End Testing with Playwright
+### v1.3.4 (July 01, 2024)
+- Fixed JSvectormap rendering issues
-The frontend includes initial end-to-end tests using Playwright. To run the tests, you need to have the Docker Compose stack running. Start the stack with the following command:
+### v1.3.3 (June 20, 2024)
+- Fixed build error related to Loader component
-```bash
-docker compose up -d --wait backend
-```
+### v1.3.2 (June 19, 2024)
+- Added ClickOutside component for dropdown menus
+- Refactored sidebar components
+- Updated Jsvectormap package
-Then, you can run the tests with the following command:
+### v1.3.1 (Feb 12, 2024)
+- Fixed layout naming consistency
+- Updated styles
-```bash
-npx playwright test
-```
-
-You can also run your tests in UI mode to see the browser and interact with it running:
+### v1.3.0 (Feb 05, 2024)
+- Upgraded to Next.js 14
+- Added Flatpickr integration
+- Improved form elements
+- Enhanced multiselect functionality
+- Added default layout component
-```bash
-npx playwright test --ui
-```
+## License
-To stop and remove the Docker Compose stack and clean the data created in tests, use the following command:
-
-```bash
-docker compose down -v
-```
+TailAdmin Next.js Free Version is released under the MIT License.
-To update the tests, navigate to the tests directory and modify the existing test files or add new ones as needed.
+## Support
-For more information on writing and running Playwright tests, refer to the official [Playwright documentation](https://playwright.dev/docs/intro).
+If you find this project helpful, please consider giving it a star on GitHub. Your support helps us continue developing and maintaining this template.
diff --git a/frontend/banner.png b/frontend/banner.png
new file mode 100644
index 0000000000..1b8c2f3af0
Binary files /dev/null and b/frontend/banner.png differ
diff --git a/frontend/biome.json b/frontend/biome.json
deleted file mode 100644
index f90bd7e90f..0000000000
--- a/frontend/biome.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "$schema": "https://biomejs.dev/schemas/2.2.3/schema.json",
- "assist": { "actions": { "source": { "organizeImports": "on" } } },
- "files": {
- "includes": [
- "**",
- "!**/dist/**/*",
- "!**/node_modules/**/*",
- "!**/src/routeTree.gen.ts",
- "!**/src/client/**/*",
- "!**/src/components/ui/**/*",
- "!**/playwright-report",
- "!**/playwright.config.ts"
- ]
- },
- "linter": {
- "enabled": true,
- "rules": {
- "recommended": true,
- "suspicious": {
- "noExplicitAny": "off",
- "noArrayIndexKey": "off"
- },
- "style": {
- "noNonNullAssertion": "off",
- "noParameterAssign": "error",
- "useSelfClosingElements": "error",
- "noUselessElse": "error"
- }
- }
- },
- "formatter": {
- "indentStyle": "space"
- },
- "javascript": {
- "formatter": {
- "quoteStyle": "double",
- "semicolons": "asNeeded"
- }
- }
-}
diff --git a/frontend/eslint.config.mjs b/frontend/eslint.config.mjs
new file mode 100644
index 0000000000..af7653376e
--- /dev/null
+++ b/frontend/eslint.config.mjs
@@ -0,0 +1,19 @@
+import { dirname } from "path";
+import { fileURLToPath } from "url";
+import { FlatCompat } from "@eslint/eslintrc";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
+
+const compat = new FlatCompat({
+ baseDirectory: __dirname,
+});
+
+const eslintConfig = [
+ {
+ ignores: ["src/client/**"], // ✅ Ignore generated OpenAPI client
+ },
+ ...compat.extends("next/core-web-vitals", "next/typescript"),
+];
+
+export default eslintConfig;
diff --git a/frontend/index.html b/frontend/index.html
deleted file mode 100644
index 57621a268b..0000000000
--- a/frontend/index.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
- Full Stack FastAPI Project
-
-
-
-
-
-
-
diff --git a/frontend/jsvectormap.d.ts b/frontend/jsvectormap.d.ts
new file mode 100644
index 0000000000..740f3c9a84
--- /dev/null
+++ b/frontend/jsvectormap.d.ts
@@ -0,0 +1,4 @@
+declare module 'jsvectormap' {
+ const jsVectorMap: any;
+ export default jsVectorMap;
+}
diff --git a/frontend/next.config.ts b/frontend/next.config.ts
new file mode 100644
index 0000000000..8ea41fb453
--- /dev/null
+++ b/frontend/next.config.ts
@@ -0,0 +1,14 @@
+import type { NextConfig } from "next";
+
+const nextConfig: NextConfig = {
+ /* config options here */
+ webpack(config) {
+ config.module.rules.push({
+ test: /\.svg$/,
+ use: ["@svgr/webpack"],
+ });
+ return config;
+ },
+};
+
+export default nextConfig;
diff --git a/frontend/openapi.json b/frontend/openapi.json
new file mode 100644
index 0000000000..bb0a377b71
--- /dev/null
+++ b/frontend/openapi.json
@@ -0,0 +1 @@
+{"openapi": "3.1.0", "info": {"title": "Full Stack FastAPI Project", "version": "0.1.0"}, "paths": {"/api/v1/documents/": {"post": {"tags": ["documents"], "summary": "Create Document", "operationId": "documents-create_document", "security": [{"OAuth2PasswordBearer": []}], "requestBody": {"required": true, "content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/Body_documents-create_document"}}}}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DocumentPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "get": {"tags": ["documents"], "summary": "Read Documents", "description": "Retrieve documents.", "operationId": "documents-read_documents", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "skip", "in": "query", "required": false, "schema": {"type": "integer", "default": 0, "title": "Skip"}}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer", "default": 100, "title": "Limit"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DocumentsPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/documents/{id}": {"get": {"tags": ["documents"], "summary": "Read Document", "description": "Get document by ID.", "operationId": "documents-read_document", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "Id"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DocumentPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "put": {"tags": ["documents"], "summary": "Update Document", "description": "Update an document.", "operationId": "documents-update_document", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "Id"}}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DocumentUpdate"}}}}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DocumentPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "delete": {"tags": ["documents"], "summary": "Delete Document", "description": "Delete an document.", "operationId": "documents-delete_document", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "Id"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/login/access-token": {"post": {"tags": ["login"], "summary": "Login Access Token", "description": "OAuth2 compatible token login, get an access token for future requests", "operationId": "login-login_access_token", "requestBody": {"content": {"application/x-www-form-urlencoded": {"schema": {"$ref": "#/components/schemas/Body_login-login_access_token"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Token"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/login/test-token": {"post": {"tags": ["login"], "summary": "Test Token", "description": "Test access token", "operationId": "login-test_token", "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserPublic"}}}}}, "security": [{"OAuth2PasswordBearer": []}]}}, "/api/v1/password-recovery/{email}": {"post": {"tags": ["login"], "summary": "Recover Password", "description": "Password Recovery", "operationId": "login-recover_password", "parameters": [{"name": "email", "in": "path", "required": true, "schema": {"type": "string", "title": "Email"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/reset-password/": {"post": {"tags": ["login"], "summary": "Reset Password", "description": "Reset password", "operationId": "login-reset_password", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/NewPassword"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/password-recovery-html-content/{email}": {"post": {"tags": ["login"], "summary": "Recover Password Html Content", "description": "HTML Content for Password Recovery", "operationId": "login-recover_password_html_content", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "email", "in": "path", "required": true, "schema": {"type": "string", "title": "Email"}}], "responses": {"200": {"description": "Successful Response", "content": {"text/html": {"schema": {"type": "string"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/users/": {"get": {"tags": ["users"], "summary": "Read Users", "description": "Retrieve users.", "operationId": "users-read_users", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "skip", "in": "query", "required": false, "schema": {"type": "integer", "default": 0, "title": "Skip"}}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer", "default": 100, "title": "Limit"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UsersPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "post": {"tags": ["users"], "summary": "Create User", "description": "Create new user.", "operationId": "users-create_user", "security": [{"OAuth2PasswordBearer": []}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserCreate"}}}}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/users/me": {"get": {"tags": ["users"], "summary": "Read User Me", "description": "Get current user.", "operationId": "users-read_user_me", "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserPublic"}}}}}, "security": [{"OAuth2PasswordBearer": []}]}, "delete": {"tags": ["users"], "summary": "Delete User Me", "description": "Delete own user.", "operationId": "users-delete_user_me", "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}}, "security": [{"OAuth2PasswordBearer": []}]}, "patch": {"tags": ["users"], "summary": "Update User Me", "description": "Update own user.", "operationId": "users-update_user_me", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserUpdateMe"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"OAuth2PasswordBearer": []}]}}, "/api/v1/users/me/password": {"patch": {"tags": ["users"], "summary": "Update Password Me", "description": "Update own password.", "operationId": "users-update_password_me", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpdatePassword"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"OAuth2PasswordBearer": []}]}}, "/api/v1/users/signup": {"post": {"tags": ["users"], "summary": "Register User", "description": "Create new user without the need to be logged in.", "operationId": "users-register_user", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserRegister"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/users/{user_id}": {"get": {"tags": ["users"], "summary": "Read User By Id", "description": "Get a specific user by id.", "operationId": "users-read_user_by_id", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "user_id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "User Id"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "patch": {"tags": ["users"], "summary": "Update User", "description": "Update a user.", "operationId": "users-update_user", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "user_id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "User Id"}}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserUpdate"}}}}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "delete": {"tags": ["users"], "summary": "Delete User", "description": "Delete a user.", "operationId": "users-delete_user", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "user_id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "User Id"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/utils/test-email/": {"post": {"tags": ["utils"], "summary": "Test Email", "description": "Test emails.", "operationId": "utils-test_email", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "email_to", "in": "query", "required": true, "schema": {"type": "string", "format": "email", "title": "Email To"}}], "responses": {"201": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/utils/health-check/": {"get": {"tags": ["utils"], "summary": "Health Check", "operationId": "utils-health_check", "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"type": "boolean", "title": "Response Utils-Health Check"}}}}}}}, "/api/v1/items/": {"get": {"tags": ["items"], "summary": "Read Items", "description": "Retrieve items.", "operationId": "items-read_items", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "skip", "in": "query", "required": false, "schema": {"type": "integer", "default": 0, "title": "Skip"}}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer", "default": 100, "title": "Limit"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ItemsPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "post": {"tags": ["items"], "summary": "Create Item", "description": "Create new item.", "operationId": "items-create_item", "security": [{"OAuth2PasswordBearer": []}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ItemCreate"}}}}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ItemPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/items/{id}": {"get": {"tags": ["items"], "summary": "Read Item", "description": "Get item by ID.", "operationId": "items-read_item", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "Id"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ItemPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "put": {"tags": ["items"], "summary": "Update Item", "description": "Update an item.", "operationId": "items-update_item", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "Id"}}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ItemUpdate"}}}}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ItemPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "delete": {"tags": ["items"], "summary": "Delete Item", "description": "Delete an item.", "operationId": "items-delete_item", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "Id"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/exams/generate": {"post": {"tags": ["exams"], "summary": "Generate Exam", "operationId": "exams-generate_exam", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GenerateQuestionsRequest"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExamPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"OAuth2PasswordBearer": []}]}}, "/api/v1/exams/{id}": {"get": {"tags": ["exams"], "summary": "Read Exam", "description": "Get exam by ID.", "operationId": "exams-read_exam", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "Id"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExamPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "put": {"tags": ["exams"], "summary": "Update Exam", "description": "Update an exam.", "operationId": "exams-update_exam", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "Id"}}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExamUpdate"}}}}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExamPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "delete": {"tags": ["exams"], "summary": "Delete Exam", "description": "Delete an exam.", "operationId": "exams-delete_exam", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "Id"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/exams/": {"get": {"tags": ["exams"], "summary": "Read Exams", "description": "Retrieve exams.", "operationId": "exams-read_exams", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "skip", "in": "query", "required": false, "schema": {"type": "integer", "default": 0, "title": "Skip"}}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer", "default": 100, "title": "Limit"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExamsPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/exam-attempts/": {"post": {"tags": ["exam-attempts"], "summary": "Create Exam Attempt", "description": "Create a new exam attempt for a specific exam.", "operationId": "exam-attempts-create_exam_attempt", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExamAttemptCreate"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExamAttemptPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}, "security": [{"OAuth2PasswordBearer": []}]}}, "/api/v1/exam-attempts/{id}": {"get": {"tags": ["exam-attempts"], "summary": "Read Exam Attempt", "description": "Get ExamAttempt by ID.", "operationId": "exam-attempts-read_exam_attempt", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "Id"}}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExamAttemptPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/exam-attempts/{attempt_id}": {"patch": {"tags": ["exam-attempts"], "summary": "Update Exam Attempt", "description": "Update an exam attempt with answers.\nIf `is_complete=True`, compute the score.", "operationId": "exam-attempts-update_exam_attempt", "security": [{"OAuth2PasswordBearer": []}], "parameters": [{"name": "attempt_id", "in": "path", "required": true, "schema": {"type": "string", "format": "uuid", "title": "Attempt Id"}}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExamAttemptUpdate"}}}}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExamAttemptPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/private/users/": {"post": {"tags": ["private"], "summary": "Create User", "description": "Create a new user.", "operationId": "private-create_user", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PrivateUserCreate"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserPublic"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}}, "components": {"schemas": {"AnswerUpdate": {"properties": {"id": {"type": "string", "format": "uuid", "title": "Id"}, "response": {"type": "string", "title": "Response"}}, "type": "object", "required": ["id", "response"], "title": "AnswerUpdate"}, "Body_documents-create_document": {"properties": {"file": {"type": "string", "format": "binary", "title": "File"}}, "type": "object", "required": ["file"], "title": "Body_documents-create_document"}, "Body_login-login_access_token": {"properties": {"grant_type": {"anyOf": [{"type": "string", "pattern": "password"}, {"type": "null"}], "title": "Grant Type"}, "username": {"type": "string", "title": "Username"}, "password": {"type": "string", "title": "Password"}, "scope": {"type": "string", "title": "Scope", "default": ""}, "client_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Client Id"}, "client_secret": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Client Secret"}}, "type": "object", "required": ["username", "password"], "title": "Body_login-login_access_token"}, "DocumentPublic": {"properties": {"filename": {"type": "string", "title": "Filename"}, "s3_url": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "S3 Url"}, "s3_key": {"anyOf": [{"type": "string", "maxLength": 1024}, {"type": "null"}], "title": "S3 Key"}, "content_type": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Content Type"}, "size": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Size"}, "id": {"type": "string", "format": "uuid", "title": "Id"}, "owner_id": {"type": "string", "format": "uuid", "title": "Owner Id"}, "extracted_text": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Extracted Text"}}, "type": "object", "required": ["filename", "id", "owner_id"], "title": "DocumentPublic"}, "DocumentUpdate": {"properties": {"filename": {"anyOf": [{"type": "string", "maxLength": 255, "minLength": 1}, {"type": "null"}], "title": "Filename"}, "s3_url": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "S3 Url"}, "s3_key": {"anyOf": [{"type": "string", "maxLength": 1024}, {"type": "null"}], "title": "S3 Key"}, "content_type": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "Content Type"}, "size": {"anyOf": [{"type": "integer", "minimum": 0.0}, {"type": "null"}], "title": "Size"}}, "type": "object", "title": "DocumentUpdate"}, "DocumentsPublic": {"properties": {"data": {"items": {"$ref": "#/components/schemas/DocumentPublic"}, "type": "array", "title": "Data"}, "count": {"type": "integer", "title": "Count"}}, "type": "object", "required": ["data", "count"], "title": "DocumentsPublic"}, "ExamAttemptCreate": {"properties": {"score": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Score"}, "is_complete": {"type": "boolean", "title": "Is Complete", "default": false}, "exam_id": {"type": "string", "format": "uuid", "title": "Exam Id"}}, "type": "object", "required": ["exam_id"], "title": "ExamAttemptCreate"}, "ExamAttemptPublic": {"properties": {"score": {"anyOf": [{"type": "number"}, {"type": "null"}], "title": "Score"}, "is_complete": {"type": "boolean", "title": "Is Complete", "default": false}, "id": {"type": "string", "format": "uuid", "title": "Id"}, "exam_id": {"type": "string", "format": "uuid", "title": "Exam Id"}, "completed_at": {"anyOf": [{"type": "string", "format": "date-time"}, {"type": "null"}], "title": "Completed At"}, "created_at": {"type": "string", "format": "date-time", "title": "Created At"}, "updated_at": {"type": "string", "format": "date-time", "title": "Updated At"}}, "type": "object", "required": ["id", "exam_id", "created_at", "updated_at"], "title": "ExamAttemptPublic"}, "ExamAttemptUpdate": {"properties": {"is_complete": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Complete"}, "answers": {"anyOf": [{"items": {"$ref": "#/components/schemas/AnswerUpdate"}, "type": "array"}, {"type": "null"}], "title": "Answers"}}, "type": "object", "title": "ExamAttemptUpdate"}, "ExamPublic": {"properties": {"title": {"type": "string", "title": "Title"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "duration_minutes": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Minutes"}, "is_published": {"type": "boolean", "title": "Is Published", "default": false}, "id": {"type": "string", "format": "uuid", "title": "Id"}, "owner_id": {"type": "string", "format": "uuid", "title": "Owner Id"}, "questions": {"items": {"$ref": "#/components/schemas/QuestionPublic"}, "type": "array", "title": "Questions"}}, "type": "object", "required": ["title", "id", "owner_id"], "title": "ExamPublic"}, "ExamUpdate": {"properties": {"title": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "Title"}, "description": {"anyOf": [{"type": "string", "maxLength": 1000}, {"type": "null"}], "title": "Description"}, "duration_minutes": {"anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "title": "Duration Minutes"}, "is_published": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Is Published"}}, "type": "object", "title": "ExamUpdate"}, "ExamsPublic": {"properties": {"data": {"items": {"$ref": "#/components/schemas/ExamPublic"}, "type": "array", "title": "Data"}, "count": {"type": "integer", "title": "Count"}}, "type": "object", "required": ["data", "count"], "title": "ExamsPublic"}, "GenerateQuestionsRequest": {"properties": {"document_ids": {"items": {"type": "string", "format": "uuid"}, "type": "array", "title": "Document Ids"}}, "type": "object", "required": ["document_ids"], "title": "GenerateQuestionsRequest"}, "HTTPValidationError": {"properties": {"detail": {"items": {"$ref": "#/components/schemas/ValidationError"}, "type": "array", "title": "Detail"}}, "type": "object", "title": "HTTPValidationError"}, "ItemCreate": {"properties": {"title": {"type": "string", "maxLength": 255, "minLength": 1, "title": "Title"}, "description": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "Description"}}, "type": "object", "required": ["title"], "title": "ItemCreate"}, "ItemPublic": {"properties": {"title": {"type": "string", "maxLength": 255, "minLength": 1, "title": "Title"}, "description": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "Description"}, "id": {"type": "string", "format": "uuid", "title": "Id"}, "owner_id": {"type": "string", "format": "uuid", "title": "Owner Id"}}, "type": "object", "required": ["title", "id", "owner_id"], "title": "ItemPublic"}, "ItemUpdate": {"properties": {"title": {"anyOf": [{"type": "string", "maxLength": 255, "minLength": 1}, {"type": "null"}], "title": "Title"}, "description": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "Description"}}, "type": "object", "title": "ItemUpdate"}, "ItemsPublic": {"properties": {"data": {"items": {"$ref": "#/components/schemas/ItemPublic"}, "type": "array", "title": "Data"}, "count": {"type": "integer", "title": "Count"}}, "type": "object", "required": ["data", "count"], "title": "ItemsPublic"}, "Message": {"properties": {"message": {"type": "string", "title": "Message"}}, "type": "object", "required": ["message"], "title": "Message"}, "NewPassword": {"properties": {"token": {"type": "string", "title": "Token"}, "new_password": {"type": "string", "maxLength": 40, "minLength": 8, "title": "New Password"}}, "type": "object", "required": ["token", "new_password"], "title": "NewPassword"}, "PrivateUserCreate": {"properties": {"email": {"type": "string", "title": "Email"}, "password": {"type": "string", "title": "Password"}, "full_name": {"type": "string", "title": "Full Name"}, "is_verified": {"type": "boolean", "title": "Is Verified", "default": false}}, "type": "object", "required": ["email", "password", "full_name"], "title": "PrivateUserCreate"}, "QuestionPublic": {"properties": {"question": {"type": "string", "title": "Question"}, "answer": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Answer"}, "id": {"type": "string", "format": "uuid", "title": "Id"}, "type": {"$ref": "#/components/schemas/QuestionType"}, "options": {"items": {"type": "string"}, "type": "array", "title": "Options", "default": []}}, "type": "object", "required": ["question", "id", "type"], "title": "QuestionPublic"}, "QuestionType": {"type": "string", "enum": ["multiple_choice", "true_false", "short_answer"], "title": "QuestionType"}, "Token": {"properties": {"access_token": {"type": "string", "title": "Access Token"}, "token_type": {"type": "string", "title": "Token Type", "default": "bearer"}}, "type": "object", "required": ["access_token"], "title": "Token"}, "UpdatePassword": {"properties": {"current_password": {"type": "string", "maxLength": 40, "minLength": 8, "title": "Current Password"}, "new_password": {"type": "string", "maxLength": 40, "minLength": 8, "title": "New Password"}}, "type": "object", "required": ["current_password", "new_password"], "title": "UpdatePassword"}, "UserCreate": {"properties": {"email": {"type": "string", "maxLength": 255, "format": "email", "title": "Email"}, "is_active": {"type": "boolean", "title": "Is Active", "default": true}, "is_superuser": {"type": "boolean", "title": "Is Superuser", "default": false}, "full_name": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "Full Name"}, "password": {"type": "string", "maxLength": 40, "minLength": 8, "title": "Password"}}, "type": "object", "required": ["email", "password"], "title": "UserCreate"}, "UserPublic": {"properties": {"email": {"type": "string", "maxLength": 255, "format": "email", "title": "Email"}, "is_active": {"type": "boolean", "title": "Is Active", "default": true}, "is_superuser": {"type": "boolean", "title": "Is Superuser", "default": false}, "full_name": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "Full Name"}, "id": {"type": "string", "format": "uuid", "title": "Id"}}, "type": "object", "required": ["email", "id"], "title": "UserPublic"}, "UserRegister": {"properties": {"email": {"type": "string", "maxLength": 255, "format": "email", "title": "Email"}, "password": {"type": "string", "maxLength": 40, "minLength": 8, "title": "Password"}, "full_name": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "Full Name"}}, "type": "object", "required": ["email", "password"], "title": "UserRegister"}, "UserUpdate": {"properties": {"email": {"anyOf": [{"type": "string", "maxLength": 255, "format": "email"}, {"type": "null"}], "title": "Email"}, "is_active": {"type": "boolean", "title": "Is Active", "default": true}, "is_superuser": {"type": "boolean", "title": "Is Superuser", "default": false}, "full_name": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "Full Name"}, "password": {"anyOf": [{"type": "string", "maxLength": 40, "minLength": 8}, {"type": "null"}], "title": "Password"}}, "type": "object", "title": "UserUpdate"}, "UserUpdateMe": {"properties": {"full_name": {"anyOf": [{"type": "string", "maxLength": 255}, {"type": "null"}], "title": "Full Name"}, "email": {"anyOf": [{"type": "string", "maxLength": 255, "format": "email"}, {"type": "null"}], "title": "Email"}}, "type": "object", "title": "UserUpdateMe"}, "UsersPublic": {"properties": {"data": {"items": {"$ref": "#/components/schemas/UserPublic"}, "type": "array", "title": "Data"}, "count": {"type": "integer", "title": "Count"}}, "type": "object", "required": ["data", "count"], "title": "UsersPublic"}, "ValidationError": {"properties": {"loc": {"items": {"anyOf": [{"type": "string"}, {"type": "integer"}]}, "type": "array", "title": "Location"}, "msg": {"type": "string", "title": "Message"}, "type": {"type": "string", "title": "Error Type"}}, "type": "object", "required": ["loc", "msg", "type"], "title": "ValidationError"}}, "securitySchemes": {"OAuth2PasswordBearer": {"type": "oauth2", "flows": {"password": {"scopes": {}, "tokenUrl": "/api/v1/login/access-token"}}}}}}
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index ea35ab9b5d..b2497eff11 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -1,131 +1,97 @@
{
"name": "frontend",
"version": "0.0.0",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "frontend",
"version": "0.0.0",
"dependencies": {
- "@chakra-ui/react": "^3.27.0",
- "@emotion/react": "^11.14.0",
- "@tanstack/react-query": "^5.90.2",
- "@tanstack/react-query-devtools": "^5.90.2",
- "@tanstack/react-router": "^1.131.50",
- "axios": "1.12.2",
- "form-data": "4.0.4",
- "next-themes": "^0.4.6",
- "react": "^19.1.1",
- "react-dom": "^19.2.0",
- "react-error-boundary": "^6.0.0",
- "react-hook-form": "7.62.0",
- "react-icons": "^5.5.0"
+ "@fullcalendar/core": "^6.1.15",
+ "@fullcalendar/daygrid": "^6.1.15",
+ "@fullcalendar/interaction": "^6.1.15",
+ "@fullcalendar/list": "^6.1.15",
+ "@fullcalendar/react": "^6.1.15",
+ "@fullcalendar/timegrid": "^6.1.15",
+ "@react-jvectormap/core": "^1.0.4",
+ "@react-jvectormap/world": "^1.1.2",
+ "@tailwindcss/forms": "^0.5.9",
+ "@tailwindcss/postcss": "^4.0.9",
+ "apexcharts": "^4.3.0",
+ "autoprefixer": "^10.4.20",
+ "axios": "^1.12.2",
+ "flatpickr": "^4.6.13",
+ "next": "15.2.3",
+ "react": "^19.0.0",
+ "react-apexcharts": "^1.7.0",
+ "react-dnd": "^16.0.1",
+ "react-dnd-html5-backend": "^16.0.1",
+ "react-dom": "^19.0.0",
+ "react-dropzone": "^14.3.5",
+ "swiper": "^11.2.0",
+ "tailwind-merge": "^2.6.0"
},
"devDependencies": {
- "@biomejs/biome": "^2.2.4",
- "@hey-api/openapi-ts": "0.73.0",
- "@playwright/test": "^1.55.0",
- "@tanstack/router-devtools": "^1.131.42",
- "@tanstack/router-plugin": "^1.133.15",
- "@types/node": "^24.5.2",
- "@types/react": "^19.1.16",
- "@types/react-dom": "^19.2.1",
- "@vitejs/plugin-react-swc": "^4.0.1",
- "dotenv": "^17.2.2",
- "typescript": "^5.2.2",
- "vite": "^7.1.9"
- }
- },
- "node_modules/@ark-ui/react": {
- "version": "5.24.1",
- "resolved": "https://registry.npmjs.org/@ark-ui/react/-/react-5.24.1.tgz",
- "integrity": "sha512-Czx6pLRJzs8G9t8XCvBlizd1aGRC7KOyUGJgK5a1vUDz8WhAALUUm66yslhs7GfU4/jJX8mS73FwStgtK0znAg==",
- "dependencies": {
- "@internationalized/date": "3.9.0",
- "@zag-js/accordion": "1.24.1",
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/angle-slider": "1.24.1",
- "@zag-js/async-list": "1.24.1",
- "@zag-js/auto-resize": "1.24.1",
- "@zag-js/avatar": "1.24.1",
- "@zag-js/carousel": "1.24.1",
- "@zag-js/checkbox": "1.24.1",
- "@zag-js/clipboard": "1.24.1",
- "@zag-js/collapsible": "1.24.1",
- "@zag-js/collection": "1.24.1",
- "@zag-js/color-picker": "1.24.1",
- "@zag-js/color-utils": "1.24.1",
- "@zag-js/combobox": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/date-picker": "1.24.1",
- "@zag-js/date-utils": "1.24.1",
- "@zag-js/dialog": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/editable": "1.24.1",
- "@zag-js/file-upload": "1.24.1",
- "@zag-js/file-utils": "1.24.1",
- "@zag-js/floating-panel": "1.24.1",
- "@zag-js/focus-trap": "1.24.1",
- "@zag-js/highlight-word": "1.24.1",
- "@zag-js/hover-card": "1.24.1",
- "@zag-js/i18n-utils": "1.24.1",
- "@zag-js/json-tree-utils": "1.24.1",
- "@zag-js/listbox": "1.24.1",
- "@zag-js/menu": "1.24.1",
- "@zag-js/number-input": "1.24.1",
- "@zag-js/pagination": "1.24.1",
- "@zag-js/password-input": "1.24.1",
- "@zag-js/pin-input": "1.24.1",
- "@zag-js/popover": "1.24.1",
- "@zag-js/presence": "1.24.1",
- "@zag-js/progress": "1.24.1",
- "@zag-js/qr-code": "1.24.1",
- "@zag-js/radio-group": "1.24.1",
- "@zag-js/rating-group": "1.24.1",
- "@zag-js/react": "1.24.1",
- "@zag-js/scroll-area": "1.24.1",
- "@zag-js/select": "1.24.1",
- "@zag-js/signature-pad": "1.24.1",
- "@zag-js/slider": "1.24.1",
- "@zag-js/splitter": "1.24.1",
- "@zag-js/steps": "1.24.1",
- "@zag-js/switch": "1.24.1",
- "@zag-js/tabs": "1.24.1",
- "@zag-js/tags-input": "1.24.1",
- "@zag-js/timer": "1.24.1",
- "@zag-js/toast": "1.24.1",
- "@zag-js/toggle": "1.24.1",
- "@zag-js/toggle-group": "1.24.1",
- "@zag-js/tooltip": "1.24.1",
- "@zag-js/tour": "1.24.1",
- "@zag-js/tree-view": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- },
- "peerDependencies": {
- "react": ">=18.0.0",
- "react-dom": ">=18.0.0"
+ "@eslint/eslintrc": "^3",
+ "@hey-api/openapi-ts": "^0.85.2",
+ "@svgr/webpack": "^8.1.0",
+ "@types/node": "^20",
+ "@types/react": "^19",
+ "@types/react-dom": "^19",
+ "@types/react-transition-group": "^4.4.12",
+ "eslint": "^9",
+ "eslint-config-next": "15.1.3",
+ "postcss": "^8",
+ "tailwindcss": "^4.0.0",
+ "typescript": "^5"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.25.9",
"js-tokens": "^4.0.0",
- "picocolors": "^1.1.1"
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/compat-data": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz",
- "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==",
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz",
+ "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -133,22 +99,22 @@
}
},
"node_modules/@babel/core": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz",
- "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.3",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-module-transforms": "^7.28.3",
- "@babel/helpers": "^7.28.4",
- "@babel/parser": "^7.28.4",
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.4",
- "@babel/types": "^7.28.4",
- "@jridgewell/remapping": "^2.3.5",
+ "version": "7.26.10",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
+ "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.26.2",
+ "@babel/generator": "^7.26.10",
+ "@babel/helper-compilation-targets": "^7.26.5",
+ "@babel/helper-module-transforms": "^7.26.0",
+ "@babel/helpers": "^7.26.10",
+ "@babel/parser": "^7.26.10",
+ "@babel/template": "^7.26.9",
+ "@babel/traverse": "^7.26.10",
+ "@babel/types": "^7.26.10",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -163,23 +129,17 @@
"url": "https://opencollective.com/babel"
}
},
- "node_modules/@babel/core/node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@babel/generator": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz",
- "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz",
+ "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.28.3",
- "@babel/types": "^7.28.2",
- "@jridgewell/gen-mapping": "^0.3.12",
- "@jridgewell/trace-mapping": "^0.3.28",
+ "@babel/parser": "^7.27.0",
+ "@babel/types": "^7.27.0",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
},
"engines": {
@@ -187,26 +147,27 @@
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
- "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
+ "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.27.3"
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
- "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz",
+ "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.27.2",
- "@babel/helper-validator-option": "^7.27.1",
+ "@babel/compat-data": "^7.26.8",
+ "@babel/helper-validator-option": "^7.25.9",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -216,17 +177,18 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz",
- "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz",
+ "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-member-expression-to-functions": "^7.27.1",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/helper-replace-supers": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/traverse": "^7.28.3",
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-member-expression-to-functions": "^7.25.9",
+ "@babel/helper-optimise-call-expression": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.26.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+ "@babel/traverse": "^7.27.0",
"semver": "^6.3.1"
},
"engines": {
@@ -236,51 +198,79 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-globals": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "node_modules/@babel/helper-create-regexp-features-plugin": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz",
+ "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "regexpu-core": "^6.2.0",
+ "semver": "^6.3.1"
+ },
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-define-polyfill-provider": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz",
+ "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",
- "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
+ "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
- "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+ "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
- "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+ "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.28.3"
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -290,35 +280,56 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
- "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
+ "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.27.1"
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
- "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
+ "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-remap-async-to-generator": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz",
+ "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-wrap-function": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ },
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
- "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
+ "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.27.1",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/traverse": "^7.27.1"
+ "@babel/helper-member-expression-to-functions": "^7.25.9",
+ "@babel/helper-optimise-call-expression": "^7.25.9",
+ "@babel/traverse": "^7.26.5"
},
"engines": {
"node": ">=6.9.0"
@@ -328,67 +339,86 @@
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
- "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
+ "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
- "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+ "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-wrap-function": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz",
+ "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ },
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz",
+ "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4"
+ "@babel/template": "^7.27.0",
+ "@babel/types": "^7.27.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz",
- "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz",
+ "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.28.4"
+ "@babel/types": "^7.27.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -397,1933 +427,3031 @@
"node": ">=6.0.0"
}
},
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
- "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
+ "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz",
+ "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
- "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
+ "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz",
+ "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz",
- "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==",
+ "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz",
+ "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-transform-typescript": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz",
- "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==",
+ "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz",
+ "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/plugin-syntax-typescript": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+ "@babel/plugin-transform-optional-chaining": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.13.0"
}
},
- "node_modules/@babel/preset-typescript": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz",
- "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==",
+ "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz",
+ "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-validator-option": "^7.27.1",
- "@babel/plugin-syntax-jsx": "^7.27.1",
- "@babel/plugin-transform-modules-commonjs": "^7.27.1",
- "@babel/plugin-transform-typescript": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/runtime": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
- "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
+ "node_modules/@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "regenerator-runtime": "^0.14.0"
- },
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+ "node_modules/@babel/plugin-syntax-import-assertions": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz",
+ "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/traverse": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz",
- "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==",
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
+ "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.3",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.4",
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4",
- "debug": "^4.3.1"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/types": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz",
- "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
+ "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@biomejs/biome": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.2.4.tgz",
- "integrity": "sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==",
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
+ "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
"dev": true,
- "bin": {
- "biome": "bin/biome"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
- "node": ">=14.21.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/biome"
+ "node": ">=6.9.0"
},
- "optionalDependencies": {
- "@biomejs/cli-darwin-arm64": "2.2.4",
- "@biomejs/cli-darwin-x64": "2.2.4",
- "@biomejs/cli-linux-arm64": "2.2.4",
- "@biomejs/cli-linux-arm64-musl": "2.2.4",
- "@biomejs/cli-linux-x64": "2.2.4",
- "@biomejs/cli-linux-x64-musl": "2.2.4",
- "@biomejs/cli-win32-arm64": "2.2.4",
- "@biomejs/cli-win32-x64": "2.2.4"
- }
- },
- "node_modules/@biomejs/cli-darwin-arm64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.4.tgz",
- "integrity": "sha512-RJe2uiyaloN4hne4d2+qVj3d3gFJFbmrr5PYtkkjei1O9c+BjGXgpUPVbi8Pl8syumhzJjFsSIYkcLt2VlVLMA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=14.21.3"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@biomejs/cli-darwin-x64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.4.tgz",
- "integrity": "sha512-cFsdB4ePanVWfTnPVaUX+yr8qV8ifxjBKMkZwN7gKb20qXPxd/PmwqUH8mY5wnM9+U0QwM76CxFyBRJhC9tQwg==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
"dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
"engines": {
- "node": ">=14.21.3"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@biomejs/cli-linux-arm64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.4.tgz",
- "integrity": "sha512-M/Iz48p4NAzMXOuH+tsn5BvG/Jb07KOMTdSVwJpicmhN309BeEyRyQX+n1XDF0JVSlu28+hiTQ2L4rZPvu7nMw==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@babel/plugin-transform-arrow-functions": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz",
+ "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==",
"dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=14.21.3"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@biomejs/cli-linux-arm64-musl": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.4.tgz",
- "integrity": "sha512-7TNPkMQEWfjvJDaZRSkDCPT/2r5ESFPKx+TEev+I2BXDGIjfCZk2+b88FOhnJNHtksbOZv8ZWnxrA5gyTYhSsQ==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@babel/plugin-transform-async-generator-functions": {
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz",
+ "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==",
"dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.26.5",
+ "@babel/helper-remap-async-to-generator": "^7.25.9",
+ "@babel/traverse": "^7.26.8"
+ },
"engines": {
- "node": ">=14.21.3"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@biomejs/cli-linux-x64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.4.tgz",
- "integrity": "sha512-orr3nnf2Dpb2ssl6aihQtvcKtLySLta4E2UcXdp7+RTa7mfJjBgIsbS0B9GC8gVu0hjOu021aU8b3/I1tn+pVQ==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-transform-async-to-generator": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz",
+ "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==",
"dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-remap-async-to-generator": "^7.25.9"
+ },
"engines": {
- "node": ">=14.21.3"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@biomejs/cli-linux-x64-musl": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.4.tgz",
- "integrity": "sha512-m41nFDS0ksXK2gwXL6W6yZTYPMH0LughqbsxInSKetoH6morVj43szqKx79Iudkp8WRT5SxSh7qVb8KCUiewGg==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz",
+ "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==",
"dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.26.5"
+ },
"engines": {
- "node": ">=14.21.3"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@biomejs/cli-win32-arm64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.4.tgz",
- "integrity": "sha512-NXnfTeKHDFUWfxAefa57DiGmu9VyKi0cDqFpdI+1hJWQjGJhJutHPX0b5m+eXvTKOaf+brU+P0JrQAZMb5yYaQ==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@babel/plugin-transform-block-scoping": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz",
+ "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==",
"dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.26.5"
+ },
"engines": {
- "node": ">=14.21.3"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@biomejs/cli-win32-x64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.4.tgz",
- "integrity": "sha512-3Y4V4zVRarVh/B/eSHczR4LYoSVyv3Dfuvm3cWs5w/HScccS0+Wt/lHOcDTRYeHjQmMYVC3rIRWqyN2EI52+zg==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-transform-class-properties": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz",
+ "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==",
"dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=14.21.3"
- }
- },
- "node_modules/@chakra-ui/react": {
- "version": "3.27.0",
- "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-3.27.0.tgz",
- "integrity": "sha512-M1WTAErI2cYM/PB4h5Kf5CCAg70g3HCzVvTEhcf5ty8QrG6QybPf3RdWSpBlIy7qpjuEnQYpHLxM0jnFLArBgA==",
+ "license": "MIT",
"dependencies": {
- "@ark-ui/react": "^5.24.1",
- "@emotion/is-prop-valid": "^1.3.1",
- "@emotion/serialize": "^1.3.3",
- "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
- "@emotion/utils": "^1.4.2",
- "@pandacss/is-valid-prop": "^0.54.0",
- "csstype": "^3.1.3",
- "fast-safe-stringify": "^2.1.1"
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
},
"peerDependencies": {
- "@emotion/react": ">=11",
- "react": ">=18",
- "react-dom": ">=18"
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@emotion/babel-plugin": {
- "version": "11.13.5",
- "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
- "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
+ "node_modules/@babel/plugin-transform-class-static-block": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz",
+ "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.16.7",
- "@babel/runtime": "^7.18.3",
- "@emotion/hash": "^0.9.2",
- "@emotion/memoize": "^0.9.0",
- "@emotion/serialize": "^1.3.3",
- "babel-plugin-macros": "^3.1.0",
- "convert-source-map": "^1.5.0",
- "escape-string-regexp": "^4.0.0",
- "find-root": "^1.1.0",
- "source-map": "^0.5.7",
- "stylis": "4.2.0"
- }
- },
- "node_modules/@emotion/babel-plugin/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0"
}
},
- "node_modules/@emotion/cache": {
- "version": "11.14.0",
- "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
- "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
+ "node_modules/@babel/plugin-transform-classes": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz",
+ "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@emotion/memoize": "^0.9.0",
- "@emotion/sheet": "^1.4.0",
- "@emotion/utils": "^1.4.2",
- "@emotion/weak-memoize": "^0.4.0",
- "stylis": "4.2.0"
- }
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
},
- "node_modules/@emotion/hash": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
- "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
- "license": "MIT"
+ "node_modules/@babel/plugin-transform-classes/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
},
- "node_modules/@emotion/is-prop-valid": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz",
- "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==",
+ "node_modules/@babel/plugin-transform-computed-properties": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz",
+ "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@emotion/memoize": "^0.9.0"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/template": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@emotion/memoize": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
- "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==",
- "license": "MIT"
- },
- "node_modules/@emotion/react": {
- "version": "11.14.0",
- "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz",
- "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
+ "node_modules/@babel/plugin-transform-destructuring": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz",
+ "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.18.3",
- "@emotion/babel-plugin": "^11.13.5",
- "@emotion/cache": "^11.14.0",
- "@emotion/serialize": "^1.3.3",
- "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
- "@emotion/utils": "^1.4.2",
- "@emotion/weak-memoize": "^0.4.0",
- "hoist-non-react-statics": "^3.3.1"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
- "peerDependencies": {
- "react": ">=16.8.0"
+ "engines": {
+ "node": ">=6.9.0"
},
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@emotion/serialize": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
- "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
+ "node_modules/@babel/plugin-transform-dotall-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz",
+ "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@emotion/hash": "^0.9.2",
- "@emotion/memoize": "^0.9.0",
- "@emotion/unitless": "^0.10.0",
- "@emotion/utils": "^1.4.2",
- "csstype": "^3.0.2"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@emotion/sheet": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
- "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==",
- "license": "MIT"
- },
- "node_modules/@emotion/unitless": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
- "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==",
- "license": "MIT"
- },
- "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz",
- "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==",
+ "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz",
+ "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
"peerDependencies": {
- "react": ">=16.8.0"
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@emotion/utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
- "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==",
- "license": "MIT"
- },
- "node_modules/@emotion/weak-memoize": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
- "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
- "license": "MIT"
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz",
- "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==",
- "cpu": [
- "ppc64"
- ],
+ "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz",
+ "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz",
- "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==",
- "cpu": [
- "arm"
- ],
+ "node_modules/@babel/plugin-transform-dynamic-import": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz",
+ "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz",
- "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz",
+ "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz",
- "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-transform-export-namespace-from": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz",
+ "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz",
- "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@babel/plugin-transform-for-of": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz",
+ "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.26.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz",
- "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-transform-function-name": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz",
+ "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz",
- "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@babel/plugin-transform-json-strings": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz",
+ "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz",
- "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-transform-literals": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz",
+ "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz",
- "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==",
- "cpu": [
- "arm"
- ],
+ "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz",
+ "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz",
- "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz",
+ "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz",
- "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==",
- "cpu": [
- "ia32"
- ],
+ "node_modules/@babel/plugin-transform-modules-amd": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz",
+ "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz",
- "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==",
- "cpu": [
- "loong64"
- ],
+ "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz",
+ "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.26.0",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz",
- "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==",
- "cpu": [
- "mips64el"
- ],
+ "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz",
+ "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz",
- "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==",
- "cpu": [
- "ppc64"
- ],
+ "node_modules/@babel/plugin-transform-modules-umd": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz",
+ "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz",
- "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==",
- "cpu": [
- "riscv64"
- ],
+ "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz",
+ "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz",
- "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==",
- "cpu": [
- "s390x"
- ],
+ "node_modules/@babel/plugin-transform-new-target": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz",
+ "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz",
- "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+ "version": "7.26.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz",
+ "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.26.5"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz",
- "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@babel/plugin-transform-numeric-separator": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz",
+ "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz",
- "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-transform-object-rest-spread": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz",
+ "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/plugin-transform-parameters": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz",
- "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@babel/plugin-transform-object-super": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz",
+ "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz",
- "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz",
+ "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz",
- "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-transform-optional-chaining": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz",
+ "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz",
- "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@babel/plugin-transform-parameters": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz",
+ "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz",
- "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==",
- "cpu": [
- "ia32"
- ],
+ "node_modules/@babel/plugin-transform-private-methods": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz",
+ "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz",
- "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==",
- "cpu": [
- "x64"
- ],
+ "node_modules/@babel/plugin-transform-private-property-in-object": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz",
+ "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@floating-ui/core": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz",
- "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
"dependencies": {
- "@floating-ui/utils": "^0.2.10"
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@floating-ui/dom": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz",
- "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==",
+ "node_modules/@babel/plugin-transform-property-literals": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz",
+ "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@floating-ui/core": "^1.7.3",
- "@floating-ui/utils": "^0.2.10"
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@floating-ui/utils": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
- "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="
- },
- "node_modules/@hey-api/json-schema-ref-parser": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@hey-api/json-schema-ref-parser/-/json-schema-ref-parser-1.0.6.tgz",
- "integrity": "sha512-yktiFZoWPtEW8QKS65eqKwA5MTKp88CyiL8q72WynrBs/73SAaxlSWlA2zW/DZlywZ5hX1OYzrCC0wFdvO9c2w==",
+ "node_modules/@babel/plugin-transform-react-constant-elements": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz",
+ "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jsdevtools/ono": "^7.1.3",
- "@types/json-schema": "^7.0.15",
- "js-yaml": "^4.1.0",
- "lodash": "^4.17.21"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
- "node": ">= 16"
+ "node": ">=6.9.0"
},
- "funding": {
- "url": "https://github.com/sponsors/hey-api"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@hey-api/openapi-ts": {
- "version": "0.73.0",
- "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.73.0.tgz",
- "integrity": "sha512-sUscR3OIGW0k9U//28Cu6BTp3XaogWMDORj9H+5Du9E5AvTT7LZbCEDvkLhebFOPkp2cZAQfd66HiZsiwssBcQ==",
+ "node_modules/@babel/plugin-transform-react-display-name": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz",
+ "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@hey-api/json-schema-ref-parser": "1.0.6",
- "ansi-colors": "4.1.3",
- "c12": "2.0.1",
- "color-support": "1.1.3",
- "commander": "13.0.0",
- "handlebars": "4.7.8",
- "open": "10.1.2"
- },
- "bin": {
- "openapi-ts": "bin/index.cjs"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=22.10.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/hey-api"
+ "node": ">=6.9.0"
},
"peerDependencies": {
- "typescript": "^5.5.3"
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@internationalized/date": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.9.0.tgz",
- "integrity": "sha512-yaN3brAnHRD+4KyyOsJyk49XUvj2wtbNACSqg0bz3u8t2VuzhC8Q5dfRnrSxjnnbDb+ienBnkn1TzQfE154vyg==",
+ "node_modules/@babel/plugin-transform-react-jsx": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz",
+ "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@swc/helpers": "^0.5.0"
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/plugin-syntax-jsx": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@internationalized/number": {
- "version": "3.6.5",
- "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.5.tgz",
- "integrity": "sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==",
+ "node_modules/@babel/plugin-transform-react-jsx-development": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz",
+ "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@swc/helpers": "^0.5.0"
+ "@babel/plugin-transform-react-jsx": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.13",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
- "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "node_modules/@babel/plugin-transform-react-pure-annotations": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz",
+ "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@jridgewell/trace-mapping": "^0.3.24"
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@jridgewell/remapping": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
- "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "node_modules/@babel/plugin-transform-regenerator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz",
+ "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
+ "@babel/helper-plugin-utils": "^7.26.5",
+ "regenerator-transform": "^0.15.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "node_modules/@babel/plugin-transform-regexp-modifiers": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz",
+ "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
- "node": ">=6.0.0"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
- "license": "MIT"
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.30",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz",
- "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==",
+ "node_modules/@babel/plugin-transform-reserved-words": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz",
+ "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@jsdevtools/ono": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
- "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@pandacss/is-valid-prop": {
- "version": "0.54.0",
- "resolved": "https://registry.npmjs.org/@pandacss/is-valid-prop/-/is-valid-prop-0.54.0.tgz",
- "integrity": "sha512-UhRgg1k9VKRCBAHl+XUK3lvN0k9bYifzYGZOqajDid4L1DyU813A1L0ZwN4iV9WX5TX3PfUugqtgG9LnIeFGBQ=="
- },
- "node_modules/@playwright/test": {
- "version": "1.55.0",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.0.tgz",
- "integrity": "sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==",
+ "node_modules/@babel/plugin-transform-shorthand-properties": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz",
+ "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
"dependencies": {
- "playwright": "1.55.0"
- },
- "bin": {
- "playwright": "cli.js"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
- "node": ">=18"
- }
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-spread": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz",
+ "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-sticky-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz",
+ "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-template-literals": {
+ "version": "7.26.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz",
+ "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.26.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typeof-symbol": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz",
+ "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.26.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typescript": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz",
+ "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-create-class-features-plugin": "^7.27.0",
+ "@babel/helper-plugin-utils": "^7.26.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+ "@babel/plugin-syntax-typescript": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-escapes": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz",
+ "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-property-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz",
+ "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz",
+ "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz",
+ "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/preset-env": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz",
+ "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.26.8",
+ "@babel/helper-compilation-targets": "^7.26.5",
+ "@babel/helper-plugin-utils": "^7.26.5",
+ "@babel/helper-validator-option": "^7.25.9",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9",
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9",
+ "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+ "@babel/plugin-syntax-import-assertions": "^7.26.0",
+ "@babel/plugin-syntax-import-attributes": "^7.26.0",
+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.25.9",
+ "@babel/plugin-transform-async-generator-functions": "^7.26.8",
+ "@babel/plugin-transform-async-to-generator": "^7.25.9",
+ "@babel/plugin-transform-block-scoped-functions": "^7.26.5",
+ "@babel/plugin-transform-block-scoping": "^7.25.9",
+ "@babel/plugin-transform-class-properties": "^7.25.9",
+ "@babel/plugin-transform-class-static-block": "^7.26.0",
+ "@babel/plugin-transform-classes": "^7.25.9",
+ "@babel/plugin-transform-computed-properties": "^7.25.9",
+ "@babel/plugin-transform-destructuring": "^7.25.9",
+ "@babel/plugin-transform-dotall-regex": "^7.25.9",
+ "@babel/plugin-transform-duplicate-keys": "^7.25.9",
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9",
+ "@babel/plugin-transform-dynamic-import": "^7.25.9",
+ "@babel/plugin-transform-exponentiation-operator": "^7.26.3",
+ "@babel/plugin-transform-export-namespace-from": "^7.25.9",
+ "@babel/plugin-transform-for-of": "^7.26.9",
+ "@babel/plugin-transform-function-name": "^7.25.9",
+ "@babel/plugin-transform-json-strings": "^7.25.9",
+ "@babel/plugin-transform-literals": "^7.25.9",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.25.9",
+ "@babel/plugin-transform-member-expression-literals": "^7.25.9",
+ "@babel/plugin-transform-modules-amd": "^7.25.9",
+ "@babel/plugin-transform-modules-commonjs": "^7.26.3",
+ "@babel/plugin-transform-modules-systemjs": "^7.25.9",
+ "@babel/plugin-transform-modules-umd": "^7.25.9",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9",
+ "@babel/plugin-transform-new-target": "^7.25.9",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6",
+ "@babel/plugin-transform-numeric-separator": "^7.25.9",
+ "@babel/plugin-transform-object-rest-spread": "^7.25.9",
+ "@babel/plugin-transform-object-super": "^7.25.9",
+ "@babel/plugin-transform-optional-catch-binding": "^7.25.9",
+ "@babel/plugin-transform-optional-chaining": "^7.25.9",
+ "@babel/plugin-transform-parameters": "^7.25.9",
+ "@babel/plugin-transform-private-methods": "^7.25.9",
+ "@babel/plugin-transform-private-property-in-object": "^7.25.9",
+ "@babel/plugin-transform-property-literals": "^7.25.9",
+ "@babel/plugin-transform-regenerator": "^7.25.9",
+ "@babel/plugin-transform-regexp-modifiers": "^7.26.0",
+ "@babel/plugin-transform-reserved-words": "^7.25.9",
+ "@babel/plugin-transform-shorthand-properties": "^7.25.9",
+ "@babel/plugin-transform-spread": "^7.25.9",
+ "@babel/plugin-transform-sticky-regex": "^7.25.9",
+ "@babel/plugin-transform-template-literals": "^7.26.8",
+ "@babel/plugin-transform-typeof-symbol": "^7.26.7",
+ "@babel/plugin-transform-unicode-escapes": "^7.25.9",
+ "@babel/plugin-transform-unicode-property-regex": "^7.25.9",
+ "@babel/plugin-transform-unicode-regex": "^7.25.9",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.25.9",
+ "@babel/preset-modules": "0.1.6-no-external-plugins",
+ "babel-plugin-polyfill-corejs2": "^0.4.10",
+ "babel-plugin-polyfill-corejs3": "^0.11.0",
+ "babel-plugin-polyfill-regenerator": "^0.6.1",
+ "core-js-compat": "^3.40.0",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-modules": {
+ "version": "0.1.6-no-external-plugins",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+ "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/@babel/preset-react": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz",
+ "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-validator-option": "^7.25.9",
+ "@babel/plugin-transform-react-display-name": "^7.25.9",
+ "@babel/plugin-transform-react-jsx": "^7.25.9",
+ "@babel/plugin-transform-react-jsx-development": "^7.25.9",
+ "@babel/plugin-transform-react-pure-annotations": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-typescript": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz",
+ "integrity": "sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.26.5",
+ "@babel/helper-validator-option": "^7.25.9",
+ "@babel/plugin-syntax-jsx": "^7.25.9",
+ "@babel/plugin-transform-modules-commonjs": "^7.26.3",
+ "@babel/plugin-transform-typescript": "^7.27.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
+ "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
+ "license": "MIT",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz",
+ "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "@babel/parser": "^7.27.0",
+ "@babel/types": "^7.27.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz",
+ "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "@babel/generator": "^7.27.0",
+ "@babel/parser": "^7.27.0",
+ "@babel/template": "^7.27.0",
+ "@babel/types": "^7.27.0",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
+ "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@emnapi/core": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz",
+ "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.0.1",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz",
+ "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz",
+ "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz",
+ "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz",
+ "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.6",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz",
+ "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz",
+ "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
},
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-beta.32",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.32.tgz",
- "integrity": "sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==",
- "dev": true
+ "node_modules/@eslint/js": {
+ "version": "9.23.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz",
+ "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
},
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.1.tgz",
- "integrity": "sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==",
- "cpu": [
- "arm"
- ],
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+ "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
"dev": true,
- "optional": true,
- "os": [
- "android"
- ]
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
},
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.1.tgz",
- "integrity": "sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz",
+ "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==",
"dev": true,
- "optional": true,
- "os": [
- "android"
- ]
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.12.0",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@fullcalendar/core": {
+ "version": "6.1.15",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.15.tgz",
+ "integrity": "sha512-BuX7o6ALpLb84cMw1FCB9/cSgF4JbVO894cjJZ6kP74jzbUZNjtwffwRdA+Id8rrLjT30d/7TrkW90k4zbXB5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "preact": "~10.12.1"
+ }
+ },
+ "node_modules/@fullcalendar/daygrid": {
+ "version": "6.1.15",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.15.tgz",
+ "integrity": "sha512-j8tL0HhfiVsdtOCLfzK2J0RtSkiad3BYYemwQKq512cx6btz6ZZ2RNc/hVnIxluuWFyvx5sXZwoeTJsFSFTEFA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@fullcalendar/core": "~6.1.15"
+ }
+ },
+ "node_modules/@fullcalendar/interaction": {
+ "version": "6.1.15",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.15.tgz",
+ "integrity": "sha512-DOTSkofizM7QItjgu7W68TvKKvN9PSEEvDJceyMbQDvlXHa7pm/WAVtAc6xSDZ9xmB1QramYoWGLHkCYbTW1rQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@fullcalendar/core": "~6.1.15"
+ }
+ },
+ "node_modules/@fullcalendar/list": {
+ "version": "6.1.15",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/list/-/list-6.1.15.tgz",
+ "integrity": "sha512-U1bce04tYDwkFnuVImJSy2XalYIIQr6YusOWRPM/5ivHcJh67Gm8CIMSWpi3KdRSNKFkqBxLPkfZGBMaOcJYug==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@fullcalendar/core": "~6.1.15"
+ }
+ },
+ "node_modules/@fullcalendar/react": {
+ "version": "6.1.15",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.15.tgz",
+ "integrity": "sha512-L0b9hybS2J4e7lq6G2CD4nqriyLEqOH1tE8iI6JQjAMTVh5JicOo5Mqw+fhU5bJ7hLfMw2K3fksxX3Ul1ssw5w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@fullcalendar/core": "~6.1.15",
+ "react": "^16.7.0 || ^17 || ^18 || ^19",
+ "react-dom": "^16.7.0 || ^17 || ^18 || ^19"
+ }
+ },
+ "node_modules/@fullcalendar/timegrid": {
+ "version": "6.1.15",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.15.tgz",
+ "integrity": "sha512-61ORr3A148RtxQ2FNG7JKvacyA/TEVZ7z6I+3E9Oeu3dqTf6M928bFcpehRTIK6zIA6Yifs7BeWHgOE9dFnpbw==",
+ "license": "MIT",
+ "dependencies": {
+ "@fullcalendar/daygrid": "~6.1.15"
+ },
+ "peerDependencies": {
+ "@fullcalendar/core": "~6.1.15"
+ }
+ },
+ "node_modules/@hey-api/codegen-core": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@hey-api/codegen-core/-/codegen-core-0.2.0.tgz",
+ "integrity": "sha512-c7VjBy/8ed0EVLNgaeS9Xxams1Tuv/WK/b4xXH3Qr4wjzYeJUtxOcoP8YdwNLavqKP8pGiuctjX2Z1Pwc4jMgQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=22.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/hey-api"
+ },
+ "peerDependencies": {
+ "typescript": ">=5.5.3"
+ }
+ },
+ "node_modules/@hey-api/json-schema-ref-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@hey-api/json-schema-ref-parser/-/json-schema-ref-parser-1.2.0.tgz",
+ "integrity": "sha512-BMnIuhVgNmSudadw1GcTsP18Yk5l8FrYrg/OSYNxz0D2E0vf4D5e4j5nUbuY8MU6p1vp7ev0xrfP6A/NWazkzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jsdevtools/ono": "^7.1.3",
+ "@types/json-schema": "^7.0.15",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/hey-api"
+ }
+ },
+ "node_modules/@hey-api/openapi-ts": {
+ "version": "0.85.2",
+ "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.85.2.tgz",
+ "integrity": "sha512-pNu+DOtjeXiGhMqSQ/mYadh6BuKR/QiucVunyA2P7w2uyxkfCJ9sHS20Y72KHXzB3nshKJ9r7JMirysoa50SJg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@hey-api/codegen-core": "^0.2.0",
+ "@hey-api/json-schema-ref-parser": "1.2.0",
+ "ansi-colors": "4.1.3",
+ "c12": "3.3.0",
+ "color-support": "1.1.3",
+ "commander": "13.0.0",
+ "handlebars": "4.7.8",
+ "open": "10.1.2",
+ "semver": "7.7.2"
+ },
+ "bin": {
+ "openapi-ts": "bin/index.cjs"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/hey-api"
+ },
+ "peerDependencies": {
+ "typescript": ">=5.5.3"
+ }
+ },
+ "node_modules/@hey-api/openapi-ts/node_modules/commander": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-13.0.0.tgz",
+ "integrity": "sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@hey-api/openapi-ts/node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz",
+ "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
},
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.1.tgz",
- "integrity": "sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==",
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
+ "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
"cpu": [
"arm64"
],
- "dev": true,
+ "license": "Apache-2.0",
"optional": true,
"os": [
"darwin"
- ]
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.0.4"
+ }
},
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.1.tgz",
- "integrity": "sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==",
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
+ "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
"cpu": [
"x64"
],
- "dev": true,
+ "license": "Apache-2.0",
"optional": true,
"os": [
"darwin"
- ]
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.0.4"
+ }
},
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.1.tgz",
- "integrity": "sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==",
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
+ "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
"cpu": [
"arm64"
],
- "dev": true,
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
- "freebsd"
- ]
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.1.tgz",
- "integrity": "sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==",
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
+ "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
"cpu": [
"x64"
],
- "dev": true,
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
- "freebsd"
- ]
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.1.tgz",
- "integrity": "sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==",
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
+ "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
"cpu": [
"arm"
],
- "dev": true,
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.1.tgz",
- "integrity": "sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==",
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
+ "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
"cpu": [
- "arm"
+ "arm64"
],
- "dev": true,
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.1.tgz",
- "integrity": "sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==",
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
+ "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
"cpu": [
- "arm64"
+ "s390x"
],
- "dev": true,
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.1.tgz",
- "integrity": "sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==",
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
+ "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
"cpu": [
- "arm64"
+ "x64"
],
- "dev": true,
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.1.tgz",
- "integrity": "sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==",
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
+ "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
"cpu": [
- "loong64"
+ "arm64"
],
- "dev": true,
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.1.tgz",
- "integrity": "sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==",
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
+ "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
"cpu": [
- "ppc64"
+ "x64"
],
- "dev": true,
+ "license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.1.tgz",
- "integrity": "sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==",
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
+ "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
"cpu": [
- "riscv64"
+ "arm"
],
- "dev": true,
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.0.5"
+ }
},
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.1.tgz",
- "integrity": "sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==",
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
+ "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
"cpu": [
- "riscv64"
+ "arm64"
],
- "dev": true,
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.0.4"
+ }
},
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.1.tgz",
- "integrity": "sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==",
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
+ "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
"cpu": [
"s390x"
],
- "dev": true,
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.0.4"
+ }
},
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.1.tgz",
- "integrity": "sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==",
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
+ "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
"cpu": [
"x64"
],
- "dev": true,
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.0.4"
+ }
},
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.1.tgz",
- "integrity": "sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==",
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
+ "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
"cpu": [
- "x64"
+ "arm64"
],
- "dev": true,
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
+ }
},
- "node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.1.tgz",
- "integrity": "sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==",
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
+ "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
"cpu": [
- "arm64"
+ "x64"
],
- "dev": true,
+ "license": "Apache-2.0",
"optional": true,
"os": [
- "openharmony"
- ]
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
+ }
},
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.1.tgz",
- "integrity": "sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==",
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
+ "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
"cpu": [
- "arm64"
+ "wasm32"
],
- "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
"optional": true,
- "os": [
- "win32"
- ]
+ "dependencies": {
+ "@emnapi/runtime": "^1.2.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.1.tgz",
- "integrity": "sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==",
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
+ "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
"cpu": [
"ia32"
],
- "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.1.tgz",
- "integrity": "sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==",
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
+ "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
"cpu": [
"x64"
],
- "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
- "node_modules/@swc/core": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.5.tgz",
- "integrity": "sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==",
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
"dev": true,
- "hasInstallScript": true,
+ "license": "MIT",
"dependencies": {
- "@swc/counter": "^0.1.3",
- "@swc/types": "^0.1.24"
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/swc"
- },
- "optionalDependencies": {
- "@swc/core-darwin-arm64": "1.13.5",
- "@swc/core-darwin-x64": "1.13.5",
- "@swc/core-linux-arm-gnueabihf": "1.13.5",
- "@swc/core-linux-arm64-gnu": "1.13.5",
- "@swc/core-linux-arm64-musl": "1.13.5",
- "@swc/core-linux-x64-gnu": "1.13.5",
- "@swc/core-linux-x64-musl": "1.13.5",
- "@swc/core-win32-arm64-msvc": "1.13.5",
- "@swc/core-win32-ia32-msvc": "1.13.5",
- "@swc/core-win32-x64-msvc": "1.13.5"
- },
- "peerDependencies": {
- "@swc/helpers": ">=0.5.17"
- },
- "peerDependenciesMeta": {
- "@swc/helpers": {
- "optional": true
- }
+ "node": ">=6.0.0"
}
},
- "node_modules/@swc/core-darwin-arm64": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz",
- "integrity": "sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@jsdevtools/ono": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
+ "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz",
+ "integrity": "sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.3.1",
+ "@emnapi/runtime": "^1.3.1",
+ "@tybys/wasm-util": "^0.9.0"
+ }
+ },
+ "node_modules/@next/env": {
+ "version": "15.2.3",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.3.tgz",
+ "integrity": "sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==",
+ "license": "MIT"
+ },
+ "node_modules/@next/eslint-plugin-next": {
+ "version": "15.1.3",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.3.tgz",
+ "integrity": "sha512-oeP1vnc5Cq9UoOb8SYHAEPbCXMzOgG70l+Zfd+Ie00R25FOm+CCVNrcIubJvB1tvBgakXE37MmqSycksXVPRqg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-glob": "3.3.1"
}
},
- "node_modules/@swc/core-darwin-x64": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz",
- "integrity": "sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==",
+ "node_modules/@next/swc-darwin-arm64": {
+ "version": "15.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.3.tgz",
+ "integrity": "sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==",
"cpu": [
- "x64"
+ "arm64"
],
- "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": ">=10"
+ "node": ">= 10"
}
},
- "node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz",
- "integrity": "sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==",
+ "node_modules/@next/swc-darwin-x64": {
+ "version": "15.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.3.tgz",
+ "integrity": "sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==",
"cpu": [
- "arm"
+ "x64"
],
- "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
- "linux"
+ "darwin"
],
"engines": {
- "node": ">=10"
+ "node": ">= 10"
}
},
- "node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz",
- "integrity": "sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==",
+ "node_modules/@next/swc-linux-arm64-gnu": {
+ "version": "15.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.3.tgz",
+ "integrity": "sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==",
"cpu": [
"arm64"
],
- "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=10"
+ "node": ">= 10"
}
},
- "node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz",
- "integrity": "sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==",
+ "node_modules/@next/swc-linux-arm64-musl": {
+ "version": "15.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.3.tgz",
+ "integrity": "sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==",
"cpu": [
"arm64"
],
- "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=10"
+ "node": ">= 10"
}
},
- "node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz",
- "integrity": "sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==",
+ "node_modules/@next/swc-linux-x64-gnu": {
+ "version": "15.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.3.tgz",
+ "integrity": "sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==",
"cpu": [
"x64"
],
- "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=10"
+ "node": ">= 10"
}
},
- "node_modules/@swc/core-linux-x64-musl": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz",
- "integrity": "sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==",
+ "node_modules/@next/swc-linux-x64-musl": {
+ "version": "15.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.3.tgz",
+ "integrity": "sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==",
"cpu": [
"x64"
],
- "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=10"
+ "node": ">= 10"
}
},
- "node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz",
- "integrity": "sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==",
+ "node_modules/@next/swc-win32-arm64-msvc": {
+ "version": "15.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.3.tgz",
+ "integrity": "sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==",
"cpu": [
"arm64"
],
- "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=10"
+ "node": ">= 10"
}
},
- "node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz",
- "integrity": "sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==",
+ "node_modules/@next/swc-win32-x64-msvc": {
+ "version": "15.2.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.3.tgz",
+ "integrity": "sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==",
"cpu": [
- "ia32"
+ "x64"
],
- "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=10"
+ "node": ">= 10"
}
},
- "node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz",
- "integrity": "sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==",
- "cpu": [
- "x64"
- ],
+ "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,
- "optional": true,
- "os": [
- "win32"
- ],
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
"engines": {
- "node": ">=10"
+ "node": ">= 8"
}
},
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "dev": true
+ "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/@swc/helpers": {
- "version": "0.5.17",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
- "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
- "license": "Apache-2.0",
+ "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": {
- "tslib": "^2.8.0"
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nolyfill/is-core-module": {
+ "version": "1.0.39",
+ "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
+ "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.4.0"
+ }
+ },
+ "node_modules/@react-dnd/asap": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-5.0.2.tgz",
+ "integrity": "sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==",
+ "license": "MIT"
+ },
+ "node_modules/@react-dnd/invariant": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-4.0.2.tgz",
+ "integrity": "sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==",
+ "license": "MIT"
+ },
+ "node_modules/@react-dnd/shallowequal": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz",
+ "integrity": "sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==",
+ "license": "MIT"
+ },
+ "node_modules/@react-jvectormap/core": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@react-jvectormap/core/-/core-1.0.4.tgz",
+ "integrity": "sha512-PefUtLG2Uwu6YVMldTqZCaVu5G+4wS3iQDq5aAV/jY/h8+djIgdSKWb1hEsHk/vb0s2pwallS+VvU7N2xCMncA==",
+ "license": "ISC",
+ "dependencies": {
+ "@react-jvectormap/lib": "^1.0.3",
+ "classnames": "^2.3.1"
+ },
+ "peerDependencies": {
+ "jquery": "^3.6",
+ "react": "^16.8 || ^17 || ^18",
+ "react-dom": "^16.8 || ^17 || ^18"
+ }
+ },
+ "node_modules/@react-jvectormap/jquery-mousewheel": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@react-jvectormap/jquery-mousewheel/-/jquery-mousewheel-1.0.2.tgz",
+ "integrity": "sha512-AmRnBdJfBjDUHreEDDs9qaSo3Q/6oC74m321VuzxkDX6ideVks2n2ouGiMcXq41GdJQoCUzSjfF8KyocL6M+SA==",
+ "license": "MIT",
+ "dependencies": {
+ "jquery": "^3.6.0"
+ }
+ },
+ "node_modules/@react-jvectormap/lib": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@react-jvectormap/lib/-/lib-1.0.3.tgz",
+ "integrity": "sha512-EdPYen5GGrny7Mxc8IYvXtSdjTr3EfWjGCXuy6+0Yz9wZDmCfLFfjmuEOZirhe00BJOzi2LpnYMSp0WaJ2BH7Q==",
+ "license": "(AGPL OR Commercial)",
+ "dependencies": {
+ "@react-jvectormap/jquery-mousewheel": "^1.0.2"
+ }
+ },
+ "node_modules/@react-jvectormap/world": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@react-jvectormap/world/-/world-1.1.2.tgz",
+ "integrity": "sha512-jDSy64DZz4mzEOrVni1zV5rak65+1WZhSGsvAvzHNIMHVx+tdD8R5OikyWUjYte8nxIkOUhQZtVJMK7VOIsmQA==",
+ "license": "MIT"
+ },
+ "node_modules/@rtsao/scc": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rushstack/eslint-patch": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz",
+ "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@svgdotjs/svg.draggable.js": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz",
+ "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@svgdotjs/svg.js": "^3.2.4"
+ }
+ },
+ "node_modules/@svgdotjs/svg.filter.js": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz",
+ "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==",
+ "license": "MIT",
+ "dependencies": {
+ "@svgdotjs/svg.js": "^3.2.4"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "node_modules/@swc/types": {
- "version": "0.1.25",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz",
- "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==",
- "dev": true,
- "dependencies": {
- "@swc/counter": "^0.1.3"
+ "node_modules/@svgdotjs/svg.js": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz",
+ "integrity": "sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Fuzzyma"
}
},
- "node_modules/@tanstack/history": {
- "version": "1.133.3",
- "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.133.3.tgz",
- "integrity": "sha512-zFQnGdX0S4g5xRuS+95iiEXM+qlGvYG7ksmOKx7LaMv60lDWa0imR8/24WwXXvBWJT1KnwVdZcjvhCwz9IiJCw==",
+ "node_modules/@svgdotjs/svg.resize.js": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz",
+ "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==",
+ "license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">= 14.18"
},
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "peerDependencies": {
+ "@svgdotjs/svg.js": "^3.2.4",
+ "@svgdotjs/svg.select.js": "^4.0.1"
+ }
+ },
+ "node_modules/@svgdotjs/svg.select.js": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.2.tgz",
+ "integrity": "sha512-5gWdrvoQX3keo03SCmgaBbD+kFftq0F/f2bzCbNnpkkvW6tk4rl4MakORzFuNjvXPWwB4az9GwuvVxQVnjaK2g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18"
+ },
+ "peerDependencies": {
+ "@svgdotjs/svg.js": "^3.2.4"
}
},
- "node_modules/@tanstack/query-core": {
- "version": "5.90.2",
- "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.2.tgz",
- "integrity": "sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ==",
+ "node_modules/@svgr/babel-plugin-add-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@tanstack/query-devtools": {
- "version": "5.90.1",
- "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.90.1.tgz",
- "integrity": "sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ==",
+ "node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@tanstack/react-query": {
- "version": "5.90.2",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.2.tgz",
- "integrity": "sha512-CLABiR+h5PYfOWr/z+vWFt5VsOA2ekQeRQBFSKlcoW6Ndx/f8rfyVmq4LbgOM4GG2qtxAxjLYLOpCNTYm4uKzw==",
- "dependencies": {
- "@tanstack/query-core": "5.90.2"
+ "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz",
+ "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
},
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
- "react": "^18 || ^19"
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@tanstack/react-query-devtools": {
- "version": "5.90.2",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.90.2.tgz",
- "integrity": "sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ==",
- "dependencies": {
- "@tanstack/query-devtools": "5.90.1"
+ "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz",
+ "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
},
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
- "@tanstack/react-query": "^5.90.2",
- "react": "^18 || ^19"
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@tanstack/react-router": {
- "version": "1.133.15",
- "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.133.15.tgz",
- "integrity": "sha512-3gQitqq/5lL//KSv9Ro34Fw7xak2ZQcPbR7x6bu5X4W0v97xTE7+bMbBS5UAg9zXTq0FNyB124GabgyBgeQ0NA==",
- "dependencies": {
- "@tanstack/history": "1.133.3",
- "@tanstack/react-store": "^0.7.0",
- "@tanstack/router-core": "1.133.15",
- "isbot": "^5.1.22",
- "tiny-invariant": "^1.3.3",
- "tiny-warning": "^1.0.3"
- },
+ "node_modules/@svgr/babel-plugin-svg-dynamic-title": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz",
+ "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=14"
},
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
- "react": ">=18.0.0 || >=19.0.0",
- "react-dom": ">=18.0.0 || >=19.0.0"
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@tanstack/react-router-devtools": {
- "version": "1.131.42",
- "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.131.42.tgz",
- "integrity": "sha512-7pymFB1CCimRHot2Zp0ZekQjd1iN812V88n9NLPSeiv9sVRtRVIaLphJjDeudx1NNgkfSJPx2lOhz6K38cuZog==",
+ "node_modules/@svgr/babel-plugin-svg-em-dimensions": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz",
+ "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==",
"dev": true,
- "dependencies": {
- "@tanstack/router-devtools-core": "1.131.42"
- },
+ "license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=14"
},
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
- "@tanstack/react-router": "^1.131.41",
- "react": ">=18.0.0 || >=19.0.0",
- "react-dom": ">=18.0.0 || >=19.0.0"
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@tanstack/react-store": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.7.4.tgz",
- "integrity": "sha512-DyG1e5Qz/c1cNLt/NdFbCA7K1QGuFXQYT6EfUltYMJoQ4LzBOGnOl5IjuxepNcRtmIKkGpmdMzdFZEkevgU9bQ==",
+ "node_modules/@svgr/babel-plugin-transform-react-native-svg": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz",
+ "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@tanstack/store": "0.7.4",
- "use-sync-external-store": "^1.5.0"
+ "engines": {
+ "node": ">=14"
},
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/sponsors/gregberge"
},
"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"
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@tanstack/router-core": {
- "version": "1.133.15",
- "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.133.15.tgz",
- "integrity": "sha512-ZWAmoFcgi27Ojv2FH3Dq3D6Vt73LswdTnA1tyHShNWQf7wOMH/VKKB9JxiXJqpLTK4NJqpnUp/x0/3nvmdrIqg==",
- "dependencies": {
- "@tanstack/history": "1.133.3",
- "@tanstack/store": "^0.7.0",
- "cookie-es": "^2.0.0",
- "seroval": "^1.3.2",
- "seroval-plugins": "^1.3.2",
- "tiny-invariant": "^1.3.3",
- "tiny-warning": "^1.0.3"
- },
+ "node_modules/@svgr/babel-plugin-transform-svg-component": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz",
+ "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@tanstack/router-devtools": {
- "version": "1.131.42",
- "resolved": "https://registry.npmjs.org/@tanstack/router-devtools/-/router-devtools-1.131.42.tgz",
- "integrity": "sha512-iWJzr4aN/IOsDSaF/kysM7tPSYj89hnzcWMKNuYN9redIwHgg7rNZ4toKhfNWYNfzxdhKwL9/Yvpf7bDemyc+Q==",
+ "node_modules/@svgr/babel-preset": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz",
+ "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@tanstack/react-router-devtools": "1.131.42",
- "clsx": "^2.1.1",
- "goober": "^2.1.16"
+ "@svgr/babel-plugin-add-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0",
+ "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0",
+ "@svgr/babel-plugin-svg-dynamic-title": "8.0.0",
+ "@svgr/babel-plugin-svg-em-dimensions": "8.0.0",
+ "@svgr/babel-plugin-transform-react-native-svg": "8.1.0",
+ "@svgr/babel-plugin-transform-svg-component": "8.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=14"
},
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
- "@tanstack/react-router": "^1.131.41",
- "csstype": "^3.0.10",
- "react": ">=18.0.0 || >=19.0.0",
- "react-dom": ">=18.0.0 || >=19.0.0"
- },
- "peerDependenciesMeta": {
- "csstype": {
- "optional": true
- }
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@tanstack/router-devtools-core": {
- "version": "1.131.42",
- "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.131.42.tgz",
- "integrity": "sha512-o8jKTiwXcUSjmkozcMjIw1yhjVYeXcuQO7DtfgjKW3B85iveH6VzYK+bGEVU7wmLNMuUSe2eI/7RBzJ6a5+MCA==",
+ "node_modules/@svgr/core": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz",
+ "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "clsx": "^2.1.1",
- "goober": "^2.1.16",
- "solid-js": "^1.9.5"
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.1.0",
+ "camelcase": "^6.2.0",
+ "cosmiconfig": "^8.1.3",
+ "snake-case": "^3.0.4"
},
"engines": {
- "node": ">=12"
+ "node": ">=14"
},
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
- },
- "peerDependencies": {
- "@tanstack/router-core": "^1.131.41",
- "csstype": "^3.0.10",
- "solid-js": ">=1.9.5",
- "tiny-invariant": "^1.3.3"
- },
- "peerDependenciesMeta": {
- "csstype": {
- "optional": true
- }
+ "url": "https://github.com/sponsors/gregberge"
}
},
- "node_modules/@tanstack/router-generator": {
- "version": "1.133.15",
- "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.133.15.tgz",
- "integrity": "sha512-TXI07UzV5t1j1LeJ2eOErV9TxvzBRx2oSCEmkVaWMXaGKuQL7I4VB9e9w15ylHnvCO2Z/4DgIhUVF6h9/ZS3Mw==",
+ "node_modules/@svgr/hast-util-to-babel-ast": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz",
+ "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@tanstack/router-core": "1.133.15",
- "@tanstack/router-utils": "1.133.3",
- "@tanstack/virtual-file-routes": "1.133.3",
- "prettier": "^3.5.0",
- "recast": "^0.23.11",
- "source-map": "^0.7.4",
- "tsx": "^4.19.2",
- "zod": "^3.24.2"
+ "@babel/types": "^7.21.3",
+ "entities": "^4.4.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=14"
},
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/sponsors/gregberge"
}
},
- "node_modules/@tanstack/router-generator/node_modules/source-map": {
- "version": "0.7.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
- "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "node_modules/@svgr/plugin-jsx": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz",
+ "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.1.0",
+ "@svgr/hast-util-to-babel-ast": "8.0.0",
+ "svg-parser": "^2.0.4"
+ },
"engines": {
- "node": ">= 12"
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@svgr/core": "*"
}
},
- "node_modules/@tanstack/router-plugin": {
- "version": "1.133.15",
- "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.133.15.tgz",
- "integrity": "sha512-c3m7Pfuth/TXiRol0OpTw+cJyE7RxJpiMXDLooCiZgRDu2VhyXaanPLuuti9vyZiVdSrVZTQ7tJBFABymWbX5w==",
+ "node_modules/@svgr/plugin-svgo": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz",
+ "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/core": "^7.27.7",
- "@babel/plugin-syntax-jsx": "^7.27.1",
- "@babel/plugin-syntax-typescript": "^7.27.1",
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.27.7",
- "@babel/types": "^7.27.7",
- "@tanstack/router-core": "1.133.15",
- "@tanstack/router-generator": "1.133.15",
- "@tanstack/router-utils": "1.133.3",
- "@tanstack/virtual-file-routes": "1.133.3",
- "babel-dead-code-elimination": "^1.0.10",
- "chokidar": "^3.6.0",
- "unplugin": "^2.1.2",
- "zod": "^3.24.2"
+ "cosmiconfig": "^8.1.3",
+ "deepmerge": "^4.3.1",
+ "svgo": "^3.0.2"
},
"engines": {
- "node": ">=12"
+ "node": ">=14"
},
"funding": {
"type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
- "@rsbuild/core": ">=1.0.2",
- "@tanstack/react-router": "^1.133.15",
- "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0",
- "vite-plugin-solid": "^2.11.8",
- "webpack": ">=5.92.0"
- },
- "peerDependenciesMeta": {
- "@rsbuild/core": {
- "optional": true
- },
- "@tanstack/react-router": {
- "optional": true
- },
- "vite": {
- "optional": true
- },
- "vite-plugin-solid": {
- "optional": true
- },
- "webpack": {
- "optional": true
- }
+ "@svgr/core": "*"
}
},
- "node_modules/@tanstack/router-plugin/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/@svgr/webpack": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz",
+ "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==",
"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"
+ "@babel/core": "^7.21.3",
+ "@babel/plugin-transform-react-constant-elements": "^7.21.3",
+ "@babel/preset-env": "^7.20.2",
+ "@babel/preset-react": "^7.18.6",
+ "@babel/preset-typescript": "^7.21.0",
+ "@svgr/core": "8.1.0",
+ "@svgr/plugin-jsx": "8.1.0",
+ "@svgr/plugin-svgo": "8.1.0"
},
"engines": {
- "node": ">= 8.10.0"
+ "node": ">=14"
},
"funding": {
- "url": "https://paulmillr.com/funding/"
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.5.15",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
+ "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@tailwindcss/forms": {
+ "version": "0.5.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz",
+ "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==",
+ "license": "MIT",
+ "dependencies": {
+ "mini-svg-data-uri": "^1.2.3"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1"
+ }
+ },
+ "node_modules/@tailwindcss/node": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.15.tgz",
+ "integrity": "sha512-IODaJjNmiasfZX3IoS+4Em3iu0fD2HS0/tgrnkYfW4hyUor01Smnr5eY3jc4rRgaTDrJlDmBTHbFO0ETTDaxWA==",
+ "license": "MIT",
+ "dependencies": {
+ "enhanced-resolve": "^5.18.1",
+ "jiti": "^2.4.2",
+ "tailwindcss": "4.0.15"
+ }
+ },
+ "node_modules/@tailwindcss/oxide": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.15.tgz",
+ "integrity": "sha512-e0uHrKfPu7JJGMfjwVNyt5M0u+OP8kUmhACwIRlM+JNBuReDVQ63yAD1NWe5DwJtdaHjugNBil76j+ks3zlk6g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
},
"optionalDependencies": {
- "fsevents": "~2.3.2"
+ "@tailwindcss/oxide-android-arm64": "4.0.15",
+ "@tailwindcss/oxide-darwin-arm64": "4.0.15",
+ "@tailwindcss/oxide-darwin-x64": "4.0.15",
+ "@tailwindcss/oxide-freebsd-x64": "4.0.15",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.15",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.0.15",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.0.15",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.0.15",
+ "@tailwindcss/oxide-linux-x64-musl": "4.0.15",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.0.15",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.0.15"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-android-arm64": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.15.tgz",
+ "integrity": "sha512-EBuyfSKkom7N+CB3A+7c0m4+qzKuiN0WCvzPvj5ZoRu4NlQadg/mthc1tl5k9b5ffRGsbDvP4k21azU4VwVk3Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
}
},
- "node_modules/@tanstack/router-plugin/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.15.tgz",
+ "integrity": "sha512-ObVAnEpLepMhV9VoO0JSit66jiN5C4YCqW3TflsE9boo2Z7FIjV80RFbgeL2opBhtxbaNEDa6D0/hq/EP03kgQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-x64": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.15.tgz",
+ "integrity": "sha512-IElwoFhUinOr9MyKmGTPNi1Rwdh68JReFgYWibPWTGuevkHkLWKEflZc2jtI5lWZ5U9JjUnUfnY43I4fEXrc4g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.15.tgz",
+ "integrity": "sha512-6BLLqyx7SIYRBOnTZ8wgfXANLJV5TQd3PevRJZp0vn42eO58A2LykRKdvL1qyPfdpmEVtF+uVOEZ4QTMqDRAWA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.15.tgz",
+ "integrity": "sha512-Zy63EVqO9241Pfg6G0IlRIWyY5vNcWrL5dd2WAKVJZRQVeolXEf1KfjkyeAAlErDj72cnyXObEZjMoPEKHpdNw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.15.tgz",
+ "integrity": "sha512-2NemGQeaTbtIp1Z2wyerbVEJZTkAWhMDOhhR5z/zJ75yMNf8yLnE+sAlyf6yGDNr+1RqvWrRhhCFt7i0CIxe4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.15.tgz",
+ "integrity": "sha512-342GVnhH/6PkVgKtEzvNVuQ4D+Q7B7qplvuH20Cfz9qEtydG6IQczTZ5IT4JPlh931MG1NUCVxg+CIorr1WJyw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.15.tgz",
+ "integrity": "sha512-g76GxlKH124RuGqacCEFc2nbzRl7bBrlC8qDQMiUABkiifDRHOIUjgKbLNG4RuR9hQAD/MKsqZ7A8L08zsoBrw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.15.tgz",
+ "integrity": "sha512-Gg/Y1XrKEvKpq6WeNt2h8rMIKOBj/W3mNa5NMvkQgMC7iO0+UNLrYmt6zgZufht66HozNpn+tJMbbkZ5a3LczA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.15.tgz",
+ "integrity": "sha512-7QtSSJwYZ7ZK1phVgcNZpuf7c7gaCj8Wb0xjliligT5qCGCp79OV2n3SJummVZdw4fbTNKUOYMO7m1GinppZyA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.15.tgz",
+ "integrity": "sha512-JQ5H+5MLhOjpgNp6KomouE0ZuKmk3hO5h7/ClMNAQ8gZI2zkli3IH8ZqLbd2DVfXDbdxN2xvooIEeIlkIoSCqw==",
+ "cpu": [
+ "x64"
+ ],
"license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
+ "node": ">= 10"
}
},
- "node_modules/@tanstack/router-plugin/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/@tailwindcss/postcss": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.0.15.tgz",
+ "integrity": "sha512-qyrpoDKIO7wzkRbKCvGLo7gXRjT9/Njf7ZJiJhG4njrfZkvOhjwnaHpYbpxYeDysEg+9pB1R4jcd+vQ7ZUDsmQ==",
"license": "MIT",
"dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
+ "@alloc/quick-lru": "^5.2.0",
+ "@tailwindcss/node": "4.0.15",
+ "@tailwindcss/oxide": "4.0.15",
+ "lightningcss": "1.29.2",
+ "postcss": "^8.4.41",
+ "tailwindcss": "4.0.15"
}
},
- "node_modules/@tanstack/router-utils": {
- "version": "1.133.3",
- "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.133.3.tgz",
- "integrity": "sha512-miPFlt0aG6ID5VDolYuRXgLS7cofvbZGMvHwf2Wmyxjo6GLp/kxxpkQrfM4T1I5cwjwYZZAQmdUKbVHwFZz9sQ==",
+ "node_modules/@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
"dev": true,
- "dependencies": {
- "@babel/core": "^7.27.4",
- "@babel/generator": "^7.27.5",
- "@babel/parser": "^7.27.5",
- "@babel/preset-typescript": "^7.27.1",
- "ansis": "^4.1.0",
- "diff": "^8.0.2",
- "pathe": "^2.0.3",
- "tinyglobby": "^0.2.15"
- },
+ "license": "ISC",
"engines": {
- "node": ">=12"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
- }
- },
- "node_modules/@tanstack/router-utils/node_modules/pathe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
- "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
- "dev": true
- },
- "node_modules/@tanstack/store": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.7.4.tgz",
- "integrity": "sha512-F1XqZQici1Aq6WigEfcxJSml92nW+85Om8ElBMokPNg5glCYVOmPkZGIQeieYFxcPiKTfwo0MTOQpUyJtwncrg==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "node": ">=10.13.0"
}
},
- "node_modules/@tanstack/virtual-file-routes": {
- "version": "1.133.3",
- "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.133.3.tgz",
- "integrity": "sha512-6d2AP9hAjEi8mcIew2RkxBX+wClH1xedhfaYhs8fUiX+V2Cedk7RBD9E9ww2z6BGUYD8Es4fS0OIrzXZWHKGhw==",
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
+ "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
"dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
}
},
"node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
+ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
@@ -2332,959 +3460,901 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/node": {
- "version": "24.5.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.2.tgz",
- "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==",
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
"dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "20.17.27",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.27.tgz",
+ "integrity": "sha512-U58sbKhDrthHlxHRJw7ZLiLDZGmAUOZUbpw0S6nL27sYUdhvgBLCRu/keSd6qcTsfArd1sRFCCBxzWATGr/0UA==",
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
- "undici-types": "~7.12.0"
+ "undici-types": "~6.19.2"
}
},
- "node_modules/@types/parse-json": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
- "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="
- },
"node_modules/@types/react": {
- "version": "19.2.2",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz",
- "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==",
- "dev": true,
+ "version": "19.0.12",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz",
+ "integrity": "sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==",
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"csstype": "^3.0.2"
}
},
"node_modules/@types/react-dom": {
- "version": "19.2.1",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.1.tgz",
- "integrity": "sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==",
+ "version": "19.0.4",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz",
+ "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
- "@types/react": "^19.2.0"
+ "@types/react": "^19.0.0"
}
},
- "node_modules/@vitejs/plugin-react-swc": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.0.1.tgz",
- "integrity": "sha512-NQhPjysi5duItyrMd5JWZFf2vNOuSMyw+EoZyTBDzk+DkfYD8WNrsUs09sELV2cr1P15nufsN25hsUBt4CKF9Q==",
+ "node_modules/@types/react-transition-group": {
+ "version": "4.4.12",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz",
+ "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.28.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.28.0.tgz",
+ "integrity": "sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@rolldown/pluginutils": "1.0.0-beta.32",
- "@swc/core": "^1.13.2"
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.28.0",
+ "@typescript-eslint/type-utils": "8.28.0",
+ "@typescript-eslint/utils": "8.28.0",
+ "@typescript-eslint/visitor-keys": "8.28.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.0.1"
},
"engines": {
- "node": "^20.19.0 || >=22.12.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "vite": "^4 || ^5 || ^6 || ^7"
- }
- },
- "node_modules/@zag-js/accordion": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/accordion/-/accordion-1.24.1.tgz",
- "integrity": "sha512-JOlmXjO+1tTlyeZ93S+chIlV8uDr8fodj3/XCjLFHc/G116O8cN18KG0Ug9pImy1vT2Kkwb9Ag9QOTyUAXM3PA==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/anatomy": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/anatomy/-/anatomy-1.24.1.tgz",
- "integrity": "sha512-mRkpetNjnjgvdyEX880AOjhMhcgdRMLjOM+aEgoDRnhultC4im+nriNoCShJLeVpwsRrEQCU7YVXO4mZaqWUMg=="
- },
- "node_modules/@zag-js/angle-slider": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/angle-slider/-/angle-slider-1.24.1.tgz",
- "integrity": "sha512-pcWIpVZDMbujMK0nFaKa0wd7uGkP4E5D7x8cmvoiKMT4E1vZpg2kZeN9qmdnhum9ye7nb80IPKhcDl9C0JuSLw==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/rect-utils": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/aria-hidden": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/aria-hidden/-/aria-hidden-1.24.1.tgz",
- "integrity": "sha512-R/a80ZjITZi4rotN7Q9+RTCYCdmJZf3rZi9bObczbR7h5j5GSsjikByUjksWAYzPvFxQxBWTs4GqlCI9dU2f9A=="
- },
- "node_modules/@zag-js/async-list": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/async-list/-/async-list-1.24.1.tgz",
- "integrity": "sha512-EZE3wORLOhMtT1tiDA0kTHrtY7XNkOoNyn5jCs8Ec1GfqIHSRzQB+2jt+wPIBwUhDcgQksXgOy91s/i9XfQe1g==",
- "dependencies": {
- "@zag-js/core": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/auto-resize": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/auto-resize/-/auto-resize-1.24.1.tgz",
- "integrity": "sha512-OH1VTeObddMiN2PUK+7SpkPV8Znlkdq+10odmbbe9K2MZPh352RNcPYytIZTWT0X4/4czhn2MTU6IhZ2lZp2hw==",
- "dependencies": {
- "@zag-js/dom-query": "1.24.1"
- }
- },
- "node_modules/@zag-js/avatar": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/avatar/-/avatar-1.24.1.tgz",
- "integrity": "sha512-zYGUdkxsMoN8OAFYYCZBrsQx++kjWEBdYZew4en9g8vw7yonNjzywtfF/Vd3Dv6mUZ2r5JtaltbK/qp4aBdZvg==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/carousel": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/carousel/-/carousel-1.24.1.tgz",
- "integrity": "sha512-7WGlFtF4JoIK4kduiFgucdTe9eD+884d9BF9Sh308MlpiL0KZnO3l3Pyq58yi4R0KUTy7zILLGSsUesifVAuEA==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/scroll-snap": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/checkbox": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/checkbox/-/checkbox-1.24.1.tgz",
- "integrity": "sha512-eU/RKaO44Tgt1iTGg26M2nUd12p+gTuq2rNjqVuPfN3dvRzYNi5rGKk6yTQI2T4DH4D+fDMz6gUneiBuGcVoJA==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-visible": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/clipboard": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/clipboard/-/clipboard-1.24.1.tgz",
- "integrity": "sha512-GfmjjiEDS9NB6Wo/ThbbzO10BgOYzTSeG00a/pJ5QpvSgvOCz+oLV5NBQHOd8XjOw0e0GQEyfsif0i6wQExSIQ==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/collapsible": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/collapsible/-/collapsible-1.24.1.tgz",
- "integrity": "sha512-U6AP4nE6jwMC3kirFQmOL9i3CSfp8mJqb+Gv3opbClpjqCa8hn9v4PNiimKmd0Qr3kynuVRpAshaUaLeg33YiA==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/collection": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/collection/-/collection-1.24.1.tgz",
- "integrity": "sha512-aWNDI0iZ5Wb8vCZLJWPjRQOK5/B2wvhhR1+pYaScxZfWy2das2DVKam8tnR0p1GrRfBi/kZNaCXtvM1ZNPjlOQ==",
- "dependencies": {
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/color-picker": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/color-picker/-/color-picker-1.24.1.tgz",
- "integrity": "sha512-vLW11JrySJR5fGeXXdmlCJuNm7yE0Tsx/SjkX0WBnrPC4PYaGfiwF7LT59bs5XsQp65kEaIca6mw/J0Bouc8Sw==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/color-utils": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/color-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/color-utils/-/color-utils-1.24.1.tgz",
- "integrity": "sha512-8KPTa3I9+WbDLrYPH5knEYMW3CjAC20ikosdrgYshGTFIPuqinAnsxD7H0fZO4I+jSjuhtIyNQuvgwJar9A2rg==",
- "dependencies": {
- "@zag-js/utils": "1.24.1"
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
- "node_modules/@zag-js/combobox": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/combobox/-/combobox-1.24.1.tgz",
- "integrity": "sha512-BhjQOL/Ssr5lQLPCyEersCqOqllFlNuR8nvQOgl1u8Y0EaZR+ZPQbgXum6kE5AuH3SlcY9+1kDK1ZLswOagL1Q==",
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.28.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.28.0.tgz",
+ "integrity": "sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/aria-hidden": "1.24.1",
- "@zag-js/collection": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "@typescript-eslint/scope-manager": "8.28.0",
+ "@typescript-eslint/types": "8.28.0",
+ "@typescript-eslint/typescript-estree": "8.28.0",
+ "@typescript-eslint/visitor-keys": "8.28.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
- "node_modules/@zag-js/core": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/core/-/core-1.24.1.tgz",
- "integrity": "sha512-0e7QdxBaY9PMHQfDY/Xu/7MKyRxNsriNscpkZI7L4MHMGPmxdfedGBpteI3gFfqWsdJ5NvvpqxdLUwkbYk5Q5A==",
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.28.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.28.0.tgz",
+ "integrity": "sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "@typescript-eslint/types": "8.28.0",
+ "@typescript-eslint/visitor-keys": "8.28.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@zag-js/date-picker": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/date-picker/-/date-picker-1.24.1.tgz",
- "integrity": "sha512-8jLv074sGJQw4L+5YTDv7l2bwb1x9E7YhvklCffhf/7OzW7RB/ELkljFhmjueuJp7W/sD4xhJyigjp/mDEg1XA==",
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.28.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.28.0.tgz",
+ "integrity": "sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/date-utils": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/live-region": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "@typescript-eslint/typescript-estree": "8.28.0",
+ "@typescript-eslint/utils": "8.28.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^2.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@internationalized/date": ">=3.0.0"
- }
- },
- "node_modules/@zag-js/date-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/date-utils/-/date-utils-1.24.1.tgz",
- "integrity": "sha512-Rgll6P4Imq479WxH3uMvwQri4o4lF2cxWX2Hka/W7Nhv1DhPBnmfBw30INyWPXzx5agEVzKdGX/br8MU5DV33Q==",
- "peerDependencies": {
- "@internationalized/date": ">=3.0.0"
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
- "node_modules/@zag-js/dialog": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/dialog/-/dialog-1.24.1.tgz",
- "integrity": "sha512-ITzOoXBC92vIkhNvxM0GMMKwboLLk7hSU9dsplk/X9bpX+fQywgc6d5O4I7WHCMmgUWI5y3/aWjqsWATWwufWg==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/aria-hidden": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-trap": "1.24.1",
- "@zag-js/remove-scroll": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.28.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.28.0.tgz",
+ "integrity": "sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@zag-js/dismissable": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-1.24.1.tgz",
- "integrity": "sha512-Oca+nbwaqHGt0rmkKfmpExwL+kVYLbVi6fxhzHP1WBrip//IUThoTrPH/gqB51o1DT1z/VNE+8BhWhsHSgkQfw==",
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.28.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.28.0.tgz",
+ "integrity": "sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/interact-outside": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "@typescript-eslint/types": "8.28.0",
+ "@typescript-eslint/visitor-keys": "8.28.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^2.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
}
},
- "node_modules/@zag-js/dom-query": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-1.24.1.tgz",
- "integrity": "sha512-ww3tS5hrB2s6ywGtjMjSOajP19CnQOH0IAGgzjE+lbvDD+ZroXWn9O3Z/v2kTfKNwZFQ4TOb8oSymuSRQsFOYg==",
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/types": "1.24.1"
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/@zag-js/editable": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/editable/-/editable-1.24.1.tgz",
- "integrity": "sha512-SV8X7jd95ZAx4VnlhoEcbAiW8jhoGkPf7L0JFB2KWX+NFacEVCKGQpDjZpdzD6j7C10750v3blbkjr6iyzeIqw==",
+ "node_modules/@typescript-eslint/typescript-estree/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": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/interact-outside": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "@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/@zag-js/file-upload": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/file-upload/-/file-upload-1.24.1.tgz",
- "integrity": "sha512-Un0+qDlkoC93pf7/Nvq9DBVKR6PBKybbNE/En/PC4XLJybK448bY85UuEdBPgXEoR6hIGA3t8NdeHZ+PUoZXIw==",
+ "node_modules/@typescript-eslint/typescript-estree/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": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/file-utils": "1.24.1",
- "@zag-js/i18n-utils": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "node_modules/@zag-js/file-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/file-utils/-/file-utils-1.24.1.tgz",
- "integrity": "sha512-ydMct0iyd4uPxf+NP4gfyPq1gJlvW29WWIm5ez9El9L+z5tDBhXYNc73s2kSdDBKXkO4fp6Mwoqbz/wZOw99/Q==",
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
"dependencies": {
- "@zag-js/i18n-utils": "1.24.1"
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@zag-js/floating-panel": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/floating-panel/-/floating-panel-1.24.1.tgz",
- "integrity": "sha512-qVVtnKCQE2C//0q7utRvpfRKsZedL8gnSqwHDX4ie8nKmLLSLn6jDGuAzxrscsGPHEjCOru9NlTHlAAMtB3ybQ==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/rect-utils": "1.24.1",
- "@zag-js/store": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "node_modules/@zag-js/focus-trap": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/focus-trap/-/focus-trap-1.24.1.tgz",
- "integrity": "sha512-cpgYWWaiKx9eycm4Mahv6Dng5+CbDiTtyz/gnbZUv6sqcM4b9N+UqdmBdWYPLHV4gZYrzuO+X4P1C/Ew/rA+xg==",
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.28.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.28.0.tgz",
+ "integrity": "sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/dom-query": "1.24.1"
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.28.0",
+ "@typescript-eslint/types": "8.28.0",
+ "@typescript-eslint/typescript-estree": "8.28.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
- "node_modules/@zag-js/focus-visible": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-1.24.1.tgz",
- "integrity": "sha512-HzUf8cRl5tbIil6rVe24CxC3s1pdFGpfYSt5NyaFoFd0HuWhobp+De1kVUvlLU0DDUU6Kgw6DB1w8APEPzb8gg==",
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.28.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.28.0.tgz",
+ "integrity": "sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/dom-query": "1.24.1"
+ "@typescript-eslint/types": "8.28.0",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@zag-js/highlight-word": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/highlight-word/-/highlight-word-1.24.1.tgz",
- "integrity": "sha512-paDF/sWKDMMclpCzrG60vD4/AFQ3EOu2lzQxl7S21uD/B8Rir4w1CkxK/9+cm1Bu7mj4mkR4t+VJxycEZ7YuIw=="
+ "node_modules/@unrs/rspack-resolver-binding-darwin-arm64": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.2.2.tgz",
+ "integrity": "sha512-i7z0B+C0P8Q63O/5PXJAzeFtA1ttY3OR2VSJgGv18S+PFNwD98xHgAgPOT1H5HIV6jlQP8Avzbp09qxJUdpPNw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
},
- "node_modules/@zag-js/hover-card": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/hover-card/-/hover-card-1.24.1.tgz",
- "integrity": "sha512-zXTcLEb8YOFoEjDMsMcxqidRDN2fY0C94j+XdZYj5eZtKBIgbyCyAjvZrEu9yyPqqrXCNwYU0fTFjac3t9IV4g==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
+ "node_modules/@unrs/rspack-resolver-binding-darwin-x64": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.2.2.tgz",
+ "integrity": "sha512-YEdFzPjIbDUCfmehC6eS+AdJYtFWY35YYgWUnqqTM2oe/N58GhNy5yRllxYhxwJ9GcfHoNc6Ubze1yjkNv+9Qg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
},
- "node_modules/@zag-js/i18n-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/i18n-utils/-/i18n-utils-1.24.1.tgz",
- "integrity": "sha512-dI9M73FTJcE40s/TPBLLKsypmBoMNe5NoRSBW64PWdmn0fCq65qcAUMgwQ0MVenh4oofoDYyffl8pIStr8T1tA==",
- "dependencies": {
- "@zag-js/dom-query": "1.24.1"
- }
+ "node_modules/@unrs/rspack-resolver-binding-freebsd-x64": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.2.2.tgz",
+ "integrity": "sha512-TU4ntNXDgPN2giQyyzSnGWf/dVCem5lvwxg0XYvsvz35h5H19WrhTmHgbrULMuypCB3aHe1enYUC9rPLDw45mA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
},
- "node_modules/@zag-js/interact-outside": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-1.24.1.tgz",
- "integrity": "sha512-xKyGT295WVrlJaOPCVBrundlXqL4YEvl36SHNSi7EZs/AYpzxR/aBtnFCRN1/7nWvdqvfGs7ya0kl/ly0H7VBg==",
- "dependencies": {
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/json-tree-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/json-tree-utils/-/json-tree-utils-1.24.1.tgz",
- "integrity": "sha512-TWVg+Y4fLr9o0YaB3OnX4xmV91Te/vzRwnNKntsz3GIWJ5fLNngg4hm3E+eaYnJIlKMHrvJv4T/UB4IGYUF+EQ=="
+ "node_modules/@unrs/rspack-resolver-binding-linux-arm-gnueabihf": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.2.2.tgz",
+ "integrity": "sha512-ik3w4/rU6RujBvNWiDnKdXi1smBhqxEDhccNi/j2rHaMjm0Fk49KkJ6XKsoUnD2kZ5xaMJf9JjailW/okfUPIw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
},
- "node_modules/@zag-js/listbox": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/listbox/-/listbox-1.24.1.tgz",
- "integrity": "sha512-fTJ125SWVZ+NxgkT6s8LWpdJQMeADk9Lm+Ur1pi0mZnRCmuHI3nwPkg1dfqynjVyrKs6P8wBmUxt3hlr2cc6TQ==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/collection": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-visible": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
+ "node_modules/@unrs/rspack-resolver-binding-linux-arm64-gnu": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.2.2.tgz",
+ "integrity": "sha512-fp4Azi8kHz6TX8SFmKfyScZrMLfp++uRm2srpqRjsRZIIBzH74NtSkdEUHImR4G7f7XJ+sVZjCc6KDDK04YEpQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
},
- "node_modules/@zag-js/live-region": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/live-region/-/live-region-1.24.1.tgz",
- "integrity": "sha512-A/55dOyRhfdgVtCBP05Uf2UGz/58H0TMWP69GdVYM4uADtfCLNPy6yxHAt9p334qJsWicg/YWSzBdEAVTThNag=="
+ "node_modules/@unrs/rspack-resolver-binding-linux-arm64-musl": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.2.2.tgz",
+ "integrity": "sha512-gMiG3DCFioJxdGBzhlL86KcFgt9HGz0iDhw0YVYPsShItpN5pqIkNrI+L/Q/0gfDiGrfcE0X3VANSYIPmqEAlQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
},
- "node_modules/@zag-js/menu": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/menu/-/menu-1.24.1.tgz",
- "integrity": "sha512-XPNQbkIxSbNuYNLLQZlgXbj6Ptn2XHT5BXkUSw2hSbIg35S7Lq8gckiZVtxmUiX8zbv7krTBSD7zThSnwx1TOA==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/rect-utils": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
+ "node_modules/@unrs/rspack-resolver-binding-linux-x64-gnu": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.2.2.tgz",
+ "integrity": "sha512-n/4n2CxaUF9tcaJxEaZm+lqvaw2gflfWQ1R9I7WQgYkKEKbRKbpG/R3hopYdUmLSRI4xaW1Cy0Bz40eS2Yi4Sw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
},
- "node_modules/@zag-js/number-input": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/number-input/-/number-input-1.24.1.tgz",
- "integrity": "sha512-F5nX0VvuRmSxddJ8byHYp4OSHLU1C5Fv1rT4L1AnSXud8q6C+zCy4Vy8772pUKNobZf0q8Ru4SgnOe5TQcvRpg==",
- "dependencies": {
- "@internationalized/number": "3.6.5",
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
+ "node_modules/@unrs/rspack-resolver-binding-linux-x64-musl": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.2.2.tgz",
+ "integrity": "sha512-cHyhAr6rlYYbon1L2Ag449YCj3p6XMfcYTP0AQX+KkQo025d1y/VFtPWvjMhuEsE2lLvtHm7GdJozj6BOMtzVg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
},
- "node_modules/@zag-js/pagination": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/pagination/-/pagination-1.24.1.tgz",
- "integrity": "sha512-IO9Q5SiYmk00pjJAD18qFjOkpN1qb9iSeuX6A9Bdo8sMBFSigI6c7tGo1MPYGENma3b+aX7LbUpt8hYFufqUow==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/password-input": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/password-input/-/password-input-1.24.1.tgz",
- "integrity": "sha512-TWgTRNsaAZ6IE1QmCQKhPY6uSRPDGjgdxGSpG7wOuYsbxHw/hD3v5sUAhAo9teIL0wV8COZIh6hyG2UAAgT2kg==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/pin-input": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/pin-input/-/pin-input-1.24.1.tgz",
- "integrity": "sha512-ytJK/1ekU06VmOpe7KdSkIQ3If+fffrA/EpbktZBuRepsz80QHB64+X6QQ6H1lEMbLWPNZ0TuFPaYhFfqH7cTQ==",
+ "node_modules/@unrs/rspack-resolver-binding-wasm32-wasi": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.2.2.tgz",
+ "integrity": "sha512-eogDKuICghDLGc32FtP+WniG38IB1RcGOGz0G3z8406dUdjJvxfHGuGs/dSlM9YEp/v0lEqhJ4mBu6X2nL9pog==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
"dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "@napi-rs/wasm-runtime": "^0.2.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "node_modules/@zag-js/popover": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/popover/-/popover-1.24.1.tgz",
- "integrity": "sha512-auNy7/5/VMeNUYbKfcvSz7OHkbrUWdODtA6gB/d/weAxvEHyMSk0+Ms4c5lmN8KDChrBAPJs4CfKSPv1U4I4zw==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/aria-hidden": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-trap": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/remove-scroll": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
+ "node_modules/@unrs/rspack-resolver-binding-win32-arm64-msvc": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.2.2.tgz",
+ "integrity": "sha512-7sWRJumhpXSi2lccX8aQpfFXHsSVASdWndLv8AmD8nDRA/5PBi8IplQVZNx2mYRx6+Bp91Z00kuVqpXO9NfCTg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
},
- "node_modules/@zag-js/popper": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/popper/-/popper-1.24.1.tgz",
- "integrity": "sha512-VWbOjBy/haIDmXhwfyMT1rRcQhSfYmPX67YzQwLA7863kXkoTH1r9fR+1f9uq3VuXQLhw2Cg/lkSzlkg9TIp+g==",
- "dependencies": {
- "@floating-ui/dom": "1.7.4",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
+ "node_modules/@unrs/rspack-resolver-binding-win32-x64-msvc": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.2.2.tgz",
+ "integrity": "sha512-hewo/UMGP1a7O6FG/ThcPzSJdm/WwrYDNkdGgWl6M18H6K6MSitklomWpT9MUtT5KGj++QJb06va/14QBC4pvw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
},
- "node_modules/@zag-js/presence": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/presence/-/presence-1.24.1.tgz",
- "integrity": "sha512-MMcw4iOsGdSGM3hmvd0gcMuk1X9rE/xE3Ndm113vc+lkhk93COiuJPz1ZpyBb8l1CIJwlZ5nnRpx4Lx8Do6aNQ==",
- "dependencies": {
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1"
- }
+ "node_modules/@yr/monotone-cubic-spline": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz",
+ "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==",
+ "license": "MIT"
},
- "node_modules/@zag-js/progress": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/progress/-/progress-1.24.1.tgz",
- "integrity": "sha512-ocp6zkl5Y3sVMzPVIRLZtqtDfMkc365JYIrOUsdUqwJMvZJhSP1IbsbtIJS1ycOaHfLdK27E//GVyjxA7SHGhw==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "node_modules/acorn": {
+ "version": "8.14.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
}
},
- "node_modules/@zag-js/qr-code": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/qr-code/-/qr-code-1.24.1.tgz",
- "integrity": "sha512-Hy722PNwLs1tnXFQkTqtrEILypZcUDiC8YdvGn57mmmvPGtZdAzhs4G8ghoP9ahJ02ztREjIt8Qnmct344fALA==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1",
- "proxy-memoize": "3.0.1",
- "uqr": "0.1.2"
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/@zag-js/radio-group": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/radio-group/-/radio-group-1.24.1.tgz",
- "integrity": "sha512-49S+nmaZzjf98206VeevmfTNTf+WjLveKCOGz5SVWPX3R8maZJgka1ZlIDuWlnRK1JfL+4Ls10/ZxAk3HrI7sg==",
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-visible": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/@zag-js/rating-group": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/rating-group/-/rating-group-1.24.1.tgz",
- "integrity": "sha512-EGGObQDmulon5N9s5ElGZv9yQmky10s7ps7wyVgW1+vJTsWr8gaoFMJwf6nbXOsUjqW8iDuzsF68Rel9CgjxIQ==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
}
},
- "node_modules/@zag-js/react": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/react/-/react-1.24.1.tgz",
- "integrity": "sha512-oiaiuR7FKVHOEJtzoYZ2QBQ5+J/j086eebhLCIWkh2ie6QBJM73LHsMUxfZp2D2G1is8EoyUhrH3v2MPMlYMXg==",
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/core": "1.24.1",
- "@zag-js/store": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "color-convert": "^2.0.1"
},
- "peerDependencies": {
- "react": ">=18.0.0",
- "react-dom": ">=18.0.0"
- }
- },
- "node_modules/@zag-js/rect-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/rect-utils/-/rect-utils-1.24.1.tgz",
- "integrity": "sha512-6JkVq71feW9Yyt7Pynyf199ugDFVgRT+jPpg2ECRHgY2oHvn5atBP3PA1uM2cx7ZydiajnBgk4n1ePnGYD2xNw=="
- },
- "node_modules/@zag-js/remove-scroll": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/remove-scroll/-/remove-scroll-1.24.1.tgz",
- "integrity": "sha512-SAK3ZsnDUcJve5q3OHsMjrl0JOW9sv1fGbBFXyyid9Uu8s79LMh7EZw2na5jXDNzdMWmk1Euu82OaZSlLl9Kew==",
- "dependencies": {
- "@zag-js/dom-query": "1.24.1"
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@zag-js/scroll-area": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/scroll-area/-/scroll-area-1.24.1.tgz",
- "integrity": "sha512-eRZKs6Yyl8Zp+YkIxzr1QsgRDDsNMxXshwpIzt/L5xK+EV34mv760FOkX/unG/WxQ1Z0gBogPm9ZY53/m4bhJA==",
+ "node_modules/apexcharts": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-4.5.0.tgz",
+ "integrity": "sha512-E7ZkrVqPNBUWy/Rmg8DEIqHNBmElzICE/oxOX5Ekvs2ICQUOK/VkEkMH09JGJu+O/EA0NL31hxlmF+wrwrSLaQ==",
+ "license": "MIT",
"dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "@svgdotjs/svg.draggable.js": "^3.0.4",
+ "@svgdotjs/svg.filter.js": "^3.0.8",
+ "@svgdotjs/svg.js": "^3.2.4",
+ "@svgdotjs/svg.resize.js": "^2.0.2",
+ "@svgdotjs/svg.select.js": "^4.0.1",
+ "@yr/monotone-cubic-spline": "^1.0.3"
}
},
- "node_modules/@zag-js/scroll-snap": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/scroll-snap/-/scroll-snap-1.24.1.tgz",
- "integrity": "sha512-Co/NlccX4XDg6OzQeRgv8bANbsCkMog1FZ0BveN8+2Mso/svOLVkB6UGswWZk/DyqY8DlxvfZAdPltmQpu5h8w==",
- "dependencies": {
- "@zag-js/dom-query": "1.24.1"
- }
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
},
- "node_modules/@zag-js/select": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/select/-/select-1.24.1.tgz",
- "integrity": "sha512-boU5m3Qd//EGe1M2i4a2SbCXQpcPP9Ewe6DvjEpOhxP+dwdbZzDrtRBdZ4ByhMJ+1bT5B6TqsfvsQHhAI0LunA==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/collection": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
}
},
- "node_modules/@zag-js/signature-pad": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/signature-pad/-/signature-pad-1.24.1.tgz",
- "integrity": "sha512-CRTcefUGMwdhxqmB8yGkHU3gweMfXw0CCoMc0LhMmla12hMJOBi+mpMVaBJnQHYGSG8uFUh2IKdPbe2Vtp4T3Q==",
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
+ "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1",
- "perfect-freehand": "^1.2.2"
+ "call-bound": "^1.0.3",
+ "is-array-buffer": "^3.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@zag-js/slider": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/slider/-/slider-1.24.1.tgz",
- "integrity": "sha512-HClZBKcT+9tihZArRNRj35YOIUbztCcyYzggYYIrK4+OFD0RLYihA+yBO4hxs7xZVenzma9i0pc6q/Vo4z2tvA==",
+ "node_modules/array-includes": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@zag-js/splitter": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/splitter/-/splitter-1.24.1.tgz",
- "integrity": "sha512-UUqiCD0T8kfgm/vRTY1QrPlrpxbzxqZ+8QvysUchnibmStetkHnuzAXC4ZD9jlJbToqzE4p1eLOiWGaVXRdB/Q==",
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@zag-js/steps": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/steps/-/steps-1.24.1.tgz",
- "integrity": "sha512-njL1SMKef0JfYzw5KUhpeVuzOtgBjSxVUwDrPR9s095WUCUiOYlxzqummg3VBY8IDuT/pS/K6LDSY11YCRzeNw==",
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
+ "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "es-shim-unscopables": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@zag-js/store": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/store/-/store-1.24.1.tgz",
- "integrity": "sha512-iVl+NX2CcxEDLL3hrj31mqSqBZYBqHEBqa/Z7FwKVoTImMQ1AabMF5XPreTtB8KFbaVJlNlM6D5qngDPpVj/xw==",
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
+ "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "proxy-compare": "3.0.1"
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@zag-js/switch": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/switch/-/switch-1.24.1.tgz",
- "integrity": "sha512-RI2bG2AtsQ4ci8T7RA3XVSjd9urpNQXIwEatpa8cw9GCWFI421rt4Xcab5jy/IOu6VzXl6pwh11/cWAC/PBYCw==",
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
+ "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-visible": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/tabs": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/tabs/-/tabs-1.24.1.tgz",
- "integrity": "sha512-RjdW4opxhvCWTwHoCqq+lfNCthiyPu376hto6j4Ybl/UN3UFTV4zfTbwbMbAH7dyqj8m1nkKxidLaO0Yhx3zZA==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/tags-input": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/tags-input/-/tags-input-1.24.1.tgz",
- "integrity": "sha512-HY1ebBZE2j3/fuzfKw4z/44S9WWe50auMWLlFg47j6zVBcyNdXEeMO1OvvfyfQFJOcvOKXGxW8Hi4MXGxLWqmA==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/auto-resize": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/interact-outside": "1.24.1",
- "@zag-js/live-region": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/timer": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/timer/-/timer-1.24.1.tgz",
- "integrity": "sha512-cjD8+I8CgSugsj5DI+kqzgvuQ2vYeArRdjO3iSjB4AjR+j08W8NKZvr7aawhYq636vrE9LeJGbxxZ3DBV12ELw==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/toast": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/toast/-/toast-1.24.1.tgz",
- "integrity": "sha512-gmHv65EYdypfMoF9WYIp7Y8z6XN5tebXEdjIWF8bJBaqW5zPn2VLdUYpfXv7wrHW2YtSTnF/xtgIhJ7MIX7HxA==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/toggle": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/toggle/-/toggle-1.24.1.tgz",
- "integrity": "sha512-dMN9Q4XFqr7jPlUZsLCFdUc1rtW88FzUaXcFVaeNCy8y8XGc+MG9AJJqjBiBL9EUeeR+LIp8yUIhJQEEDBm0kw==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/toggle-group": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/toggle-group/-/toggle-group-1.24.1.tgz",
- "integrity": "sha512-GVBay9XzmXjp1GgAmHUMpeYq3iMMevH+n0TyC0NcRe00prAEL9S4/q9pVy0P33PIOa20dxcvQ/Q3Tf+n5PFQcg==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@zag-js/tooltip": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/tooltip/-/tooltip-1.24.1.tgz",
- "integrity": "sha512-gdD5C9AF6JD8LC6mxXzUGWjnHqY3MS7ZvtNx/nuNGJAqKCD32dPT73fuv0up1UVh1yJhX4IrXg3H6q52Pm+jPw==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-visible": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/tour": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/tour/-/tour-1.24.1.tgz",
- "integrity": "sha512-e+UR8xauKyRhE6tA8gRsR1GuOn1QGjj2YAmtRC8lIb5tD+QrGCPy0jX2xBeR7M7eY1IPSSyi0gCUGE2CbaRK8Q==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-trap": "1.24.1",
- "@zag-js/interact-outside": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/tree-view": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/tree-view/-/tree-view-1.24.1.tgz",
- "integrity": "sha512-HXCoqW6j2RunFxaIVRevgRTrRUEP05lpdOvc1Smzne7sC2mczwIqN68Vei6e83gRhXSF80v6Fc4TcHdPiW6wJA==",
- "dependencies": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/collection": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "node_modules/@zag-js/types": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-1.24.1.tgz",
- "integrity": "sha512-XyINtxe5JK7A+RtTmBdCQElNoElDiTw6NSWpjKZGRAXXGU9HIZ9JIFeaS77uq1aVs0JhAOFwqJiPs2NJzaYHLA==",
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "csstype": "3.1.3"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "node_modules/@zag-js/utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-1.24.1.tgz",
- "integrity": "sha512-4nU9lfFlLLW/4T+/HaP+HdHYFeWvacxSVcccv0JSf+ZTC110IldV48kZELP+wFg9xDL/jCPPjlRtO1K64EIwgA=="
- },
- "node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
+ "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
"dev": true,
"license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "is-array-buffer": "^3.0.4"
},
"engines": {
- "node": ">=0.4.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "node_modules/ast-types-flow": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
+ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/async-function": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
+ "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">= 0.4"
}
},
- "node_modules/ansis": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz",
- "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==",
- "dev": true,
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
+ "node_modules/attr-accept": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz",
+ "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==",
+ "license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">=4"
}
},
- "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",
+ "node_modules/autoprefixer": {
+ "version": "10.4.21",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
+ "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
+ "browserslist": "^4.24.4",
+ "caniuse-lite": "^1.0.30001702",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.1.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
},
"engines": {
- "node": ">= 8"
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
}
},
- "node_modules/anymatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
"engines": {
- "node": ">=8.6"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/ast-types": {
- "version": "0.16.1",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
- "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.0.1"
- },
+ "node_modules/axe-core": {
+ "version": "4.10.3",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz",
+ "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==",
+ "dev": true,
+ "license": "MPL-2.0",
"engines": {
"node": ">=4"
}
},
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
- },
"node_modules/axios": {
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz",
"integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==",
+ "license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.4",
"proxy-from-env": "^1.1.0"
}
},
- "node_modules/babel-dead-code-elimination": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.10.tgz",
- "integrity": "sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==",
+ "node_modules/axobject-query": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs2": {
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz",
+ "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/core": "^7.23.7",
- "@babel/parser": "^7.23.6",
- "@babel/traverse": "^7.23.7",
- "@babel/types": "^7.23.6"
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.4",
+ "semver": "^6.3.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
- "node_modules/babel-plugin-macros": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
- "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz",
+ "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.12.5",
- "cosmiconfig": "^7.0.0",
- "resolve": "^1.19.0"
+ "@babel/helper-define-polyfill-provider": "^0.6.3",
+ "core-js-compat": "^3.40.0"
},
- "engines": {
- "node": ">=10",
- "npm": ">=6"
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.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==",
+ "node_modules/babel-plugin-polyfill-regenerator": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz",
+ "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.6.4"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
"node_modules/braces": {
@@ -3301,10 +4371,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.25.4",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz",
- "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==",
- "dev": true,
+ "version": "4.24.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+ "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
"funding": [
{
"type": "opencollective",
@@ -3321,10 +4390,10 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001737",
- "electron-to-chromium": "^1.5.211",
+ "caniuse-lite": "^1.0.30001688",
+ "electron-to-chromium": "^1.5.73",
"node-releases": "^2.0.19",
- "update-browserslist-db": "^1.1.3"
+ "update-browserslist-db": "^1.1.1"
},
"bin": {
"browserslist": "cli.js"
@@ -3349,24 +4418,35 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "dependencies": {
+ "streamsearch": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.16.0"
+ }
+ },
"node_modules/c12": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/c12/-/c12-2.0.1.tgz",
- "integrity": "sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.0.tgz",
+ "integrity": "sha512-K9ZkuyeJQeqLEyqldbYLG3wjqwpw4BVaAqvmxq3GYKK0b1A/yYQdIcJxkzAOWcNVWhJpRXAPfZFueekiY/L8Dw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "chokidar": "^4.0.1",
- "confbox": "^0.1.7",
+ "chokidar": "^4.0.3",
+ "confbox": "^0.2.2",
"defu": "^6.1.4",
- "dotenv": "^16.4.5",
- "giget": "^1.2.3",
- "jiti": "^2.3.0",
- "mlly": "^1.7.1",
- "ohash": "^1.1.4",
- "pathe": "^1.1.2",
- "perfect-debounce": "^1.0.0",
- "pkg-types": "^1.2.0",
+ "dotenv": "^17.2.2",
+ "exsolve": "^1.0.7",
+ "giget": "^2.0.0",
+ "jiti": "^2.5.1",
+ "ohash": "^2.0.11",
+ "pathe": "^2.0.3",
+ "perfect-debounce": "^2.0.0",
+ "pkg-types": "^2.3.0",
"rc9": "^2.1.2"
},
"peerDependencies": {
@@ -3378,17 +4458,23 @@
}
}
},
- "node_modules/c12/node_modules/dotenv": {
- "version": "16.6.1",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
- "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
+ "node_modules/call-bind": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
"dev": true,
- "license": "BSD-2-Clause",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.2"
+ },
"engines": {
- "node": ">=12"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://dotenvx.com"
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/call-bind-apply-helpers": {
@@ -3404,19 +4490,50 @@
"node": ">= 0.4"
}
},
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
- "node_modules/caniuse-lite": {
- "version": "1.0.30001741",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz",
- "integrity": "sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==",
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001707",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz",
+ "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==",
"funding": [
{
"type": "opencollective",
@@ -3433,30 +4550,37 @@
],
"license": "CC-BY-4.0"
},
- "node_modules/chokidar": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz",
- "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
+ "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": {
- "readdirp": "^4.0.1"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">= 14.16.0"
+ "node": ">=10"
},
"funding": {
- "url": "https://paulmillr.com/funding/"
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
"engines": {
- "node": ">=10"
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
}
},
"node_modules/citty": {
@@ -3469,13 +4593,61 @@
"consola": "^3.2.3"
}
},
- "node_modules/clsx": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
- "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
- "dev": true,
+ "node_modules/classnames": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
+ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
+ "license": "MIT"
+ },
+ "node_modules/client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
+ "license": "MIT"
+ },
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
"engines": {
- "node": ">=6"
+ "node": ">=12.5.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
}
},
"node_modules/color-support": {
@@ -3492,6 +4664,7 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
},
@@ -3500,26 +4673,33 @@
}
},
"node_modules/commander": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-13.0.0.tgz",
- "integrity": "sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=18"
+ "node": ">= 10"
}
},
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/confbox": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
- "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz",
+ "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==",
"dev": true,
"license": "MIT"
},
"node_modules/consola": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz",
- "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
+ "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3527,37 +4707,51 @@
}
},
"node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
- },
- "node_modules/cookie-es": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz",
- "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg=="
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/cosmiconfig": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
- "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "node_modules/core-js-compat": {
+ "version": "3.41.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz",
+ "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.2.1",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.10.0"
+ "browserslist": "^4.24.4"
},
- "engines": {
- "node": ">=10"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
}
},
- "node_modules/cosmiconfig/node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "license": "ISC",
+ "node_modules/cosmiconfig": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0",
+ "path-type": "^4.0.0"
+ },
"engines": {
- "node": ">= 6"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/cross-spawn": {
@@ -3575,16 +4769,159 @@
"node": ">= 8"
}
},
+ "node_modules/css-select": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
+ "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "devOptional": true,
"license": "MIT"
},
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+ "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+ "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/inspect-js"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+ "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -3598,6 +4935,23 @@
}
}
},
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/default-browser": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
@@ -3628,6 +4982,24 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/define-lazy-prop": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
@@ -3641,6 +5013,24 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/defu": {
"version": "6.1.4",
"resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
@@ -3652,361 +5042,255 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/destr": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz",
- "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz",
+ "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
"dev": true,
"license": "MIT"
},
- "node_modules/diff": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz",
- "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/dotenv": {
- "version": "17.2.2",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.2.tgz",
- "integrity": "sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://dotenvx.com"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.214",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.214.tgz",
- "integrity": "sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "license": "MIT",
+ "node_modules/detect-libc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+ "license": "Apache-2.0",
"engines": {
- "node": ">= 0.4"
+ "node": ">=8"
}
},
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "node_modules/dnd-core": {
+ "version": "16.0.1",
+ "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-16.0.1.tgz",
+ "integrity": "sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==",
"license": "MIT",
"dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
+ "@react-dnd/asap": "^5.0.1",
+ "@react-dnd/invariant": "^4.0.1",
+ "redux": "^4.2.0"
}
},
- "node_modules/es-set-tostringtag": {
+ "node_modules/doctrine": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz",
- "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
},
"engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.3",
- "@esbuild/android-arm": "0.25.3",
- "@esbuild/android-arm64": "0.25.3",
- "@esbuild/android-x64": "0.25.3",
- "@esbuild/darwin-arm64": "0.25.3",
- "@esbuild/darwin-x64": "0.25.3",
- "@esbuild/freebsd-arm64": "0.25.3",
- "@esbuild/freebsd-x64": "0.25.3",
- "@esbuild/linux-arm": "0.25.3",
- "@esbuild/linux-arm64": "0.25.3",
- "@esbuild/linux-ia32": "0.25.3",
- "@esbuild/linux-loong64": "0.25.3",
- "@esbuild/linux-mips64el": "0.25.3",
- "@esbuild/linux-ppc64": "0.25.3",
- "@esbuild/linux-riscv64": "0.25.3",
- "@esbuild/linux-s390x": "0.25.3",
- "@esbuild/linux-x64": "0.25.3",
- "@esbuild/netbsd-arm64": "0.25.3",
- "@esbuild/netbsd-x64": "0.25.3",
- "@esbuild/openbsd-arm64": "0.25.3",
- "@esbuild/openbsd-x64": "0.25.3",
- "@esbuild/sunos-x64": "0.25.3",
- "@esbuild/win32-arm64": "0.25.3",
- "@esbuild/win32-ia32": "0.25.3",
- "@esbuild/win32-x64": "0.25.3"
+ "node": ">=0.10.0"
}
},
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "engines": {
- "node": ">=10"
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
"dev": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
},
- "node_modules/execa": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
- "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
- "license": "MIT",
+ "license": "BSD-2-Clause",
"dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^8.0.1",
- "human-signals": "^5.0.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^4.1.0",
- "strip-final-newline": "^3.0.0"
+ "domelementtype": "^2.3.0"
},
"engines": {
- "node": ">=16.17"
+ "node": ">= 4"
},
"funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
- "node_modules/fast-safe-stringify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
- },
- "node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
"dev": true,
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
},
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
}
},
- "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==",
+ "node_modules/dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
}
},
- "node_modules/find-root": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
- },
- "node_modules/follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
+ "node_modules/dotenv": {
+ "version": "17.2.3",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
+ "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
"engines": {
- "node": ">=4.0"
+ "node": ">=12"
},
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
+ "funding": {
+ "url": "https://dotenvx.com"
}
},
- "node_modules/form-data": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
"dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.12"
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 0.4"
}
},
- "node_modules/fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.123",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz",
+ "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==",
+ "license": "ISC"
},
- "node_modules/fs-minipass/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"dev": true,
- "license": "ISC",
+ "license": "MIT"
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.18.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
+ "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
+ "license": "MIT",
"dependencies": {
- "yallist": "^4.0.0"
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10.13.0"
}
},
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
+ "license": "BSD-2-Clause",
"engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "node": ">=0.12"
+ },
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=6.9.0"
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
}
},
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "node_modules/es-abstract": {
+ "version": "1.23.9",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
+ "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
+ "array-buffer-byte-length": "^1.0.2",
+ "arraybuffer.prototype.slice": "^1.0.4",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "data-view-buffer": "^1.0.2",
+ "data-view-byte-length": "^1.0.2",
+ "data-view-byte-offset": "^1.0.1",
"es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.1.0",
+ "es-to-primitive": "^1.3.0",
+ "function.prototype.name": "^1.1.8",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.0",
+ "get-symbol-description": "^1.1.0",
+ "globalthis": "^1.0.4",
"gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
"has-symbols": "^1.1.0",
"hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
+ "internal-slot": "^1.1.0",
+ "is-array-buffer": "^3.0.5",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.2",
+ "is-regex": "^1.2.1",
+ "is-shared-array-buffer": "^1.0.4",
+ "is-string": "^1.1.1",
+ "is-typed-array": "^1.1.15",
+ "is-weakref": "^1.1.0",
+ "math-intrinsics": "^1.1.0",
+ "object-inspect": "^1.13.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.7",
+ "own-keys": "^1.0.1",
+ "regexp.prototype.flags": "^1.5.3",
+ "safe-array-concat": "^1.1.3",
+ "safe-push-apply": "^1.0.0",
+ "safe-regex-test": "^1.1.0",
+ "set-proto": "^1.0.0",
+ "string.prototype.trim": "^1.2.10",
+ "string.prototype.trimend": "^1.0.9",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.3",
+ "typed-array-byte-length": "^1.0.3",
+ "typed-array-byte-offset": "^1.0.4",
+ "typed-array-length": "^1.0.7",
+ "unbox-primitive": "^1.1.0",
+ "which-typed-array": "^1.1.18"
},
"engines": {
"node": ">= 0.4"
@@ -4015,92 +5299,103 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/get-proto": {
+ "node_modules/es-define-property": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
"engines": {
"node": ">= 0.4"
}
},
- "node_modules/get-stream": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
- "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
- "dev": true,
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"license": "MIT",
"engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 0.4"
}
},
- "node_modules/get-tsconfig": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
- "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
+ "node_modules/es-iterator-helpers": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
+ "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "resolve-pkg-maps": "^1.0.0"
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.6",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.3",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.6",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "internal-slot": "^1.1.0",
+ "iterator.prototype": "^1.1.4",
+ "safe-array-concat": "^1.1.3"
},
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ "engines": {
+ "node": ">= 0.4"
}
},
- "node_modules/giget": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz",
- "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==",
- "dev": true,
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"license": "MIT",
"dependencies": {
- "citty": "^0.1.6",
- "consola": "^3.2.3",
- "defu": "^6.1.4",
- "node-fetch-native": "^1.6.3",
- "nypm": "^0.3.8",
- "ohash": "^1.1.3",
- "pathe": "^1.1.2",
- "tar": "^6.2.0"
+ "es-errors": "^1.3.0"
},
- "bin": {
- "giget": "dist/cli.mjs"
+ "engines": {
+ "node": ">= 0.4"
}
},
- "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",
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "license": "MIT",
"dependencies": {
- "is-glob": "^4.0.1"
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 0.4"
}
},
- "node_modules/goober": {
- "version": "2.1.16",
- "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz",
- "integrity": "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==",
+ "node_modules/es-shim-unscopables": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
+ "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
"dev": true,
- "peerDependencies": {
- "csstype": "^3.0.10"
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "node_modules/es-to-primitive": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+ "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.2.7",
+ "is-date-object": "^1.0.5",
+ "is-symbol": "^1.0.4"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -4108,1130 +5403,1226 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/handlebars": {
- "version": "4.7.8",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
- "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.5",
- "neo-async": "^2.6.2",
- "source-map": "^0.6.1",
- "wordwrap": "^1.0.0"
- },
- "bin": {
- "handlebars": "bin/handlebars"
- },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "license": "MIT",
"engines": {
- "node": ">=0.4.7"
- },
- "optionalDependencies": {
- "uglify-js": "^3.1.4"
+ "node": ">=6"
}
},
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">= 0.4"
+ "node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "node_modules/eslint": {
+ "version": "9.23.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz",
+ "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "has-symbols": "^1.0.3"
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.19.2",
+ "@eslint/config-helpers": "^0.2.0",
+ "@eslint/core": "^0.12.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.23.0",
+ "@eslint/plugin-kit": "^0.2.7",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.3.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
},
"engines": {
- "node": ">= 0.4"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
}
},
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "node_modules/eslint-config-next": {
+ "version": "15.1.3",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.3.tgz",
+ "integrity": "sha512-wGYlNuWnh4ujuKtZvH+7B2Z2vy9nONZE6ztd+DKF7hAsIabkrxmD4TzYHzASHENo42lmz2tnT2B+zN2sOHvpJg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "function-bind": "^1.1.2"
+ "@next/eslint-plugin-next": "15.1.3",
+ "@rushstack/eslint-patch": "^1.10.3",
+ "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+ "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.31.0",
+ "eslint-plugin-jsx-a11y": "^6.10.0",
+ "eslint-plugin-react": "^7.37.0",
+ "eslint-plugin-react-hooks": "^5.0.0"
},
- "engines": {
- "node": ">= 0.4"
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/hoist-non-react-statics": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
- "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "react-is": "^16.7.0"
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
}
},
- "node_modules/human-signals": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
- "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=16.17.0"
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
}
},
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.9.1.tgz",
+ "integrity": "sha512-euxa5rTGqHeqVxmOHT25hpk58PxkQ4mNoX6Yun4ooGaCHAxOCojJYNvjmyeOQxj/LyW+3fulH0+xtk+p2kPPTw==",
+ "dev": true,
+ "license": "ISC",
"dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
+ "@nolyfill/is-core-module": "1.0.39",
+ "debug": "^4.4.0",
+ "get-tsconfig": "^4.10.0",
+ "is-bun-module": "^1.3.0",
+ "rspack-resolver": "^1.1.0",
+ "stable-hash": "^0.0.5",
+ "tinyglobby": "^0.2.12"
},
"engines": {
- "node": ">=6"
+ "node": "^14.18.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*",
+ "eslint-plugin-import-x": "*"
+ },
+ "peerDependenciesMeta": {
+ "eslint-plugin-import": {
+ "optional": true
+ },
+ "eslint-plugin-import-x": {
+ "optional": true
+ }
}
},
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
- },
- "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==",
+ "node_modules/eslint-module-utils": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+ "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "binary-extensions": "^2.0.0"
+ "debug": "^3.2.7"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
- "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
- "dependencies": {
- "hasown": "^2.0.0"
+ "node": ">=4"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
}
},
- "node_modules/is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"license": "MIT",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "dependencies": {
+ "ms": "^2.1.1"
}
},
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "node_modules/eslint-plugin-import": {
+ "version": "2.31.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+ "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "@rtsao/scc": "^1.1.0",
+ "array-includes": "^3.1.8",
+ "array.prototype.findlastindex": "^1.2.5",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.12.0",
+ "hasown": "^2.0.2",
+ "is-core-module": "^2.15.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "object.groupby": "^1.0.3",
+ "object.values": "^1.2.0",
+ "semver": "^6.3.1",
+ "string.prototype.trimend": "^1.0.8",
+ "tsconfig-paths": "^3.15.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
}
},
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
+ "ms": "^2.1.1"
}
},
- "node_modules/is-inside-container": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
+ "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-docker": "^3.0.0"
- },
- "bin": {
- "is-inside-container": "cli.js"
+ "aria-query": "^5.3.2",
+ "array-includes": "^3.1.8",
+ "array.prototype.flatmap": "^1.3.2",
+ "ast-types-flow": "^0.0.8",
+ "axe-core": "^4.10.0",
+ "axobject-query": "^4.1.0",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^3.3.5",
+ "language-tags": "^1.0.9",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.includes": "^2.0.1"
},
"engines": {
- "node": ">=14.16"
+ "node": ">=4.0"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
}
- },
- "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==",
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.37.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz",
+ "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
+ "array.prototype.flatmap": "^1.3.3",
+ "array.prototype.tosorted": "^1.1.4",
+ "doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.2.1",
+ "estraverse": "^5.3.0",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.8",
+ "object.fromentries": "^2.0.8",
+ "object.values": "^1.2.1",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.5",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.12",
+ "string.prototype.repeat": "^1.0.0"
+ },
"engines": {
- "node": ">=0.12.0"
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
}
},
- "node_modules/is-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
+ "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": ">=10"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
}
},
- "node_modules/is-wsl": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
- "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.5",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-inside-container": "^1.0.0"
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
},
- "engines": {
- "node": ">=16"
+ "bin": {
+ "resolve": "bin/resolve"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/isbot": {
- "version": "5.1.30",
- "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.30.tgz",
- "integrity": "sha512-3wVJEonAns1OETX83uWsk5IAne2S5zfDcntD2hbtU23LelSqNXzXs9zKjMPOLMzroCgIjCfjYAEHrd2D6FOkiA==",
- "license": "Unlicense",
+ "node_modules/eslint-scope": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
+ "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
"engines": {
- "node": ">=18"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/jiti": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.0.tgz",
- "integrity": "sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==",
+ "node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
"dev": true,
- "license": "MIT",
- "bin": {
- "jiti": "lib/jiti-cli.mjs"
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
"dev": true,
- "license": "MIT",
+ "license": "BSD-2-Clause",
"dependencies": {
- "argparse": "^2.0.1"
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
},
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/jsesc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
- "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
- "license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=0.10"
}
},
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
- "license": "MIT",
- "bin": {
- "json5": "lib/cli.js"
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=4.0"
}
},
- "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=="
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^3.0.2"
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
}
},
- "node_modules/lru-cache/node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true,
- "license": "ISC"
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "license": "MIT",
+ "license": "BSD-2-Clause",
"engines": {
- "node": ">= 0.4"
+ "node": ">=0.10.0"
}
},
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "node_modules/exsolve": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz",
+ "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==",
"dev": true,
"license": "MIT"
},
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "engines": {
- "node": ">= 0.6"
- }
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "license": "MIT"
},
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "node_modules/fast-glob": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "mime-db": "1.52.0"
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">=8.6.0"
}
},
- "node_modules/mimic-fn": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "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": "MIT",
- "engines": {
- "node": ">=12"
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "engines": {
+ "node": ">= 6"
}
},
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "license": "MIT"
},
- "node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
"dev": true,
"license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=16.0.0"
}
},
- "node_modules/minizlib": {
+ "node_modules/file-selector": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz",
+ "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==",
"license": "MIT",
"dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
+ "tslib": "^2.7.0"
},
"engines": {
- "node": ">= 8"
+ "node": ">= 12"
}
},
- "node_modules/minizlib/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "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": "ISC",
+ "license": "MIT",
"dependencies": {
- "yallist": "^4.0.0"
+ "to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"license": "MIT",
- "bin": {
- "mkdirp": "bin/cmd.js"
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
"node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/mlly": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.3.tgz",
- "integrity": "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==",
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "acorn": "^8.14.0",
- "pathe": "^1.1.2",
- "pkg-types": "^1.2.1",
- "ufo": "^1.5.4"
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
}
},
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "node_modules/flatpickr": {
+ "version": "4.6.13",
+ "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.13.tgz",
+ "integrity": "sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==",
"license": "MIT"
},
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
"dev": true,
+ "license": "ISC"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
+ "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
"funding": [
{
- "type": "github",
- "url": "https://github.com/sponsors/ai"
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
}
],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "node_modules/next-themes": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz",
- "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==",
- "license": "MIT",
- "peerDependencies": {
- "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc"
- }
- },
- "node_modules/node-fetch-native": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz",
- "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-releases": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.20.tgz",
- "integrity": "sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
"license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
}
},
- "node_modules/npm-run-path": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
- "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "node_modules/for-each": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "path-key": "^4.0.0"
+ "is-callable": "^1.2.7"
},
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/npm-run-path/node_modules/path-key": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
- "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
- "dev": true,
+ "node_modules/form-data": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
+ "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
"license": "MIT",
"engines": {
- "node": ">=12"
+ "node": "*"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
}
},
- "node_modules/nypm": {
- "version": "0.3.12",
- "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.12.tgz",
- "integrity": "sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==",
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
+ "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "citty": "^0.1.6",
- "consola": "^3.2.3",
- "execa": "^8.0.1",
- "pathe": "^1.1.2",
- "pkg-types": "^1.2.0",
- "ufo": "^1.5.4"
- },
- "bin": {
- "nypm": "dist/cli.mjs"
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "functions-have-names": "^1.2.3",
+ "hasown": "^2.0.2",
+ "is-callable": "^1.2.7"
},
"engines": {
- "node": "^14.16.0 || >=16.10.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/ohash": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz",
- "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==",
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "node_modules/onetime": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "mimic-fn": "^4.0.0"
- },
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=6.9.0"
}
},
- "node_modules/open": {
- "version": "10.1.2",
- "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz",
- "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==",
- "dev": true,
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"license": "MIT",
"dependencies": {
- "default-browser": "^5.2.1",
- "define-lazy-prop": "^3.0.0",
- "is-inside-container": "^1.0.0",
- "is-wsl": "^3.1.0"
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
},
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/parent-module": {
+ "node_modules/get-proto": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
"dependencies": {
- "callsites": "^3.0.0"
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">= 0.4"
}
},
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "node_modules/get-symbol-description": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
+ "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "node_modules/get-tsconfig": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz",
+ "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
- "node_modules/pathe": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
- "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+ "node_modules/giget": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz",
+ "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "citty": "^0.1.6",
+ "consola": "^3.4.0",
+ "defu": "^6.1.4",
+ "node-fetch-native": "^1.6.6",
+ "nypm": "^0.6.0",
+ "pathe": "^2.0.3"
+ },
+ "bin": {
+ "giget": "dist/cli.mjs"
+ }
},
- "node_modules/perfect-debounce": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
- "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
- "license": "MIT"
- },
- "node_modules/perfect-freehand": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/perfect-freehand/-/perfect-freehand-1.2.2.tgz",
- "integrity": "sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ=="
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "license": "ISC"
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
},
- "node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/pkg-types": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz",
- "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==",
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "confbox": "^0.1.8",
- "mlly": "^1.7.2",
- "pathe": "^1.1.2"
- }
- },
- "node_modules/playwright": {
- "version": "1.55.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.0.tgz",
- "integrity": "sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "playwright-core": "1.55.0"
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
},
- "bin": {
- "playwright": "cli.js"
+ "engines": {
+ "node": ">= 0.4"
},
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
},
- "optionalDependencies": {
- "fsevents": "2.3.2"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/playwright-core": {
- "version": "1.55.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.0.tgz",
- "integrity": "sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==",
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.8",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.2",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
"bin": {
- "playwright-core": "cli.js"
+ "handlebars": "bin/handlebars"
},
"engines": {
- "node": ">=18"
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
}
},
- "node_modules/playwright/node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "node_modules/has-bigints": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
+ "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
"dev": true,
- "hasInstallScript": true,
"license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
"engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
+ "es-define-property": "^1.0.0"
},
- "engines": {
- "node": "^10 || ^12 || >=14"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/prettier": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
- "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
+ "node_modules/has-proto": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+ "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
"dev": true,
- "bin": {
- "prettier": "bin/prettier.cjs"
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.0"
},
"engines": {
- "node": ">=14"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/proxy-compare": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-3.0.1.tgz",
- "integrity": "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q=="
- },
- "node_modules/proxy-from-env": {
+ "node_modules/has-symbols": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
- },
- "node_modules/proxy-memoize": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/proxy-memoize/-/proxy-memoize-3.0.1.tgz",
- "integrity": "sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==",
- "dependencies": {
- "proxy-compare": "^3.0.0"
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/rc9": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz",
- "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==",
- "dev": true,
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"license": "MIT",
"dependencies": {
- "defu": "^6.1.4",
- "destr": "^2.0.3"
- }
- },
- "node_modules/react": {
- "version": "19.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
- "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
+ "has-symbols": "^1.0.3"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/react-dom": {
- "version": "19.2.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
- "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
"dependencies": {
- "scheduler": "^0.27.0"
+ "function-bind": "^1.1.2"
},
- "peerDependencies": {
- "react": "^19.2.0"
+ "engines": {
+ "node": ">= 0.4"
}
},
- "node_modules/react-error-boundary": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-6.0.0.tgz",
- "integrity": "sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==",
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "license": "BSD-3-Clause",
"dependencies": {
- "@babel/runtime": "^7.12.5"
- },
- "peerDependencies": {
- "react": ">=16.13.1"
+ "react-is": "^16.7.0"
}
},
- "node_modules/react-hook-form": {
- "version": "7.62.0",
- "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz",
- "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==",
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/react-hook-form"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17 || ^18 || ^19"
+ "node": ">= 4"
}
},
- "node_modules/react-icons": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz",
- "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==",
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
"license": "MIT",
- "peerDependencies": {
- "react": "*"
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
- },
- "node_modules/readdirp": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
- "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 14.16.0"
- },
- "funding": {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
+ "node": ">=0.8.19"
}
},
- "node_modules/recast": {
- "version": "0.23.11",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz",
- "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==",
+ "node_modules/internal-slot": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+ "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "ast-types": "^0.16.1",
- "esprima": "~4.0.0",
- "source-map": "~0.6.1",
- "tiny-invariant": "^1.3.3",
- "tslib": "^2.0.1"
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.2",
+ "side-channel": "^1.1.0"
},
"engines": {
- "node": ">= 4"
+ "node": ">= 0.4"
}
},
- "node_modules/regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
- },
- "node_modules/resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "node_modules/is-array-buffer": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
+ "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
},
- "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",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "engines": {
- "node": ">=4"
- }
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "node_modules/is-async-function": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
+ "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "async-function": "^1.0.0",
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.1",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/rollup": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz",
- "integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==",
+ "node_modules/is-bigint": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+ "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/estree": "1.0.8"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
+ "has-bigints": "^1.0.2"
},
"engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
+ "node": ">= 0.4"
},
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.50.1",
- "@rollup/rollup-android-arm64": "4.50.1",
- "@rollup/rollup-darwin-arm64": "4.50.1",
- "@rollup/rollup-darwin-x64": "4.50.1",
- "@rollup/rollup-freebsd-arm64": "4.50.1",
- "@rollup/rollup-freebsd-x64": "4.50.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.50.1",
- "@rollup/rollup-linux-arm-musleabihf": "4.50.1",
- "@rollup/rollup-linux-arm64-gnu": "4.50.1",
- "@rollup/rollup-linux-arm64-musl": "4.50.1",
- "@rollup/rollup-linux-loongarch64-gnu": "4.50.1",
- "@rollup/rollup-linux-ppc64-gnu": "4.50.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.50.1",
- "@rollup/rollup-linux-riscv64-musl": "4.50.1",
- "@rollup/rollup-linux-s390x-gnu": "4.50.1",
- "@rollup/rollup-linux-x64-gnu": "4.50.1",
- "@rollup/rollup-linux-x64-musl": "4.50.1",
- "@rollup/rollup-openharmony-arm64": "4.50.1",
- "@rollup/rollup-win32-arm64-msvc": "4.50.1",
- "@rollup/rollup-win32-ia32-msvc": "4.50.1",
- "@rollup/rollup-win32-x64-msvc": "4.50.1",
- "fsevents": "~2.3.2"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/run-applescript": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
- "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
+ "node_modules/is-boolean-object": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
+ "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/scheduler": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
- "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="
+ "node_modules/is-bun-module": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz",
+ "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.6.3"
+ }
},
- "node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "node_modules/is-bun-module/node_modules/semver": {
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
- }
- },
- "node_modules/seroval": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz",
- "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==",
- "license": "MIT",
+ },
"engines": {
"node": ">=10"
}
},
- "node_modules/seroval-plugins": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.3.3.tgz",
- "integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==",
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">= 0.4"
},
- "peerDependencies": {
- "seroval": "^1.0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "shebang-regex": "^3.0.0"
+ "hasown": "^2.0.2"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "node_modules/is-data-view": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+ "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "is-typed-array": "^1.1.13"
+ },
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/solid-js": {
- "version": "1.9.9",
- "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.9.tgz",
- "integrity": "sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==",
+ "node_modules/is-date-object": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "csstype": "^3.1.0",
- "seroval": "~1.3.0",
- "seroval-plugins": "~1.3.0"
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "node_modules/is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
"dev": true,
+ "license": "MIT",
+ "bin": {
+ "is-docker": "cli.js"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/strip-final-newline": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "node_modules/is-finalizationregistry": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
+ "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=12"
+ "dependencies": {
+ "call-bound": "^1.0.3"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/stylis": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
- "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
- },
- "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==",
"engines": {
"node": ">= 0.4"
},
@@ -5239,3976 +6630,2913 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/tar": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
- "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^5.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/tiny-invariant": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
- "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
- "license": "MIT"
- },
- "node_modules/tiny-warning": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
- "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
- "license": "MIT"
- },
- "node_modules/tinyglobby": {
- "version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "node_modules/is-generator-function": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
+ "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3"
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.0",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "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==",
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-number": "^7.0.0"
+ "is-extglob": "^2.1.1"
},
"engines": {
- "node": ">=8.0"
+ "node": ">=0.10.0"
}
},
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD"
- },
- "node_modules/tsx": {
- "version": "4.20.5",
- "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.5.tgz",
- "integrity": "sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==",
+ "node_modules/is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "esbuild": "~0.25.0",
- "get-tsconfig": "^4.7.5"
+ "is-docker": "^3.0.0"
},
"bin": {
- "tsx": "dist/cli.mjs"
+ "is-inside-container": "cli.js"
},
"engines": {
- "node": ">=18.0.0"
+ "node": ">=14.16"
},
- "optionalDependencies": {
- "fsevents": "~2.3.3"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/typescript": {
- "version": "5.9.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
- "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
+ "node_modules/is-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
"dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
+ "license": "MIT",
"engines": {
- "node": ">=14.17"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/ufo": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz",
- "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/uglify-js": {
- "version": "3.17.4",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
- "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "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,
- "optional": true,
- "bin": {
- "uglifyjs": "bin/uglifyjs"
- },
+ "license": "MIT",
"engines": {
- "node": ">=0.8.0"
+ "node": ">=0.12.0"
}
},
- "node_modules/undici-types": {
- "version": "7.12.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz",
- "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==",
- "dev": true
- },
- "node_modules/unplugin": {
- "version": "2.3.10",
- "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.10.tgz",
- "integrity": "sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==",
+ "node_modules/is-number-object": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
+ "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jridgewell/remapping": "^2.3.5",
- "acorn": "^8.15.0",
- "picomatch": "^4.0.3",
- "webpack-virtual-modules": "^0.6.2"
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
},
"engines": {
- "node": ">=18.12.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/update-browserslist-db": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
- "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "node_modules/is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
"dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
"license": "MIT",
"dependencies": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.1"
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
},
- "bin": {
- "update-browserslist-db": "cli.js"
+ "engines": {
+ "node": ">= 0.4"
},
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/uqr": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz",
- "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA=="
- },
- "node_modules/use-sync-external-store": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz",
- "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
+ "node_modules/is-set": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+ "dev": true,
"license": "MIT",
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/vite": {
- "version": "7.1.9",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.9.tgz",
- "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==",
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
+ "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3",
- "postcss": "^8.5.6",
- "rollup": "^4.43.0",
- "tinyglobby": "^0.2.15"
- },
- "bin": {
- "vite": "bin/vite.js"
+ "call-bound": "^1.0.3"
},
"engines": {
- "node": "^20.19.0 || >=22.12.0"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^20.19.0 || >=22.12.0",
- "jiti": ">=1.21.0",
- "less": "^4.0.0",
- "lightningcss": "^1.21.0",
- "sass": "^1.70.0",
- "sass-embedded": "^1.70.0",
- "stylus": ">=0.54.8",
- "sugarss": "^5.0.0",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/webpack-virtual-modules": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
- "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "node_modules/is-string": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
+ "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
},
"engines": {
- "node": ">= 8"
- }
- },
- "node_modules/wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
- "dev": true
- },
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/zod": {
- "version": "3.25.76",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
- "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- }
- },
- "dependencies": {
- "@ark-ui/react": {
- "version": "5.24.1",
- "resolved": "https://registry.npmjs.org/@ark-ui/react/-/react-5.24.1.tgz",
- "integrity": "sha512-Czx6pLRJzs8G9t8XCvBlizd1aGRC7KOyUGJgK5a1vUDz8WhAALUUm66yslhs7GfU4/jJX8mS73FwStgtK0znAg==",
- "requires": {
- "@internationalized/date": "3.9.0",
- "@zag-js/accordion": "1.24.1",
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/angle-slider": "1.24.1",
- "@zag-js/async-list": "1.24.1",
- "@zag-js/auto-resize": "1.24.1",
- "@zag-js/avatar": "1.24.1",
- "@zag-js/carousel": "1.24.1",
- "@zag-js/checkbox": "1.24.1",
- "@zag-js/clipboard": "1.24.1",
- "@zag-js/collapsible": "1.24.1",
- "@zag-js/collection": "1.24.1",
- "@zag-js/color-picker": "1.24.1",
- "@zag-js/color-utils": "1.24.1",
- "@zag-js/combobox": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/date-picker": "1.24.1",
- "@zag-js/date-utils": "1.24.1",
- "@zag-js/dialog": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/editable": "1.24.1",
- "@zag-js/file-upload": "1.24.1",
- "@zag-js/file-utils": "1.24.1",
- "@zag-js/floating-panel": "1.24.1",
- "@zag-js/focus-trap": "1.24.1",
- "@zag-js/highlight-word": "1.24.1",
- "@zag-js/hover-card": "1.24.1",
- "@zag-js/i18n-utils": "1.24.1",
- "@zag-js/json-tree-utils": "1.24.1",
- "@zag-js/listbox": "1.24.1",
- "@zag-js/menu": "1.24.1",
- "@zag-js/number-input": "1.24.1",
- "@zag-js/pagination": "1.24.1",
- "@zag-js/password-input": "1.24.1",
- "@zag-js/pin-input": "1.24.1",
- "@zag-js/popover": "1.24.1",
- "@zag-js/presence": "1.24.1",
- "@zag-js/progress": "1.24.1",
- "@zag-js/qr-code": "1.24.1",
- "@zag-js/radio-group": "1.24.1",
- "@zag-js/rating-group": "1.24.1",
- "@zag-js/react": "1.24.1",
- "@zag-js/scroll-area": "1.24.1",
- "@zag-js/select": "1.24.1",
- "@zag-js/signature-pad": "1.24.1",
- "@zag-js/slider": "1.24.1",
- "@zag-js/splitter": "1.24.1",
- "@zag-js/steps": "1.24.1",
- "@zag-js/switch": "1.24.1",
- "@zag-js/tabs": "1.24.1",
- "@zag-js/tags-input": "1.24.1",
- "@zag-js/timer": "1.24.1",
- "@zag-js/toast": "1.24.1",
- "@zag-js/toggle": "1.24.1",
- "@zag-js/toggle-group": "1.24.1",
- "@zag-js/tooltip": "1.24.1",
- "@zag-js/tour": "1.24.1",
- "@zag-js/tree-view": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.27.1",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.1.1"
- }
- },
- "@babel/compat-data": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz",
- "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==",
- "dev": true
- },
- "@babel/core": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz",
- "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.3",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-module-transforms": "^7.28.3",
- "@babel/helpers": "^7.28.4",
- "@babel/parser": "^7.28.4",
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.4",
- "@babel/types": "^7.28.4",
- "@jridgewell/remapping": "^2.3.5",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
+ "node": ">= 0.4"
},
- "dependencies": {
- "convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
- }
- }
- },
- "@babel/generator": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz",
- "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==",
- "requires": {
- "@babel/parser": "^7.28.3",
- "@babel/types": "^7.28.2",
- "@jridgewell/gen-mapping": "^0.3.12",
- "@jridgewell/trace-mapping": "^0.3.28",
- "jsesc": "^3.0.2"
- }
- },
- "@babel/helper-annotate-as-pure": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
- "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.27.3"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "@babel/helper-compilation-targets": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
- "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+ "node_modules/is-symbol": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
"dev": true,
- "requires": {
- "@babel/compat-data": "^7.27.2",
- "@babel/helper-validator-option": "^7.27.1",
- "browserslist": "^4.24.0",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "@babel/helper-create-class-features-plugin": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz",
- "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==",
+ "node_modules/is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
"dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-member-expression-to-functions": "^7.27.1",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/helper-replace-supers": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/traverse": "^7.28.3",
- "semver": "^6.3.1"
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "@babel/helper-globals": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",
- "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==",
+ "node_modules/is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
"dev": true,
- "requires": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
- "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
- "requires": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "@babel/helper-module-transforms": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
- "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
+ "node_modules/is-weakref": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
+ "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
"dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.28.3"
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "@babel/helper-optimise-call-expression": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
- "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
+ "node_modules/is-weakset": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
+ "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
"dev": true,
- "requires": {
- "@babel/types": "^7.27.1"
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "@babel/helper-plugin-utils": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
- "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
- "dev": true
- },
- "@babel/helper-replace-supers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
- "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
+ "node_modules/is-wsl": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
+ "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
"dev": true,
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.27.1",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/traverse": "^7.27.1"
+ "license": "MIT",
+ "dependencies": {
+ "is-inside-container": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
- "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true,
- "requires": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
- }
- },
- "@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
- },
- "@babel/helper-validator-identifier": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
- "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
+ "license": "MIT"
},
- "@babel/helper-validator-option": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
- "dev": true
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
},
- "@babel/helpers": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
+ "node_modules/iterator.prototype": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
+ "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
"dev": true,
- "requires": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4"
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.6",
+ "get-proto": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "@babel/parser": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz",
- "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
- "requires": {
- "@babel/types": "^7.28.4"
+ "node_modules/jiti": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
+ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
+ "license": "MIT",
+ "bin": {
+ "jiti": "lib/jiti-cli.mjs"
}
},
- "@babel/plugin-syntax-jsx": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
- "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
+ "node_modules/jquery": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
+ "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
+ "license": "MIT"
},
- "@babel/plugin-syntax-typescript": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
- "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1"
- }
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
},
- "@babel/plugin-transform-modules-commonjs": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz",
- "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==",
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
- "@babel/plugin-transform-typescript": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz",
- "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==",
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/plugin-syntax-typescript": "^7.27.1"
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "@babel/preset-typescript": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz",
- "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==",
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-validator-option": "^7.27.1",
- "@babel/plugin-syntax-jsx": "^7.27.1",
- "@babel/plugin-transform-modules-commonjs": "^7.27.1",
- "@babel/plugin-transform-typescript": "^7.27.1"
- }
- },
- "@babel/runtime": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
- "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
- "requires": {
- "regenerator-runtime": "^0.14.0"
- }
+ "license": "MIT"
},
- "@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
- "requires": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
- }
- },
- "@babel/traverse": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz",
- "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==",
- "requires": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.3",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.4",
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4",
- "debug": "^4.3.1"
- }
- },
- "@babel/types": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz",
- "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
- "requires": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1"
- }
- },
- "@biomejs/biome": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.2.4.tgz",
- "integrity": "sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==",
- "dev": true,
- "requires": {
- "@biomejs/cli-darwin-arm64": "2.2.4",
- "@biomejs/cli-darwin-x64": "2.2.4",
- "@biomejs/cli-linux-arm64": "2.2.4",
- "@biomejs/cli-linux-arm64-musl": "2.2.4",
- "@biomejs/cli-linux-x64": "2.2.4",
- "@biomejs/cli-linux-x64-musl": "2.2.4",
- "@biomejs/cli-win32-arm64": "2.2.4",
- "@biomejs/cli-win32-x64": "2.2.4"
- }
- },
- "@biomejs/cli-darwin-arm64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.4.tgz",
- "integrity": "sha512-RJe2uiyaloN4hne4d2+qVj3d3gFJFbmrr5PYtkkjei1O9c+BjGXgpUPVbi8Pl8syumhzJjFsSIYkcLt2VlVLMA==",
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true,
- "optional": true
+ "license": "MIT"
},
- "@biomejs/cli-darwin-x64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.4.tgz",
- "integrity": "sha512-cFsdB4ePanVWfTnPVaUX+yr8qV8ifxjBKMkZwN7gKb20qXPxd/PmwqUH8mY5wnM9+U0QwM76CxFyBRJhC9tQwg==",
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
- "optional": true
+ "license": "MIT"
},
- "@biomejs/cli-linux-arm64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.4.tgz",
- "integrity": "sha512-M/Iz48p4NAzMXOuH+tsn5BvG/Jb07KOMTdSVwJpicmhN309BeEyRyQX+n1XDF0JVSlu28+hiTQ2L4rZPvu7nMw==",
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true,
- "optional": true
+ "license": "MIT"
},
- "@biomejs/cli-linux-arm64-musl": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.4.tgz",
- "integrity": "sha512-7TNPkMQEWfjvJDaZRSkDCPT/2r5ESFPKx+TEev+I2BXDGIjfCZk2+b88FOhnJNHtksbOZv8ZWnxrA5gyTYhSsQ==",
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
},
- "@biomejs/cli-linux-x64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.4.tgz",
- "integrity": "sha512-orr3nnf2Dpb2ssl6aihQtvcKtLySLta4E2UcXdp7+RTa7mfJjBgIsbS0B9GC8gVu0hjOu021aU8b3/I1tn+pVQ==",
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
},
- "@biomejs/cli-linux-x64-musl": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.4.tgz",
- "integrity": "sha512-m41nFDS0ksXK2gwXL6W6yZTYPMH0LughqbsxInSKetoH6morVj43szqKx79Iudkp8WRT5SxSh7qVb8KCUiewGg==",
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
},
- "@biomejs/cli-win32-arm64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.4.tgz",
- "integrity": "sha512-NXnfTeKHDFUWfxAefa57DiGmu9VyKi0cDqFpdI+1hJWQjGJhJutHPX0b5m+eXvTKOaf+brU+P0JrQAZMb5yYaQ==",
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.23",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+ "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
"dev": true,
- "optional": true
+ "license": "CC0-1.0"
},
- "@biomejs/cli-win32-x64": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.4.tgz",
- "integrity": "sha512-3Y4V4zVRarVh/B/eSHczR4LYoSVyv3Dfuvm3cWs5w/HScccS0+Wt/lHOcDTRYeHjQmMYVC3rIRWqyN2EI52+zg==",
+ "node_modules/language-tags": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
"dev": true,
- "optional": true
- },
- "@chakra-ui/react": {
- "version": "3.27.0",
- "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-3.27.0.tgz",
- "integrity": "sha512-M1WTAErI2cYM/PB4h5Kf5CCAg70g3HCzVvTEhcf5ty8QrG6QybPf3RdWSpBlIy7qpjuEnQYpHLxM0jnFLArBgA==",
- "requires": {
- "@ark-ui/react": "^5.24.1",
- "@emotion/is-prop-valid": "^1.3.1",
- "@emotion/serialize": "^1.3.3",
- "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
- "@emotion/utils": "^1.4.2",
- "@pandacss/is-valid-prop": "^0.54.0",
- "csstype": "^3.1.3",
- "fast-safe-stringify": "^2.1.1"
- }
- },
- "@emotion/babel-plugin": {
- "version": "11.13.5",
- "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
- "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
- "requires": {
- "@babel/helper-module-imports": "^7.16.7",
- "@babel/runtime": "^7.18.3",
- "@emotion/hash": "^0.9.2",
- "@emotion/memoize": "^0.9.0",
- "@emotion/serialize": "^1.3.3",
- "babel-plugin-macros": "^3.1.0",
- "convert-source-map": "^1.5.0",
- "escape-string-regexp": "^4.0.0",
- "find-root": "^1.1.0",
- "source-map": "^0.5.7",
- "stylis": "4.2.0"
- },
+ "license": "MIT",
"dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="
- }
+ "language-subtag-registry": "^0.3.20"
+ },
+ "engines": {
+ "node": ">=0.10"
}
},
- "@emotion/cache": {
- "version": "11.14.0",
- "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
- "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
- "requires": {
- "@emotion/memoize": "^0.9.0",
- "@emotion/sheet": "^1.4.0",
- "@emotion/utils": "^1.4.2",
- "@emotion/weak-memoize": "^0.4.0",
- "stylis": "4.2.0"
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "@emotion/hash": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
- "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g=="
- },
- "@emotion/is-prop-valid": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz",
- "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==",
- "requires": {
- "@emotion/memoize": "^0.9.0"
+ "node_modules/lightningcss": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz",
+ "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==",
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-darwin-arm64": "1.29.2",
+ "lightningcss-darwin-x64": "1.29.2",
+ "lightningcss-freebsd-x64": "1.29.2",
+ "lightningcss-linux-arm-gnueabihf": "1.29.2",
+ "lightningcss-linux-arm64-gnu": "1.29.2",
+ "lightningcss-linux-arm64-musl": "1.29.2",
+ "lightningcss-linux-x64-gnu": "1.29.2",
+ "lightningcss-linux-x64-musl": "1.29.2",
+ "lightningcss-win32-arm64-msvc": "1.29.2",
+ "lightningcss-win32-x64-msvc": "1.29.2"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz",
+ "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "@emotion/memoize": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
- "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="
- },
- "@emotion/react": {
- "version": "11.14.0",
- "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz",
- "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
- "requires": {
- "@babel/runtime": "^7.18.3",
- "@emotion/babel-plugin": "^11.13.5",
- "@emotion/cache": "^11.14.0",
- "@emotion/serialize": "^1.3.3",
- "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
- "@emotion/utils": "^1.4.2",
- "@emotion/weak-memoize": "^0.4.0",
- "hoist-non-react-statics": "^3.3.1"
- }
- },
- "@emotion/serialize": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
- "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
- "requires": {
- "@emotion/hash": "^0.9.2",
- "@emotion/memoize": "^0.9.0",
- "@emotion/unitless": "^0.10.0",
- "@emotion/utils": "^1.4.2",
- "csstype": "^3.0.2"
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz",
+ "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "@emotion/sheet": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
- "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg=="
- },
- "@emotion/unitless": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
- "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg=="
- },
- "@emotion/use-insertion-effect-with-fallbacks": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz",
- "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==",
- "requires": {}
- },
- "@emotion/utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
- "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA=="
- },
- "@emotion/weak-memoize": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
- "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg=="
- },
- "@esbuild/aix-ppc64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz",
- "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-arm": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz",
- "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz",
- "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz",
- "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/darwin-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz",
- "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==",
- "dev": true,
- "optional": true
- },
- "@esbuild/darwin-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz",
- "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz",
- "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz",
- "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz",
- "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz",
- "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==",
- "dev": true,
- "optional": true
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz",
+ "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "@esbuild/linux-ia32": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz",
- "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==",
- "dev": true,
- "optional": true
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz",
+ "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "@esbuild/linux-loong64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz",
- "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==",
- "dev": true,
- "optional": true
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz",
+ "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "@esbuild/linux-mips64el": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz",
- "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==",
- "dev": true,
- "optional": true
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz",
+ "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "@esbuild/linux-ppc64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz",
- "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==",
- "dev": true,
- "optional": true
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz",
+ "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "@esbuild/linux-riscv64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz",
- "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==",
- "dev": true,
- "optional": true
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz",
+ "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "@esbuild/linux-s390x": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz",
- "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==",
- "dev": true,
- "optional": true
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz",
+ "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "@esbuild/linux-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz",
- "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==",
- "dev": true,
- "optional": true
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz",
+ "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "@esbuild/netbsd-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz",
- "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==",
+ "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,
- "optional": true
+ "license": "MIT"
},
- "@esbuild/netbsd-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz",
- "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==",
+ "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,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "@esbuild/openbsd-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz",
- "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==",
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true,
- "optional": true
+ "license": "MIT"
},
- "@esbuild/openbsd-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz",
- "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==",
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"dev": true,
- "optional": true
+ "license": "MIT"
},
- "@esbuild/sunos-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz",
- "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==",
+ "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,
- "optional": true
+ "license": "MIT"
},
- "@esbuild/win32-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz",
- "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==",
- "dev": true,
- "optional": 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": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
},
- "@esbuild/win32-ia32": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz",
- "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==",
+ "node_modules/lower-case": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
+ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
},
- "@esbuild/win32-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz",
- "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==",
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
- "optional": true
- },
- "@floating-ui/core": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz",
- "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
- "requires": {
- "@floating-ui/utils": "^0.2.10"
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
}
},
- "@floating-ui/dom": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz",
- "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==",
- "requires": {
- "@floating-ui/core": "^1.7.3",
- "@floating-ui/utils": "^0.2.10"
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
}
},
- "@floating-ui/utils": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
- "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="
- },
- "@hey-api/json-schema-ref-parser": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@hey-api/json-schema-ref-parser/-/json-schema-ref-parser-1.0.6.tgz",
- "integrity": "sha512-yktiFZoWPtEW8QKS65eqKwA5MTKp88CyiL8q72WynrBs/73SAaxlSWlA2zW/DZlywZ5hX1OYzrCC0wFdvO9c2w==",
+ "node_modules/mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
"dev": true,
- "requires": {
- "@jsdevtools/ono": "^7.1.3",
- "@types/json-schema": "^7.0.15",
- "js-yaml": "^4.1.0",
- "lodash": "^4.17.21"
- }
+ "license": "CC0-1.0"
},
- "@hey-api/openapi-ts": {
- "version": "0.73.0",
- "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.73.0.tgz",
- "integrity": "sha512-sUscR3OIGW0k9U//28Cu6BTp3XaogWMDORj9H+5Du9E5AvTT7LZbCEDvkLhebFOPkp2cZAQfd66HiZsiwssBcQ==",
+ "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,
- "requires": {
- "@hey-api/json-schema-ref-parser": "1.0.6",
- "ansi-colors": "4.1.3",
- "c12": "2.0.1",
- "color-support": "1.1.3",
- "commander": "13.0.0",
- "handlebars": "4.7.8",
- "open": "10.1.2"
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
}
},
- "@internationalized/date": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.9.0.tgz",
- "integrity": "sha512-yaN3brAnHRD+4KyyOsJyk49XUvj2wtbNACSqg0bz3u8t2VuzhC8Q5dfRnrSxjnnbDb+ienBnkn1TzQfE154vyg==",
- "requires": {
- "@swc/helpers": "^0.5.0"
+ "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"
}
},
- "@internationalized/number": {
- "version": "3.6.5",
- "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.5.tgz",
- "integrity": "sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==",
- "requires": {
- "@swc/helpers": "^0.5.0"
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
}
},
- "@jridgewell/gen-mapping": {
- "version": "0.3.13",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
- "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
- "requires": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@jridgewell/trace-mapping": "^0.3.24"
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "@jridgewell/remapping": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
- "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
- "dev": true,
- "requires": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
+ "node_modules/mini-svg-data-uri": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+ "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
+ "license": "MIT",
+ "bin": {
+ "mini-svg-data-uri": "cli.js"
}
},
- "@jridgewell/resolve-uri": {
+ "node_modules/minimatch": {
"version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.30",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz",
- "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==",
- "requires": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "@jsdevtools/ono": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
- "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
- "dev": true
- },
- "@pandacss/is-valid-prop": {
- "version": "0.54.0",
- "resolved": "https://registry.npmjs.org/@pandacss/is-valid-prop/-/is-valid-prop-0.54.0.tgz",
- "integrity": "sha512-UhRgg1k9VKRCBAHl+XUK3lvN0k9bYifzYGZOqajDid4L1DyU813A1L0ZwN4iV9WX5TX3PfUugqtgG9LnIeFGBQ=="
- },
- "@playwright/test": {
- "version": "1.55.0",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.0.tgz",
- "integrity": "sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
- "requires": {
- "playwright": "1.55.0"
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
}
},
- "@rolldown/pluginutils": {
- "version": "1.0.0-beta.32",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.32.tgz",
- "integrity": "sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==",
- "dev": true
- },
- "@rollup/rollup-android-arm-eabi": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.1.tgz",
- "integrity": "sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-android-arm64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.1.tgz",
- "integrity": "sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-darwin-arm64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.1.tgz",
- "integrity": "sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-darwin-x64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.1.tgz",
- "integrity": "sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-freebsd-arm64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.1.tgz",
- "integrity": "sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-freebsd-x64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.1.tgz",
- "integrity": "sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.1.tgz",
- "integrity": "sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==",
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.1.tgz",
- "integrity": "sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==",
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
- "optional": true
+ "license": "MIT"
},
- "@rollup/rollup-linux-arm64-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.1.tgz",
- "integrity": "sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==",
- "dev": true,
- "optional": true
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
},
- "@rollup/rollup-linux-arm64-musl": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.1.tgz",
- "integrity": "sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==",
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true,
- "optional": true
+ "license": "MIT"
},
- "@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.1.tgz",
- "integrity": "sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==",
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true,
- "optional": true
+ "license": "MIT"
},
- "@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.1.tgz",
- "integrity": "sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==",
- "dev": true,
- "optional": true
+ "node_modules/next": {
+ "version": "15.2.3",
+ "resolved": "https://registry.npmjs.org/next/-/next-15.2.3.tgz",
+ "integrity": "sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==",
+ "license": "MIT",
+ "dependencies": {
+ "@next/env": "15.2.3",
+ "@swc/counter": "0.1.3",
+ "@swc/helpers": "0.5.15",
+ "busboy": "1.6.0",
+ "caniuse-lite": "^1.0.30001579",
+ "postcss": "8.4.31",
+ "styled-jsx": "5.1.6"
+ },
+ "bin": {
+ "next": "dist/bin/next"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
+ },
+ "optionalDependencies": {
+ "@next/swc-darwin-arm64": "15.2.3",
+ "@next/swc-darwin-x64": "15.2.3",
+ "@next/swc-linux-arm64-gnu": "15.2.3",
+ "@next/swc-linux-arm64-musl": "15.2.3",
+ "@next/swc-linux-x64-gnu": "15.2.3",
+ "@next/swc-linux-x64-musl": "15.2.3",
+ "@next/swc-win32-arm64-msvc": "15.2.3",
+ "@next/swc-win32-x64-msvc": "15.2.3",
+ "sharp": "^0.33.5"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.1.0",
+ "@playwright/test": "^1.41.2",
+ "babel-plugin-react-compiler": "*",
+ "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
+ "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
+ "sass": "^1.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "@playwright/test": {
+ "optional": true
+ },
+ "babel-plugin-react-compiler": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ }
+ }
},
- "@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.1.tgz",
- "integrity": "sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==",
- "dev": true,
- "optional": true
+ "node_modules/next/node_modules/postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
},
- "@rollup/rollup-linux-riscv64-musl": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.1.tgz",
- "integrity": "sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==",
+ "node_modules/no-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
+ "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
},
- "@rollup/rollup-linux-s390x-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.1.tgz",
- "integrity": "sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==",
+ "node_modules/node-fetch-native": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
+ "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
"dev": true,
- "optional": true
+ "license": "MIT"
},
- "@rollup/rollup-linux-x64-gnu": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.1.tgz",
- "integrity": "sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==",
- "dev": true,
- "optional": true
+ "node_modules/node-releases": {
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "license": "MIT"
},
- "@rollup/rollup-linux-x64-musl": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.1.tgz",
- "integrity": "sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==",
- "dev": true,
- "optional": true
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "@rollup/rollup-openharmony-arm64": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.1.tgz",
- "integrity": "sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==",
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
"dev": true,
- "optional": true
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
},
- "@rollup/rollup-win32-arm64-msvc": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.1.tgz",
- "integrity": "sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==",
+ "node_modules/nypm": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz",
+ "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "citty": "^0.1.6",
+ "consola": "^3.4.2",
+ "pathe": "^2.0.3",
+ "pkg-types": "^2.3.0",
+ "tinyexec": "^1.0.1"
+ },
+ "bin": {
+ "nypm": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": "^14.16.0 || >=16.10.0"
+ }
},
- "@rollup/rollup-win32-ia32-msvc": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.1.tgz",
- "integrity": "sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==",
- "dev": true,
- "optional": true
+ "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"
+ }
},
- "@rollup/rollup-win32-x64-msvc": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.1.tgz",
- "integrity": "sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==",
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "@swc/core": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.5.tgz",
- "integrity": "sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==",
- "dev": true,
- "requires": {
- "@swc/core-darwin-arm64": "1.13.5",
- "@swc/core-darwin-x64": "1.13.5",
- "@swc/core-linux-arm-gnueabihf": "1.13.5",
- "@swc/core-linux-arm64-gnu": "1.13.5",
- "@swc/core-linux-arm64-musl": "1.13.5",
- "@swc/core-linux-x64-gnu": "1.13.5",
- "@swc/core-linux-x64-musl": "1.13.5",
- "@swc/core-win32-arm64-msvc": "1.13.5",
- "@swc/core-win32-ia32-msvc": "1.13.5",
- "@swc/core-win32-x64-msvc": "1.13.5",
- "@swc/counter": "^0.1.3",
- "@swc/types": "^0.1.24"
- }
- },
- "@swc/core-darwin-arm64": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz",
- "integrity": "sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==",
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
},
- "@swc/core-darwin-x64": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz",
- "integrity": "sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==",
+ "node_modules/object.assign": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
+ "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "@swc/core-linux-arm-gnueabihf": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz",
- "integrity": "sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==",
+ "node_modules/object.entries": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
+ "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
},
- "@swc/core-linux-arm64-gnu": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz",
- "integrity": "sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==",
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "@swc/core-linux-arm64-musl": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz",
- "integrity": "sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==",
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
},
- "@swc/core-linux-x64-gnu": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz",
- "integrity": "sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==",
+ "node_modules/object.values": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
+ "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "@swc/core-linux-x64-musl": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz",
- "integrity": "sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==",
+ "node_modules/ohash": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz",
+ "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
"dev": true,
- "optional": true
+ "license": "MIT"
},
- "@swc/core-win32-arm64-msvc": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz",
- "integrity": "sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==",
+ "node_modules/open": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz",
+ "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "default-browser": "^5.2.1",
+ "define-lazy-prop": "^3.0.0",
+ "is-inside-container": "^1.0.0",
+ "is-wsl": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "@swc/core-win32-ia32-msvc": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz",
- "integrity": "sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==",
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
},
- "@swc/core-win32-x64-msvc": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz",
- "integrity": "sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==",
+ "node_modules/own-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
+ "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
"dev": true,
- "optional": true
- },
- "@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "dev": true
- },
- "@swc/helpers": {
- "version": "0.5.17",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
- "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
- "requires": {
- "tslib": "^2.8.0"
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.6",
+ "object-keys": "^1.1.1",
+ "safe-push-apply": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "@swc/types": {
- "version": "0.1.25",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz",
- "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==",
- "dev": true,
- "requires": {
- "@swc/counter": "^0.1.3"
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "@tanstack/history": {
- "version": "1.133.3",
- "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.133.3.tgz",
- "integrity": "sha512-zFQnGdX0S4g5xRuS+95iiEXM+qlGvYG7ksmOKx7LaMv60lDWa0imR8/24WwXXvBWJT1KnwVdZcjvhCwz9IiJCw=="
- },
- "@tanstack/query-core": {
- "version": "5.90.2",
- "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.2.tgz",
- "integrity": "sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ=="
- },
- "@tanstack/query-devtools": {
- "version": "5.90.1",
- "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.90.1.tgz",
- "integrity": "sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ=="
- },
- "@tanstack/react-query": {
- "version": "5.90.2",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.2.tgz",
- "integrity": "sha512-CLABiR+h5PYfOWr/z+vWFt5VsOA2ekQeRQBFSKlcoW6Ndx/f8rfyVmq4LbgOM4GG2qtxAxjLYLOpCNTYm4uKzw==",
- "requires": {
- "@tanstack/query-core": "5.90.2"
- }
- },
- "@tanstack/react-query-devtools": {
- "version": "5.90.2",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.90.2.tgz",
- "integrity": "sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ==",
- "requires": {
- "@tanstack/query-devtools": "5.90.1"
- }
- },
- "@tanstack/react-router": {
- "version": "1.133.15",
- "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.133.15.tgz",
- "integrity": "sha512-3gQitqq/5lL//KSv9Ro34Fw7xak2ZQcPbR7x6bu5X4W0v97xTE7+bMbBS5UAg9zXTq0FNyB124GabgyBgeQ0NA==",
- "requires": {
- "@tanstack/history": "1.133.3",
- "@tanstack/react-store": "^0.7.0",
- "@tanstack/router-core": "1.133.15",
- "isbot": "^5.1.22",
- "tiny-invariant": "^1.3.3",
- "tiny-warning": "^1.0.3"
- }
- },
- "@tanstack/react-router-devtools": {
- "version": "1.131.42",
- "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.131.42.tgz",
- "integrity": "sha512-7pymFB1CCimRHot2Zp0ZekQjd1iN812V88n9NLPSeiv9sVRtRVIaLphJjDeudx1NNgkfSJPx2lOhz6K38cuZog==",
- "dev": true,
- "requires": {
- "@tanstack/router-devtools-core": "1.131.42"
- }
- },
- "@tanstack/react-store": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.7.4.tgz",
- "integrity": "sha512-DyG1e5Qz/c1cNLt/NdFbCA7K1QGuFXQYT6EfUltYMJoQ4LzBOGnOl5IjuxepNcRtmIKkGpmdMzdFZEkevgU9bQ==",
- "requires": {
- "@tanstack/store": "0.7.4",
- "use-sync-external-store": "^1.5.0"
- }
- },
- "@tanstack/router-core": {
- "version": "1.133.15",
- "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.133.15.tgz",
- "integrity": "sha512-ZWAmoFcgi27Ojv2FH3Dq3D6Vt73LswdTnA1tyHShNWQf7wOMH/VKKB9JxiXJqpLTK4NJqpnUp/x0/3nvmdrIqg==",
- "requires": {
- "@tanstack/history": "1.133.3",
- "@tanstack/store": "^0.7.0",
- "cookie-es": "^2.0.0",
- "seroval": "^1.3.2",
- "seroval-plugins": "^1.3.2",
- "tiny-invariant": "^1.3.3",
- "tiny-warning": "^1.0.3"
- }
- },
- "@tanstack/router-devtools": {
- "version": "1.131.42",
- "resolved": "https://registry.npmjs.org/@tanstack/router-devtools/-/router-devtools-1.131.42.tgz",
- "integrity": "sha512-iWJzr4aN/IOsDSaF/kysM7tPSYj89hnzcWMKNuYN9redIwHgg7rNZ4toKhfNWYNfzxdhKwL9/Yvpf7bDemyc+Q==",
- "dev": true,
- "requires": {
- "@tanstack/react-router-devtools": "1.131.42",
- "clsx": "^2.1.1",
- "goober": "^2.1.16"
- }
- },
- "@tanstack/router-devtools-core": {
- "version": "1.131.42",
- "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.131.42.tgz",
- "integrity": "sha512-o8jKTiwXcUSjmkozcMjIw1yhjVYeXcuQO7DtfgjKW3B85iveH6VzYK+bGEVU7wmLNMuUSe2eI/7RBzJ6a5+MCA==",
- "dev": true,
- "requires": {
- "clsx": "^2.1.1",
- "goober": "^2.1.16",
- "solid-js": "^1.9.5"
- }
- },
- "@tanstack/router-generator": {
- "version": "1.133.15",
- "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.133.15.tgz",
- "integrity": "sha512-TXI07UzV5t1j1LeJ2eOErV9TxvzBRx2oSCEmkVaWMXaGKuQL7I4VB9e9w15ylHnvCO2Z/4DgIhUVF6h9/ZS3Mw==",
- "dev": true,
- "requires": {
- "@tanstack/router-core": "1.133.15",
- "@tanstack/router-utils": "1.133.3",
- "@tanstack/virtual-file-routes": "1.133.3",
- "prettier": "^3.5.0",
- "recast": "^0.23.11",
- "source-map": "^0.7.4",
- "tsx": "^4.19.2",
- "zod": "^3.24.2"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
- "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
- "dev": true
- }
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "@tanstack/router-plugin": {
- "version": "1.133.15",
- "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.133.15.tgz",
- "integrity": "sha512-c3m7Pfuth/TXiRol0OpTw+cJyE7RxJpiMXDLooCiZgRDu2VhyXaanPLuuti9vyZiVdSrVZTQ7tJBFABymWbX5w==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.27.7",
- "@babel/plugin-syntax-jsx": "^7.27.1",
- "@babel/plugin-syntax-typescript": "^7.27.1",
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.27.7",
- "@babel/types": "^7.27.7",
- "@tanstack/router-core": "1.133.15",
- "@tanstack/router-generator": "1.133.15",
- "@tanstack/router-utils": "1.133.3",
- "@tanstack/virtual-file-routes": "1.133.3",
- "babel-dead-code-elimination": "^1.0.10",
- "chokidar": "^3.6.0",
- "unplugin": "^2.1.2",
- "zod": "^3.24.2"
- },
- "dependencies": {
- "chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.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"
- }
- },
- "picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- }
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "@tanstack/router-utils": {
- "version": "1.133.3",
- "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.133.3.tgz",
- "integrity": "sha512-miPFlt0aG6ID5VDolYuRXgLS7cofvbZGMvHwf2Wmyxjo6GLp/kxxpkQrfM4T1I5cwjwYZZAQmdUKbVHwFZz9sQ==",
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
- "requires": {
- "@babel/core": "^7.27.4",
- "@babel/generator": "^7.27.5",
- "@babel/parser": "^7.27.5",
- "@babel/preset-typescript": "^7.27.1",
- "ansis": "^4.1.0",
- "diff": "^8.0.2",
- "pathe": "^2.0.3",
- "tinyglobby": "^0.2.15"
- },
+ "license": "MIT",
"dependencies": {
- "pathe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
- "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
- "dev": true
- }
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "@tanstack/store": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.7.4.tgz",
- "integrity": "sha512-F1XqZQici1Aq6WigEfcxJSml92nW+85Om8ElBMokPNg5glCYVOmPkZGIQeieYFxcPiKTfwo0MTOQpUyJtwncrg=="
- },
- "@tanstack/virtual-file-routes": {
- "version": "1.133.3",
- "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.133.3.tgz",
- "integrity": "sha512-6d2AP9hAjEi8mcIew2RkxBX+wClH1xedhfaYhs8fUiX+V2Cedk7RBD9E9ww2z6BGUYD8Es4fS0OIrzXZWHKGhw==",
- "dev": true
- },
- "@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true
- },
- "@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
- "@types/node": {
- "version": "24.5.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.2.tgz",
- "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==",
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
- "requires": {
- "undici-types": "~7.12.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "@types/parse-json": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
- "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="
+ "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"
},
- "@types/react": {
- "version": "19.2.2",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz",
- "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==",
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
- "requires": {
- "csstype": "^3.0.2"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "@types/react-dom": {
- "version": "19.2.1",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.1.tgz",
- "integrity": "sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==",
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
"dev": true,
- "requires": {}
+ "license": "MIT"
},
- "@vitejs/plugin-react-swc": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.0.1.tgz",
- "integrity": "sha512-NQhPjysi5duItyrMd5JWZFf2vNOuSMyw+EoZyTBDzk+DkfYD8WNrsUs09sELV2cr1P15nufsN25hsUBt4CKF9Q==",
- "dev": true,
- "requires": {
- "@rolldown/pluginutils": "1.0.0-beta.32",
- "@swc/core": "^1.13.2"
- }
- },
- "@zag-js/accordion": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/accordion/-/accordion-1.24.1.tgz",
- "integrity": "sha512-JOlmXjO+1tTlyeZ93S+chIlV8uDr8fodj3/XCjLFHc/G116O8cN18KG0Ug9pImy1vT2Kkwb9Ag9QOTyUAXM3PA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/anatomy": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/anatomy/-/anatomy-1.24.1.tgz",
- "integrity": "sha512-mRkpetNjnjgvdyEX880AOjhMhcgdRMLjOM+aEgoDRnhultC4im+nriNoCShJLeVpwsRrEQCU7YVXO4mZaqWUMg=="
- },
- "@zag-js/angle-slider": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/angle-slider/-/angle-slider-1.24.1.tgz",
- "integrity": "sha512-pcWIpVZDMbujMK0nFaKa0wd7uGkP4E5D7x8cmvoiKMT4E1vZpg2kZeN9qmdnhum9ye7nb80IPKhcDl9C0JuSLw==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/rect-utils": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/aria-hidden": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/aria-hidden/-/aria-hidden-1.24.1.tgz",
- "integrity": "sha512-R/a80ZjITZi4rotN7Q9+RTCYCdmJZf3rZi9bObczbR7h5j5GSsjikByUjksWAYzPvFxQxBWTs4GqlCI9dU2f9A=="
- },
- "@zag-js/async-list": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/async-list/-/async-list-1.24.1.tgz",
- "integrity": "sha512-EZE3wORLOhMtT1tiDA0kTHrtY7XNkOoNyn5jCs8Ec1GfqIHSRzQB+2jt+wPIBwUhDcgQksXgOy91s/i9XfQe1g==",
- "requires": {
- "@zag-js/core": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/auto-resize": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/auto-resize/-/auto-resize-1.24.1.tgz",
- "integrity": "sha512-OH1VTeObddMiN2PUK+7SpkPV8Znlkdq+10odmbbe9K2MZPh352RNcPYytIZTWT0X4/4czhn2MTU6IhZ2lZp2hw==",
- "requires": {
- "@zag-js/dom-query": "1.24.1"
- }
- },
- "@zag-js/avatar": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/avatar/-/avatar-1.24.1.tgz",
- "integrity": "sha512-zYGUdkxsMoN8OAFYYCZBrsQx++kjWEBdYZew4en9g8vw7yonNjzywtfF/Vd3Dv6mUZ2r5JtaltbK/qp4aBdZvg==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/carousel": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/carousel/-/carousel-1.24.1.tgz",
- "integrity": "sha512-7WGlFtF4JoIK4kduiFgucdTe9eD+884d9BF9Sh308MlpiL0KZnO3l3Pyq58yi4R0KUTy7zILLGSsUesifVAuEA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/scroll-snap": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/checkbox": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/checkbox/-/checkbox-1.24.1.tgz",
- "integrity": "sha512-eU/RKaO44Tgt1iTGg26M2nUd12p+gTuq2rNjqVuPfN3dvRzYNi5rGKk6yTQI2T4DH4D+fDMz6gUneiBuGcVoJA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-visible": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/clipboard": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/clipboard/-/clipboard-1.24.1.tgz",
- "integrity": "sha512-GfmjjiEDS9NB6Wo/ThbbzO10BgOYzTSeG00a/pJ5QpvSgvOCz+oLV5NBQHOd8XjOw0e0GQEyfsif0i6wQExSIQ==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/collapsible": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/collapsible/-/collapsible-1.24.1.tgz",
- "integrity": "sha512-U6AP4nE6jwMC3kirFQmOL9i3CSfp8mJqb+Gv3opbClpjqCa8hn9v4PNiimKmd0Qr3kynuVRpAshaUaLeg33YiA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/collection": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/collection/-/collection-1.24.1.tgz",
- "integrity": "sha512-aWNDI0iZ5Wb8vCZLJWPjRQOK5/B2wvhhR1+pYaScxZfWy2das2DVKam8tnR0p1GrRfBi/kZNaCXtvM1ZNPjlOQ==",
- "requires": {
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/color-picker": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/color-picker/-/color-picker-1.24.1.tgz",
- "integrity": "sha512-vLW11JrySJR5fGeXXdmlCJuNm7yE0Tsx/SjkX0WBnrPC4PYaGfiwF7LT59bs5XsQp65kEaIca6mw/J0Bouc8Sw==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/color-utils": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/color-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/color-utils/-/color-utils-1.24.1.tgz",
- "integrity": "sha512-8KPTa3I9+WbDLrYPH5knEYMW3CjAC20ikosdrgYshGTFIPuqinAnsxD7H0fZO4I+jSjuhtIyNQuvgwJar9A2rg==",
- "requires": {
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/combobox": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/combobox/-/combobox-1.24.1.tgz",
- "integrity": "sha512-BhjQOL/Ssr5lQLPCyEersCqOqllFlNuR8nvQOgl1u8Y0EaZR+ZPQbgXum6kE5AuH3SlcY9+1kDK1ZLswOagL1Q==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/aria-hidden": "1.24.1",
- "@zag-js/collection": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/core": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/core/-/core-1.24.1.tgz",
- "integrity": "sha512-0e7QdxBaY9PMHQfDY/Xu/7MKyRxNsriNscpkZI7L4MHMGPmxdfedGBpteI3gFfqWsdJ5NvvpqxdLUwkbYk5Q5A==",
- "requires": {
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/date-picker": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/date-picker/-/date-picker-1.24.1.tgz",
- "integrity": "sha512-8jLv074sGJQw4L+5YTDv7l2bwb1x9E7YhvklCffhf/7OzW7RB/ELkljFhmjueuJp7W/sD4xhJyigjp/mDEg1XA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/date-utils": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/live-region": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/date-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/date-utils/-/date-utils-1.24.1.tgz",
- "integrity": "sha512-Rgll6P4Imq479WxH3uMvwQri4o4lF2cxWX2Hka/W7Nhv1DhPBnmfBw30INyWPXzx5agEVzKdGX/br8MU5DV33Q==",
- "requires": {}
- },
- "@zag-js/dialog": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/dialog/-/dialog-1.24.1.tgz",
- "integrity": "sha512-ITzOoXBC92vIkhNvxM0GMMKwboLLk7hSU9dsplk/X9bpX+fQywgc6d5O4I7WHCMmgUWI5y3/aWjqsWATWwufWg==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/aria-hidden": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-trap": "1.24.1",
- "@zag-js/remove-scroll": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/dismissable": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-1.24.1.tgz",
- "integrity": "sha512-Oca+nbwaqHGt0rmkKfmpExwL+kVYLbVi6fxhzHP1WBrip//IUThoTrPH/gqB51o1DT1z/VNE+8BhWhsHSgkQfw==",
- "requires": {
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/interact-outside": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/dom-query": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-1.24.1.tgz",
- "integrity": "sha512-ww3tS5hrB2s6ywGtjMjSOajP19CnQOH0IAGgzjE+lbvDD+ZroXWn9O3Z/v2kTfKNwZFQ4TOb8oSymuSRQsFOYg==",
- "requires": {
- "@zag-js/types": "1.24.1"
- }
- },
- "@zag-js/editable": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/editable/-/editable-1.24.1.tgz",
- "integrity": "sha512-SV8X7jd95ZAx4VnlhoEcbAiW8jhoGkPf7L0JFB2KWX+NFacEVCKGQpDjZpdzD6j7C10750v3blbkjr6iyzeIqw==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/interact-outside": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/file-upload": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/file-upload/-/file-upload-1.24.1.tgz",
- "integrity": "sha512-Un0+qDlkoC93pf7/Nvq9DBVKR6PBKybbNE/En/PC4XLJybK448bY85UuEdBPgXEoR6hIGA3t8NdeHZ+PUoZXIw==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/file-utils": "1.24.1",
- "@zag-js/i18n-utils": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/file-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/file-utils/-/file-utils-1.24.1.tgz",
- "integrity": "sha512-ydMct0iyd4uPxf+NP4gfyPq1gJlvW29WWIm5ez9El9L+z5tDBhXYNc73s2kSdDBKXkO4fp6Mwoqbz/wZOw99/Q==",
- "requires": {
- "@zag-js/i18n-utils": "1.24.1"
- }
- },
- "@zag-js/floating-panel": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/floating-panel/-/floating-panel-1.24.1.tgz",
- "integrity": "sha512-qVVtnKCQE2C//0q7utRvpfRKsZedL8gnSqwHDX4ie8nKmLLSLn6jDGuAzxrscsGPHEjCOru9NlTHlAAMtB3ybQ==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/rect-utils": "1.24.1",
- "@zag-js/store": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/focus-trap": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/focus-trap/-/focus-trap-1.24.1.tgz",
- "integrity": "sha512-cpgYWWaiKx9eycm4Mahv6Dng5+CbDiTtyz/gnbZUv6sqcM4b9N+UqdmBdWYPLHV4gZYrzuO+X4P1C/Ew/rA+xg==",
- "requires": {
- "@zag-js/dom-query": "1.24.1"
- }
- },
- "@zag-js/focus-visible": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-1.24.1.tgz",
- "integrity": "sha512-HzUf8cRl5tbIil6rVe24CxC3s1pdFGpfYSt5NyaFoFd0HuWhobp+De1kVUvlLU0DDUU6Kgw6DB1w8APEPzb8gg==",
- "requires": {
- "@zag-js/dom-query": "1.24.1"
- }
- },
- "@zag-js/highlight-word": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/highlight-word/-/highlight-word-1.24.1.tgz",
- "integrity": "sha512-paDF/sWKDMMclpCzrG60vD4/AFQ3EOu2lzQxl7S21uD/B8Rir4w1CkxK/9+cm1Bu7mj4mkR4t+VJxycEZ7YuIw=="
- },
- "@zag-js/hover-card": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/hover-card/-/hover-card-1.24.1.tgz",
- "integrity": "sha512-zXTcLEb8YOFoEjDMsMcxqidRDN2fY0C94j+XdZYj5eZtKBIgbyCyAjvZrEu9yyPqqrXCNwYU0fTFjac3t9IV4g==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/i18n-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/i18n-utils/-/i18n-utils-1.24.1.tgz",
- "integrity": "sha512-dI9M73FTJcE40s/TPBLLKsypmBoMNe5NoRSBW64PWdmn0fCq65qcAUMgwQ0MVenh4oofoDYyffl8pIStr8T1tA==",
- "requires": {
- "@zag-js/dom-query": "1.24.1"
- }
- },
- "@zag-js/interact-outside": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-1.24.1.tgz",
- "integrity": "sha512-xKyGT295WVrlJaOPCVBrundlXqL4YEvl36SHNSi7EZs/AYpzxR/aBtnFCRN1/7nWvdqvfGs7ya0kl/ly0H7VBg==",
- "requires": {
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/json-tree-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/json-tree-utils/-/json-tree-utils-1.24.1.tgz",
- "integrity": "sha512-TWVg+Y4fLr9o0YaB3OnX4xmV91Te/vzRwnNKntsz3GIWJ5fLNngg4hm3E+eaYnJIlKMHrvJv4T/UB4IGYUF+EQ=="
- },
- "@zag-js/listbox": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/listbox/-/listbox-1.24.1.tgz",
- "integrity": "sha512-fTJ125SWVZ+NxgkT6s8LWpdJQMeADk9Lm+Ur1pi0mZnRCmuHI3nwPkg1dfqynjVyrKs6P8wBmUxt3hlr2cc6TQ==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/collection": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-visible": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/live-region": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/live-region/-/live-region-1.24.1.tgz",
- "integrity": "sha512-A/55dOyRhfdgVtCBP05Uf2UGz/58H0TMWP69GdVYM4uADtfCLNPy6yxHAt9p334qJsWicg/YWSzBdEAVTThNag=="
- },
- "@zag-js/menu": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/menu/-/menu-1.24.1.tgz",
- "integrity": "sha512-XPNQbkIxSbNuYNLLQZlgXbj6Ptn2XHT5BXkUSw2hSbIg35S7Lq8gckiZVtxmUiX8zbv7krTBSD7zThSnwx1TOA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/rect-utils": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/number-input": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/number-input/-/number-input-1.24.1.tgz",
- "integrity": "sha512-F5nX0VvuRmSxddJ8byHYp4OSHLU1C5Fv1rT4L1AnSXud8q6C+zCy4Vy8772pUKNobZf0q8Ru4SgnOe5TQcvRpg==",
- "requires": {
- "@internationalized/number": "3.6.5",
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/pagination": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/pagination/-/pagination-1.24.1.tgz",
- "integrity": "sha512-IO9Q5SiYmk00pjJAD18qFjOkpN1qb9iSeuX6A9Bdo8sMBFSigI6c7tGo1MPYGENma3b+aX7LbUpt8hYFufqUow==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/password-input": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/password-input/-/password-input-1.24.1.tgz",
- "integrity": "sha512-TWgTRNsaAZ6IE1QmCQKhPY6uSRPDGjgdxGSpG7wOuYsbxHw/hD3v5sUAhAo9teIL0wV8COZIh6hyG2UAAgT2kg==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/pin-input": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/pin-input/-/pin-input-1.24.1.tgz",
- "integrity": "sha512-ytJK/1ekU06VmOpe7KdSkIQ3If+fffrA/EpbktZBuRepsz80QHB64+X6QQ6H1lEMbLWPNZ0TuFPaYhFfqH7cTQ==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/popover": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/popover/-/popover-1.24.1.tgz",
- "integrity": "sha512-auNy7/5/VMeNUYbKfcvSz7OHkbrUWdODtA6gB/d/weAxvEHyMSk0+Ms4c5lmN8KDChrBAPJs4CfKSPv1U4I4zw==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/aria-hidden": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-trap": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/remove-scroll": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/popper": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/popper/-/popper-1.24.1.tgz",
- "integrity": "sha512-VWbOjBy/haIDmXhwfyMT1rRcQhSfYmPX67YzQwLA7863kXkoTH1r9fR+1f9uq3VuXQLhw2Cg/lkSzlkg9TIp+g==",
- "requires": {
- "@floating-ui/dom": "1.7.4",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/presence": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/presence/-/presence-1.24.1.tgz",
- "integrity": "sha512-MMcw4iOsGdSGM3hmvd0gcMuk1X9rE/xE3Ndm113vc+lkhk93COiuJPz1ZpyBb8l1CIJwlZ5nnRpx4Lx8Do6aNQ==",
- "requires": {
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1"
- }
- },
- "@zag-js/progress": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/progress/-/progress-1.24.1.tgz",
- "integrity": "sha512-ocp6zkl5Y3sVMzPVIRLZtqtDfMkc365JYIrOUsdUqwJMvZJhSP1IbsbtIJS1ycOaHfLdK27E//GVyjxA7SHGhw==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/qr-code": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/qr-code/-/qr-code-1.24.1.tgz",
- "integrity": "sha512-Hy722PNwLs1tnXFQkTqtrEILypZcUDiC8YdvGn57mmmvPGtZdAzhs4G8ghoP9ahJ02ztREjIt8Qnmct344fALA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1",
- "proxy-memoize": "3.0.1",
- "uqr": "0.1.2"
- }
- },
- "@zag-js/radio-group": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/radio-group/-/radio-group-1.24.1.tgz",
- "integrity": "sha512-49S+nmaZzjf98206VeevmfTNTf+WjLveKCOGz5SVWPX3R8maZJgka1ZlIDuWlnRK1JfL+4Ls10/ZxAk3HrI7sg==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-visible": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/rating-group": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/rating-group/-/rating-group-1.24.1.tgz",
- "integrity": "sha512-EGGObQDmulon5N9s5ElGZv9yQmky10s7ps7wyVgW1+vJTsWr8gaoFMJwf6nbXOsUjqW8iDuzsF68Rel9CgjxIQ==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/react": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/react/-/react-1.24.1.tgz",
- "integrity": "sha512-oiaiuR7FKVHOEJtzoYZ2QBQ5+J/j086eebhLCIWkh2ie6QBJM73LHsMUxfZp2D2G1is8EoyUhrH3v2MPMlYMXg==",
- "requires": {
- "@zag-js/core": "1.24.1",
- "@zag-js/store": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/rect-utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/rect-utils/-/rect-utils-1.24.1.tgz",
- "integrity": "sha512-6JkVq71feW9Yyt7Pynyf199ugDFVgRT+jPpg2ECRHgY2oHvn5atBP3PA1uM2cx7ZydiajnBgk4n1ePnGYD2xNw=="
- },
- "@zag-js/remove-scroll": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/remove-scroll/-/remove-scroll-1.24.1.tgz",
- "integrity": "sha512-SAK3ZsnDUcJve5q3OHsMjrl0JOW9sv1fGbBFXyyid9Uu8s79LMh7EZw2na5jXDNzdMWmk1Euu82OaZSlLl9Kew==",
- "requires": {
- "@zag-js/dom-query": "1.24.1"
- }
- },
- "@zag-js/scroll-area": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/scroll-area/-/scroll-area-1.24.1.tgz",
- "integrity": "sha512-eRZKs6Yyl8Zp+YkIxzr1QsgRDDsNMxXshwpIzt/L5xK+EV34mv760FOkX/unG/WxQ1Z0gBogPm9ZY53/m4bhJA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/scroll-snap": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/scroll-snap/-/scroll-snap-1.24.1.tgz",
- "integrity": "sha512-Co/NlccX4XDg6OzQeRgv8bANbsCkMog1FZ0BveN8+2Mso/svOLVkB6UGswWZk/DyqY8DlxvfZAdPltmQpu5h8w==",
- "requires": {
- "@zag-js/dom-query": "1.24.1"
- }
- },
- "@zag-js/select": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/select/-/select-1.24.1.tgz",
- "integrity": "sha512-boU5m3Qd//EGe1M2i4a2SbCXQpcPP9Ewe6DvjEpOhxP+dwdbZzDrtRBdZ4ByhMJ+1bT5B6TqsfvsQHhAI0LunA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/collection": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/signature-pad": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/signature-pad/-/signature-pad-1.24.1.tgz",
- "integrity": "sha512-CRTcefUGMwdhxqmB8yGkHU3gweMfXw0CCoMc0LhMmla12hMJOBi+mpMVaBJnQHYGSG8uFUh2IKdPbe2Vtp4T3Q==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1",
- "perfect-freehand": "^1.2.2"
- }
- },
- "@zag-js/slider": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/slider/-/slider-1.24.1.tgz",
- "integrity": "sha512-HClZBKcT+9tihZArRNRj35YOIUbztCcyYzggYYIrK4+OFD0RLYihA+yBO4hxs7xZVenzma9i0pc6q/Vo4z2tvA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/splitter": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/splitter/-/splitter-1.24.1.tgz",
- "integrity": "sha512-UUqiCD0T8kfgm/vRTY1QrPlrpxbzxqZ+8QvysUchnibmStetkHnuzAXC4ZD9jlJbToqzE4p1eLOiWGaVXRdB/Q==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/steps": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/steps/-/steps-1.24.1.tgz",
- "integrity": "sha512-njL1SMKef0JfYzw5KUhpeVuzOtgBjSxVUwDrPR9s095WUCUiOYlxzqummg3VBY8IDuT/pS/K6LDSY11YCRzeNw==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/store": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/store/-/store-1.24.1.tgz",
- "integrity": "sha512-iVl+NX2CcxEDLL3hrj31mqSqBZYBqHEBqa/Z7FwKVoTImMQ1AabMF5XPreTtB8KFbaVJlNlM6D5qngDPpVj/xw==",
- "requires": {
- "proxy-compare": "3.0.1"
- }
- },
- "@zag-js/switch": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/switch/-/switch-1.24.1.tgz",
- "integrity": "sha512-RI2bG2AtsQ4ci8T7RA3XVSjd9urpNQXIwEatpa8cw9GCWFI421rt4Xcab5jy/IOu6VzXl6pwh11/cWAC/PBYCw==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-visible": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/tabs": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/tabs/-/tabs-1.24.1.tgz",
- "integrity": "sha512-RjdW4opxhvCWTwHoCqq+lfNCthiyPu376hto6j4Ybl/UN3UFTV4zfTbwbMbAH7dyqj8m1nkKxidLaO0Yhx3zZA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/tags-input": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/tags-input/-/tags-input-1.24.1.tgz",
- "integrity": "sha512-HY1ebBZE2j3/fuzfKw4z/44S9WWe50auMWLlFg47j6zVBcyNdXEeMO1OvvfyfQFJOcvOKXGxW8Hi4MXGxLWqmA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/auto-resize": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/interact-outside": "1.24.1",
- "@zag-js/live-region": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/timer": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/timer/-/timer-1.24.1.tgz",
- "integrity": "sha512-cjD8+I8CgSugsj5DI+kqzgvuQ2vYeArRdjO3iSjB4AjR+j08W8NKZvr7aawhYq636vrE9LeJGbxxZ3DBV12ELw==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/toast": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/toast/-/toast-1.24.1.tgz",
- "integrity": "sha512-gmHv65EYdypfMoF9WYIp7Y8z6XN5tebXEdjIWF8bJBaqW5zPn2VLdUYpfXv7wrHW2YtSTnF/xtgIhJ7MIX7HxA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/toggle": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/toggle/-/toggle-1.24.1.tgz",
- "integrity": "sha512-dMN9Q4XFqr7jPlUZsLCFdUc1rtW88FzUaXcFVaeNCy8y8XGc+MG9AJJqjBiBL9EUeeR+LIp8yUIhJQEEDBm0kw==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/toggle-group": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/toggle-group/-/toggle-group-1.24.1.tgz",
- "integrity": "sha512-GVBay9XzmXjp1GgAmHUMpeYq3iMMevH+n0TyC0NcRe00prAEL9S4/q9pVy0P33PIOa20dxcvQ/Q3Tf+n5PFQcg==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/tooltip": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/tooltip/-/tooltip-1.24.1.tgz",
- "integrity": "sha512-gdD5C9AF6JD8LC6mxXzUGWjnHqY3MS7ZvtNx/nuNGJAqKCD32dPT73fuv0up1UVh1yJhX4IrXg3H6q52Pm+jPw==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-visible": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/tour": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/tour/-/tour-1.24.1.tgz",
- "integrity": "sha512-e+UR8xauKyRhE6tA8gRsR1GuOn1QGjj2YAmtRC8lIb5tD+QrGCPy0jX2xBeR7M7eY1IPSSyi0gCUGE2CbaRK8Q==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dismissable": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/focus-trap": "1.24.1",
- "@zag-js/interact-outside": "1.24.1",
- "@zag-js/popper": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/tree-view": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/tree-view/-/tree-view-1.24.1.tgz",
- "integrity": "sha512-HXCoqW6j2RunFxaIVRevgRTrRUEP05lpdOvc1Smzne7sC2mczwIqN68Vei6e83gRhXSF80v6Fc4TcHdPiW6wJA==",
- "requires": {
- "@zag-js/anatomy": "1.24.1",
- "@zag-js/collection": "1.24.1",
- "@zag-js/core": "1.24.1",
- "@zag-js/dom-query": "1.24.1",
- "@zag-js/types": "1.24.1",
- "@zag-js/utils": "1.24.1"
- }
- },
- "@zag-js/types": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-1.24.1.tgz",
- "integrity": "sha512-XyINtxe5JK7A+RtTmBdCQElNoElDiTw6NSWpjKZGRAXXGU9HIZ9JIFeaS77uq1aVs0JhAOFwqJiPs2NJzaYHLA==",
- "requires": {
- "csstype": "3.1.3"
- }
- },
- "@zag-js/utils": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-1.24.1.tgz",
- "integrity": "sha512-4nU9lfFlLLW/4T+/HaP+HdHYFeWvacxSVcccv0JSf+ZTC110IldV48kZELP+wFg9xDL/jCPPjlRtO1K64EIwgA=="
- },
- "acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
- "dev": true
- },
- "ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true
+ "node_modules/perfect-debounce": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz",
+ "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==",
+ "dev": true,
+ "license": "MIT"
},
- "ansis": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz",
- "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==",
- "dev": true
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
},
- "anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
},
- "dependencies": {
- "picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
- }
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
+ "node_modules/pkg-types": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz",
+ "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "confbox": "^0.2.2",
+ "exsolve": "^1.0.7",
+ "pathe": "^2.0.3"
+ }
},
- "ast-types": {
- "version": "0.16.1",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
- "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
+ "node_modules/possible-typed-array-names": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
"dev": true,
- "requires": {
- "tslib": "^2.0.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
}
},
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ "node_modules/postcss": {
+ "version": "8.5.3",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
+ "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.8",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
},
- "axios": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz",
- "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==",
- "requires": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.4",
- "proxy-from-env": "^1.1.0"
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "license": "MIT"
+ },
+ "node_modules/preact": {
+ "version": "10.12.1",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz",
+ "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
}
},
- "babel-dead-code-elimination": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.10.tgz",
- "integrity": "sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==",
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true,
- "requires": {
- "@babel/core": "^7.23.7",
- "@babel/parser": "^7.23.6",
- "@babel/traverse": "^7.23.7",
- "@babel/types": "^7.23.6"
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "babel-plugin-macros": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
- "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
- "requires": {
- "@babel/runtime": "^7.12.5",
- "cosmiconfig": "^7.0.0",
- "resolve": "^1.19.0"
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
}
},
- "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
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
},
- "braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
- "requires": {
- "fill-range": "^7.1.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
}
},
- "browserslist": {
- "version": "4.25.4",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz",
- "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==",
+ "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,
- "requires": {
- "caniuse-lite": "^1.0.30001737",
- "electron-to-chromium": "^1.5.211",
- "node-releases": "^2.0.19",
- "update-browserslist-db": "^1.1.3"
- }
+ "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"
},
- "bundle-name": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
- "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
+ "node_modules/rc9": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz",
+ "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==",
"dev": true,
- "requires": {
- "run-applescript": "^7.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "defu": "^6.1.4",
+ "destr": "^2.0.3"
}
},
- "c12": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/c12/-/c12-2.0.1.tgz",
- "integrity": "sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==",
- "dev": true,
- "requires": {
- "chokidar": "^4.0.1",
- "confbox": "^0.1.7",
- "defu": "^6.1.4",
- "dotenv": "^16.4.5",
- "giget": "^1.2.3",
- "jiti": "^2.3.0",
- "mlly": "^1.7.1",
- "ohash": "^1.1.4",
- "pathe": "^1.1.2",
- "perfect-debounce": "^1.0.0",
- "pkg-types": "^1.2.0",
- "rc9": "^2.1.2"
+ "node_modules/react": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
+ "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-apexcharts": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/react-apexcharts/-/react-apexcharts-1.7.0.tgz",
+ "integrity": "sha512-03oScKJyNLRf0Oe+ihJxFZliBQM9vW3UWwomVn4YVRTN1jsIR58dLWt0v1sb8RwJVHDMbeHiKQueM0KGpn7nOA==",
+ "license": "MIT",
+ "dependencies": {
+ "prop-types": "^15.8.1"
},
+ "peerDependencies": {
+ "apexcharts": ">=4.0.0",
+ "react": ">=0.13"
+ }
+ },
+ "node_modules/react-dnd": {
+ "version": "16.0.1",
+ "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-16.0.1.tgz",
+ "integrity": "sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==",
+ "license": "MIT",
"dependencies": {
- "dotenv": {
- "version": "16.6.1",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
- "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
- "dev": true
+ "@react-dnd/invariant": "^4.0.1",
+ "@react-dnd/shallowequal": "^4.0.1",
+ "dnd-core": "^16.0.1",
+ "fast-deep-equal": "^3.1.3",
+ "hoist-non-react-statics": "^3.3.2"
+ },
+ "peerDependencies": {
+ "@types/hoist-non-react-statics": ">= 3.3.1",
+ "@types/node": ">= 12",
+ "@types/react": ">= 16",
+ "react": ">= 16.14"
+ },
+ "peerDependenciesMeta": {
+ "@types/hoist-non-react-statics": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
}
}
},
- "call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "requires": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
+ "node_modules/react-dnd-html5-backend": {
+ "version": "16.0.1",
+ "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-16.0.1.tgz",
+ "integrity": "sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==",
+ "license": "MIT",
+ "dependencies": {
+ "dnd-core": "^16.0.1"
}
},
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
- },
- "caniuse-lite": {
- "version": "1.0.30001741",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz",
- "integrity": "sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==",
- "dev": true
- },
- "chokidar": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz",
- "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
- "dev": true,
- "requires": {
- "readdirp": "^4.0.1"
+ "node_modules/react-dom": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
+ "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==",
+ "license": "MIT",
+ "dependencies": {
+ "scheduler": "^0.25.0"
+ },
+ "peerDependencies": {
+ "react": "^19.0.0"
}
},
- "chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "dev": true
- },
- "citty": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz",
- "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==",
- "dev": true,
- "requires": {
- "consola": "^3.2.3"
+ "node_modules/react-dropzone": {
+ "version": "14.3.8",
+ "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.8.tgz",
+ "integrity": "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==",
+ "license": "MIT",
+ "dependencies": {
+ "attr-accept": "^2.2.4",
+ "file-selector": "^2.1.0",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">= 10.13"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8 || 18.0.0"
}
},
- "clsx": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
- "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
- "dev": true
- },
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
},
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "requires": {
- "delayed-stream": "~1.0.0"
+ "node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
}
},
- "commander": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-13.0.0.tgz",
- "integrity": "sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==",
- "dev": true
- },
- "confbox": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
- "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
- "dev": true
- },
- "consola": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz",
- "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
- },
- "cookie-es": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz",
- "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg=="
- },
- "cosmiconfig": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
- "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
- "requires": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.2.1",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.10.0"
- },
+ "node_modules/redux": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
+ "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
+ "license": "MIT",
"dependencies": {
- "yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
- }
+ "@babel/runtime": "^7.9.2"
}
},
- "cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "node_modules/reflect.getprototypeof": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
+ "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
"dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.1",
+ "which-builtin-type": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
- },
- "debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
- "requires": {
- "ms": "^2.1.3"
- }
+ "node_modules/regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+ "dev": true,
+ "license": "MIT"
},
- "default-browser": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
- "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
+ "node_modules/regenerate-unicode-properties": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz",
+ "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==",
"dev": true,
- "requires": {
- "bundle-name": "^4.1.0",
- "default-browser-id": "^5.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "regenerate": "^1.4.2"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "default-browser-id": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz",
- "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
- "dev": true
- },
- "define-lazy-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
- "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
- "dev": true
- },
- "defu": {
- "version": "6.1.4",
- "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
- "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
- "dev": true
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "license": "MIT"
},
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ "node_modules/regenerator-transform": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
+ "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.8.4"
+ }
},
- "destr": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz",
- "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==",
- "dev": true
- },
- "diff": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz",
- "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==",
- "dev": true
- },
- "dotenv": {
- "version": "17.2.2",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.2.tgz",
- "integrity": "sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==",
- "dev": true
- },
- "dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "requires": {
- "call-bind-apply-helpers": "^1.0.1",
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
+ "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
"es-errors": "^1.3.0",
- "gopd": "^1.2.0"
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "electron-to-chromium": {
- "version": "1.5.214",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.214.tgz",
- "integrity": "sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==",
- "dev": true
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "requires": {
- "is-arrayish": "^0.2.1"
+ "node_modules/regexpu-core": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz",
+ "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.2.0",
+ "regjsgen": "^0.8.0",
+ "regjsparser": "^0.12.0",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
- },
- "es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
+ "node_modules/regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+ "dev": true,
+ "license": "MIT"
},
- "es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "requires": {
- "es-errors": "^1.3.0"
+ "node_modules/regjsparser": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz",
+ "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "jsesc": "~3.0.2"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
}
},
- "es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "requires": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
+ "node_modules/regjsparser/node_modules/jsesc": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+ "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "esbuild": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz",
- "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==",
- "dev": true,
- "requires": {
- "@esbuild/aix-ppc64": "0.25.3",
- "@esbuild/android-arm": "0.25.3",
- "@esbuild/android-arm64": "0.25.3",
- "@esbuild/android-x64": "0.25.3",
- "@esbuild/darwin-arm64": "0.25.3",
- "@esbuild/darwin-x64": "0.25.3",
- "@esbuild/freebsd-arm64": "0.25.3",
- "@esbuild/freebsd-x64": "0.25.3",
- "@esbuild/linux-arm": "0.25.3",
- "@esbuild/linux-arm64": "0.25.3",
- "@esbuild/linux-ia32": "0.25.3",
- "@esbuild/linux-loong64": "0.25.3",
- "@esbuild/linux-mips64el": "0.25.3",
- "@esbuild/linux-ppc64": "0.25.3",
- "@esbuild/linux-riscv64": "0.25.3",
- "@esbuild/linux-s390x": "0.25.3",
- "@esbuild/linux-x64": "0.25.3",
- "@esbuild/netbsd-arm64": "0.25.3",
- "@esbuild/netbsd-x64": "0.25.3",
- "@esbuild/openbsd-arm64": "0.25.3",
- "@esbuild/openbsd-x64": "0.25.3",
- "@esbuild/sunos-x64": "0.25.3",
- "@esbuild/win32-arm64": "0.25.3",
- "@esbuild/win32-ia32": "0.25.3",
- "@esbuild/win32-x64": "0.25.3"
- }
- },
- "escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true
+ "node_modules/resolve": {
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "escape-string-regexp": {
+ "node_modules/resolve-from": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "execa": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
- "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^8.0.1",
- "human-signals": "^5.0.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^4.1.0",
- "strip-final-newline": "^3.0.0"
- }
- },
- "fast-safe-stringify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
- },
- "fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
- "requires": {}
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
},
- "fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
"dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
}
},
- "find-root": {
+ "node_modules/reusify": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+ "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"
+ }
},
- "follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
+ "node_modules/rspack-resolver": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/rspack-resolver/-/rspack-resolver-1.2.2.tgz",
+ "integrity": "sha512-Fwc19jMBA3g+fxDJH2B4WxwZjE0VaaOL7OX/A4Wn5Zv7bOD/vyPZhzXfaO73Xc2GAlfi96g5fGUa378WbIGfFw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/JounQin"
+ },
+ "optionalDependencies": {
+ "@unrs/rspack-resolver-binding-darwin-arm64": "1.2.2",
+ "@unrs/rspack-resolver-binding-darwin-x64": "1.2.2",
+ "@unrs/rspack-resolver-binding-freebsd-x64": "1.2.2",
+ "@unrs/rspack-resolver-binding-linux-arm-gnueabihf": "1.2.2",
+ "@unrs/rspack-resolver-binding-linux-arm64-gnu": "1.2.2",
+ "@unrs/rspack-resolver-binding-linux-arm64-musl": "1.2.2",
+ "@unrs/rspack-resolver-binding-linux-x64-gnu": "1.2.2",
+ "@unrs/rspack-resolver-binding-linux-x64-musl": "1.2.2",
+ "@unrs/rspack-resolver-binding-wasm32-wasi": "1.2.2",
+ "@unrs/rspack-resolver-binding-win32-arm64-msvc": "1.2.2",
+ "@unrs/rspack-resolver-binding-win32-x64-msvc": "1.2.2"
+ }
},
- "form-data": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.12"
+ "node_modules/run-applescript": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz",
+ "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "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/safe-array-concat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
+ "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
"dev": true,
- "requires": {
- "minipass": "^3.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "has-symbols": "^1.1.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
},
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-push-apply": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
+ "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
+ "es-errors": "^1.3.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "node_modules/safe-regex-test": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
"dev": true,
- "optional": true
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+ "node_modules/scheduler": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
+ "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
+ "license": "MIT"
},
- "gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
},
- "get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "requires": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
"function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "requires": {
+ "node_modules/set-proto": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
+ "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"dunder-proto": "^1.0.1",
+ "es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "get-stream": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
- "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
- "dev": true
+ "node_modules/sharp": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
+ "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "color": "^4.2.3",
+ "detect-libc": "^2.0.3",
+ "semver": "^7.6.3"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.33.5",
+ "@img/sharp-darwin-x64": "0.33.5",
+ "@img/sharp-libvips-darwin-arm64": "1.0.4",
+ "@img/sharp-libvips-darwin-x64": "1.0.4",
+ "@img/sharp-libvips-linux-arm": "1.0.5",
+ "@img/sharp-libvips-linux-arm64": "1.0.4",
+ "@img/sharp-libvips-linux-s390x": "1.0.4",
+ "@img/sharp-libvips-linux-x64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
+ "@img/sharp-linux-arm": "0.33.5",
+ "@img/sharp-linux-arm64": "0.33.5",
+ "@img/sharp-linux-s390x": "0.33.5",
+ "@img/sharp-linux-x64": "0.33.5",
+ "@img/sharp-linuxmusl-arm64": "0.33.5",
+ "@img/sharp-linuxmusl-x64": "0.33.5",
+ "@img/sharp-wasm32": "0.33.5",
+ "@img/sharp-win32-ia32": "0.33.5",
+ "@img/sharp-win32-x64": "0.33.5"
+ }
+ },
+ "node_modules/sharp/node_modules/semver": {
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "license": "ISC",
+ "optional": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
},
- "get-tsconfig": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
- "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
- "requires": {
- "resolve-pkg-maps": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "giget": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz",
- "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==",
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
- "requires": {
- "citty": "^0.1.6",
- "consola": "^3.2.3",
- "defu": "^6.1.4",
- "node-fetch-native": "^1.6.3",
- "nypm": "^0.3.8",
- "ohash": "^1.1.3",
- "pathe": "^1.1.2",
- "tar": "^6.2.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
"dev": true,
- "requires": {
- "is-glob": "^4.0.1"
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "goober": {
- "version": "2.1.16",
- "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz",
- "integrity": "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==",
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
"dev": true,
- "requires": {}
- },
- "gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "handlebars": {
- "version": "4.7.8",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
- "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
"dev": true,
- "requires": {
- "minimist": "^1.2.5",
- "neo-async": "^2.6.2",
- "source-map": "^0.6.1",
- "uglify-js": "^3.1.4",
- "wordwrap": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
- },
- "has-tostringtag": {
+ "node_modules/side-channel-weakmap": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "requires": {
- "has-symbols": "^1.0.3"
- }
- },
- "hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "requires": {
- "function-bind": "^1.1.2"
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "hoist-non-react-statics": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
- "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
- "requires": {
- "react-is": "^16.7.0"
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
}
},
- "human-signals": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
- "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
- "dev": true
+ "node_modules/simple-swizzle/node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "license": "MIT",
+ "optional": true
},
- "import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
+ "node_modules/snake-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz",
+ "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
}
},
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
- },
- "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==",
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-core-module": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
- "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
- "requires": {
- "hasown": "^2.0.0"
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
- "dev": true
+ "node_modules/stable-hash": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
+ "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
+ "dev": true,
+ "license": "MIT"
},
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
},
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "node_modules/string.prototype.includes": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
+ "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
"dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "is-inside-container": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
+ "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
"dev": true,
- "requires": {
- "is-docker": "^3.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.6",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.6",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "internal-slot": "^1.1.0",
+ "regexp.prototype.flags": "^1.5.3",
+ "set-function-name": "^2.0.2",
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "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
- },
- "is-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
- "dev": true
- },
- "is-wsl": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
- "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+ "node_modules/string.prototype.repeat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
"dev": true,
- "requires": {
- "is-inside-container": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
}
},
- "isbot": {
- "version": "5.1.30",
- "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.30.tgz",
- "integrity": "sha512-3wVJEonAns1OETX83uWsk5IAne2S5zfDcntD2hbtU23LelSqNXzXs9zKjMPOLMzroCgIjCfjYAEHrd2D6FOkiA=="
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
- },
- "jiti": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.0.tgz",
- "integrity": "sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==",
- "dev": true
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+ "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
"dev": true,
- "requires": {
- "argparse": "^2.0.1"
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-data-property": "^1.1.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-object-atoms": "^1.0.0",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "jsesc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
- "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="
- },
- "json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
- },
- "json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+ "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "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=="
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
},
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
- "requires": {
- "yallist": "^3.0.2"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
},
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/styled-jsx": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
+ "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
+ "license": "MIT",
"dependencies": {
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
+ "client-only": "0.0.1"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
}
}
},
- "math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
+ "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"
+ }
},
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ "node_modules/svg-parser": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
+ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==",
+ "dev": true,
+ "license": "MIT"
},
- "mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "requires": {
- "mime-db": "1.52.0"
+ "node_modules/svgo": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
+ "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^2.3.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
}
},
- "mimic-fn": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
- "dev": true
+ "node_modules/swiper": {
+ "version": "11.2.6",
+ "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.6.tgz",
+ "integrity": "sha512-8aXpYKtjy3DjcbzZfz+/OX/GhcU5h+looA6PbAzHMZT6ESSycSp9nAjPCenczgJyslV+rUGse64LMGpWE3PX9Q==",
+ "funding": [
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/swiperjs"
+ },
+ {
+ "type": "open_collective",
+ "url": "http://opencollective.com/swiper"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.7.0"
+ }
},
- "minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true
+ "node_modules/tailwind-merge": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz",
+ "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/dcastil"
+ }
},
- "minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "dev": true
+ "node_modules/tailwindcss": {
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.15.tgz",
+ "integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==",
+ "license": "MIT"
},
- "minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
}
},
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
+ "node_modules/tinyexec": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz",
+ "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==",
+ "dev": true,
+ "license": "MIT"
},
- "mlly": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.3.tgz",
- "integrity": "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==",
+ "node_modules/tinyglobby": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
+ "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
"dev": true,
- "requires": {
- "acorn": "^8.14.0",
- "pathe": "^1.1.2",
- "pkg-types": "^1.2.1",
- "ufo": "^1.5.4"
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.3",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
}
},
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true
- },
- "neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "next-themes": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz",
- "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==",
- "requires": {}
- },
- "node-fetch-native": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz",
- "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==",
- "dev": true
- },
- "node-releases": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.20.tgz",
- "integrity": "sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==",
- "dev": true
- },
- "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
- },
- "npm-run-path": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
- "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.4.3",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
+ "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
"dev": true,
- "requires": {
- "path-key": "^4.0.0"
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
},
- "dependencies": {
- "path-key": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
- "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
- "dev": true
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
}
}
},
- "nypm": {
- "version": "0.3.12",
- "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.12.tgz",
- "integrity": "sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==",
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"dev": true,
- "requires": {
- "citty": "^0.1.6",
- "consola": "^3.2.3",
- "execa": "^8.0.1",
- "pathe": "^1.1.2",
- "pkg-types": "^1.2.0",
- "ufo": "^1.5.4"
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "ohash": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz",
- "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==",
- "dev": true
- },
- "onetime": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "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,
- "requires": {
- "mimic-fn": "^4.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
}
},
- "open": {
- "version": "10.1.2",
- "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz",
- "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==",
+ "node_modules/ts-api-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
"dev": true,
- "requires": {
- "default-browser": "^5.2.1",
- "define-lazy-prop": "^3.0.0",
- "is-inside-container": "^1.0.0",
- "is-wsl": "^3.1.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
}
},
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "requires": {
- "callsites": "^3.0.0"
+ "node_modules/tsconfig-paths": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
}
},
- "parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
+ "node_modules/tsconfig-paths/node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
}
},
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "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=="
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
- },
- "pathe": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
- "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
- "dev": true
- },
- "perfect-debounce": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
- "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
- "dev": true
- },
- "perfect-freehand": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/perfect-freehand/-/perfect-freehand-1.2.2.tgz",
- "integrity": "sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ=="
- },
- "picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
- },
- "picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
- "dev": true
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
},
- "pkg-types": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz",
- "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==",
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
- "requires": {
- "confbox": "^0.1.8",
- "mlly": "^1.7.2",
- "pathe": "^1.1.2"
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "playwright": {
- "version": "1.55.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.0.tgz",
- "integrity": "sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==",
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
"dev": true,
- "requires": {
- "fsevents": "2.3.2",
- "playwright-core": "1.55.0"
- },
+ "license": "MIT",
"dependencies": {
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "optional": true
- }
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "playwright-core": {
- "version": "1.55.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.0.tgz",
- "integrity": "sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==",
- "dev": true
- },
- "postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
+ "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
"dev": true,
- "requires": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "prettier": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
- "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
- "dev": true
- },
- "proxy-compare": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-3.0.1.tgz",
- "integrity": "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q=="
- },
- "proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
- },
- "proxy-memoize": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/proxy-memoize/-/proxy-memoize-3.0.1.tgz",
- "integrity": "sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==",
- "requires": {
- "proxy-compare": "^3.0.0"
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
+ "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.15",
+ "reflect.getprototypeof": "^1.0.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "rc9": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz",
- "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==",
+ "node_modules/typed-array-length": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
+ "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
"dev": true,
- "requires": {
- "defu": "^6.1.4",
- "destr": "^2.0.3"
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0",
+ "reflect.getprototypeof": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "react": {
- "version": "19.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
- "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ=="
- },
- "react-dom": {
- "version": "19.2.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
- "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
- "requires": {
- "scheduler": "^0.27.0"
+ "node_modules/typescript": {
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
+ "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
}
},
- "react-error-boundary": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-6.0.0.tgz",
- "integrity": "sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==",
- "requires": {
- "@babel/runtime": "^7.12.5"
+ "node_modules/uglify-js": {
+ "version": "3.19.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
+ "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
}
},
- "react-hook-form": {
- "version": "7.62.0",
- "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz",
- "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==",
- "requires": {}
- },
- "react-icons": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz",
- "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==",
- "requires": {}
- },
- "react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
- },
- "readdirp": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
- "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
- "dev": true
- },
- "recast": {
- "version": "0.23.11",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz",
- "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==",
+ "node_modules/unbox-primitive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+ "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
"dev": true,
- "requires": {
- "ast-types": "^0.16.1",
- "esprima": "~4.0.0",
- "source-map": "~0.6.1",
- "tiny-invariant": "^1.3.3",
- "tslib": "^2.0.1"
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "which-boxed-primitive": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+ "node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "devOptional": true,
+ "license": "MIT"
},
- "resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
- "requires": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
+ "node_modules/unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
+ "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
}
},
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
- },
- "resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "dev": true
- },
- "rollup": {
- "version": "4.50.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz",
- "integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==",
- "dev": true,
- "requires": {
- "@rollup/rollup-android-arm-eabi": "4.50.1",
- "@rollup/rollup-android-arm64": "4.50.1",
- "@rollup/rollup-darwin-arm64": "4.50.1",
- "@rollup/rollup-darwin-x64": "4.50.1",
- "@rollup/rollup-freebsd-arm64": "4.50.1",
- "@rollup/rollup-freebsd-x64": "4.50.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.50.1",
- "@rollup/rollup-linux-arm-musleabihf": "4.50.1",
- "@rollup/rollup-linux-arm64-gnu": "4.50.1",
- "@rollup/rollup-linux-arm64-musl": "4.50.1",
- "@rollup/rollup-linux-loongarch64-gnu": "4.50.1",
- "@rollup/rollup-linux-ppc64-gnu": "4.50.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.50.1",
- "@rollup/rollup-linux-riscv64-musl": "4.50.1",
- "@rollup/rollup-linux-s390x-gnu": "4.50.1",
- "@rollup/rollup-linux-x64-gnu": "4.50.1",
- "@rollup/rollup-linux-x64-musl": "4.50.1",
- "@rollup/rollup-openharmony-arm64": "4.50.1",
- "@rollup/rollup-win32-arm64-msvc": "4.50.1",
- "@rollup/rollup-win32-ia32-msvc": "4.50.1",
- "@rollup/rollup-win32-x64-msvc": "4.50.1",
- "@types/estree": "1.0.8",
- "fsevents": "~2.3.2"
- }
- },
- "run-applescript": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
- "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
- "dev": true
- },
- "scheduler": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
- "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="
- },
- "semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true
- },
- "seroval": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz",
- "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ=="
- },
- "seroval-plugins": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.3.3.tgz",
- "integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==",
- "requires": {}
- },
- "shebang-command": {
+ "node_modules/unicode-match-property-ecmascript": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
"dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true
- },
- "solid-js": {
- "version": "1.9.9",
- "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.9.tgz",
- "integrity": "sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==",
+ "node_modules/unicode-match-property-value-ecmascript": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
+ "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
"dev": true,
- "requires": {
- "csstype": "^3.1.0",
- "seroval": "~1.3.0",
- "seroval-plugins": "~1.3.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
}
},
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true
- },
- "strip-final-newline": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
- "dev": true
- },
- "stylis": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
- "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
- },
- "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=="
- },
- "tar": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
- "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+ "node_modules/unicode-property-aliases-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
"dev": true,
- "requires": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^5.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
}
},
- "tiny-invariant": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
- "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="
- },
- "tiny-warning": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
- "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
},
- "tinyglobby": {
- "version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
- "requires": {
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3"
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
}
},
- "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==",
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
- "requires": {
- "is-number": "^7.0.0"
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
- },
- "tsx": {
- "version": "4.20.5",
- "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.5.tgz",
- "integrity": "sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==",
+ "node_modules/which-boxed-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
+ "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
"dev": true,
- "requires": {
- "esbuild": "~0.25.0",
- "fsevents": "~2.3.3",
- "get-tsconfig": "^4.7.5"
+ "license": "MIT",
+ "dependencies": {
+ "is-bigint": "^1.1.0",
+ "is-boolean-object": "^1.2.1",
+ "is-number-object": "^1.1.1",
+ "is-string": "^1.1.1",
+ "is-symbol": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "typescript": {
- "version": "5.9.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
- "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
- "dev": true
- },
- "ufo": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz",
- "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==",
- "dev": true
- },
- "uglify-js": {
- "version": "3.17.4",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
- "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "node_modules/which-builtin-type": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+ "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
"dev": true,
- "optional": true
- },
- "undici-types": {
- "version": "7.12.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz",
- "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==",
- "dev": true
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.1.0",
+ "is-finalizationregistry": "^1.1.0",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.2.1",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.1.0",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "unplugin": {
- "version": "2.3.10",
- "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.10.tgz",
- "integrity": "sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==",
+ "node_modules/which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
"dev": true,
- "requires": {
- "@jridgewell/remapping": "^2.3.5",
- "acorn": "^8.15.0",
- "picomatch": "^4.0.3",
- "webpack-virtual-modules": "^0.6.2"
+ "license": "MIT",
+ "dependencies": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "update-browserslist-db": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
- "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "node_modules/which-typed-array": {
+ "version": "1.1.19",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
+ "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
"dev": true,
- "requires": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.1"
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "for-each": "^0.3.5",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "uqr": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz",
- "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA=="
- },
- "use-sync-external-store": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz",
- "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
- "requires": {}
- },
- "vite": {
- "version": "7.1.9",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.9.tgz",
- "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==",
- "dev": true,
- "requires": {
- "esbuild": "^0.25.0",
- "fdir": "^6.5.0",
- "fsevents": "~2.3.3",
- "picomatch": "^4.0.3",
- "postcss": "^8.5.6",
- "rollup": "^4.43.0",
- "tinyglobby": "^0.2.15"
- }
- },
- "webpack-virtual-modules": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
- "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"dev": true,
- "requires": {
- "isexe": "^2.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "wordwrap": {
+ "node_modules/wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
- "zod": {
- "version": "3.25.76",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
- "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
- "dev": true
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
}
}
}
diff --git a/frontend/package.json b/frontend/package.json
index d98a2b1247..d0ef8c6d8b 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -4,39 +4,59 @@
"version": "0.0.0",
"type": "module",
"scripts": {
- "dev": "vite",
- "build": "tsc -p tsconfig.build.json && vite build",
- "lint": "biome check --write --unsafe --no-errors-on-unmatched --files-ignore-unknown=true ./",
- "preview": "vite preview",
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint",
"generate-client": "openapi-ts"
},
"dependencies": {
- "@chakra-ui/react": "^3.27.0",
- "@emotion/react": "^11.14.0",
- "@tanstack/react-query": "^5.90.2",
- "@tanstack/react-query-devtools": "^5.90.2",
- "@tanstack/react-router": "^1.131.50",
- "axios": "1.12.2",
- "form-data": "4.0.4",
- "next-themes": "^0.4.6",
- "react": "^19.1.1",
- "react-dom": "^19.2.0",
- "react-error-boundary": "^6.0.0",
- "react-hook-form": "7.62.0",
- "react-icons": "^5.5.0"
+ "@fullcalendar/core": "^6.1.15",
+ "@fullcalendar/daygrid": "^6.1.15",
+ "@fullcalendar/interaction": "^6.1.15",
+ "@fullcalendar/list": "^6.1.15",
+ "@fullcalendar/react": "^6.1.15",
+ "@fullcalendar/timegrid": "^6.1.15",
+ "@react-jvectormap/core": "^1.0.4",
+ "@react-jvectormap/world": "^1.1.2",
+ "@tailwindcss/forms": "^0.5.9",
+ "@tailwindcss/postcss": "^4.0.9",
+ "apexcharts": "^4.3.0",
+ "autoprefixer": "^10.4.20",
+ "axios": "^1.12.2",
+ "flatpickr": "^4.6.13",
+ "next": "15.2.3",
+ "react": "^19.0.0",
+ "react-apexcharts": "^1.7.0",
+ "react-dnd": "^16.0.1",
+ "react-dnd-html5-backend": "^16.0.1",
+ "react-dom": "^19.0.0",
+ "react-dropzone": "^14.3.5",
+ "swiper": "^11.2.0",
+ "tailwind-merge": "^2.6.0"
},
"devDependencies": {
- "@biomejs/biome": "^2.2.4",
- "@hey-api/openapi-ts": "0.73.0",
- "@playwright/test": "^1.55.0",
- "@tanstack/router-devtools": "^1.131.42",
- "@tanstack/router-plugin": "^1.133.15",
- "@types/node": "^24.5.2",
- "@types/react": "^19.1.16",
- "@types/react-dom": "^19.2.1",
- "@vitejs/plugin-react-swc": "^4.0.1",
- "dotenv": "^17.2.2",
- "typescript": "^5.2.2",
- "vite": "^7.1.9"
+ "@eslint/eslintrc": "^3",
+ "@hey-api/openapi-ts": "^0.85.2",
+ "@svgr/webpack": "^8.1.0",
+ "@types/node": "^20",
+ "@types/react": "^19",
+ "@types/react-dom": "^19",
+ "@types/react-transition-group": "^4.4.12",
+ "eslint": "^9",
+ "eslint-config-next": "15.1.3",
+ "postcss": "^8",
+ "tailwindcss": "^4.0.0",
+ "typescript": "^5"
+ },
+ "overrides": {
+ "@react-jvectormap/core": {
+ "react": "^16.8.0 || ^17 || ^18 || ^19",
+ "react-dom": "^16.8.0 || ^17 || ^18 || ^19"
+ },
+ "@react-jvectormap/world": {
+ "react": "^16.8.0 || ^17 || ^18 || ^19",
+ "react-dom": "^16.8.0 || ^17 || ^18 || ^19"
+ }
}
}
diff --git a/frontend/playwright.config.ts b/frontend/playwright.config.ts
deleted file mode 100644
index b9d5a51246..0000000000
--- a/frontend/playwright.config.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import { defineConfig, devices } from '@playwright/test';
-import 'dotenv/config'
-
-/**
- * Read environment variables from file.
- * https://github.com/motdotla/dotenv
- */
-
-/**
- * See https://playwright.dev/docs/test-configuration.
- */
-export default defineConfig({
- testDir: './tests',
- /* Run tests in files in parallel */
- fullyParallel: true,
- /* Fail the build on CI if you accidentally left test.only in the source code. */
- forbidOnly: !!process.env.CI,
- /* Retry on CI only */
- retries: process.env.CI ? 2 : 0,
- /* Opt out of parallel tests on CI. */
- workers: process.env.CI ? 1 : undefined,
- /* Reporter to use. See https://playwright.dev/docs/test-reporters */
- reporter: process.env.CI ? 'blob' : 'html',
- /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
- use: {
- /* Base URL to use in actions like `await page.goto('/')`. */
- baseURL: 'http://localhost:5173',
-
- /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
- trace: 'on-first-retry',
- },
-
- /* Configure projects for major browsers */
- projects: [
- { name: 'setup', testMatch: /.*\.setup\.ts/ },
-
- {
- name: 'chromium',
- use: {
- ...devices['Desktop Chrome'],
- storageState: 'playwright/.auth/user.json',
- },
- dependencies: ['setup'],
- },
-
- // {
- // name: 'firefox',
- // use: {
- // ...devices['Desktop Firefox'],
- // storageState: 'playwright/.auth/user.json',
- // },
- // dependencies: ['setup'],
- // },
-
- // {
- // name: 'webkit',
- // use: {
- // ...devices['Desktop Safari'],
- // storageState: 'playwright/.auth/user.json',
- // },
- // dependencies: ['setup'],
- // },
-
- /* Test against mobile viewports. */
- // {
- // name: 'Mobile Chrome',
- // use: { ...devices['Pixel 5'] },
- // },
- // {
- // name: 'Mobile Safari',
- // use: { ...devices['iPhone 12'] },
- // },
-
- /* Test against branded browsers. */
- // {
- // name: 'Microsoft Edge',
- // use: { ...devices['Desktop Edge'], channel: 'msedge' },
- // },
- // {
- // name: 'Google Chrome',
- // use: { ...devices['Desktop Chrome'], channel: 'chrome' },
- // },
- ],
-
- /* Run your local dev server before starting the tests */
- webServer: {
- command: 'npm run dev',
- url: 'http://localhost:5173',
- reuseExistingServer: !process.env.CI,
- },
-});
diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js
new file mode 100644
index 0000000000..a34a3d560d
--- /dev/null
+++ b/frontend/postcss.config.js
@@ -0,0 +1,5 @@
+export default {
+ plugins: {
+ '@tailwindcss/postcss': {},
+ },
+};
diff --git a/frontend/prettier.config.js b/frontend/prettier.config.js
new file mode 100644
index 0000000000..c276687574
--- /dev/null
+++ b/frontend/prettier.config.js
@@ -0,0 +1,3 @@
+export default {
+ plugins: ['prettier-plugin-tailwindcss'],
+}
diff --git a/frontend/public/assets/images/fastapi-logo.svg b/frontend/public/assets/images/fastapi-logo.svg
deleted file mode 100644
index d3dad4bec8..0000000000
--- a/frontend/public/assets/images/fastapi-logo.svg
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/public/assets/images/favicon.png b/frontend/public/assets/images/favicon.png
deleted file mode 100644
index e5b7c3ada7..0000000000
Binary files a/frontend/public/assets/images/favicon.png and /dev/null differ
diff --git a/frontend/public/images/brand/brand-01.svg b/frontend/public/images/brand/brand-01.svg
new file mode 100644
index 0000000000..7321fbfd8b
--- /dev/null
+++ b/frontend/public/images/brand/brand-01.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/frontend/public/images/brand/brand-02.svg b/frontend/public/images/brand/brand-02.svg
new file mode 100644
index 0000000000..14da422e3c
--- /dev/null
+++ b/frontend/public/images/brand/brand-02.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/brand/brand-03.svg b/frontend/public/images/brand/brand-03.svg
new file mode 100644
index 0000000000..8d29afaa2f
--- /dev/null
+++ b/frontend/public/images/brand/brand-03.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/frontend/public/images/brand/brand-04.svg b/frontend/public/images/brand/brand-04.svg
new file mode 100644
index 0000000000..837a4d45ee
--- /dev/null
+++ b/frontend/public/images/brand/brand-04.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/brand/brand-05.svg b/frontend/public/images/brand/brand-05.svg
new file mode 100644
index 0000000000..7044f46fc8
--- /dev/null
+++ b/frontend/public/images/brand/brand-05.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/frontend/public/images/brand/brand-06.svg b/frontend/public/images/brand/brand-06.svg
new file mode 100644
index 0000000000..78c5d01331
--- /dev/null
+++ b/frontend/public/images/brand/brand-06.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/frontend/public/images/brand/brand-07.svg b/frontend/public/images/brand/brand-07.svg
new file mode 100644
index 0000000000..5abb368123
--- /dev/null
+++ b/frontend/public/images/brand/brand-07.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/frontend/public/images/brand/brand-08.svg b/frontend/public/images/brand/brand-08.svg
new file mode 100644
index 0000000000..71bc1e2abd
--- /dev/null
+++ b/frontend/public/images/brand/brand-08.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/frontend/public/images/brand/brand-09.svg b/frontend/public/images/brand/brand-09.svg
new file mode 100644
index 0000000000..1330ba2532
--- /dev/null
+++ b/frontend/public/images/brand/brand-09.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/frontend/public/images/brand/brand-10.svg b/frontend/public/images/brand/brand-10.svg
new file mode 100644
index 0000000000..60308ddd0f
--- /dev/null
+++ b/frontend/public/images/brand/brand-10.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/frontend/public/images/brand/brand-11.svg b/frontend/public/images/brand/brand-11.svg
new file mode 100644
index 0000000000..b316bb4eeb
--- /dev/null
+++ b/frontend/public/images/brand/brand-11.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/frontend/public/images/brand/brand-12.svg b/frontend/public/images/brand/brand-12.svg
new file mode 100644
index 0000000000..8396a56846
--- /dev/null
+++ b/frontend/public/images/brand/brand-12.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/frontend/public/images/brand/brand-13.svg b/frontend/public/images/brand/brand-13.svg
new file mode 100644
index 0000000000..dd53f79440
--- /dev/null
+++ b/frontend/public/images/brand/brand-13.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/frontend/public/images/brand/brand-14.svg b/frontend/public/images/brand/brand-14.svg
new file mode 100644
index 0000000000..381d72d89f
--- /dev/null
+++ b/frontend/public/images/brand/brand-14.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/frontend/public/images/brand/brand-15.svg b/frontend/public/images/brand/brand-15.svg
new file mode 100644
index 0000000000..dfde3ddc0e
--- /dev/null
+++ b/frontend/public/images/brand/brand-15.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/frontend/public/images/cards/card-01.jpg b/frontend/public/images/cards/card-01.jpg
new file mode 100644
index 0000000000..6ca5220d23
Binary files /dev/null and b/frontend/public/images/cards/card-01.jpg differ
diff --git a/frontend/public/images/cards/card-01.png b/frontend/public/images/cards/card-01.png
new file mode 100644
index 0000000000..50136d2932
Binary files /dev/null and b/frontend/public/images/cards/card-01.png differ
diff --git a/frontend/public/images/cards/card-02.jpg b/frontend/public/images/cards/card-02.jpg
new file mode 100644
index 0000000000..45291057d8
Binary files /dev/null and b/frontend/public/images/cards/card-02.jpg differ
diff --git a/frontend/public/images/cards/card-02.png b/frontend/public/images/cards/card-02.png
new file mode 100644
index 0000000000..29e3c40dd4
Binary files /dev/null and b/frontend/public/images/cards/card-02.png differ
diff --git a/frontend/public/images/cards/card-03.jpg b/frontend/public/images/cards/card-03.jpg
new file mode 100644
index 0000000000..dea46634c7
Binary files /dev/null and b/frontend/public/images/cards/card-03.jpg differ
diff --git a/frontend/public/images/cards/card-03.png b/frontend/public/images/cards/card-03.png
new file mode 100644
index 0000000000..b8c8ed098e
Binary files /dev/null and b/frontend/public/images/cards/card-03.png differ
diff --git a/frontend/public/images/carousel/carousel-01.png b/frontend/public/images/carousel/carousel-01.png
new file mode 100644
index 0000000000..0c738c8a98
Binary files /dev/null and b/frontend/public/images/carousel/carousel-01.png differ
diff --git a/frontend/public/images/carousel/carousel-02.png b/frontend/public/images/carousel/carousel-02.png
new file mode 100644
index 0000000000..963ca5f337
Binary files /dev/null and b/frontend/public/images/carousel/carousel-02.png differ
diff --git a/frontend/public/images/carousel/carousel-03.png b/frontend/public/images/carousel/carousel-03.png
new file mode 100644
index 0000000000..d744261d74
Binary files /dev/null and b/frontend/public/images/carousel/carousel-03.png differ
diff --git a/frontend/public/images/carousel/carousel-04.png b/frontend/public/images/carousel/carousel-04.png
new file mode 100644
index 0000000000..58d393dfed
Binary files /dev/null and b/frontend/public/images/carousel/carousel-04.png differ
diff --git a/frontend/public/images/chat/chat.jpg b/frontend/public/images/chat/chat.jpg
new file mode 100644
index 0000000000..7ad98e5e08
Binary files /dev/null and b/frontend/public/images/chat/chat.jpg differ
diff --git a/frontend/public/images/country/country-01.svg b/frontend/public/images/country/country-01.svg
new file mode 100644
index 0000000000..4c14b12e49
--- /dev/null
+++ b/frontend/public/images/country/country-01.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/country/country-02.svg b/frontend/public/images/country/country-02.svg
new file mode 100644
index 0000000000..52f57c7d9d
--- /dev/null
+++ b/frontend/public/images/country/country-02.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/country/country-03.svg b/frontend/public/images/country/country-03.svg
new file mode 100644
index 0000000000..e435fabeb1
--- /dev/null
+++ b/frontend/public/images/country/country-03.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/country/country-04.svg b/frontend/public/images/country/country-04.svg
new file mode 100644
index 0000000000..93b49b639d
--- /dev/null
+++ b/frontend/public/images/country/country-04.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/country/country-05.svg b/frontend/public/images/country/country-05.svg
new file mode 100644
index 0000000000..5aa26b593e
--- /dev/null
+++ b/frontend/public/images/country/country-05.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/country/country-06.svg b/frontend/public/images/country/country-06.svg
new file mode 100644
index 0000000000..730e2e6ac8
--- /dev/null
+++ b/frontend/public/images/country/country-06.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/country/country-07.svg b/frontend/public/images/country/country-07.svg
new file mode 100644
index 0000000000..ce770d4e96
--- /dev/null
+++ b/frontend/public/images/country/country-07.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/country/country-08.svg b/frontend/public/images/country/country-08.svg
new file mode 100644
index 0000000000..c652b95470
--- /dev/null
+++ b/frontend/public/images/country/country-08.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/error/404-dark.svg b/frontend/public/images/error/404-dark.svg
new file mode 100644
index 0000000000..4d14ec9aa6
--- /dev/null
+++ b/frontend/public/images/error/404-dark.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/error/404.svg b/frontend/public/images/error/404.svg
new file mode 100644
index 0000000000..ff8b8a2ba2
--- /dev/null
+++ b/frontend/public/images/error/404.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/error/500-dark.svg b/frontend/public/images/error/500-dark.svg
new file mode 100644
index 0000000000..c5ac764ec2
--- /dev/null
+++ b/frontend/public/images/error/500-dark.svg
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/error/500.svg b/frontend/public/images/error/500.svg
new file mode 100644
index 0000000000..82f515905b
--- /dev/null
+++ b/frontend/public/images/error/500.svg
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/error/503-dark.svg b/frontend/public/images/error/503-dark.svg
new file mode 100644
index 0000000000..8df2a94aa2
--- /dev/null
+++ b/frontend/public/images/error/503-dark.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/error/503.svg b/frontend/public/images/error/503.svg
new file mode 100644
index 0000000000..a27a7143e1
--- /dev/null
+++ b/frontend/public/images/error/503.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/error/maintenance-dark.svg b/frontend/public/images/error/maintenance-dark.svg
new file mode 100644
index 0000000000..e2a4499975
--- /dev/null
+++ b/frontend/public/images/error/maintenance-dark.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/frontend/public/images/error/maintenance.svg b/frontend/public/images/error/maintenance.svg
new file mode 100644
index 0000000000..859d817213
--- /dev/null
+++ b/frontend/public/images/error/maintenance.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/frontend/public/images/error/success-dark.svg b/frontend/public/images/error/success-dark.svg
new file mode 100644
index 0000000000..b57643f3e8
--- /dev/null
+++ b/frontend/public/images/error/success-dark.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/public/images/error/success.svg b/frontend/public/images/error/success.svg
new file mode 100644
index 0000000000..91e1a769e5
--- /dev/null
+++ b/frontend/public/images/error/success.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/public/images/favicon.ico b/frontend/public/images/favicon.ico
new file mode 100644
index 0000000000..cf3128aaf3
Binary files /dev/null and b/frontend/public/images/favicon.ico differ
diff --git a/frontend/public/images/grid-image/image-01.png b/frontend/public/images/grid-image/image-01.png
new file mode 100644
index 0000000000..b00223b027
Binary files /dev/null and b/frontend/public/images/grid-image/image-01.png differ
diff --git a/frontend/public/images/grid-image/image-02.png b/frontend/public/images/grid-image/image-02.png
new file mode 100644
index 0000000000..e1e9fb2ecd
Binary files /dev/null and b/frontend/public/images/grid-image/image-02.png differ
diff --git a/frontend/public/images/grid-image/image-03.png b/frontend/public/images/grid-image/image-03.png
new file mode 100644
index 0000000000..9fe184a2be
Binary files /dev/null and b/frontend/public/images/grid-image/image-03.png differ
diff --git a/frontend/public/images/grid-image/image-04.png b/frontend/public/images/grid-image/image-04.png
new file mode 100644
index 0000000000..0020a6597b
Binary files /dev/null and b/frontend/public/images/grid-image/image-04.png differ
diff --git a/frontend/public/images/grid-image/image-05.png b/frontend/public/images/grid-image/image-05.png
new file mode 100644
index 0000000000..9ee8797d2a
Binary files /dev/null and b/frontend/public/images/grid-image/image-05.png differ
diff --git a/frontend/public/images/grid-image/image-06.png b/frontend/public/images/grid-image/image-06.png
new file mode 100644
index 0000000000..d7e3668ce8
Binary files /dev/null and b/frontend/public/images/grid-image/image-06.png differ
diff --git a/frontend/public/images/icons/file-image-dark.svg b/frontend/public/images/icons/file-image-dark.svg
new file mode 100644
index 0000000000..ff2d6df608
--- /dev/null
+++ b/frontend/public/images/icons/file-image-dark.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/public/images/icons/file-image.svg b/frontend/public/images/icons/file-image.svg
new file mode 100644
index 0000000000..0303d63821
--- /dev/null
+++ b/frontend/public/images/icons/file-image.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/public/images/icons/file-pdf-dark.svg b/frontend/public/images/icons/file-pdf-dark.svg
new file mode 100644
index 0000000000..8fc5a47e66
--- /dev/null
+++ b/frontend/public/images/icons/file-pdf-dark.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/public/images/icons/file-pdf.svg b/frontend/public/images/icons/file-pdf.svg
new file mode 100644
index 0000000000..a525a265d7
--- /dev/null
+++ b/frontend/public/images/icons/file-pdf.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/public/images/icons/file-video-dark.svg b/frontend/public/images/icons/file-video-dark.svg
new file mode 100644
index 0000000000..9415c3da67
--- /dev/null
+++ b/frontend/public/images/icons/file-video-dark.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/frontend/public/images/icons/file-video.svg b/frontend/public/images/icons/file-video.svg
new file mode 100644
index 0000000000..49732ca419
--- /dev/null
+++ b/frontend/public/images/icons/file-video.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/frontend/public/images/logo/auth-logo.svg b/frontend/public/images/logo/auth-logo.svg
new file mode 100644
index 0000000000..eb11cc7cc1
--- /dev/null
+++ b/frontend/public/images/logo/auth-logo.svg
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/logo/logo-dark.svg b/frontend/public/images/logo/logo-dark.svg
new file mode 100644
index 0000000000..4b94daccb8
--- /dev/null
+++ b/frontend/public/images/logo/logo-dark.svg
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/logo/logo-icon.svg b/frontend/public/images/logo/logo-icon.svg
new file mode 100644
index 0000000000..11d52ca41a
--- /dev/null
+++ b/frontend/public/images/logo/logo-icon.svg
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/logo/logo.svg b/frontend/public/images/logo/logo.svg
new file mode 100644
index 0000000000..758dedd2e5
--- /dev/null
+++ b/frontend/public/images/logo/logo.svg
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/product/product-01.jpg b/frontend/public/images/product/product-01.jpg
new file mode 100644
index 0000000000..7ffb1e69ca
Binary files /dev/null and b/frontend/public/images/product/product-01.jpg differ
diff --git a/frontend/public/images/product/product-02.jpg b/frontend/public/images/product/product-02.jpg
new file mode 100644
index 0000000000..db30a9a167
Binary files /dev/null and b/frontend/public/images/product/product-02.jpg differ
diff --git a/frontend/public/images/product/product-03.jpg b/frontend/public/images/product/product-03.jpg
new file mode 100644
index 0000000000..95fd8d4add
Binary files /dev/null and b/frontend/public/images/product/product-03.jpg differ
diff --git a/frontend/public/images/product/product-04.jpg b/frontend/public/images/product/product-04.jpg
new file mode 100644
index 0000000000..131a9f5170
Binary files /dev/null and b/frontend/public/images/product/product-04.jpg differ
diff --git a/frontend/public/images/product/product-05.jpg b/frontend/public/images/product/product-05.jpg
new file mode 100644
index 0000000000..1ad17a9fb0
Binary files /dev/null and b/frontend/public/images/product/product-05.jpg differ
diff --git a/frontend/public/images/shape/grid-01.svg b/frontend/public/images/shape/grid-01.svg
new file mode 100644
index 0000000000..6490367100
--- /dev/null
+++ b/frontend/public/images/shape/grid-01.svg
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/task/google-drive.svg b/frontend/public/images/task/google-drive.svg
new file mode 100644
index 0000000000..2bdb033853
--- /dev/null
+++ b/frontend/public/images/task/google-drive.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/task/pdf.svg b/frontend/public/images/task/pdf.svg
new file mode 100644
index 0000000000..4390c8d613
--- /dev/null
+++ b/frontend/public/images/task/pdf.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/public/images/task/task.jpg b/frontend/public/images/task/task.jpg
new file mode 100644
index 0000000000..5e6add1024
Binary files /dev/null and b/frontend/public/images/task/task.jpg differ
diff --git a/frontend/public/images/task/task.png b/frontend/public/images/task/task.png
new file mode 100644
index 0000000000..0031cdb25c
Binary files /dev/null and b/frontend/public/images/task/task.png differ
diff --git a/frontend/public/images/user/owner.jpg b/frontend/public/images/user/owner.jpg
new file mode 100644
index 0000000000..55985fe7ca
Binary files /dev/null and b/frontend/public/images/user/owner.jpg differ
diff --git a/frontend/public/images/user/user-01.jpg b/frontend/public/images/user/user-01.jpg
new file mode 100644
index 0000000000..48778405cb
Binary files /dev/null and b/frontend/public/images/user/user-01.jpg differ
diff --git a/frontend/public/images/user/user-02.jpg b/frontend/public/images/user/user-02.jpg
new file mode 100644
index 0000000000..fe64d3e6b6
Binary files /dev/null and b/frontend/public/images/user/user-02.jpg differ
diff --git a/frontend/public/images/user/user-03.jpg b/frontend/public/images/user/user-03.jpg
new file mode 100644
index 0000000000..7a8647a6d2
Binary files /dev/null and b/frontend/public/images/user/user-03.jpg differ
diff --git a/frontend/public/images/user/user-04.jpg b/frontend/public/images/user/user-04.jpg
new file mode 100644
index 0000000000..0522414969
Binary files /dev/null and b/frontend/public/images/user/user-04.jpg differ
diff --git a/frontend/public/images/user/user-05.jpg b/frontend/public/images/user/user-05.jpg
new file mode 100644
index 0000000000..c0b7ddbb62
Binary files /dev/null and b/frontend/public/images/user/user-05.jpg differ
diff --git a/frontend/public/images/user/user-06.jpg b/frontend/public/images/user/user-06.jpg
new file mode 100644
index 0000000000..d80d37e038
Binary files /dev/null and b/frontend/public/images/user/user-06.jpg differ
diff --git a/frontend/public/images/user/user-07.jpg b/frontend/public/images/user/user-07.jpg
new file mode 100644
index 0000000000..7e8f58d984
Binary files /dev/null and b/frontend/public/images/user/user-07.jpg differ
diff --git a/frontend/public/images/user/user-08.jpg b/frontend/public/images/user/user-08.jpg
new file mode 100644
index 0000000000..86d14efdd9
Binary files /dev/null and b/frontend/public/images/user/user-08.jpg differ
diff --git a/frontend/public/images/user/user-09.jpg b/frontend/public/images/user/user-09.jpg
new file mode 100644
index 0000000000..35942ed86a
Binary files /dev/null and b/frontend/public/images/user/user-09.jpg differ
diff --git a/frontend/public/images/user/user-10.jpg b/frontend/public/images/user/user-10.jpg
new file mode 100644
index 0000000000..e330208b4b
Binary files /dev/null and b/frontend/public/images/user/user-10.jpg differ
diff --git a/frontend/public/images/user/user-11.jpg b/frontend/public/images/user/user-11.jpg
new file mode 100644
index 0000000000..7aa2dd97ce
Binary files /dev/null and b/frontend/public/images/user/user-11.jpg differ
diff --git a/frontend/public/images/user/user-12.jpg b/frontend/public/images/user/user-12.jpg
new file mode 100644
index 0000000000..2b9065c18d
Binary files /dev/null and b/frontend/public/images/user/user-12.jpg differ
diff --git a/frontend/public/images/user/user-13.jpg b/frontend/public/images/user/user-13.jpg
new file mode 100644
index 0000000000..7657777063
Binary files /dev/null and b/frontend/public/images/user/user-13.jpg differ
diff --git a/frontend/public/images/user/user-14.jpg b/frontend/public/images/user/user-14.jpg
new file mode 100644
index 0000000000..28ef7a98ad
Binary files /dev/null and b/frontend/public/images/user/user-14.jpg differ
diff --git a/frontend/public/images/user/user-15.jpg b/frontend/public/images/user/user-15.jpg
new file mode 100644
index 0000000000..e39fb30214
Binary files /dev/null and b/frontend/public/images/user/user-15.jpg differ
diff --git a/frontend/public/images/user/user-16.jpg b/frontend/public/images/user/user-16.jpg
new file mode 100644
index 0000000000..f23e96c63b
Binary files /dev/null and b/frontend/public/images/user/user-16.jpg differ
diff --git a/frontend/public/images/user/user-17.jpg b/frontend/public/images/user/user-17.jpg
new file mode 100644
index 0000000000..4effac39b3
Binary files /dev/null and b/frontend/public/images/user/user-17.jpg differ
diff --git a/frontend/public/images/user/user-18.jpg b/frontend/public/images/user/user-18.jpg
new file mode 100644
index 0000000000..4660835fe9
Binary files /dev/null and b/frontend/public/images/user/user-18.jpg differ
diff --git a/frontend/public/images/user/user-19.jpg b/frontend/public/images/user/user-19.jpg
new file mode 100644
index 0000000000..b8d2ae97e4
Binary files /dev/null and b/frontend/public/images/user/user-19.jpg differ
diff --git a/frontend/public/images/user/user-20.jpg b/frontend/public/images/user/user-20.jpg
new file mode 100644
index 0000000000..6acae07c1a
Binary files /dev/null and b/frontend/public/images/user/user-20.jpg differ
diff --git a/frontend/public/images/user/user-21.jpg b/frontend/public/images/user/user-21.jpg
new file mode 100644
index 0000000000..d86084c2ae
Binary files /dev/null and b/frontend/public/images/user/user-21.jpg differ
diff --git a/frontend/public/images/user/user-22.jpg b/frontend/public/images/user/user-22.jpg
new file mode 100644
index 0000000000..9cf7e13070
Binary files /dev/null and b/frontend/public/images/user/user-22.jpg differ
diff --git a/frontend/public/images/user/user-23.jpg b/frontend/public/images/user/user-23.jpg
new file mode 100644
index 0000000000..b79ffecf39
Binary files /dev/null and b/frontend/public/images/user/user-23.jpg differ
diff --git a/frontend/public/images/user/user-24.jpg b/frontend/public/images/user/user-24.jpg
new file mode 100644
index 0000000000..ee09128a7b
Binary files /dev/null and b/frontend/public/images/user/user-24.jpg differ
diff --git a/frontend/public/images/user/user-25.jpg b/frontend/public/images/user/user-25.jpg
new file mode 100644
index 0000000000..e930892b67
Binary files /dev/null and b/frontend/public/images/user/user-25.jpg differ
diff --git a/frontend/public/images/user/user-26.jpg b/frontend/public/images/user/user-26.jpg
new file mode 100644
index 0000000000..c4934b4444
Binary files /dev/null and b/frontend/public/images/user/user-26.jpg differ
diff --git a/frontend/public/images/user/user-27.jpg b/frontend/public/images/user/user-27.jpg
new file mode 100644
index 0000000000..2a08ebedc5
Binary files /dev/null and b/frontend/public/images/user/user-27.jpg differ
diff --git a/frontend/public/images/user/user-28.jpg b/frontend/public/images/user/user-28.jpg
new file mode 100644
index 0000000000..82cf2d133c
Binary files /dev/null and b/frontend/public/images/user/user-28.jpg differ
diff --git a/frontend/public/images/user/user-29.jpg b/frontend/public/images/user/user-29.jpg
new file mode 100644
index 0000000000..1a1fa49b56
Binary files /dev/null and b/frontend/public/images/user/user-29.jpg differ
diff --git a/frontend/public/images/user/user-30.jpg b/frontend/public/images/user/user-30.jpg
new file mode 100644
index 0000000000..512e8dd70f
Binary files /dev/null and b/frontend/public/images/user/user-30.jpg differ
diff --git a/frontend/public/images/user/user-31.jpg b/frontend/public/images/user/user-31.jpg
new file mode 100644
index 0000000000..0144b840f9
Binary files /dev/null and b/frontend/public/images/user/user-31.jpg differ
diff --git a/frontend/public/images/user/user-32.jpg b/frontend/public/images/user/user-32.jpg
new file mode 100644
index 0000000000..712e3361bc
Binary files /dev/null and b/frontend/public/images/user/user-32.jpg differ
diff --git a/frontend/public/images/user/user-33.jpg b/frontend/public/images/user/user-33.jpg
new file mode 100644
index 0000000000..1f7796b790
Binary files /dev/null and b/frontend/public/images/user/user-33.jpg differ
diff --git a/frontend/public/images/user/user-34.jpg b/frontend/public/images/user/user-34.jpg
new file mode 100644
index 0000000000..40202f68eb
Binary files /dev/null and b/frontend/public/images/user/user-34.jpg differ
diff --git a/frontend/public/images/user/user-35.jpg b/frontend/public/images/user/user-35.jpg
new file mode 100644
index 0000000000..b78921a409
Binary files /dev/null and b/frontend/public/images/user/user-35.jpg differ
diff --git a/frontend/public/images/user/user-36.jpg b/frontend/public/images/user/user-36.jpg
new file mode 100644
index 0000000000..a023f2f5e1
Binary files /dev/null and b/frontend/public/images/user/user-36.jpg differ
diff --git a/frontend/public/images/user/user-37.jpg b/frontend/public/images/user/user-37.jpg
new file mode 100644
index 0000000000..6d3186e562
Binary files /dev/null and b/frontend/public/images/user/user-37.jpg differ
diff --git a/frontend/public/images/video-thumb/thumb-16.png b/frontend/public/images/video-thumb/thumb-16.png
new file mode 100644
index 0000000000..1f12017c49
Binary files /dev/null and b/frontend/public/images/video-thumb/thumb-16.png differ
diff --git a/frontend/public/images/video-thumb/youtube-icon-84.svg b/frontend/public/images/video-thumb/youtube-icon-84.svg
new file mode 100644
index 0000000000..5a9478ae55
--- /dev/null
+++ b/frontend/public/images/video-thumb/youtube-icon-84.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/frontend/src/app/(full-width-pages)/(auth)/layout.tsx b/frontend/src/app/(full-width-pages)/(auth)/layout.tsx
new file mode 100644
index 0000000000..406627bf3c
--- /dev/null
+++ b/frontend/src/app/(full-width-pages)/(auth)/layout.tsx
@@ -0,0 +1,45 @@
+import GridShape from "@/components/common/GridShape";
+import ThemeTogglerTwo from "@/components/common/ThemeTogglerTwo";
+
+import { ThemeProvider } from "@/context/ThemeContext";
+import Image from "next/image";
+import Link from "next/link";
+import React from "react";
+
+export default function AuthLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+
+
+ {children}
+
+
+ {/* */}
+
+
+
+
+
+
+ Free and Open-Source Tailwind CSS Admin Dashboard Template
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/(full-width-pages)/(auth)/signin/page.tsx b/frontend/src/app/(full-width-pages)/(auth)/signin/page.tsx
new file mode 100644
index 0000000000..c37384c066
--- /dev/null
+++ b/frontend/src/app/(full-width-pages)/(auth)/signin/page.tsx
@@ -0,0 +1,11 @@
+import SignInForm from "@/components/auth/SignInForm";
+import { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "Next.js SignIn Page | TailAdmin - Next.js Dashboard Template",
+ description: "This is Next.js Signin Page TailAdmin Dashboard Template",
+};
+
+export default function SignIn() {
+ return ;
+}
diff --git a/frontend/src/app/(full-width-pages)/(auth)/signup/page.tsx b/frontend/src/app/(full-width-pages)/(auth)/signup/page.tsx
new file mode 100644
index 0000000000..7f97f7ea0c
--- /dev/null
+++ b/frontend/src/app/(full-width-pages)/(auth)/signup/page.tsx
@@ -0,0 +1,12 @@
+import SignUpForm from "@/components/auth/SignUpForm";
+import { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "Next.js SignUp Page | TailAdmin - Next.js Dashboard Template",
+ description: "This is Next.js SignUp Page TailAdmin Dashboard Template",
+ // other metadata
+};
+
+export default function SignUp() {
+ return ;
+}
diff --git a/frontend/src/app/(full-width-pages)/(error-pages)/error-404/page.tsx b/frontend/src/app/(full-width-pages)/(error-pages)/error-404/page.tsx
new file mode 100644
index 0000000000..6b4fe48f10
--- /dev/null
+++ b/frontend/src/app/(full-width-pages)/(error-pages)/error-404/page.tsx
@@ -0,0 +1,54 @@
+import GridShape from "@/components/common/GridShape";
+import { Metadata } from "next";
+import Image from "next/image";
+import Link from "next/link";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Error 404 | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Error 404 page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+};
+
+export default function Error404() {
+ return (
+
+
+
+
+ ERROR
+
+
+
+
+
+
+ We can’t seem to find the page you are looking for!
+
+
+
+ Back to Home Page
+
+
+ {/* */}
+
+ © {new Date().getFullYear()} - TailAdmin
+
+
+ );
+}
diff --git a/frontend/src/app/(full-width-pages)/layout.tsx b/frontend/src/app/(full-width-pages)/layout.tsx
new file mode 100644
index 0000000000..4db6477b07
--- /dev/null
+++ b/frontend/src/app/(full-width-pages)/layout.tsx
@@ -0,0 +1,7 @@
+export default function FullWidthPageLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return {children}
;
+}
diff --git a/frontend/src/app/(study-assistant)/layout.tsx b/frontend/src/app/(study-assistant)/layout.tsx
new file mode 100644
index 0000000000..35a9ae8c50
--- /dev/null
+++ b/frontend/src/app/(study-assistant)/layout.tsx
@@ -0,0 +1,28 @@
+"use client";
+
+import StaticHeader from "@/layout/StaticHeader";
+import Backdrop from "@/layout/Backdrop";
+import React from "react";
+
+export default function AdminLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+
+ return (
+
+ {/* Sidebar and Backdrop */}
+
+ {/* Main Content Area */}
+
+ {/* Header */}
+
+ {/* Page Content */}
+
{children}
+
+
+ );
+}
diff --git a/frontend/src/app/(study-assistant)/page.tsx b/frontend/src/app/(study-assistant)/page.tsx
new file mode 100644
index 0000000000..41138f85a5
--- /dev/null
+++ b/frontend/src/app/(study-assistant)/page.tsx
@@ -0,0 +1,14 @@
+// src/app/landing/page.tsx
+import React from "react";
+
+export default function LandingPage() {
+ return (
+
+
Welcome to Study Assistant
+
Upload documents, generate exams, and start practicing!
+
+ Upload Docs & Generate Exam
+
+
+ );
+}
diff --git a/frontend/src/app/(study-assistant)/take-exam/page.tsx b/frontend/src/app/(study-assistant)/take-exam/page.tsx
new file mode 100644
index 0000000000..7977f4872c
--- /dev/null
+++ b/frontend/src/app/(study-assistant)/take-exam/page.tsx
@@ -0,0 +1,11 @@
+import TakeExamForm from "@/components/exam/TakeExamForm";
+import { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "Next.js TakeExam Page",
+ description: "This is Next.js TakeExam Page",
+};
+
+export default function TakeExam() {
+ return ;
+}
diff --git a/frontend/src/app/(study-assistant)/upload/page.tsx b/frontend/src/app/(study-assistant)/upload/page.tsx
new file mode 100644
index 0000000000..3bdbcbb0d8
--- /dev/null
+++ b/frontend/src/app/(study-assistant)/upload/page.tsx
@@ -0,0 +1,12 @@
+
+import DocumentDropzoneComponent from "@/components/form/form-elements/DocumentDropZone";
+import { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "Upload Page",
+ description: "This is Next.js Upload Page",
+};
+
+export default function Upload() {
+ return ;
+}
diff --git a/frontend/src/app/admin/(others-pages)/(chart)/bar-chart/page.tsx b/frontend/src/app/admin/(others-pages)/(chart)/bar-chart/page.tsx
new file mode 100644
index 0000000000..9ae09845b3
--- /dev/null
+++ b/frontend/src/app/admin/(others-pages)/(chart)/bar-chart/page.tsx
@@ -0,0 +1,24 @@
+import BarChartOne from "@/components/charts/bar/BarChartOne";
+import ComponentCard from "@/components/common/ComponentCard";
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Bar Chart | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Bar Chart page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+};
+
+export default function page() {
+ return (
+
+ );
+}
diff --git a/frontend/src/app/admin/(others-pages)/(chart)/line-chart/page.tsx b/frontend/src/app/admin/(others-pages)/(chart)/line-chart/page.tsx
new file mode 100644
index 0000000000..6ab76642ea
--- /dev/null
+++ b/frontend/src/app/admin/(others-pages)/(chart)/line-chart/page.tsx
@@ -0,0 +1,23 @@
+import LineChartOne from "@/components/charts/line/LineChartOne";
+import ComponentCard from "@/components/common/ComponentCard";
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Line Chart | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Line Chart page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+};
+export default function LineChart() {
+ return (
+
+ );
+}
diff --git a/frontend/src/app/admin/(others-pages)/(forms)/form-elements/page.tsx b/frontend/src/app/admin/(others-pages)/(forms)/form-elements/page.tsx
new file mode 100644
index 0000000000..90fbf8dd68
--- /dev/null
+++ b/frontend/src/app/admin/(others-pages)/(forms)/form-elements/page.tsx
@@ -0,0 +1,43 @@
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import CheckboxComponents from "@/components/form/form-elements/CheckboxComponents";
+import DefaultInputs from "@/components/form/form-elements/DefaultInputs";
+import DropzoneComponent from "@/components/form/form-elements/DropZone";
+import FileInputExample from "@/components/form/form-elements/FileInputExample";
+import InputGroup from "@/components/form/form-elements/InputGroup";
+import InputStates from "@/components/form/form-elements/InputStates";
+import RadioButtons from "@/components/form/form-elements/RadioButtons";
+import SelectInputs from "@/components/form/form-elements/SelectInputs";
+import TextAreaInput from "@/components/form/form-elements/TextAreaInput";
+import ToggleSwitch from "@/components/form/form-elements/ToggleSwitch";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Form Elements | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Form Elements page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+};
+
+export default function FormElements() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/admin/(others-pages)/(tables)/basic-tables/page.tsx b/frontend/src/app/admin/(others-pages)/(tables)/basic-tables/page.tsx
new file mode 100644
index 0000000000..c0cae1c863
--- /dev/null
+++ b/frontend/src/app/admin/(others-pages)/(tables)/basic-tables/page.tsx
@@ -0,0 +1,25 @@
+import ComponentCard from "@/components/common/ComponentCard";
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import BasicTableOne from "@/components/tables/BasicTableOne";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Basic Table | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Basic Table page for TailAdmin Tailwind CSS Admin Dashboard Template",
+ // other metadata
+};
+
+export default function BasicTables() {
+ return (
+
+ );
+}
diff --git a/frontend/src/app/admin/(others-pages)/blank/page.tsx b/frontend/src/app/admin/(others-pages)/blank/page.tsx
new file mode 100644
index 0000000000..42b9addaa0
--- /dev/null
+++ b/frontend/src/app/admin/(others-pages)/blank/page.tsx
@@ -0,0 +1,27 @@
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Blank Page | TailAdmin - Next.js Dashboard Template",
+ description: "This is Next.js Blank Page TailAdmin Dashboard Template",
+};
+
+export default function BlankPage() {
+ return (
+
+
+
+
+
+ Card Title Here
+
+
+ Start putting content on grids or panels, you can also use different
+ combinations of grids.Please check out the dashboard and other pages
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/admin/(others-pages)/calendar/page.tsx b/frontend/src/app/admin/(others-pages)/calendar/page.tsx
new file mode 100644
index 0000000000..c4d2044717
--- /dev/null
+++ b/frontend/src/app/admin/(others-pages)/calendar/page.tsx
@@ -0,0 +1,19 @@
+import Calendar from "@/components/calendar/Calendar";
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Calender | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Calender page for TailAdmin Tailwind CSS Admin Dashboard Template",
+ // other metadata
+};
+export default function page() {
+ return (
+
+ );
+}
diff --git a/frontend/src/app/admin/(others-pages)/profile/page.tsx b/frontend/src/app/admin/(others-pages)/profile/page.tsx
new file mode 100644
index 0000000000..8f14e2702c
--- /dev/null
+++ b/frontend/src/app/admin/(others-pages)/profile/page.tsx
@@ -0,0 +1,28 @@
+import UserAddressCard from "@/components/user-profile/UserAddressCard";
+import UserInfoCard from "@/components/user-profile/UserInfoCard";
+import UserMetaCard from "@/components/user-profile/UserMetaCard";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Profile | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Profile page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+};
+
+export default function Profile() {
+ return (
+
+
+
+ Profile
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/admin/(ui-elements)/alerts/page.tsx b/frontend/src/app/admin/(ui-elements)/alerts/page.tsx
new file mode 100644
index 0000000000..d26561e143
--- /dev/null
+++ b/frontend/src/app/admin/(ui-elements)/alerts/page.tsx
@@ -0,0 +1,86 @@
+import ComponentCard from "@/components/common/ComponentCard";
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import Alert from "@/components/ui/alert/Alert";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Alerts | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Alerts page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+ // other metadata
+};
+
+export default function Alerts() {
+ return (
+
+
+
+
+
+
+
+
+
+
+ {" "}
+
+
+
+ {" "}
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/admin/(ui-elements)/avatars/page.tsx b/frontend/src/app/admin/(ui-elements)/avatars/page.tsx
new file mode 100644
index 0000000000..b1b1749a10
--- /dev/null
+++ b/frontend/src/app/admin/(ui-elements)/avatars/page.tsx
@@ -0,0 +1,126 @@
+import ComponentCard from "@/components/common/ComponentCard";
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import Avatar from "@/components/ui/avatar/Avatar";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Avatars | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Avatars page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+};
+
+export default function AvatarPage() {
+ return (
+
+
+
+
+ {/* Default Avatar (No Status) */}
+
+
+
+
+
+
+
+ {" "}
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/admin/(ui-elements)/badge/page.tsx b/frontend/src/app/admin/(ui-elements)/badge/page.tsx
new file mode 100644
index 0000000000..7dde8dc8bd
--- /dev/null
+++ b/frontend/src/app/admin/(ui-elements)/badge/page.tsx
@@ -0,0 +1,221 @@
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import Badge from "@/components/ui/badge/Badge";
+import { PlusIcon } from "@/icons";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Badge | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Badge page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+ // other metadata
+};
+
+export default function BadgePage() {
+ return (
+
+
+
+
+
+
+ With Light Background
+
+
+
+
+ {/* Light Variant */}
+
+ Primary
+
+
+ Success
+ {" "}
+
+ Error
+ {" "}
+
+ Warning
+ {" "}
+
+ Info
+
+
+ Light
+
+
+ Dark
+
+
+
+
+
+
+
+
+ With Solid Background
+
+
+
+
+ {/* Light Variant */}
+
+ Primary
+
+
+ Success
+ {" "}
+
+ Error
+ {" "}
+
+ Warning
+ {" "}
+
+ Info
+
+
+ Light
+
+
+ Dark
+
+
+
+
+
+
+
+
+ Light Background with Left Icon
+
+
+
+
+ }>
+ Primary
+
+ }>
+ Success
+ {" "}
+ }>
+ Error
+ {" "}
+ }>
+ Warning
+ {" "}
+ }>
+ Info
+
+ }>
+ Light
+
+ }>
+ Dark
+
+
+
+
+
+
+
+
+ Solid Background with Left Icon
+
+
+
+
+ }>
+ Primary
+
+ }>
+ Success
+ {" "}
+ }>
+ Error
+ {" "}
+ }>
+ Warning
+ {" "}
+ }>
+ Info
+
+ }>
+ Light
+
+ }>
+ Dark
+
+
+
+
+
+
+
+
+ Light Background with Right Icon
+
+
+
+
+ }>
+ Primary
+
+ }>
+ Success
+ {" "}
+ }>
+ Error
+ {" "}
+ }>
+ Warning
+ {" "}
+ }>
+ Info
+
+ }>
+ Light
+
+ }>
+ Dark
+
+
+
+
+
+
+
+
+ Solid Background with Right Icon
+
+
+
+
+ }>
+ Primary
+
+ }>
+ Success
+ {" "}
+ }>
+ Error
+ {" "}
+ }>
+ Warning
+ {" "}
+ }>
+ Info
+
+ }>
+ Light
+
+ }>
+ Dark
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/admin/(ui-elements)/buttons/page.tsx b/frontend/src/app/admin/(ui-elements)/buttons/page.tsx
new file mode 100644
index 0000000000..77feb50328
--- /dev/null
+++ b/frontend/src/app/admin/(ui-elements)/buttons/page.tsx
@@ -0,0 +1,89 @@
+import ComponentCard from "@/components/common/ComponentCard";
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import Button from "@/components/ui/button/Button";
+import { BoxIcon } from "@/icons";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Buttons | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Buttons page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+};
+
+export default function Buttons() {
+ return (
+
+
+
+ {/* Primary Button */}
+
+
+
+ Button Text
+
+
+ Button Text
+
+
+
+ {/* Primary Button with Start Icon */}
+
+
+ }>
+ Button Text
+
+ }>
+ Button Text
+
+
+ {" "}
+ {/* Primary Button with Start Icon */}
+
+
+ }>
+ Button Text
+
+ }>
+ Button Text
+
+
+
+ {/* Outline Button */}
+
+
+ {/* Outline Button */}
+
+ Button Text
+
+
+ Button Text
+
+
+
+ {/* Outline Button with Start Icon */}
+
+
+ }>
+ Button Text
+
+ }>
+ Button Text
+
+
+ {" "}
+ {/* Outline Button with Start Icon */}
+
+
+ }>
+ Button Text
+
+ }>
+ Button Text
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/admin/(ui-elements)/images/page.tsx b/frontend/src/app/admin/(ui-elements)/images/page.tsx
new file mode 100644
index 0000000000..bcdecd10c5
--- /dev/null
+++ b/frontend/src/app/admin/(ui-elements)/images/page.tsx
@@ -0,0 +1,33 @@
+import ComponentCard from "@/components/common/ComponentCard";
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import ResponsiveImage from "@/components/ui/images/ResponsiveImage";
+import ThreeColumnImageGrid from "@/components/ui/images/ThreeColumnImageGrid";
+import TwoColumnImageGrid from "@/components/ui/images/TwoColumnImageGrid";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Images | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Images page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+ // other metadata
+};
+
+export default function Images() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/admin/(ui-elements)/modals/page.tsx b/frontend/src/app/admin/(ui-elements)/modals/page.tsx
new file mode 100644
index 0000000000..4afa0d0577
--- /dev/null
+++ b/frontend/src/app/admin/(ui-elements)/modals/page.tsx
@@ -0,0 +1,30 @@
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import DefaultModal from "@/components/example/ModalExample/DefaultModal";
+import FormInModal from "@/components/example/ModalExample/FormInModal";
+import FullScreenModal from "@/components/example/ModalExample/FullScreenModal";
+import ModalBasedAlerts from "@/components/example/ModalExample/ModalBasedAlerts";
+import VerticallyCenteredModal from "@/components/example/ModalExample/VerticallyCenteredModal";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Modals | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Modals page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+ // other metadata
+};
+
+export default function Modals() {
+ return (
+
+ );
+}
diff --git a/frontend/src/app/admin/(ui-elements)/videos/page.tsx b/frontend/src/app/admin/(ui-elements)/videos/page.tsx
new file mode 100644
index 0000000000..08ddb46102
--- /dev/null
+++ b/frontend/src/app/admin/(ui-elements)/videos/page.tsx
@@ -0,0 +1,20 @@
+import PageBreadcrumb from "@/components/common/PageBreadCrumb";
+import VideosExample from "@/components/ui/video/VideosExample";
+import { Metadata } from "next";
+import React from "react";
+
+export const metadata: Metadata = {
+ title: "Next.js Videos | TailAdmin - Next.js Dashboard Template",
+ description:
+ "This is Next.js Videos page for TailAdmin - Next.js Tailwind CSS Admin Dashboard Template",
+};
+
+export default function VideoPage() {
+ return (
+
+ );
+}
diff --git a/frontend/src/app/admin/layout.tsx b/frontend/src/app/admin/layout.tsx
new file mode 100644
index 0000000000..018b67ffcd
--- /dev/null
+++ b/frontend/src/app/admin/layout.tsx
@@ -0,0 +1,39 @@
+"use client";
+
+import { useSidebar } from "@/context/SidebarContext";
+import AppHeader from "@/layout/AppHeader";
+import AppSidebar from "@/layout/AppSidebar";
+import Backdrop from "@/layout/Backdrop";
+import React from "react";
+
+export default function AdminLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const { isExpanded, isHovered, isMobileOpen } = useSidebar();
+
+ // Dynamic class for main content margin based on sidebar state
+ const mainContentMargin = isMobileOpen
+ ? "ml-0"
+ : isExpanded || isHovered
+ ? "lg:ml-[290px]"
+ : "lg:ml-[90px]";
+
+ return (
+
+ {/* Sidebar and Backdrop */}
+
+
+ {/* Main Content Area */}
+
+ {/* Header */}
+
+ {/* Page Content */}
+
{children}
+
+
+ );
+}
diff --git a/frontend/src/app/admin/page.tsx b/frontend/src/app/admin/page.tsx
new file mode 100644
index 0000000000..f444132e05
--- /dev/null
+++ b/frontend/src/app/admin/page.tsx
@@ -0,0 +1,42 @@
+import type { Metadata } from "next";
+import { EcommerceMetrics } from "@/components/ecommerce/EcommerceMetrics";
+import React from "react";
+import MonthlyTarget from "@/components/ecommerce/MonthlyTarget";
+import MonthlySalesChart from "@/components/ecommerce/MonthlySalesChart";
+import StatisticsChart from "@/components/ecommerce/StatisticsChart";
+import RecentOrders from "@/components/ecommerce/RecentOrders";
+import DemographicCard from "@/components/ecommerce/DemographicCard";
+
+export const metadata: Metadata = {
+ title:
+ "Next.js Ecommerce Dashboard | TailAdmin - Next.js Dashboard Template",
+ description: "This is Next.js Home for TailAdmin Dashboard Template",
+};
+
+export default function Ecommerce() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/favicon.ico b/frontend/src/app/favicon.ico
new file mode 100644
index 0000000000..cf3128aaf3
Binary files /dev/null and b/frontend/src/app/favicon.ico differ
diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css
new file mode 100644
index 0000000000..3f775c75f7
--- /dev/null
+++ b/frontend/src/app/globals.css
@@ -0,0 +1,740 @@
+@import 'tailwindcss';
+
+@custom-variant dark (&:is(.dark *));
+
+@theme {
+ --font-*: initial;
+ --font-outfit: Outfit, sans-serif;
+
+ --breakpoint-*: initial;
+ --breakpoint-2xsm: 375px;
+ --breakpoint-xsm: 425px;
+ --breakpoint-3xl: 2000px;
+ --breakpoint-sm: 640px;
+ --breakpoint-md: 768px;
+ --breakpoint-lg: 1024px;
+ --breakpoint-xl: 1280px;
+ --breakpoint-2xl: 1536px;
+
+ --text-title-2xl: 72px;
+ --text-title-2xl--line-height: 90px;
+ --text-title-xl: 60px;
+ --text-title-xl--line-height: 72px;
+ --text-title-lg: 48px;
+ --text-title-lg--line-height: 60px;
+ --text-title-md: 36px;
+ --text-title-md--line-height: 44px;
+ --text-title-sm: 30px;
+ --text-title-sm--line-height: 38px;
+ --text-theme-xl: 20px;
+ --text-theme-xl--line-height: 30px;
+ --text-theme-sm: 14px;
+ --text-theme-sm--line-height: 20px;
+ --text-theme-xs: 12px;
+ --text-theme-xs--line-height: 18px;
+
+ --color-current: currentColor;
+ --color-transparent: transparent;
+ --color-white: #ffffff;
+ --color-black: #101828;
+
+ --color-brand-25: #f2f7ff;
+ --color-brand-50: #ecf3ff;
+ --color-brand-100: #dde9ff;
+ --color-brand-200: #c2d6ff;
+ --color-brand-300: #9cb9ff;
+ --color-brand-400: #7592ff;
+ --color-brand-500: #465fff;
+ --color-brand-600: #3641f5;
+ --color-brand-700: #2a31d8;
+ --color-brand-800: #252dae;
+ --color-brand-900: #262e89;
+ --color-brand-950: #161950;
+
+ --color-blue-light-25: #f5fbff;
+ --color-blue-light-50: #f0f9ff;
+ --color-blue-light-100: #e0f2fe;
+ --color-blue-light-200: #b9e6fe;
+ --color-blue-light-300: #7cd4fd;
+ --color-blue-light-400: #36bffa;
+ --color-blue-light-500: #0ba5ec;
+ --color-blue-light-600: #0086c9;
+ --color-blue-light-700: #026aa2;
+ --color-blue-light-800: #065986;
+ --color-blue-light-900: #0b4a6f;
+ --color-blue-light-950: #062c41;
+
+ --color-gray-25: #fcfcfd;
+ --color-gray-50: #f9fafb;
+ --color-gray-100: #f2f4f7;
+ --color-gray-200: #e4e7ec;
+ --color-gray-300: #d0d5dd;
+ --color-gray-400: #98a2b3;
+ --color-gray-500: #667085;
+ --color-gray-600: #475467;
+ --color-gray-700: #344054;
+ --color-gray-800: #1d2939;
+ --color-gray-900: #101828;
+ --color-gray-950: #0c111d;
+ --color-gray-dark: #1a2231;
+
+ --color-orange-25: #fffaf5;
+ --color-orange-50: #fff6ed;
+ --color-orange-100: #ffead5;
+ --color-orange-200: #fddcab;
+ --color-orange-300: #feb273;
+ --color-orange-400: #fd853a;
+ --color-orange-500: #fb6514;
+ --color-orange-600: #ec4a0a;
+ --color-orange-700: #c4320a;
+ --color-orange-800: #9c2a10;
+ --color-orange-900: #7e2410;
+ --color-orange-950: #511c10;
+
+ --color-success-25: #f6fef9;
+ --color-success-50: #ecfdf3;
+ --color-success-100: #d1fadf;
+ --color-success-200: #a6f4c5;
+ --color-success-300: #6ce9a6;
+ --color-success-400: #32d583;
+ --color-success-500: #12b76a;
+ --color-success-600: #039855;
+ --color-success-700: #027a48;
+ --color-success-800: #05603a;
+ --color-success-900: #054f31;
+ --color-success-950: #053321;
+
+ --color-error-25: #fffbfa;
+ --color-error-50: #fef3f2;
+ --color-error-100: #fee4e2;
+ --color-error-200: #fecdca;
+ --color-error-300: #fda29b;
+ --color-error-400: #f97066;
+ --color-error-500: #f04438;
+ --color-error-600: #d92d20;
+ --color-error-700: #b42318;
+ --color-error-800: #912018;
+ --color-error-900: #7a271a;
+ --color-error-950: #55160c;
+
+ --color-warning-25: #fffcf5;
+ --color-warning-50: #fffaeb;
+ --color-warning-100: #fef0c7;
+ --color-warning-200: #fedf89;
+ --color-warning-300: #fec84b;
+ --color-warning-400: #fdb022;
+ --color-warning-500: #f79009;
+ --color-warning-600: #dc6803;
+ --color-warning-700: #b54708;
+ --color-warning-800: #93370d;
+ --color-warning-900: #7a2e0e;
+ --color-warning-950: #4e1d09;
+
+ --color-theme-pink-500: #ee46bc;
+
+ --color-theme-purple-500: #7a5af8;
+
+ --shadow-theme-md:
+ 0px 4px 8px -2px rgba(16, 24, 40, 0.1),
+ 0px 2px 4px -2px rgba(16, 24, 40, 0.06);
+ --shadow-theme-lg:
+ 0px 12px 16px -4px rgba(16, 24, 40, 0.08),
+ 0px 4px 6px -2px rgba(16, 24, 40, 0.03);
+ --shadow-theme-sm:
+ 0px 1px 3px 0px rgba(16, 24, 40, 0.1),
+ 0px 1px 2px 0px rgba(16, 24, 40, 0.06);
+ --shadow-theme-xs: 0px 1px 2px 0px rgba(16, 24, 40, 0.05);
+ --shadow-theme-xl:
+ 0px 20px 24px -4px rgba(16, 24, 40, 0.08),
+ 0px 8px 8px -4px rgba(16, 24, 40, 0.03);
+ --shadow-datepicker: -5px 0 0 #262d3c, 5px 0 0 #262d3c;
+ --shadow-focus-ring: 0px 0px 0px 4px rgba(70, 95, 255, 0.12);
+ --shadow-slider-navigation:
+ 0px 1px 2px 0px rgba(16, 24, 40, 0.1), 0px 1px 3px 0px rgba(16, 24, 40, 0.1);
+ --shadow-tooltip:
+ 0px 4px 6px -2px rgba(16, 24, 40, 0.05),
+ -8px 0px 20px 8px rgba(16, 24, 40, 0.05);
+
+ --drop-shadow-4xl:
+ 0 35px 35px rgba(0, 0, 0, 0.25), 0 45px 65px rgba(0, 0, 0, 0.15);
+
+ --z-index-1: 1;
+ --z-index-9: 9;
+ --z-index-99: 99;
+ --z-index-999: 999;
+ --z-index-9999: 9999;
+ --z-index-99999: 99999;
+ --z-index-999999: 999999;
+}
+
+/*
+ The default border color has changed to `currentColor` in Tailwind CSS v4,
+ so we've added these compatibility styles to make sure everything still
+ looks the same as it did with Tailwind CSS v3.
+
+ If we ever want to remove these styles, we need to add an explicit border
+ color utility to any element that depends on these defaults.
+*/
+@layer base {
+ *,
+ ::after,
+ ::before,
+ ::backdrop,
+ ::file-selector-button {
+ border-color: var(--color-gray-200, currentColor);
+ }
+ button:not(:disabled),
+ [role="button"]:not(:disabled) {
+ cursor: pointer;
+ }
+ body {
+ @apply relative font-normal font-outfit z-1 bg-gray-50;
+ }
+}
+
+@utility menu-item {
+ @apply relative flex items-center w-full gap-3 px-3 py-2 font-medium rounded-lg text-theme-sm;
+}
+
+@utility menu-item-active {
+ @apply bg-brand-50 text-brand-500 dark:bg-brand-500/[0.12] dark:text-brand-400;
+}
+
+@utility menu-item-inactive {
+ @apply text-gray-700 hover:bg-gray-100 group-hover:text-gray-700 dark:text-gray-300 dark:hover:bg-white/5 dark:hover:text-gray-300;
+}
+
+@utility menu-item-icon {
+ @apply text-gray-500 group-hover:text-gray-700 dark:text-gray-400;
+}
+
+@utility menu-item-icon-active {
+ @apply text-brand-500 dark:text-brand-400;
+}
+
+@utility menu-item-icon-inactive {
+ @apply text-gray-500 group-hover:text-gray-700 dark:text-gray-400 dark:group-hover:text-gray-300;
+}
+
+@utility menu-item-arrow {
+ @apply relative;
+}
+
+@utility menu-item-arrow-active {
+ @apply rotate-180 text-brand-500 dark:text-brand-400;
+}
+
+@utility menu-item-arrow-inactive {
+ @apply text-gray-500 group-hover:text-gray-700 dark:text-gray-400 dark:group-hover:text-gray-300;
+}
+
+@utility menu-dropdown-item {
+ @apply relative flex items-center gap-3 rounded-lg px-3 py-2.5 text-theme-sm font-medium;
+}
+
+@utility menu-dropdown-item-active {
+ @apply bg-brand-50 text-brand-500 dark:bg-brand-500/[0.12] dark:text-brand-400;
+}
+
+@utility menu-dropdown-item-inactive {
+ @apply text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-white/5;
+}
+
+@utility menu-dropdown-badge {
+ @apply block rounded-full px-2.5 py-0.5 text-xs font-medium uppercase text-brand-500 dark:text-brand-400;
+}
+
+@utility menu-dropdown-badge-active {
+ @apply bg-brand-100 dark:bg-brand-500/20;
+}
+
+@utility menu-dropdown-badge-inactive {
+ @apply bg-brand-50 group-hover:bg-brand-100 dark:bg-brand-500/15 dark:group-hover:bg-brand-500/20;
+}
+
+@utility no-scrollbar {
+ /* Chrome, Safari and Opera */
+ &::-webkit-scrollbar {
+ display: none;
+ }
+ -ms-overflow-style: none; /* IE and Edge */
+ scrollbar-width: none; /* Firefox */
+}
+
+@utility custom-scrollbar {
+ &::-webkit-scrollbar {
+ @apply size-1.5;
+ }
+
+ &::-webkit-scrollbar-track {
+ @apply rounded-full;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ @apply bg-gray-200 rounded-full dark:bg-gray-700;
+ }
+}
+
+.dark .custom-scrollbar::-webkit-scrollbar-thumb {
+ background-color: #344054;
+}
+
+
+
+@layer utilities {
+ /* For Remove Date Icon */
+ input[type="date"]::-webkit-inner-spin-button,
+ input[type="time"]::-webkit-inner-spin-button,
+ input[type="date"]::-webkit-calendar-picker-indicator,
+ input[type="time"]::-webkit-calendar-picker-indicator {
+ display: none;
+ -webkit-appearance: none;
+ }
+}
+
+/* third-party libraries CSS */
+.apexcharts-legend-text {
+ @apply !text-gray-700 dark:!text-gray-400;
+}
+
+.apexcharts-text {
+ @apply !fill-gray-700 dark:!fill-gray-400;
+}
+
+.apexcharts-tooltip.apexcharts-theme-light {
+ @apply gap-1 !rounded-lg !border-gray-200 p-3 !shadow-theme-sm dark:!border-gray-800 dark:!bg-gray-900;
+}
+
+.apexcharts-legend-text {
+ @apply pl-5! !text-gray-700 dark:!text-gray-400;
+}
+.apexcharts-tooltip-series-group {
+ @apply !p-0;
+}
+.apexcharts-tooltip-y-group {
+ @apply !p-0;
+}
+.apexcharts-tooltip-title {
+ @apply !mb-0 !border-b-0 !bg-transparent !p-0 !text-[10px] !leading-4 !text-gray-800 dark:!text-white/90;
+}
+.apexcharts-tooltip-text {
+ @apply !text-theme-xs !text-gray-700 dark:!text-white/90;
+}
+.apexcharts-tooltip-text-y-value {
+ @apply !font-medium;
+}
+
+.apexcharts-gridline {
+ @apply !stroke-gray-100 dark:!stroke-gray-800;
+}
+
+.flatpickr-wrapper {
+ @apply w-full;
+}
+.flatpickr-calendar {
+ @apply mt-2 !bg-white !rounded-xl !p-5 !border !border-gray-200 dark:!border-gray-800 !text-gray-500 dark:!bg-gray-dark dark:!text-gray-400 dark:!shadow-theme-xl 2xsm:!w-auto;
+}
+
+.flatpickr-months .flatpickr-prev-month:hover svg,
+.flatpickr-months .flatpickr-next-month:hover svg {
+ @apply stroke-brand-500;
+}
+.flatpickr-calendar.arrowTop:before,
+.flatpickr-calendar.arrowTop:after {
+ @apply hidden;
+}
+
+.flatpickr-current-month {
+ @apply !p-0;
+}
+.flatpickr-current-month .cur-month,
+.flatpickr-current-month input.cur-year {
+ @apply !h-auto !pt-0 !text-lg !font-medium !text-gray-800 dark:!text-white/90;
+}
+
+.flatpickr-prev-month,
+.flatpickr-next-month {
+ @apply !p-0;
+}
+
+.flatpickr-weekdays {
+ @apply h-auto mt-6 mb-4 !bg-transparent;
+}
+
+.flatpickr-weekday {
+ @apply !text-theme-sm !font-medium !text-gray-500 dark:!text-gray-400 !bg-transparent;
+}
+
+.flatpickr-day {
+ @apply !flex !items-center !text-theme-sm !font-medium !text-gray-800 dark:!text-white/90 dark:hover:!border-gray-300 dark:hover:!bg-gray-900;
+}
+.flatpickr-day.nextMonthDay,
+.flatpickr-day.prevMonthDay {
+ @apply !text-gray-400;
+}
+
+.flatpickr-months > .flatpickr-month {
+ background: none !important;
+}
+.flatpickr-month .flatpickr-current-month .flatpickr-monthDropdown-months {
+ background: none !important;
+ appearance: none;
+ background-image: none !important;
+ font-weight: 500;
+}
+.flatpickr-month
+.flatpickr-current-month
+.flatpickr-monthDropdown-months:focus {
+ outline: none !important;
+ border: 0 !important;
+}
+.flatpickr-months .flatpickr-prev-month,
+.flatpickr-months .flatpickr-next-month {
+ @apply !top-7 dark:!fill-white dark:!text-white !bg-transparent;
+}
+.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,
+.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {
+ @apply !left-7;
+}
+.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,
+.flatpickr-months .flatpickr-next-month.flatpickr-next-month {
+ @apply !right-7;
+}
+.flatpickr-days {
+ @apply !border-0;
+}
+span.flatpickr-weekday,
+.flatpickr-months .flatpickr-month {
+ @apply dark:!fill-white dark:!text-white !bg-none;
+}
+.flatpickr-innerContainer {
+ @apply !border-b-0;
+}
+.flatpickr-months .flatpickr-month {
+ @apply !bg-none;
+}
+.flatpickr-day.inRange {
+ box-shadow: -5px 0 0 #f9fafb, 5px 0 0 #f9fafb !important;
+ @apply dark:!shadow-datepicker;
+}
+.flatpickr-day.inRange,
+.flatpickr-day.prevMonthDay.inRange,
+.flatpickr-day.nextMonthDay.inRange,
+.flatpickr-day.today.inRange,
+.flatpickr-day.prevMonthDay.today.inRange,
+.flatpickr-day.nextMonthDay.today.inRange,
+.flatpickr-day:hover,
+.flatpickr-day.prevMonthDay:hover,
+.flatpickr-day.nextMonthDay:hover,
+.flatpickr-day:focus,
+.flatpickr-day.prevMonthDay:focus,
+.flatpickr-day.nextMonthDay:focus {
+ @apply !border-gray-50 !bg-gray-50 dark:!border-0 dark:!border-white/5 dark:!bg-white/5;
+}
+.flatpickr-day.selected,
+.flatpickr-day.startRange,
+.flatpickr-day.selected,
+.flatpickr-day.endRange {
+ @apply !text-white dark:!text-white;
+}
+.flatpickr-day.selected,
+.flatpickr-day.startRange,
+.flatpickr-day.endRange,
+.flatpickr-day.selected.inRange,
+.flatpickr-day.startRange.inRange,
+.flatpickr-day.endRange.inRange,
+.flatpickr-day.selected:focus,
+.flatpickr-day.startRange:focus,
+.flatpickr-day.endRange:focus,
+.flatpickr-day.selected:hover,
+.flatpickr-day.startRange:hover,
+.flatpickr-day.endRange:hover,
+.flatpickr-day.selected.prevMonthDay,
+.flatpickr-day.startRange.prevMonthDay,
+.flatpickr-day.endRange.prevMonthDay,
+.flatpickr-day.selected.nextMonthDay,
+.flatpickr-day.startRange.nextMonthDay,
+.flatpickr-day.endRange.nextMonthDay {
+ background: #465fff;
+ @apply !border-brand-500 !bg-brand-500 hover:!border-brand-50 hover:!bg-brand-500;
+}
+.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n + 1)),
+.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n + 1)),
+.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n + 1)) {
+ box-shadow: -10px 0 0 #465fff;
+}
+
+.flatpickr-months .flatpickr-prev-month svg,
+.flatpickr-months .flatpickr-next-month svg,
+.flatpickr-months .flatpickr-prev-month,
+.flatpickr-months .flatpickr-next-month {
+ @apply hover:!fill-none;
+}
+.flatpickr-months .flatpickr-prev-month:hover svg,
+.flatpickr-months .flatpickr-next-month:hover svg {
+ fill: none !important;
+}
+
+.flatpickr-calendar.static {
+ @apply right-0;
+}
+
+.fc .fc-view-harness {
+ @apply max-w-full overflow-x-auto custom-scrollbar;
+}
+.fc-dayGridMonth-view.fc-view.fc-daygrid {
+ @apply min-w-[718px];
+}
+.fc .fc-scrollgrid-section > * {
+ border-right-width: 0;
+ border-bottom-width: 0;
+}
+.fc .fc-scrollgrid {
+ border-left-width: 0;
+}
+.fc .fc-toolbar.fc-header-toolbar {
+ @apply flex-col gap-4 px-6 pt-6 sm:flex-row;
+}
+.fc-button-group {
+ @apply gap-2;
+}
+.fc-button-group .fc-button {
+ @apply flex h-10 w-10 items-center justify-center !rounded-lg border border-gray-200 bg-transparent hover:border-gray-200 hover:bg-gray-50 focus:shadow-none active:!border-gray-200 active:!bg-transparent active:!shadow-none dark:border-gray-800 dark:hover:border-gray-800 dark:hover:bg-gray-900 dark:active:border-gray-800!;
+}
+
+.fc-button-group .fc-button.fc-prev-button:before {
+ @apply inline-block mt-1;
+ content: url("data:image/svg+xml,%3Csvg width='25' height='24' viewBox='0 0 25 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.0068 6L9.75684 12.25L16.0068 18.5' stroke='%23344054' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
+}
+.fc-button-group .fc-button.fc-next-button:before {
+ @apply inline-block mt-1;
+ content: url("data:image/svg+xml,%3Csvg width='25' height='24' viewBox='0 0 25 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9.50684 19L15.7568 12.75L9.50684 6.5' stroke='%23344054' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
+}
+.dark .fc-button-group .fc-button.fc-prev-button:before {
+ content: url("data:image/svg+xml,%3Csvg width='25' height='24' viewBox='0 0 25 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.0068 6L9.75684 12.25L16.0068 18.5' stroke='%2398A2B3' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
+}
+.dark .fc-button-group .fc-button.fc-next-button:before {
+ content: url("data:image/svg+xml,%3Csvg width='25' height='24' viewBox='0 0 25 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9.50684 19L15.7568 12.75L9.50684 6.5' stroke='%2398A2B3' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
+}
+.fc-button-group .fc-button .fc-icon {
+ @apply hidden;
+}
+.fc-addEventButton-button {
+ @apply !rounded-lg !border-0 !bg-brand-500 !px-4 !py-2.5 !text-sm !font-medium hover:!bg-brand-600 focus:!shadow-none;
+}
+.fc-toolbar-title {
+ @apply !text-lg !font-medium text-gray-800 dark:text-white/90;
+}
+.fc-header-toolbar.fc-toolbar .fc-toolbar-chunk:last-child {
+ @apply rounded-lg bg-gray-100 p-0.5 dark:bg-gray-900;
+}
+.fc-header-toolbar.fc-toolbar .fc-toolbar-chunk:last-child .fc-button {
+ @apply !h-auto !w-auto rounded-md !border-0 bg-transparent !px-5 !py-2 text-sm font-medium text-gray-500 hover:text-gray-700 focus:shadow-none! dark:text-gray-400;
+}
+.fc-header-toolbar.fc-toolbar
+ .fc-toolbar-chunk:last-child
+ .fc-button.fc-button-active {
+ @apply text-gray-900 bg-white dark:bg-gray-800 dark:text-white;
+}
+.fc-theme-standard th {
+ @apply !border-x-0 border-t !border-gray-200 bg-gray-50 !text-left dark:!border-gray-800 dark:bg-gray-900;
+}
+.fc-theme-standard td,
+.fc-theme-standard .fc-scrollgrid {
+ @apply !border-gray-200 dark:!border-gray-800;
+}
+.fc .fc-col-header-cell-cushion {
+ @apply !px-5 !py-4 text-sm font-medium uppercase text-gray-400;
+}
+.fc .fc-daygrid-day.fc-day-today {
+ @apply bg-transparent;
+}
+.fc .fc-daygrid-day {
+ @apply p-2;
+}
+.fc .fc-daygrid-day.fc-day-today .fc-scrollgrid-sync-inner {
+ @apply rounded-sm bg-gray-100 dark:bg-white/[0.03];
+}
+.fc .fc-daygrid-day-number {
+ @apply !p-3 text-sm font-medium text-gray-700 dark:text-gray-400;
+}
+.fc .fc-daygrid-day-top {
+ @apply !flex-row;
+}
+.fc .fc-day-other .fc-daygrid-day-top {
+ opacity: 1;
+}
+.fc .fc-day-other .fc-daygrid-day-top .fc-daygrid-day-number {
+ @apply text-gray-400 dark:text-white/30;
+}
+.event-fc-color {
+ @apply rounded-lg py-2.5 pl-4 pr-3;
+}
+.event-fc-color .fc-event-title {
+ @apply p-0 text-sm font-normal text-gray-700;
+}
+.fc-daygrid-event-dot {
+ @apply w-1 h-5 ml-0 mr-3 border-none rounded-sm;
+}
+.fc-event {
+ @apply focus:shadow-none;
+}
+.fc-daygrid-event.fc-event-start {
+ @apply !ml-3;
+}
+.event-fc-color.fc-bg-success {
+ @apply border-success-50 bg-success-50;
+}
+.event-fc-color.fc-bg-danger {
+ @apply border-error-50 bg-error-50;
+}
+.event-fc-color.fc-bg-primary {
+ @apply border-brand-50 bg-brand-50;
+}
+.event-fc-color.fc-bg-warning {
+ @apply border-orange-50 bg-orange-50;
+}
+.event-fc-color.fc-bg-success .fc-daygrid-event-dot {
+ @apply bg-success-500;
+}
+.event-fc-color.fc-bg-danger .fc-daygrid-event-dot {
+ @apply bg-error-500;
+}
+.event-fc-color.fc-bg-primary .fc-daygrid-event-dot {
+ @apply bg-brand-500;
+}
+.event-fc-color.fc-bg-warning .fc-daygrid-event-dot {
+ @apply bg-orange-500;
+}
+.fc-direction-ltr .fc-timegrid-slot-label-frame {
+ @apply px-3 py-1.5 text-left text-sm font-medium text-gray-500 dark:text-gray-400;
+}
+.fc .fc-timegrid-axis-cushion {
+ @apply text-sm font-medium text-gray-500 dark:text-gray-400;
+}
+.custom-calendar .fc-h-event {
+ background-color: transparent;
+ border: none;
+ color: black;
+}
+.fc.fc-media-screen {
+ @apply min-h-screen;
+}
+
+.input-date-icon::-webkit-inner-spin-button,
+.input-date-icon::-webkit-calendar-picker-indicator {
+ opacity: 0;
+ -webkit-appearance: none;
+}
+
+.stocks-slider-outer .swiper-button-next:after,
+.stocks-slider-outer .swiper-button-prev:after {
+ @apply hidden;
+}
+
+.stocks-slider-outer .swiper-button-next,
+.stocks-slider-outer .swiper-button-prev {
+ @apply !static mt-0 h-8 w-9 rounded-full border dark:hover:bg-white/[0.05] border-gray-200 !text-gray-700 transition hover:bg-gray-100 dark:border-white/[0.03] dark:bg-gray-800 dark:!text-gray-400 dark:hover:!text-white/90;
+}
+
+.stocks-slider-outer .swiper-button-next.swiper-button-disabled,
+.stocks-slider-outer .swiper-button-prev.swiper-button-disabled {
+ @apply bg-white opacity-50 dark:bg-gray-900;
+}
+
+.stocks-slider-outer .swiper-button-next svg,
+.stocks-slider-outer .swiper-button-prev svg {
+ @apply !h-auto !w-auto;
+}
+
+.swiper-button-prev svg,
+.swiper-button-next svg {
+ @apply !h-auto !w-auto;
+}
+
+.carouselTwo .swiper-button-next:after,
+.carouselTwo .swiper-button-prev:after,
+.carouselFour .swiper-button-next:after,
+.carouselFour .swiper-button-prev:after {
+ @apply hidden;
+}
+.carouselTwo .swiper-button-next.swiper-button-disabled,
+.carouselTwo .swiper-button-prev.swiper-button-disabled,
+.carouselFour .swiper-button-next.swiper-button-disabled,
+.carouselFour .swiper-button-prev.swiper-button-disabled {
+ @apply bg-white/60 !opacity-100;
+}
+.carouselTwo .swiper-button-next,
+.carouselTwo .swiper-button-prev,
+.carouselFour .swiper-button-next,
+.carouselFour .swiper-button-prev {
+ @apply h-10 w-10 rounded-full border-[0.5px] border-white/10 bg-white/90 !text-gray-700 shadow-slider-navigation backdrop-blur-[10px];
+}
+
+.carouselTwo .swiper-button-prev,
+.carouselFour .swiper-button-prev {
+ @apply !left-3 sm:!left-4;
+}
+
+.carouselTwo .swiper-button-next,
+.carouselFour .swiper-button-next {
+ @apply !right-3 sm:!right-4;
+}
+
+.carouselThree .swiper-pagination,
+.carouselFour .swiper-pagination {
+ @apply !bottom-3 !left-1/2 inline-flex !w-auto -translate-x-1/2 items-center gap-1.5 rounded-[40px] border-[0.5px] border-white/10 bg-white/60 px-2 py-1.5 shadow-slider-navigation backdrop-blur-[10px] sm:!bottom-5;
+}
+
+.carouselThree .swiper-pagination-bullet,
+.carouselFour .swiper-pagination-bullet {
+ @apply !m-0 h-2.5 w-2.5 bg-white opacity-100 shadow-theme-xs duration-200 ease-in-out;
+}
+
+.carouselThree .swiper-pagination-bullet-active,
+.carouselFour .swiper-pagination-bullet-active {
+ @apply w-6.5 rounded-xl;
+}
+
+.jvectormap-container {
+ @apply !bg-gray-50 dark:!bg-gray-900;
+}
+.jvectormap-region.jvectormap-element {
+ @apply !fill-gray-300 hover:!fill-brand-500 dark:!fill-gray-700 dark:hover:!fill-brand-500;
+}
+.jvectormap-marker.jvectormap-element {
+ @apply !stroke-gray-200 dark:!stroke-gray-800;
+}
+.jvectormap-tip {
+ @apply !bg-brand-500 !border-none !px-2 !py-1;
+}
+.jvectormap-zoomin,
+.jvectormap-zoomout {
+ @apply !hidden;
+}
+
+.form-check-input:checked ~ span {
+ @apply border-[6px] border-brand-500 bg-brand-500 dark:border-brand-500;
+}
+
+.taskCheckbox:checked ~ .box span {
+ @apply opacity-100 bg-brand-500;
+}
+.taskCheckbox:checked ~ p {
+ @apply text-gray-400 line-through;
+}
+.taskCheckbox:checked ~ .box {
+ @apply border-brand-500 bg-brand-500 dark:border-brand-500;
+}
+
+.task {
+ transition: all 0.2s ease; /* Smooth transition for visual effects */
+}
+
+.task {
+ border-radius: 0.75rem;
+ box-shadow: 0 1px 3px 0 rgba(16, 24, 40, 0.1),
+ 0 1px 2px 0 rgba(16, 24, 40, 0.06);
+ opacity: 0.8;
+ cursor: grabbing; /* Changes the cursor to indicate dragging */
+}
diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx
new file mode 100644
index 0000000000..89fd21dd26
--- /dev/null
+++ b/frontend/src/app/layout.tsx
@@ -0,0 +1,25 @@
+import { Outfit } from 'next/font/google';
+import './globals.css';
+
+import { SidebarProvider } from '@/context/SidebarContext';
+import { ThemeProvider } from '@/context/ThemeContext';
+
+const outfit = Outfit({
+ subsets: ["latin"],
+});
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+
+
+ {children}
+
+
+
+ );
+}
diff --git a/frontend/src/app/not-found.tsx b/frontend/src/app/not-found.tsx
new file mode 100644
index 0000000000..5494db8017
--- /dev/null
+++ b/frontend/src/app/not-found.tsx
@@ -0,0 +1,47 @@
+import GridShape from "@/components/common/GridShape";
+import Image from "next/image";
+import Link from "next/link";
+import React from "react";
+
+export default function NotFound() {
+ return (
+
+
+
+
+ ERROR
+
+
+
+
+
+
+ We can’t seem to find the page you are looking for!
+
+
+
+ Back to Home Page
+
+
+ {/* */}
+
+ © {new Date().getFullYear()} - TailAdmin
+
+
+ );
+}
diff --git a/frontend/src/client/core/CancelablePromise.ts b/frontend/src/client/core/CancelablePromise.ts
index ccc082e8f2..d95c755e0a 100644
--- a/frontend/src/client/core/CancelablePromise.ts
+++ b/frontend/src/client/core/CancelablePromise.ts
@@ -80,7 +80,7 @@ export class CancelablePromise implements Promise {
});
}
- get [Symbol.toStringTag]() {
+ get [Symbol.toStringTag](): string {
return "Cancellable Promise";
}
diff --git a/frontend/src/client/schemas.gen.ts b/frontend/src/client/schemas.gen.ts
index a5c029db0a..da4eeccd05 100644
--- a/frontend/src/client/schemas.gen.ts
+++ b/frontend/src/client/schemas.gen.ts
@@ -1,5 +1,35 @@
// This file is auto-generated by @hey-api/openapi-ts
+export const AnswerUpdateSchema = {
+ properties: {
+ id: {
+ type: 'string',
+ format: 'uuid',
+ title: 'Id'
+ },
+ response: {
+ type: 'string',
+ title: 'Response'
+ }
+ },
+ type: 'object',
+ required: ['id', 'response'],
+ title: 'AnswerUpdate'
+} as const;
+
+export const Body_documents_create_documentSchema = {
+ properties: {
+ file: {
+ type: 'string',
+ format: 'binary',
+ title: 'File'
+ }
+ },
+ type: 'object',
+ required: ['file'],
+ title: 'Body_documents-create_document'
+} as const;
+
export const Body_login_login_access_tokenSchema = {
properties: {
grant_type: {
@@ -55,6 +85,434 @@ export const Body_login_login_access_tokenSchema = {
title: 'Body_login-login_access_token'
} as const;
+export const DocumentPublicSchema = {
+ properties: {
+ filename: {
+ type: 'string',
+ title: 'Filename'
+ },
+ s3_url: {
+ anyOf: [
+ {
+ type: 'string',
+ maxLength: 255
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'S3 Url'
+ },
+ s3_key: {
+ anyOf: [
+ {
+ type: 'string',
+ maxLength: 1024
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'S3 Key'
+ },
+ content_type: {
+ anyOf: [
+ {
+ type: 'string'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Content Type'
+ },
+ size: {
+ anyOf: [
+ {
+ type: 'integer'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Size'
+ },
+ id: {
+ type: 'string',
+ format: 'uuid',
+ title: 'Id'
+ },
+ owner_id: {
+ type: 'string',
+ format: 'uuid',
+ title: 'Owner Id'
+ },
+ extracted_text: {
+ anyOf: [
+ {
+ type: 'string'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Extracted Text'
+ }
+ },
+ type: 'object',
+ required: ['filename', 'id', 'owner_id'],
+ title: 'DocumentPublic'
+} as const;
+
+export const DocumentUpdateSchema = {
+ properties: {
+ filename: {
+ anyOf: [
+ {
+ type: 'string',
+ maxLength: 255,
+ minLength: 1
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Filename'
+ },
+ s3_url: {
+ anyOf: [
+ {
+ type: 'string',
+ maxLength: 255
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'S3 Url'
+ },
+ s3_key: {
+ anyOf: [
+ {
+ type: 'string',
+ maxLength: 1024
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'S3 Key'
+ },
+ content_type: {
+ anyOf: [
+ {
+ type: 'string',
+ maxLength: 255
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Content Type'
+ },
+ size: {
+ anyOf: [
+ {
+ type: 'integer',
+ minimum: 0
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Size'
+ }
+ },
+ type: 'object',
+ title: 'DocumentUpdate'
+} as const;
+
+export const DocumentsPublicSchema = {
+ properties: {
+ data: {
+ items: {
+ '$ref': '#/components/schemas/DocumentPublic'
+ },
+ type: 'array',
+ title: 'Data'
+ },
+ count: {
+ type: 'integer',
+ title: 'Count'
+ }
+ },
+ type: 'object',
+ required: ['data', 'count'],
+ title: 'DocumentsPublic'
+} as const;
+
+export const ExamAttemptCreateSchema = {
+ properties: {
+ score: {
+ anyOf: [
+ {
+ type: 'number'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Score'
+ },
+ is_complete: {
+ type: 'boolean',
+ title: 'Is Complete',
+ default: false
+ },
+ exam_id: {
+ type: 'string',
+ format: 'uuid',
+ title: 'Exam Id'
+ }
+ },
+ type: 'object',
+ required: ['exam_id'],
+ title: 'ExamAttemptCreate'
+} as const;
+
+export const ExamAttemptPublicSchema = {
+ properties: {
+ score: {
+ anyOf: [
+ {
+ type: 'number'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Score'
+ },
+ is_complete: {
+ type: 'boolean',
+ title: 'Is Complete',
+ default: false
+ },
+ id: {
+ type: 'string',
+ format: 'uuid',
+ title: 'Id'
+ },
+ exam_id: {
+ type: 'string',
+ format: 'uuid',
+ title: 'Exam Id'
+ },
+ completed_at: {
+ anyOf: [
+ {
+ type: 'string',
+ format: 'date-time'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Completed At'
+ },
+ created_at: {
+ type: 'string',
+ format: 'date-time',
+ title: 'Created At'
+ },
+ updated_at: {
+ type: 'string',
+ format: 'date-time',
+ title: 'Updated At'
+ }
+ },
+ type: 'object',
+ required: ['id', 'exam_id', 'created_at', 'updated_at'],
+ title: 'ExamAttemptPublic'
+} as const;
+
+export const ExamAttemptUpdateSchema = {
+ properties: {
+ is_complete: {
+ anyOf: [
+ {
+ type: 'boolean'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Is Complete'
+ },
+ answers: {
+ anyOf: [
+ {
+ items: {
+ '$ref': '#/components/schemas/AnswerUpdate'
+ },
+ type: 'array'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Answers'
+ }
+ },
+ type: 'object',
+ title: 'ExamAttemptUpdate'
+} as const;
+
+export const ExamPublicSchema = {
+ properties: {
+ title: {
+ type: 'string',
+ title: 'Title'
+ },
+ description: {
+ anyOf: [
+ {
+ type: 'string'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Description'
+ },
+ duration_minutes: {
+ anyOf: [
+ {
+ type: 'integer'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Duration Minutes'
+ },
+ is_published: {
+ type: 'boolean',
+ title: 'Is Published',
+ default: false
+ },
+ id: {
+ type: 'string',
+ format: 'uuid',
+ title: 'Id'
+ },
+ owner_id: {
+ type: 'string',
+ format: 'uuid',
+ title: 'Owner Id'
+ },
+ questions: {
+ items: {
+ '$ref': '#/components/schemas/QuestionPublic'
+ },
+ type: 'array',
+ title: 'Questions'
+ }
+ },
+ type: 'object',
+ required: ['title', 'id', 'owner_id'],
+ title: 'ExamPublic'
+} as const;
+
+export const ExamUpdateSchema = {
+ properties: {
+ title: {
+ anyOf: [
+ {
+ type: 'string',
+ maxLength: 255
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Title'
+ },
+ description: {
+ anyOf: [
+ {
+ type: 'string',
+ maxLength: 1000
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Description'
+ },
+ duration_minutes: {
+ anyOf: [
+ {
+ type: 'integer',
+ minimum: 1
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Duration Minutes'
+ },
+ is_published: {
+ anyOf: [
+ {
+ type: 'boolean'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Is Published'
+ }
+ },
+ type: 'object',
+ title: 'ExamUpdate'
+} as const;
+
+export const ExamsPublicSchema = {
+ properties: {
+ data: {
+ items: {
+ '$ref': '#/components/schemas/ExamPublic'
+ },
+ type: 'array',
+ title: 'Data'
+ },
+ count: {
+ type: 'integer',
+ title: 'Count'
+ }
+ },
+ type: 'object',
+ required: ['data', 'count'],
+ title: 'ExamsPublic'
+} as const;
+
+export const GenerateQuestionsRequestSchema = {
+ properties: {
+ document_ids: {
+ items: {
+ type: 'string',
+ format: 'uuid'
+ },
+ type: 'array',
+ title: 'Document Ids'
+ }
+ },
+ type: 'object',
+ required: ['document_ids'],
+ title: 'GenerateQuestionsRequest'
+} as const;
+
export const HTTPValidationErrorSchema = {
properties: {
detail: {
@@ -237,6 +695,51 @@ export const PrivateUserCreateSchema = {
title: 'PrivateUserCreate'
} as const;
+export const QuestionPublicSchema = {
+ properties: {
+ question: {
+ type: 'string',
+ title: 'Question'
+ },
+ answer: {
+ anyOf: [
+ {
+ type: 'string'
+ },
+ {
+ type: 'null'
+ }
+ ],
+ title: 'Answer'
+ },
+ id: {
+ type: 'string',
+ format: 'uuid',
+ title: 'Id'
+ },
+ type: {
+ '$ref': '#/components/schemas/QuestionType'
+ },
+ options: {
+ items: {
+ type: 'string'
+ },
+ type: 'array',
+ title: 'Options',
+ default: []
+ }
+ },
+ type: 'object',
+ required: ['question', 'id', 'type'],
+ title: 'QuestionPublic'
+} as const;
+
+export const QuestionTypeSchema = {
+ type: 'string',
+ enum: ['multiple_choice', 'true_false', 'short_answer'],
+ title: 'QuestionType'
+} as const;
+
export const TokenSchema = {
properties: {
access_token: {
diff --git a/frontend/src/client/sdk.gen.ts b/frontend/src/client/sdk.gen.ts
index ba79e3f726..dc7f866776 100644
--- a/frontend/src/client/sdk.gen.ts
+++ b/frontend/src/client/sdk.gen.ts
@@ -3,7 +3,295 @@
import type { CancelablePromise } from './core/CancelablePromise';
import { OpenAPI } from './core/OpenAPI';
import { request as __request } from './core/request';
-import type { ItemsReadItemsData, ItemsReadItemsResponse, ItemsCreateItemData, ItemsCreateItemResponse, ItemsReadItemData, ItemsReadItemResponse, ItemsUpdateItemData, ItemsUpdateItemResponse, ItemsDeleteItemData, ItemsDeleteItemResponse, LoginLoginAccessTokenData, LoginLoginAccessTokenResponse, LoginTestTokenResponse, LoginRecoverPasswordData, LoginRecoverPasswordResponse, LoginResetPasswordData, LoginResetPasswordResponse, LoginRecoverPasswordHtmlContentData, LoginRecoverPasswordHtmlContentResponse, PrivateCreateUserData, PrivateCreateUserResponse, UsersReadUsersData, UsersReadUsersResponse, UsersCreateUserData, UsersCreateUserResponse, UsersReadUserMeResponse, UsersDeleteUserMeResponse, UsersUpdateUserMeData, UsersUpdateUserMeResponse, UsersUpdatePasswordMeData, UsersUpdatePasswordMeResponse, UsersRegisterUserData, UsersRegisterUserResponse, UsersReadUserByIdData, UsersReadUserByIdResponse, UsersUpdateUserData, UsersUpdateUserResponse, UsersDeleteUserData, UsersDeleteUserResponse, UtilsTestEmailData, UtilsTestEmailResponse, UtilsHealthCheckResponse } from './types.gen';
+import type { DocumentsCreateDocumentData, DocumentsCreateDocumentResponse, DocumentsReadDocumentsData, DocumentsReadDocumentsResponse, DocumentsReadDocumentData, DocumentsReadDocumentResponse, DocumentsUpdateDocumentData, DocumentsUpdateDocumentResponse, DocumentsDeleteDocumentData, DocumentsDeleteDocumentResponse, ExamAttemptsCreateExamAttemptData, ExamAttemptsCreateExamAttemptResponse, ExamAttemptsReadExamAttemptData, ExamAttemptsReadExamAttemptResponse, ExamAttemptsUpdateExamAttemptData, ExamAttemptsUpdateExamAttemptResponse, ExamsGenerateExamData, ExamsGenerateExamResponse, ExamsReadExamData, ExamsReadExamResponse, ExamsUpdateExamData, ExamsUpdateExamResponse, ExamsDeleteExamData, ExamsDeleteExamResponse, ExamsReadExamsData, ExamsReadExamsResponse, ItemsReadItemsData, ItemsReadItemsResponse, ItemsCreateItemData, ItemsCreateItemResponse, ItemsReadItemData, ItemsReadItemResponse, ItemsUpdateItemData, ItemsUpdateItemResponse, ItemsDeleteItemData, ItemsDeleteItemResponse, LoginLoginAccessTokenData, LoginLoginAccessTokenResponse, LoginTestTokenResponse, LoginRecoverPasswordData, LoginRecoverPasswordResponse, LoginResetPasswordData, LoginResetPasswordResponse, LoginRecoverPasswordHtmlContentData, LoginRecoverPasswordHtmlContentResponse, PrivateCreateUserData, PrivateCreateUserResponse, UsersReadUsersData, UsersReadUsersResponse, UsersCreateUserData, UsersCreateUserResponse, UsersReadUserMeResponse, UsersDeleteUserMeResponse, UsersUpdateUserMeData, UsersUpdateUserMeResponse, UsersUpdatePasswordMeData, UsersUpdatePasswordMeResponse, UsersRegisterUserData, UsersRegisterUserResponse, UsersReadUserByIdData, UsersReadUserByIdResponse, UsersUpdateUserData, UsersUpdateUserResponse, UsersDeleteUserData, UsersDeleteUserResponse, UtilsTestEmailData, UtilsTestEmailResponse, UtilsHealthCheckResponse } from './types.gen';
+
+export class DocumentsService {
+ /**
+ * Create Document
+ * @param data The data for the request.
+ * @param data.formData
+ * @returns DocumentPublic Successful Response
+ * @throws ApiError
+ */
+ public static createDocument(data: DocumentsCreateDocumentData): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'POST',
+ url: '/api/v1/documents/',
+ formData: data.formData,
+ mediaType: 'multipart/form-data',
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+
+ /**
+ * Read Documents
+ * Retrieve documents.
+ * @param data The data for the request.
+ * @param data.skip
+ * @param data.limit
+ * @returns DocumentsPublic Successful Response
+ * @throws ApiError
+ */
+ public static readDocuments(data: DocumentsReadDocumentsData = {}): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'GET',
+ url: '/api/v1/documents/',
+ query: {
+ skip: data.skip,
+ limit: data.limit
+ },
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+
+ /**
+ * Read Document
+ * Get document by ID.
+ * @param data The data for the request.
+ * @param data.id
+ * @returns DocumentPublic Successful Response
+ * @throws ApiError
+ */
+ public static readDocument(data: DocumentsReadDocumentData): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'GET',
+ url: '/api/v1/documents/{id}',
+ path: {
+ id: data.id
+ },
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+
+ /**
+ * Update Document
+ * Update an document.
+ * @param data The data for the request.
+ * @param data.id
+ * @param data.requestBody
+ * @returns DocumentPublic Successful Response
+ * @throws ApiError
+ */
+ public static updateDocument(data: DocumentsUpdateDocumentData): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'PUT',
+ url: '/api/v1/documents/{id}',
+ path: {
+ id: data.id
+ },
+ body: data.requestBody,
+ mediaType: 'application/json',
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+
+ /**
+ * Delete Document
+ * Delete an document.
+ * @param data The data for the request.
+ * @param data.id
+ * @returns Message Successful Response
+ * @throws ApiError
+ */
+ public static deleteDocument(data: DocumentsDeleteDocumentData): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'DELETE',
+ url: '/api/v1/documents/{id}',
+ path: {
+ id: data.id
+ },
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+}
+
+export class ExamAttemptsService {
+ /**
+ * Create Exam Attempt
+ * Create a new exam attempt for a specific exam.
+ * @param data The data for the request.
+ * @param data.requestBody
+ * @returns ExamAttemptPublic Successful Response
+ * @throws ApiError
+ */
+ public static createExamAttempt(data: ExamAttemptsCreateExamAttemptData): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'POST',
+ url: '/api/v1/exam-attempts/',
+ body: data.requestBody,
+ mediaType: 'application/json',
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+
+ /**
+ * Read Exam Attempt
+ * Get ExamAttempt by ID.
+ * @param data The data for the request.
+ * @param data.id
+ * @returns ExamAttemptPublic Successful Response
+ * @throws ApiError
+ */
+ public static readExamAttempt(data: ExamAttemptsReadExamAttemptData): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'GET',
+ url: '/api/v1/exam-attempts/{id}',
+ path: {
+ id: data.id
+ },
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+
+ /**
+ * Update Exam Attempt
+ * Update an exam attempt with answers.
+ * If `is_complete=True`, compute the score.
+ * @param data The data for the request.
+ * @param data.attemptId
+ * @param data.requestBody
+ * @returns ExamAttemptPublic Successful Response
+ * @throws ApiError
+ */
+ public static updateExamAttempt(data: ExamAttemptsUpdateExamAttemptData): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'PATCH',
+ url: '/api/v1/exam-attempts/{attempt_id}',
+ path: {
+ attempt_id: data.attemptId
+ },
+ body: data.requestBody,
+ mediaType: 'application/json',
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+}
+
+export class ExamsService {
+ /**
+ * Generate Exam
+ * @param data The data for the request.
+ * @param data.requestBody
+ * @returns ExamPublic Successful Response
+ * @throws ApiError
+ */
+ public static generateExam(data: ExamsGenerateExamData): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'POST',
+ url: '/api/v1/exams/generate',
+ body: data.requestBody,
+ mediaType: 'application/json',
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+
+ /**
+ * Read Exam
+ * Get exam by ID.
+ * @param data The data for the request.
+ * @param data.id
+ * @returns ExamPublic Successful Response
+ * @throws ApiError
+ */
+ public static readExam(data: ExamsReadExamData): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'GET',
+ url: '/api/v1/exams/{id}',
+ path: {
+ id: data.id
+ },
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+
+ /**
+ * Update Exam
+ * Update an exam.
+ * @param data The data for the request.
+ * @param data.id
+ * @param data.requestBody
+ * @returns ExamPublic Successful Response
+ * @throws ApiError
+ */
+ public static updateExam(data: ExamsUpdateExamData): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'PUT',
+ url: '/api/v1/exams/{id}',
+ path: {
+ id: data.id
+ },
+ body: data.requestBody,
+ mediaType: 'application/json',
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+
+ /**
+ * Delete Exam
+ * Delete an exam.
+ * @param data The data for the request.
+ * @param data.id
+ * @returns Message Successful Response
+ * @throws ApiError
+ */
+ public static deleteExam(data: ExamsDeleteExamData): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'DELETE',
+ url: '/api/v1/exams/{id}',
+ path: {
+ id: data.id
+ },
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+
+ /**
+ * Read Exams
+ * Retrieve exams.
+ * @param data The data for the request.
+ * @param data.skip
+ * @param data.limit
+ * @returns ExamsPublic Successful Response
+ * @throws ApiError
+ */
+ public static readExams(data: ExamsReadExamsData = {}): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'GET',
+ url: '/api/v1/exams/',
+ query: {
+ skip: data.skip,
+ limit: data.limit
+ },
+ errors: {
+ 422: 'Validation Error'
+ }
+ });
+ }
+}
export class ItemsService {
/**
diff --git a/frontend/src/client/types.gen.ts b/frontend/src/client/types.gen.ts
index e5cf34c34c..fbfc76e326 100644
--- a/frontend/src/client/types.gen.ts
+++ b/frontend/src/client/types.gen.ts
@@ -1,5 +1,14 @@
// This file is auto-generated by @hey-api/openapi-ts
+export type AnswerUpdate = {
+ id: string;
+ response: string;
+};
+
+export type Body_documents_create_document = {
+ file: Blob | File;
+};
+
export type Body_login_login_access_token = {
grant_type?: (string | null);
username: string;
@@ -9,6 +18,77 @@ export type Body_login_login_access_token = {
client_secret?: (string | null);
};
+export type DocumentPublic = {
+ filename: string;
+ s3_url?: (string | null);
+ s3_key?: (string | null);
+ content_type?: (string | null);
+ size?: (number | null);
+ id: string;
+ owner_id: string;
+ extracted_text?: (string | null);
+};
+
+export type DocumentsPublic = {
+ data: Array;
+ count: number;
+};
+
+export type DocumentUpdate = {
+ filename?: (string | null);
+ s3_url?: (string | null);
+ s3_key?: (string | null);
+ content_type?: (string | null);
+ size?: (number | null);
+};
+
+export type ExamAttemptCreate = {
+ score?: (number | null);
+ is_complete?: boolean;
+ exam_id: string;
+};
+
+export type ExamAttemptPublic = {
+ score?: (number | null);
+ is_complete?: boolean;
+ id: string;
+ exam_id: string;
+ completed_at?: (string | null);
+ created_at: string;
+ updated_at: string;
+};
+
+export type ExamAttemptUpdate = {
+ is_complete?: (boolean | null);
+ answers?: (Array | null);
+};
+
+export type ExamPublic = {
+ title: string;
+ description?: (string | null);
+ duration_minutes?: (number | null);
+ is_published?: boolean;
+ id: string;
+ owner_id: string;
+ questions?: Array;
+};
+
+export type ExamsPublic = {
+ data: Array;
+ count: number;
+};
+
+export type ExamUpdate = {
+ title?: (string | null);
+ description?: (string | null);
+ duration_minutes?: (number | null);
+ is_published?: (boolean | null);
+};
+
+export type GenerateQuestionsRequest = {
+ document_ids: Array;
+};
+
export type HTTPValidationError = {
detail?: Array;
};
@@ -51,6 +131,16 @@ export type PrivateUserCreate = {
is_verified?: boolean;
};
+export type QuestionPublic = {
+ question: string;
+ answer?: (string | null);
+ id: string;
+ type: QuestionType;
+ options?: Array;
+};
+
+export type QuestionType = 'multiple_choice' | 'true_false' | 'short_answer';
+
export type Token = {
access_token: string;
token_type?: string;
@@ -107,6 +197,89 @@ export type ValidationError = {
type: string;
};
+export type DocumentsCreateDocumentData = {
+ formData: Body_documents_create_document;
+};
+
+export type DocumentsCreateDocumentResponse = (DocumentPublic);
+
+export type DocumentsReadDocumentsData = {
+ limit?: number;
+ skip?: number;
+};
+
+export type DocumentsReadDocumentsResponse = (DocumentsPublic);
+
+export type DocumentsReadDocumentData = {
+ id: string;
+};
+
+export type DocumentsReadDocumentResponse = (DocumentPublic);
+
+export type DocumentsUpdateDocumentData = {
+ id: string;
+ requestBody: DocumentUpdate;
+};
+
+export type DocumentsUpdateDocumentResponse = (DocumentPublic);
+
+export type DocumentsDeleteDocumentData = {
+ id: string;
+};
+
+export type DocumentsDeleteDocumentResponse = (Message);
+
+export type ExamAttemptsCreateExamAttemptData = {
+ requestBody: ExamAttemptCreate;
+};
+
+export type ExamAttemptsCreateExamAttemptResponse = (ExamAttemptPublic);
+
+export type ExamAttemptsReadExamAttemptData = {
+ id: string;
+};
+
+export type ExamAttemptsReadExamAttemptResponse = (ExamAttemptPublic);
+
+export type ExamAttemptsUpdateExamAttemptData = {
+ attemptId: string;
+ requestBody: ExamAttemptUpdate;
+};
+
+export type ExamAttemptsUpdateExamAttemptResponse = (ExamAttemptPublic);
+
+export type ExamsGenerateExamData = {
+ requestBody: GenerateQuestionsRequest;
+};
+
+export type ExamsGenerateExamResponse = (ExamPublic);
+
+export type ExamsReadExamData = {
+ id: string;
+};
+
+export type ExamsReadExamResponse = (ExamPublic);
+
+export type ExamsUpdateExamData = {
+ id: string;
+ requestBody: ExamUpdate;
+};
+
+export type ExamsUpdateExamResponse = (ExamPublic);
+
+export type ExamsDeleteExamData = {
+ id: string;
+};
+
+export type ExamsDeleteExamResponse = (Message);
+
+export type ExamsReadExamsData = {
+ limit?: number;
+ skip?: number;
+};
+
+export type ExamsReadExamsResponse = (ExamsPublic);
+
export type ItemsReadItemsData = {
limit?: number;
skip?: number;
diff --git a/frontend/src/components/Admin/AddUser.tsx b/frontend/src/components/Admin/AddUser.tsx
deleted file mode 100644
index 2276b43c24..0000000000
--- a/frontend/src/components/Admin/AddUser.tsx
+++ /dev/null
@@ -1,225 +0,0 @@
-import {
- Button,
- DialogActionTrigger,
- DialogTitle,
- Flex,
- Input,
- Text,
- VStack,
-} from "@chakra-ui/react"
-import { useMutation, useQueryClient } from "@tanstack/react-query"
-import { useState } from "react"
-import { Controller, type SubmitHandler, useForm } from "react-hook-form"
-import { FaPlus } from "react-icons/fa"
-import { type UserCreate, UsersService } from "@/client"
-import type { ApiError } from "@/client/core/ApiError"
-import useCustomToast from "@/hooks/useCustomToast"
-import { emailPattern, handleError } from "@/utils"
-import { Checkbox } from "../ui/checkbox"
-import {
- DialogBody,
- DialogCloseTrigger,
- DialogContent,
- DialogFooter,
- DialogHeader,
- DialogRoot,
- DialogTrigger,
-} from "../ui/dialog"
-import { Field } from "../ui/field"
-
-interface UserCreateForm extends UserCreate {
- confirm_password: string
-}
-
-const AddUser = () => {
- const [isOpen, setIsOpen] = useState(false)
- const queryClient = useQueryClient()
- const { showSuccessToast } = useCustomToast()
- const {
- control,
- register,
- handleSubmit,
- reset,
- getValues,
- formState: { errors, isValid, isSubmitting },
- } = useForm({
- mode: "onBlur",
- criteriaMode: "all",
- defaultValues: {
- email: "",
- full_name: "",
- password: "",
- confirm_password: "",
- is_superuser: false,
- is_active: false,
- },
- })
-
- const mutation = useMutation({
- mutationFn: (data: UserCreate) =>
- UsersService.createUser({ requestBody: data }),
- onSuccess: () => {
- showSuccessToast("User created successfully.")
- reset()
- setIsOpen(false)
- },
- onError: (err: ApiError) => {
- handleError(err)
- },
- onSettled: () => {
- queryClient.invalidateQueries({ queryKey: ["users"] })
- },
- })
-
- const onSubmit: SubmitHandler = (data) => {
- mutation.mutate(data)
- }
-
- return (
- setIsOpen(open)}
- >
-
-
-
- Add User
-
-
-
-
-
-
-
- )
-}
-
-export default AddUser
diff --git a/frontend/src/components/Admin/DeleteUser.tsx b/frontend/src/components/Admin/DeleteUser.tsx
deleted file mode 100644
index f3e7db3173..0000000000
--- a/frontend/src/components/Admin/DeleteUser.tsx
+++ /dev/null
@@ -1,104 +0,0 @@
-import { Button, DialogTitle, Text } from "@chakra-ui/react"
-import { useMutation, useQueryClient } from "@tanstack/react-query"
-import { useState } from "react"
-import { useForm } from "react-hook-form"
-import { FiTrash2 } from "react-icons/fi"
-
-import { UsersService } from "@/client"
-import {
- DialogActionTrigger,
- DialogBody,
- DialogCloseTrigger,
- DialogContent,
- DialogFooter,
- DialogHeader,
- DialogRoot,
- DialogTrigger,
-} from "@/components/ui/dialog"
-import useCustomToast from "@/hooks/useCustomToast"
-
-const DeleteUser = ({ id }: { id: string }) => {
- const [isOpen, setIsOpen] = useState(false)
- const queryClient = useQueryClient()
- const { showSuccessToast, showErrorToast } = useCustomToast()
- const {
- handleSubmit,
- formState: { isSubmitting },
- } = useForm()
-
- const deleteUser = async (id: string) => {
- await UsersService.deleteUser({ userId: id })
- }
-
- const mutation = useMutation({
- mutationFn: deleteUser,
- onSuccess: () => {
- showSuccessToast("The user was deleted successfully")
- setIsOpen(false)
- },
- onError: () => {
- showErrorToast("An error occurred while deleting the user")
- },
- onSettled: () => {
- queryClient.invalidateQueries()
- },
- })
-
- const onSubmit = async () => {
- mutation.mutate(id)
- }
-
- return (
- setIsOpen(open)}
- >
-
-
-
- Delete User
-
-
-
-
-
-
- )
-}
-
-export default DeleteUser
diff --git a/frontend/src/components/Admin/EditUser.tsx b/frontend/src/components/Admin/EditUser.tsx
deleted file mode 100644
index 545f334a51..0000000000
--- a/frontend/src/components/Admin/EditUser.tsx
+++ /dev/null
@@ -1,215 +0,0 @@
-import {
- Button,
- DialogActionTrigger,
- DialogRoot,
- DialogTrigger,
- Flex,
- Input,
- Text,
- VStack,
-} from "@chakra-ui/react"
-import { useMutation, useQueryClient } from "@tanstack/react-query"
-import { useState } from "react"
-import { Controller, type SubmitHandler, useForm } from "react-hook-form"
-import { FaExchangeAlt } from "react-icons/fa"
-
-import { type UserPublic, UsersService, type UserUpdate } from "@/client"
-import type { ApiError } from "@/client/core/ApiError"
-import useCustomToast from "@/hooks/useCustomToast"
-import { emailPattern, handleError } from "@/utils"
-import { Checkbox } from "../ui/checkbox"
-import {
- DialogBody,
- DialogCloseTrigger,
- DialogContent,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "../ui/dialog"
-import { Field } from "../ui/field"
-
-interface EditUserProps {
- user: UserPublic
-}
-
-interface UserUpdateForm extends UserUpdate {
- confirm_password?: string
-}
-
-const EditUser = ({ user }: EditUserProps) => {
- const [isOpen, setIsOpen] = useState(false)
- const queryClient = useQueryClient()
- const { showSuccessToast } = useCustomToast()
- const {
- control,
- register,
- handleSubmit,
- reset,
- getValues,
- formState: { errors, isSubmitting },
- } = useForm({
- mode: "onBlur",
- criteriaMode: "all",
- defaultValues: user,
- })
-
- const mutation = useMutation({
- mutationFn: (data: UserUpdateForm) =>
- UsersService.updateUser({ userId: user.id, requestBody: data }),
- onSuccess: () => {
- showSuccessToast("User updated successfully.")
- reset()
- setIsOpen(false)
- },
- onError: (err: ApiError) => {
- handleError(err)
- },
- onSettled: () => {
- queryClient.invalidateQueries({ queryKey: ["users"] })
- },
- })
-
- const onSubmit: SubmitHandler = async (data) => {
- if (data.password === "") {
- data.password = undefined
- }
- mutation.mutate(data)
- }
-
- return (
- setIsOpen(open)}
- >
-
-
-
- Edit User
-
-
-
-
-
-
- )
-}
-
-export default EditUser
diff --git a/frontend/src/components/Common/ItemActionsMenu.tsx b/frontend/src/components/Common/ItemActionsMenu.tsx
deleted file mode 100644
index 18e424fdd4..0000000000
--- a/frontend/src/components/Common/ItemActionsMenu.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import { IconButton } from "@chakra-ui/react"
-import { BsThreeDotsVertical } from "react-icons/bs"
-import type { ItemPublic } from "@/client"
-import DeleteItem from "../Items/DeleteItem"
-import EditItem from "../Items/EditItem"
-import { MenuContent, MenuRoot, MenuTrigger } from "../ui/menu"
-
-interface ItemActionsMenuProps {
- item: ItemPublic
-}
-
-export const ItemActionsMenu = ({ item }: ItemActionsMenuProps) => {
- return (
-
-
-
-
-
-
-
-
-
-
-
- )
-}
diff --git a/frontend/src/components/Common/Navbar.tsx b/frontend/src/components/Common/Navbar.tsx
deleted file mode 100644
index 7e952e005e..0000000000
--- a/frontend/src/components/Common/Navbar.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import { Flex, Image, useBreakpointValue } from "@chakra-ui/react"
-import { Link } from "@tanstack/react-router"
-
-import Logo from "/assets/images/fastapi-logo.svg"
-import UserMenu from "./UserMenu"
-
-function Navbar() {
- const display = useBreakpointValue({ base: "none", md: "flex" })
-
- return (
-
-
-
-
-
-
-
-
- )
-}
-
-export default Navbar
diff --git a/frontend/src/components/Common/NotFound.tsx b/frontend/src/components/Common/NotFound.tsx
deleted file mode 100644
index 9e4f18528e..0000000000
--- a/frontend/src/components/Common/NotFound.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import { Button, Center, Flex, Text } from "@chakra-ui/react"
-import { Link } from "@tanstack/react-router"
-
-const NotFound = () => {
- return (
-
-
-
-
- 404
-
-
- Oops!
-
-
-
-
-
- The page you are looking for was not found.
-
-
-
-
- Go Back
-
-
-
-
- )
-}
-
-export default NotFound
diff --git a/frontend/src/components/Common/Sidebar.tsx b/frontend/src/components/Common/Sidebar.tsx
deleted file mode 100644
index 8437634f47..0000000000
--- a/frontend/src/components/Common/Sidebar.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-import { Box, Flex, IconButton, Text } from "@chakra-ui/react"
-import { useQueryClient } from "@tanstack/react-query"
-import { useState } from "react"
-import { FaBars } from "react-icons/fa"
-import { FiLogOut } from "react-icons/fi"
-
-import type { UserPublic } from "@/client"
-import useAuth from "@/hooks/useAuth"
-import {
- DrawerBackdrop,
- DrawerBody,
- DrawerCloseTrigger,
- DrawerContent,
- DrawerRoot,
- DrawerTrigger,
-} from "../ui/drawer"
-import SidebarItems from "./SidebarItems"
-
-const Sidebar = () => {
- const queryClient = useQueryClient()
- const currentUser = queryClient.getQueryData(["currentUser"])
- const { logout } = useAuth()
- const [open, setOpen] = useState(false)
-
- return (
- <>
- {/* Mobile */}
- setOpen(e.open)}
- >
-
-
-
-
-
-
-
-
-
-
-
- setOpen(false)} />
- {
- logout()
- }}
- alignItems="center"
- gap={4}
- px={4}
- py={2}
- >
-
- Log Out
-
-
- {currentUser?.email && (
-
- Logged in as: {currentUser.email}
-
- )}
-
-
-
-
-
-
- {/* Desktop */}
-
-
-
-
-
-
- >
- )
-}
-
-export default Sidebar
diff --git a/frontend/src/components/Common/SidebarItems.tsx b/frontend/src/components/Common/SidebarItems.tsx
deleted file mode 100644
index 13f71495f5..0000000000
--- a/frontend/src/components/Common/SidebarItems.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import { Box, Flex, Icon, Text } from "@chakra-ui/react"
-import { useQueryClient } from "@tanstack/react-query"
-import { Link as RouterLink } from "@tanstack/react-router"
-import { FiBriefcase, FiHome, FiSettings, FiUsers } from "react-icons/fi"
-import type { IconType } from "react-icons/lib"
-
-import type { UserPublic } from "@/client"
-
-const items = [
- { icon: FiHome, title: "Dashboard", path: "/" },
- { icon: FiBriefcase, title: "Items", path: "/items" },
- { icon: FiSettings, title: "User Settings", path: "/settings" },
-]
-
-interface SidebarItemsProps {
- onClose?: () => void
-}
-
-interface Item {
- icon: IconType
- title: string
- path: string
-}
-
-const SidebarItems = ({ onClose }: SidebarItemsProps) => {
- const queryClient = useQueryClient()
- const currentUser = queryClient.getQueryData(["currentUser"])
-
- const finalItems: Item[] = currentUser?.is_superuser
- ? [...items, { icon: FiUsers, title: "Admin", path: "/admin" }]
- : items
-
- const listItems = finalItems.map(({ icon, title, path }) => (
-
-
-
- {title}
-
-
- ))
-
- return (
- <>
-
- Menu
-
- {listItems}
- >
- )
-}
-
-export default SidebarItems
diff --git a/frontend/src/components/Common/UserActionsMenu.tsx b/frontend/src/components/Common/UserActionsMenu.tsx
deleted file mode 100644
index 882ecb4dd8..0000000000
--- a/frontend/src/components/Common/UserActionsMenu.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { IconButton } from "@chakra-ui/react"
-import { BsThreeDotsVertical } from "react-icons/bs"
-import type { UserPublic } from "@/client"
-import DeleteUser from "../Admin/DeleteUser"
-import EditUser from "../Admin/EditUser"
-import { MenuContent, MenuRoot, MenuTrigger } from "../ui/menu"
-
-interface UserActionsMenuProps {
- user: UserPublic
- disabled?: boolean
-}
-
-export const UserActionsMenu = ({ user, disabled }: UserActionsMenuProps) => {
- return (
-
-
-
-
-
-
-
-
-
-
-
- )
-}
diff --git a/frontend/src/components/Common/UserMenu.tsx b/frontend/src/components/Common/UserMenu.tsx
deleted file mode 100644
index 9db1df944f..0000000000
--- a/frontend/src/components/Common/UserMenu.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import { Box, Button, Flex, Text } from "@chakra-ui/react"
-import { Link } from "@tanstack/react-router"
-import { FaUserAstronaut } from "react-icons/fa"
-import { FiLogOut, FiUser } from "react-icons/fi"
-
-import useAuth from "@/hooks/useAuth"
-import { MenuContent, MenuItem, MenuRoot, MenuTrigger } from "../ui/menu"
-
-const UserMenu = () => {
- const { user, logout } = useAuth()
-
- const handleLogout = async () => {
- logout()
- }
-
- return (
- <>
- {/* Desktop */}
-
-
-
-
-
- {user?.full_name || "User"}
-
-
-
-
-
-
-
- My Profile
-
-
-
-
-
- Log Out
-
-
-
-
- >
- )
-}
-
-export default UserMenu
diff --git a/frontend/src/components/Items/AddItem.tsx b/frontend/src/components/Items/AddItem.tsx
deleted file mode 100644
index 5a377b952a..0000000000
--- a/frontend/src/components/Items/AddItem.tsx
+++ /dev/null
@@ -1,143 +0,0 @@
-import {
- Button,
- DialogActionTrigger,
- DialogTitle,
- Input,
- Text,
- VStack,
-} from "@chakra-ui/react"
-import { useMutation, useQueryClient } from "@tanstack/react-query"
-import { useState } from "react"
-import { type SubmitHandler, useForm } from "react-hook-form"
-import { FaPlus } from "react-icons/fa"
-
-import { type ItemCreate, ItemsService } from "@/client"
-import type { ApiError } from "@/client/core/ApiError"
-import useCustomToast from "@/hooks/useCustomToast"
-import { handleError } from "@/utils"
-import {
- DialogBody,
- DialogCloseTrigger,
- DialogContent,
- DialogFooter,
- DialogHeader,
- DialogRoot,
- DialogTrigger,
-} from "../ui/dialog"
-import { Field } from "../ui/field"
-
-const AddItem = () => {
- const [isOpen, setIsOpen] = useState(false)
- const queryClient = useQueryClient()
- const { showSuccessToast } = useCustomToast()
- const {
- register,
- handleSubmit,
- reset,
- formState: { errors, isValid, isSubmitting },
- } = useForm({
- mode: "onBlur",
- criteriaMode: "all",
- defaultValues: {
- title: "",
- description: "",
- },
- })
-
- const mutation = useMutation({
- mutationFn: (data: ItemCreate) =>
- ItemsService.createItem({ requestBody: data }),
- onSuccess: () => {
- showSuccessToast("Item created successfully.")
- reset()
- setIsOpen(false)
- },
- onError: (err: ApiError) => {
- handleError(err)
- },
- onSettled: () => {
- queryClient.invalidateQueries({ queryKey: ["items"] })
- },
- })
-
- const onSubmit: SubmitHandler = (data) => {
- mutation.mutate(data)
- }
-
- return (
- setIsOpen(open)}
- >
-
-
-
- Add Item
-
-
-
-
-
-
-
- )
-}
-
-export default AddItem
diff --git a/frontend/src/components/Items/DeleteItem.tsx b/frontend/src/components/Items/DeleteItem.tsx
deleted file mode 100644
index ea3b7fdc7e..0000000000
--- a/frontend/src/components/Items/DeleteItem.tsx
+++ /dev/null
@@ -1,104 +0,0 @@
-import { Button, DialogTitle, Text } from "@chakra-ui/react"
-import { useMutation, useQueryClient } from "@tanstack/react-query"
-import { useState } from "react"
-import { useForm } from "react-hook-form"
-import { FiTrash2 } from "react-icons/fi"
-
-import { ItemsService } from "@/client"
-import {
- DialogActionTrigger,
- DialogBody,
- DialogCloseTrigger,
- DialogContent,
- DialogFooter,
- DialogHeader,
- DialogRoot,
- DialogTrigger,
-} from "@/components/ui/dialog"
-import useCustomToast from "@/hooks/useCustomToast"
-
-const DeleteItem = ({ id }: { id: string }) => {
- const [isOpen, setIsOpen] = useState(false)
- const queryClient = useQueryClient()
- const { showSuccessToast, showErrorToast } = useCustomToast()
- const {
- handleSubmit,
- formState: { isSubmitting },
- } = useForm()
-
- const deleteItem = async (id: string) => {
- await ItemsService.deleteItem({ id: id })
- }
-
- const mutation = useMutation({
- mutationFn: deleteItem,
- onSuccess: () => {
- showSuccessToast("The item was deleted successfully")
- setIsOpen(false)
- },
- onError: () => {
- showErrorToast("An error occurred while deleting the item")
- },
- onSettled: () => {
- queryClient.invalidateQueries()
- },
- })
-
- const onSubmit = async () => {
- mutation.mutate(id)
- }
-
- return (
- setIsOpen(open)}
- >
-
-
-
- Delete Item
-
-
-
-
-
-
-
- )
-}
-
-export default DeleteItem
diff --git a/frontend/src/components/Items/EditItem.tsx b/frontend/src/components/Items/EditItem.tsx
deleted file mode 100644
index e23c92b422..0000000000
--- a/frontend/src/components/Items/EditItem.tsx
+++ /dev/null
@@ -1,149 +0,0 @@
-import {
- Button,
- ButtonGroup,
- DialogActionTrigger,
- Input,
- Text,
- VStack,
-} from "@chakra-ui/react"
-import { useMutation, useQueryClient } from "@tanstack/react-query"
-import { useState } from "react"
-import { type SubmitHandler, useForm } from "react-hook-form"
-import { FaExchangeAlt } from "react-icons/fa"
-
-import { type ApiError, type ItemPublic, ItemsService } from "@/client"
-import useCustomToast from "@/hooks/useCustomToast"
-import { handleError } from "@/utils"
-import {
- DialogBody,
- DialogCloseTrigger,
- DialogContent,
- DialogFooter,
- DialogHeader,
- DialogRoot,
- DialogTitle,
- DialogTrigger,
-} from "../ui/dialog"
-import { Field } from "../ui/field"
-
-interface EditItemProps {
- item: ItemPublic
-}
-
-interface ItemUpdateForm {
- title: string
- description?: string
-}
-
-const EditItem = ({ item }: EditItemProps) => {
- const [isOpen, setIsOpen] = useState(false)
- const queryClient = useQueryClient()
- const { showSuccessToast } = useCustomToast()
- const {
- register,
- handleSubmit,
- reset,
- formState: { errors, isSubmitting },
- } = useForm({
- mode: "onBlur",
- criteriaMode: "all",
- defaultValues: {
- ...item,
- description: item.description ?? undefined,
- },
- })
-
- const mutation = useMutation({
- mutationFn: (data: ItemUpdateForm) =>
- ItemsService.updateItem({ id: item.id, requestBody: data }),
- onSuccess: () => {
- showSuccessToast("Item updated successfully.")
- reset()
- setIsOpen(false)
- },
- onError: (err: ApiError) => {
- handleError(err)
- },
- onSettled: () => {
- queryClient.invalidateQueries({ queryKey: ["items"] })
- },
- })
-
- const onSubmit: SubmitHandler = async (data) => {
- mutation.mutate(data)
- }
-
- return (
- setIsOpen(open)}
- >
-
-
-
- Edit Item
-
-
-
-
-
-
-
- )
-}
-
-export default EditItem
diff --git a/frontend/src/components/Pending/PendingItems.tsx b/frontend/src/components/Pending/PendingItems.tsx
deleted file mode 100644
index 0afc50477d..0000000000
--- a/frontend/src/components/Pending/PendingItems.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { Table } from "@chakra-ui/react"
-import { SkeletonText } from "../ui/skeleton"
-
-const PendingItems = () => (
-
-
-
- ID
- Title
- Description
- Actions
-
-
-
- {[...Array(5)].map((_, index) => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ))}
-
-
-)
-
-export default PendingItems
diff --git a/frontend/src/components/Pending/PendingUsers.tsx b/frontend/src/components/Pending/PendingUsers.tsx
deleted file mode 100644
index c7ac1c73ec..0000000000
--- a/frontend/src/components/Pending/PendingUsers.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { Table } from "@chakra-ui/react"
-import { SkeletonText } from "../ui/skeleton"
-
-const PendingUsers = () => (
-
-
-
- Full name
- Email
- Role
- Status
- Actions
-
-
-
- {[...Array(5)].map((_, index) => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ))}
-
-
-)
-
-export default PendingUsers
diff --git a/frontend/src/components/UserSettings/Appearance.tsx b/frontend/src/components/UserSettings/Appearance.tsx
deleted file mode 100644
index 679f424a9d..0000000000
--- a/frontend/src/components/UserSettings/Appearance.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { Container, Heading, Stack } from "@chakra-ui/react"
-import { useTheme } from "next-themes"
-
-import { Radio, RadioGroup } from "@/components/ui/radio"
-
-const Appearance = () => {
- const { theme, setTheme } = useTheme()
-
- return (
-
-
- Appearance
-
-
- setTheme(e.value ?? "system")}
- value={theme}
- colorPalette="teal"
- >
-
- System
- Light Mode
- Dark Mode
-
-
-
- )
-}
-export default Appearance
diff --git a/frontend/src/components/UserSettings/ChangePassword.tsx b/frontend/src/components/UserSettings/ChangePassword.tsx
deleted file mode 100644
index 8cd0b541b4..0000000000
--- a/frontend/src/components/UserSettings/ChangePassword.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-import { Box, Button, Container, Heading, VStack } from "@chakra-ui/react"
-import { useMutation } from "@tanstack/react-query"
-import { type SubmitHandler, useForm } from "react-hook-form"
-import { FiLock } from "react-icons/fi"
-
-import { type ApiError, type UpdatePassword, UsersService } from "@/client"
-import useCustomToast from "@/hooks/useCustomToast"
-import { confirmPasswordRules, handleError, passwordRules } from "@/utils"
-import { PasswordInput } from "../ui/password-input"
-
-interface UpdatePasswordForm extends UpdatePassword {
- confirm_password: string
-}
-
-const ChangePassword = () => {
- const { showSuccessToast } = useCustomToast()
- const {
- register,
- handleSubmit,
- reset,
- getValues,
- formState: { errors, isSubmitting },
- } = useForm({
- mode: "onBlur",
- criteriaMode: "all",
- })
-
- const mutation = useMutation({
- mutationFn: (data: UpdatePassword) =>
- UsersService.updatePasswordMe({ requestBody: data }),
- onSuccess: () => {
- showSuccessToast("Password updated successfully.")
- reset()
- },
- onError: (err: ApiError) => {
- handleError(err)
- },
- })
-
- const onSubmit: SubmitHandler = async (data) => {
- mutation.mutate(data)
- }
-
- return (
-
-
- Change Password
-
-
-
- }
- {...register("current_password", passwordRules())}
- placeholder="Current Password"
- errors={errors}
- />
- }
- {...register("new_password", passwordRules())}
- placeholder="New Password"
- errors={errors}
- />
- }
- {...register("confirm_password", confirmPasswordRules(getValues))}
- placeholder="Confirm Password"
- errors={errors}
- />
-
-
- Save
-
-
-
- )
-}
-export default ChangePassword
diff --git a/frontend/src/components/UserSettings/DeleteAccount.tsx b/frontend/src/components/UserSettings/DeleteAccount.tsx
deleted file mode 100644
index 5800c98fe1..0000000000
--- a/frontend/src/components/UserSettings/DeleteAccount.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Container, Heading, Text } from "@chakra-ui/react"
-
-import DeleteConfirmation from "./DeleteConfirmation"
-
-const DeleteAccount = () => {
- return (
-
-
- Delete Account
-
-
- Permanently delete your data and everything associated with your
- account.
-
-
-
- )
-}
-export default DeleteAccount
diff --git a/frontend/src/components/UserSettings/DeleteConfirmation.tsx b/frontend/src/components/UserSettings/DeleteConfirmation.tsx
deleted file mode 100644
index 3885a570d7..0000000000
--- a/frontend/src/components/UserSettings/DeleteConfirmation.tsx
+++ /dev/null
@@ -1,107 +0,0 @@
-import { Button, ButtonGroup, Text } from "@chakra-ui/react"
-import { useMutation, useQueryClient } from "@tanstack/react-query"
-import { useState } from "react"
-import { useForm } from "react-hook-form"
-
-import { type ApiError, UsersService } from "@/client"
-import {
- DialogActionTrigger,
- DialogBody,
- DialogCloseTrigger,
- DialogContent,
- DialogFooter,
- DialogHeader,
- DialogRoot,
- DialogTitle,
- DialogTrigger,
-} from "@/components/ui/dialog"
-import useAuth from "@/hooks/useAuth"
-import useCustomToast from "@/hooks/useCustomToast"
-import { handleError } from "@/utils"
-
-const DeleteConfirmation = () => {
- const [isOpen, setIsOpen] = useState(false)
- const queryClient = useQueryClient()
- const { showSuccessToast } = useCustomToast()
- const {
- handleSubmit,
- formState: { isSubmitting },
- } = useForm()
- const { logout } = useAuth()
-
- const mutation = useMutation({
- mutationFn: () => UsersService.deleteUserMe(),
- onSuccess: () => {
- showSuccessToast("Your account has been successfully deleted")
- setIsOpen(false)
- logout()
- },
- onError: (err: ApiError) => {
- handleError(err)
- },
- onSettled: () => {
- queryClient.invalidateQueries({ queryKey: ["currentUser"] })
- },
- })
-
- const onSubmit = async () => {
- mutation.mutate()
- }
-
- return (
- setIsOpen(open)}
- >
-
-
- Delete
-
-
-
-
-
-
-
- )
-}
-
-export default DeleteConfirmation
diff --git a/frontend/src/components/UserSettings/UserInformation.tsx b/frontend/src/components/UserSettings/UserInformation.tsx
deleted file mode 100644
index c9e64693c1..0000000000
--- a/frontend/src/components/UserSettings/UserInformation.tsx
+++ /dev/null
@@ -1,148 +0,0 @@
-import {
- Box,
- Button,
- Container,
- Flex,
- Heading,
- Input,
- Text,
-} from "@chakra-ui/react"
-import { useMutation, useQueryClient } from "@tanstack/react-query"
-import { useState } from "react"
-import { type SubmitHandler, useForm } from "react-hook-form"
-
-import {
- type ApiError,
- type UserPublic,
- UsersService,
- type UserUpdateMe,
-} from "@/client"
-import useAuth from "@/hooks/useAuth"
-import useCustomToast from "@/hooks/useCustomToast"
-import { emailPattern, handleError } from "@/utils"
-import { Field } from "../ui/field"
-
-const UserInformation = () => {
- const queryClient = useQueryClient()
- const { showSuccessToast } = useCustomToast()
- const [editMode, setEditMode] = useState(false)
- const { user: currentUser } = useAuth()
- const {
- register,
- handleSubmit,
- reset,
- getValues,
- formState: { isSubmitting, errors, isDirty },
- } = useForm({
- mode: "onBlur",
- criteriaMode: "all",
- defaultValues: {
- full_name: currentUser?.full_name,
- email: currentUser?.email,
- },
- })
-
- const toggleEditMode = () => {
- setEditMode(!editMode)
- }
-
- const mutation = useMutation({
- mutationFn: (data: UserUpdateMe) =>
- UsersService.updateUserMe({ requestBody: data }),
- onSuccess: () => {
- showSuccessToast("User updated successfully.")
- },
- onError: (err: ApiError) => {
- handleError(err)
- },
- onSettled: () => {
- queryClient.invalidateQueries()
- },
- })
-
- const onSubmit: SubmitHandler = async (data) => {
- mutation.mutate(data)
- }
-
- const onCancel = () => {
- reset()
- toggleEditMode()
- }
-
- return (
-
-
- User Information
-
-
-
- {editMode ? (
-
- ) : (
-
- {currentUser?.full_name || "N/A"}
-
- )}
-
-
- {editMode ? (
-
- ) : (
-
- {currentUser?.email}
-
- )}
-
-
-
- {editMode ? "Save" : "Edit"}
-
- {editMode && (
-
- Cancel
-
- )}
-
-
-
- )
-}
-
-export default UserInformation
diff --git a/frontend/src/components/auth/SignInForm.tsx b/frontend/src/components/auth/SignInForm.tsx
new file mode 100644
index 0000000000..7ef8c87abc
--- /dev/null
+++ b/frontend/src/components/auth/SignInForm.tsx
@@ -0,0 +1,154 @@
+"use client";
+import Checkbox from "@/components/form/input/Checkbox";
+import Input from "@/components/form/input/InputField";
+import Label from "@/components/form/Label";
+import Button from "@/components/ui/button/Button";
+import { ChevronLeftIcon, EyeCloseIcon, EyeIcon } from "@/icons";
+import Link from "next/link";
+import React, { useState } from "react";
+
+export default function SignInForm() {
+ const [showPassword, setShowPassword] = useState(false);
+ const [isChecked, setIsChecked] = useState(false);
+ return (
+
+
+
+
+ Back to dashboard
+
+
+
+
+
+
+ Sign In
+
+
+ Enter your email and password to sign in!
+
+
+
+
+
+
+
+
+
+
+
+ Sign in with Google
+
+
+
+
+
+ Sign in with X
+
+
+
+
+
+
+
+ Don't have an account? {""}
+
+ Sign Up
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/auth/SignUpForm.tsx b/frontend/src/components/auth/SignUpForm.tsx
new file mode 100644
index 0000000000..520e243dca
--- /dev/null
+++ b/frontend/src/components/auth/SignUpForm.tsx
@@ -0,0 +1,191 @@
+"use client";
+import Checkbox from "@/components/form/input/Checkbox";
+import Input from "@/components/form/input/InputField";
+import Label from "@/components/form/Label";
+import { ChevronLeftIcon, EyeCloseIcon, EyeIcon } from "@/icons";
+import Link from "next/link";
+import React, { useState } from "react";
+
+export default function SignUpForm() {
+ const [showPassword, setShowPassword] = useState(false);
+ const [isChecked, setIsChecked] = useState(false);
+ return (
+
+
+
+
+ Back to dashboard
+
+
+
+
+
+
+ Sign Up
+
+
+ Enter your email and password to sign up!
+
+
+
+
+
+
+
+
+
+
+
+ Sign up with Google
+
+
+
+
+
+ Sign up with X
+
+
+
+
+
+
+
+ Already have an account?
+
+ Sign In
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/calendar/Calendar.tsx b/frontend/src/components/calendar/Calendar.tsx
new file mode 100644
index 0000000000..2dc6f35a4d
--- /dev/null
+++ b/frontend/src/components/calendar/Calendar.tsx
@@ -0,0 +1,283 @@
+"use client";
+import React, { useState, useRef, useEffect } from "react";
+import FullCalendar from "@fullcalendar/react";
+import dayGridPlugin from "@fullcalendar/daygrid";
+import timeGridPlugin from "@fullcalendar/timegrid";
+import interactionPlugin from "@fullcalendar/interaction";
+import {
+ EventInput,
+ DateSelectArg,
+ EventClickArg,
+ EventContentArg,
+} from "@fullcalendar/core";
+import { useModal } from "@/hooks/useModal";
+import { Modal } from "@/components/ui/modal";
+
+interface CalendarEvent extends EventInput {
+ extendedProps: {
+ calendar: string;
+ };
+}
+
+const Calendar: React.FC = () => {
+ const [selectedEvent, setSelectedEvent] = useState(
+ null
+ );
+ const [eventTitle, setEventTitle] = useState("");
+ const [eventStartDate, setEventStartDate] = useState("");
+ const [eventEndDate, setEventEndDate] = useState("");
+ const [eventLevel, setEventLevel] = useState("");
+ const [events, setEvents] = useState([]);
+ const calendarRef = useRef(null);
+ const { isOpen, openModal, closeModal } = useModal();
+
+ const calendarsEvents = {
+ Danger: "danger",
+ Success: "success",
+ Primary: "primary",
+ Warning: "warning",
+ };
+
+ useEffect(() => {
+ // Initialize with some events
+ setEvents([
+ {
+ id: "1",
+ title: "Event Conf.",
+ start: new Date().toISOString().split("T")[0],
+ extendedProps: { calendar: "Danger" },
+ },
+ {
+ id: "2",
+ title: "Meeting",
+ start: new Date(Date.now() + 86400000).toISOString().split("T")[0],
+ extendedProps: { calendar: "Success" },
+ },
+ {
+ id: "3",
+ title: "Workshop",
+ start: new Date(Date.now() + 172800000).toISOString().split("T")[0],
+ end: new Date(Date.now() + 259200000).toISOString().split("T")[0],
+ extendedProps: { calendar: "Primary" },
+ },
+ ]);
+ }, []);
+
+ const handleDateSelect = (selectInfo: DateSelectArg) => {
+ resetModalFields();
+ setEventStartDate(selectInfo.startStr);
+ setEventEndDate(selectInfo.endStr || selectInfo.startStr);
+ openModal();
+ };
+
+ const handleEventClick = (clickInfo: EventClickArg) => {
+ const event = clickInfo.event;
+ setSelectedEvent(event as unknown as CalendarEvent);
+ setEventTitle(event.title);
+ setEventStartDate(event.start?.toISOString().split("T")[0] || "");
+ setEventEndDate(event.end?.toISOString().split("T")[0] || "");
+ setEventLevel(event.extendedProps.calendar);
+ openModal();
+ };
+
+ const handleAddOrUpdateEvent = () => {
+ if (selectedEvent) {
+ // Update existing event
+ setEvents((prevEvents) =>
+ prevEvents.map((event) =>
+ event.id === selectedEvent.id
+ ? {
+ ...event,
+ title: eventTitle,
+ start: eventStartDate,
+ end: eventEndDate,
+ extendedProps: { calendar: eventLevel },
+ }
+ : event
+ )
+ );
+ } else {
+ // Add new event
+ const newEvent: CalendarEvent = {
+ id: Date.now().toString(),
+ title: eventTitle,
+ start: eventStartDate,
+ end: eventEndDate,
+ allDay: true,
+ extendedProps: { calendar: eventLevel },
+ };
+ setEvents((prevEvents) => [...prevEvents, newEvent]);
+ }
+ closeModal();
+ resetModalFields();
+ };
+
+ const resetModalFields = () => {
+ setEventTitle("");
+ setEventStartDate("");
+ setEventEndDate("");
+ setEventLevel("");
+ setSelectedEvent(null);
+ };
+
+ return (
+
+
+
+
+
+
+
+
+ {selectedEvent ? "Edit Event" : "Add Event"}
+
+
+ Plan your next big moment: schedule or edit an event to stay on
+ track
+
+
+
+
+
+
+ Event Title
+
+ setEventTitle(e.target.value)}
+ className="dark:bg-dark-900 h-11 w-full rounded-lg border border-gray-300 bg-transparent px-4 py-2.5 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800"
+ />
+
+
+
+
+ Event Color
+
+
+ {Object.entries(calendarsEvents).map(([key, value]) => (
+
+
+
+
+ setEventLevel(key)}
+ />
+
+
+
+
+ {key}
+
+
+
+ ))}
+
+
+
+
+
+ Enter Start Date
+
+
+ setEventStartDate(e.target.value)}
+ className="dark:bg-dark-900 h-11 w-full appearance-none rounded-lg border border-gray-300 bg-transparent bg-none px-4 py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800"
+ />
+
+
+
+
+
+ Enter End Date
+
+
+ setEventEndDate(e.target.value)}
+ className="dark:bg-dark-900 h-11 w-full appearance-none rounded-lg border border-gray-300 bg-transparent bg-none px-4 py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800"
+ />
+
+
+
+
+
+ Close
+
+
+ {selectedEvent ? "Update Changes" : "Add Event"}
+
+
+
+
+
+ );
+};
+
+const renderEventContent = (eventInfo: EventContentArg) => {
+ const colorClass = `fc-bg-${eventInfo.event.extendedProps.calendar.toLowerCase()}`;
+ return (
+
+
+
{eventInfo.timeText}
+
{eventInfo.event.title}
+
+ );
+};
+
+export default Calendar;
diff --git a/frontend/src/components/charts/bar/BarChartOne.tsx b/frontend/src/components/charts/bar/BarChartOne.tsx
new file mode 100644
index 0000000000..e373a7a944
--- /dev/null
+++ b/frontend/src/components/charts/bar/BarChartOne.tsx
@@ -0,0 +1,110 @@
+"use client";
+import React from "react";
+
+import { ApexOptions } from "apexcharts";
+
+import dynamic from "next/dynamic";
+// Dynamically import the ReactApexChart component
+const ReactApexChart = dynamic(() => import("react-apexcharts"), {
+ ssr: false,
+});
+
+export default function BarChartOne() {
+ const options: ApexOptions = {
+ colors: ["#465fff"],
+ chart: {
+ fontFamily: "Outfit, sans-serif",
+ type: "bar",
+ height: 180,
+ toolbar: {
+ show: false,
+ },
+ },
+ plotOptions: {
+ bar: {
+ horizontal: false,
+ columnWidth: "39%",
+ borderRadius: 5,
+ borderRadiusApplication: "end",
+ },
+ },
+ dataLabels: {
+ enabled: false,
+ },
+ stroke: {
+ show: true,
+ width: 4,
+ colors: ["transparent"],
+ },
+ xaxis: {
+ categories: [
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec",
+ ],
+ axisBorder: {
+ show: false,
+ },
+ axisTicks: {
+ show: false,
+ },
+ },
+ legend: {
+ show: true,
+ position: "top",
+ horizontalAlign: "left",
+ fontFamily: "Outfit",
+ },
+ yaxis: {
+ title: {
+ text: undefined,
+ },
+ },
+ grid: {
+ yaxis: {
+ lines: {
+ show: true,
+ },
+ },
+ },
+ fill: {
+ opacity: 1,
+ },
+
+ tooltip: {
+ x: {
+ show: false,
+ },
+ y: {
+ formatter: (val: number) => `${val}`,
+ },
+ },
+ };
+ const series = [
+ {
+ name: "Sales",
+ data: [168, 385, 201, 298, 187, 195, 291, 110, 215, 390, 280, 112],
+ },
+ ];
+ return (
+
+ );
+}
diff --git a/frontend/src/components/charts/line/LineChartOne.tsx b/frontend/src/components/charts/line/LineChartOne.tsx
new file mode 100644
index 0000000000..94d39b36eb
--- /dev/null
+++ b/frontend/src/components/charts/line/LineChartOne.tsx
@@ -0,0 +1,133 @@
+"use client";
+import React from "react";
+
+import { ApexOptions } from "apexcharts";
+
+import dynamic from "next/dynamic";
+// Dynamically import the ReactApexChart component
+const ReactApexChart = dynamic(() => import("react-apexcharts"), {
+ ssr: false,
+});
+
+export default function LineChartOne() {
+ const options: ApexOptions = {
+ legend: {
+ show: false, // Hide legend
+ position: "top",
+ horizontalAlign: "left",
+ },
+ colors: ["#465FFF", "#9CB9FF"], // Define line colors
+ chart: {
+ fontFamily: "Outfit, sans-serif",
+ height: 310,
+ type: "line", // Set the chart type to 'line'
+ toolbar: {
+ show: false, // Hide chart toolbar
+ },
+ },
+ stroke: {
+ curve: "straight", // Define the line style (straight, smooth, or step)
+ width: [2, 2], // Line width for each dataset
+ },
+
+ fill: {
+ type: "gradient",
+ gradient: {
+ opacityFrom: 0.55,
+ opacityTo: 0,
+ },
+ },
+ markers: {
+ size: 0, // Size of the marker points
+ strokeColors: "#fff", // Marker border color
+ strokeWidth: 2,
+ hover: {
+ size: 6, // Marker size on hover
+ },
+ },
+ grid: {
+ xaxis: {
+ lines: {
+ show: false, // Hide grid lines on x-axis
+ },
+ },
+ yaxis: {
+ lines: {
+ show: true, // Show grid lines on y-axis
+ },
+ },
+ },
+ dataLabels: {
+ enabled: false, // Disable data labels
+ },
+ tooltip: {
+ enabled: true, // Enable tooltip
+ x: {
+ format: "dd MMM yyyy", // Format for x-axis tooltip
+ },
+ },
+ xaxis: {
+ type: "category", // Category-based x-axis
+ categories: [
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec",
+ ],
+ axisBorder: {
+ show: false, // Hide x-axis border
+ },
+ axisTicks: {
+ show: false, // Hide x-axis ticks
+ },
+ tooltip: {
+ enabled: false, // Disable tooltip for x-axis points
+ },
+ },
+ yaxis: {
+ labels: {
+ style: {
+ fontSize: "12px", // Adjust font size for y-axis labels
+ colors: ["#6B7280"], // Color of the labels
+ },
+ },
+ title: {
+ text: "", // Remove y-axis title
+ style: {
+ fontSize: "0px",
+ },
+ },
+ },
+ };
+
+ const series = [
+ {
+ name: "Sales",
+ data: [180, 190, 170, 160, 175, 165, 170, 205, 230, 210, 240, 235],
+ },
+ {
+ name: "Revenue",
+ data: [40, 30, 50, 40, 55, 40, 70, 100, 110, 120, 150, 140],
+ },
+ ];
+ return (
+
+ );
+}
diff --git a/frontend/src/components/common/ChartTab.tsx b/frontend/src/components/common/ChartTab.tsx
new file mode 100644
index 0000000000..d2f5820d8e
--- /dev/null
+++ b/frontend/src/components/common/ChartTab.tsx
@@ -0,0 +1,45 @@
+import React, { useState } from "react";
+
+const ChartTab: React.FC = () => {
+ const [selected, setSelected] = useState<
+ "optionOne" | "optionTwo" | "optionThree"
+ >("optionOne");
+
+ const getButtonClass = (option: "optionOne" | "optionTwo" | "optionThree") =>
+ selected === option
+ ? "shadow-theme-xs text-gray-900 dark:text-white bg-white dark:bg-gray-800"
+ : "text-gray-500 dark:text-gray-400";
+
+ return (
+
+ setSelected("optionOne")}
+ className={`px-3 py-2 font-medium w-full rounded-md text-theme-sm hover:text-gray-900 dark:hover:text-white ${getButtonClass(
+ "optionOne"
+ )}`}
+ >
+ Monthly
+
+
+ setSelected("optionTwo")}
+ className={`px-3 py-2 font-medium w-full rounded-md text-theme-sm hover:text-gray-900 dark:hover:text-white ${getButtonClass(
+ "optionTwo"
+ )}`}
+ >
+ Quarterly
+
+
+ setSelected("optionThree")}
+ className={`px-3 py-2 font-medium w-full rounded-md text-theme-sm hover:text-gray-900 dark:hover:text-white ${getButtonClass(
+ "optionThree"
+ )}`}
+ >
+ Annually
+
+
+ );
+};
+
+export default ChartTab;
diff --git a/frontend/src/components/common/ComponentCard.tsx b/frontend/src/components/common/ComponentCard.tsx
new file mode 100644
index 0000000000..d0afa0254a
--- /dev/null
+++ b/frontend/src/components/common/ComponentCard.tsx
@@ -0,0 +1,40 @@
+import React from "react";
+
+interface ComponentCardProps {
+ title: string;
+ children: React.ReactNode;
+ className?: string; // Additional custom classes for styling
+ desc?: string; // Description text
+}
+
+const ComponentCard: React.FC = ({
+ title,
+ children,
+ className = "",
+ desc = "",
+}) => {
+ return (
+
+ {/* Card Header */}
+
+
+ {title}
+
+ {desc && (
+
+ {desc}
+
+ )}
+
+
+ {/* Card Body */}
+
+
+ );
+};
+
+export default ComponentCard;
diff --git a/frontend/src/components/common/GridShape.tsx b/frontend/src/components/common/GridShape.tsx
new file mode 100644
index 0000000000..47a3c1e54b
--- /dev/null
+++ b/frontend/src/components/common/GridShape.tsx
@@ -0,0 +1,25 @@
+import Image from "next/image";
+import React from "react";
+
+export default function GridShape() {
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/frontend/src/components/common/PageBreadCrumb.tsx b/frontend/src/components/common/PageBreadCrumb.tsx
new file mode 100644
index 0000000000..377ed99a97
--- /dev/null
+++ b/frontend/src/components/common/PageBreadCrumb.tsx
@@ -0,0 +1,52 @@
+import Link from "next/link";
+import React from "react";
+
+interface BreadcrumbProps {
+ pageTitle: string;
+}
+
+const PageBreadcrumb: React.FC = ({ pageTitle }) => {
+ return (
+
+
+ {pageTitle}
+
+
+
+
+
+ Home
+
+
+
+
+
+
+ {pageTitle}
+
+
+
+
+ );
+};
+
+export default PageBreadcrumb;
diff --git a/frontend/src/components/common/ThemeToggleButton.tsx b/frontend/src/components/common/ThemeToggleButton.tsx
new file mode 100644
index 0000000000..c30456b0b4
--- /dev/null
+++ b/frontend/src/components/common/ThemeToggleButton.tsx
@@ -0,0 +1,42 @@
+import React from "react";
+import { useTheme } from "../../context/ThemeContext";
+
+export const ThemeToggleButton: React.FC = () => {
+ const { toggleTheme } = useTheme();
+
+ return (
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/frontend/src/components/common/ThemeTogglerTwo.tsx b/frontend/src/components/common/ThemeTogglerTwo.tsx
new file mode 100644
index 0000000000..05f3d47adf
--- /dev/null
+++ b/frontend/src/components/common/ThemeTogglerTwo.tsx
@@ -0,0 +1,42 @@
+"use client";
+import { useTheme } from "@/context/ThemeContext";
+import React from "react";
+
+export default function ThemeTogglerTwo() {
+ const { toggleTheme } = useTheme();
+ return (
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/ecommerce/CountryMap.tsx b/frontend/src/components/ecommerce/CountryMap.tsx
new file mode 100644
index 0000000000..589df376eb
--- /dev/null
+++ b/frontend/src/components/ecommerce/CountryMap.tsx
@@ -0,0 +1,123 @@
+import React from "react";
+// import { VectorMap } from "@react-jvectormap/core";
+import { worldMill } from "@react-jvectormap/world";
+import dynamic from "next/dynamic";
+
+const VectorMap = dynamic(
+ () => import("@react-jvectormap/core").then((mod) => mod.VectorMap),
+ { ssr: false }
+);
+
+// Define the component props
+interface CountryMapProps {
+ mapColor?: string;
+}
+
+type MarkerStyle = {
+ initial: {
+ fill: string;
+ r: number; // Radius for markers
+ };
+};
+
+type Marker = {
+ latLng: [number, number];
+ name: string;
+ style?: {
+ fill: string;
+ borderWidth: number;
+ borderColor: string;
+ stroke?: string;
+ strokeOpacity?: number;
+ };
+};
+
+const CountryMap: React.FC = ({ mapColor }) => {
+ return (
+
+ );
+};
+
+export default CountryMap;
diff --git a/frontend/src/components/ecommerce/DemographicCard.tsx b/frontend/src/components/ecommerce/DemographicCard.tsx
new file mode 100644
index 0000000000..f2b552bda6
--- /dev/null
+++ b/frontend/src/components/ecommerce/DemographicCard.tsx
@@ -0,0 +1,131 @@
+"use client";
+import Image from "next/image";
+
+import CountryMap from "./CountryMap";
+import { useState } from "react";
+import { MoreDotIcon } from "@/icons";
+import { Dropdown } from "../ui/dropdown/Dropdown";
+import { DropdownItem } from "../ui/dropdown/DropdownItem";
+
+export default function DemographicCard() {
+ const [isOpen, setIsOpen] = useState(false);
+
+ function toggleDropdown() {
+ setIsOpen(!isOpen);
+ }
+
+ function closeDropdown() {
+ setIsOpen(false);
+ }
+
+ return (
+
+
+
+
+ Customers Demographic
+
+
+ Number of customer based on country
+
+
+
+
+
+
+
+
+
+ View More
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ USA
+
+
+ 2,379 Customers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ France
+
+
+ 589 Customers
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/ecommerce/EcommerceMetrics.tsx b/frontend/src/components/ecommerce/EcommerceMetrics.tsx
new file mode 100644
index 0000000000..58ab6c15da
--- /dev/null
+++ b/frontend/src/components/ecommerce/EcommerceMetrics.tsx
@@ -0,0 +1,56 @@
+"use client";
+import React from "react";
+import Badge from "../ui/badge/Badge";
+import { ArrowDownIcon, ArrowUpIcon, BoxIconLine, GroupIcon } from "@/icons";
+
+export const EcommerceMetrics = () => {
+ return (
+
+ {/* */}
+
+
+
+
+
+
+
+
+ Customers
+
+
+ 3,782
+
+
+
+
+ 11.01%
+
+
+
+ {/* */}
+
+ {/* */}
+
+
+
+
+
+
+
+ Orders
+
+
+ 5,359
+
+
+
+
+
+ 9.05%
+
+
+
+ {/* */}
+
+ );
+};
diff --git a/frontend/src/components/ecommerce/MonthlySalesChart.tsx b/frontend/src/components/ecommerce/MonthlySalesChart.tsx
new file mode 100644
index 0000000000..ed387cea18
--- /dev/null
+++ b/frontend/src/components/ecommerce/MonthlySalesChart.tsx
@@ -0,0 +1,154 @@
+"use client";
+import { ApexOptions } from "apexcharts";
+import dynamic from "next/dynamic";
+import { MoreDotIcon } from "@/icons";
+import { DropdownItem } from "../ui/dropdown/DropdownItem";
+import { useState } from "react";
+import { Dropdown } from "../ui/dropdown/Dropdown";
+
+// Dynamically import the ReactApexChart component
+const ReactApexChart = dynamic(() => import("react-apexcharts"), {
+ ssr: false,
+});
+
+export default function MonthlySalesChart() {
+ const options: ApexOptions = {
+ colors: ["#465fff"],
+ chart: {
+ fontFamily: "Outfit, sans-serif",
+ type: "bar",
+ height: 180,
+ toolbar: {
+ show: false,
+ },
+ },
+ plotOptions: {
+ bar: {
+ horizontal: false,
+ columnWidth: "39%",
+ borderRadius: 5,
+ borderRadiusApplication: "end",
+ },
+ },
+ dataLabels: {
+ enabled: false,
+ },
+ stroke: {
+ show: true,
+ width: 4,
+ colors: ["transparent"],
+ },
+ xaxis: {
+ categories: [
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec",
+ ],
+ axisBorder: {
+ show: false,
+ },
+ axisTicks: {
+ show: false,
+ },
+ },
+ legend: {
+ show: true,
+ position: "top",
+ horizontalAlign: "left",
+ fontFamily: "Outfit",
+ },
+ yaxis: {
+ title: {
+ text: undefined,
+ },
+ },
+ grid: {
+ yaxis: {
+ lines: {
+ show: true,
+ },
+ },
+ },
+ fill: {
+ opacity: 1,
+ },
+
+ tooltip: {
+ x: {
+ show: false,
+ },
+ y: {
+ formatter: (val: number) => `${val}`,
+ },
+ },
+ };
+ const series = [
+ {
+ name: "Sales",
+ data: [168, 385, 201, 298, 187, 195, 291, 110, 215, 390, 280, 112],
+ },
+ ];
+ const [isOpen, setIsOpen] = useState(false);
+
+ function toggleDropdown() {
+ setIsOpen(!isOpen);
+ }
+
+ function closeDropdown() {
+ setIsOpen(false);
+ }
+
+ return (
+
+
+
+ Monthly Sales
+
+
+
+
+
+
+
+
+ View More
+
+
+ Delete
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/ecommerce/MonthlyTarget.tsx b/frontend/src/components/ecommerce/MonthlyTarget.tsx
new file mode 100644
index 0000000000..d4f66db55c
--- /dev/null
+++ b/frontend/src/components/ecommerce/MonthlyTarget.tsx
@@ -0,0 +1,209 @@
+"use client";
+// import Chart from "react-apexcharts";
+import { ApexOptions } from "apexcharts";
+
+import dynamic from "next/dynamic";
+import { Dropdown } from "../ui/dropdown/Dropdown";
+import { MoreDotIcon } from "@/icons";
+import { useState } from "react";
+import { DropdownItem } from "../ui/dropdown/DropdownItem";
+// Dynamically import the ReactApexChart component
+const ReactApexChart = dynamic(() => import("react-apexcharts"), {
+ ssr: false,
+});
+
+export default function MonthlyTarget() {
+ const series = [75.55];
+ const options: ApexOptions = {
+ colors: ["#465FFF"],
+ chart: {
+ fontFamily: "Outfit, sans-serif",
+ type: "radialBar",
+ height: 330,
+ sparkline: {
+ enabled: true,
+ },
+ },
+ plotOptions: {
+ radialBar: {
+ startAngle: -85,
+ endAngle: 85,
+ hollow: {
+ size: "80%",
+ },
+ track: {
+ background: "#E4E7EC",
+ strokeWidth: "100%",
+ margin: 5, // margin is in pixels
+ },
+ dataLabels: {
+ name: {
+ show: false,
+ },
+ value: {
+ fontSize: "36px",
+ fontWeight: "600",
+ offsetY: -40,
+ color: "#1D2939",
+ formatter: function (val) {
+ return val + "%";
+ },
+ },
+ },
+ },
+ },
+ fill: {
+ type: "solid",
+ colors: ["#465FFF"],
+ },
+ stroke: {
+ lineCap: "round",
+ },
+ labels: ["Progress"],
+ };
+
+ const [isOpen, setIsOpen] = useState(false);
+
+ function toggleDropdown() {
+ setIsOpen(!isOpen);
+ }
+
+ function closeDropdown() {
+ setIsOpen(false);
+ }
+
+ return (
+
+
+
+
+
+ Monthly Target
+
+
+ Target you’ve set for each month
+
+
+
+
+
+
+
+
+ View More
+
+
+ Delete
+
+
+
+
+
+
+ You earn $3287 today, it's higher than last month. Keep up your
+ good work!
+
+
+
+
+
+
+ Target
+
+
+ $20K
+
+
+
+
+
+
+
+
+
+
+ Revenue
+
+
+ $20K
+
+
+
+
+
+
+
+
+
+
+ Today
+
+
+ $20K
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/ecommerce/RecentOrders.tsx b/frontend/src/components/ecommerce/RecentOrders.tsx
new file mode 100644
index 0000000000..d06a073a92
--- /dev/null
+++ b/frontend/src/components/ecommerce/RecentOrders.tsx
@@ -0,0 +1,211 @@
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHeader,
+ TableRow,
+} from "../ui/table";
+import Badge from "../ui/badge/Badge";
+import Image from "next/image";
+
+// Define the TypeScript interface for the table rows
+interface Product {
+ id: number; // Unique identifier for each product
+ name: string; // Product name
+ variants: string; // Number of variants (e.g., "1 Variant", "2 Variants")
+ category: string; // Category of the product
+ price: string; // Price of the product (as a string with currency symbol)
+ // status: string; // Status of the product
+ image: string; // URL or path to the product image
+ status: "Delivered" | "Pending" | "Canceled"; // Status of the product
+}
+
+// Define the table data using the interface
+const tableData: Product[] = [
+ {
+ id: 1,
+ name: "MacBook Pro 13”",
+ variants: "2 Variants",
+ category: "Laptop",
+ price: "$2399.00",
+ status: "Delivered",
+ image: "/images/product/product-01.jpg", // Replace with actual image URL
+ },
+ {
+ id: 2,
+ name: "Apple Watch Ultra",
+ variants: "1 Variant",
+ category: "Watch",
+ price: "$879.00",
+ status: "Pending",
+ image: "/images/product/product-02.jpg", // Replace with actual image URL
+ },
+ {
+ id: 3,
+ name: "iPhone 15 Pro Max",
+ variants: "2 Variants",
+ category: "SmartPhone",
+ price: "$1869.00",
+ status: "Delivered",
+ image: "/images/product/product-03.jpg", // Replace with actual image URL
+ },
+ {
+ id: 4,
+ name: "iPad Pro 3rd Gen",
+ variants: "2 Variants",
+ category: "Electronics",
+ price: "$1699.00",
+ status: "Canceled",
+ image: "/images/product/product-04.jpg", // Replace with actual image URL
+ },
+ {
+ id: 5,
+ name: "AirPods Pro 2nd Gen",
+ variants: "1 Variant",
+ category: "Accessories",
+ price: "$240.00",
+ status: "Delivered",
+ image: "/images/product/product-05.jpg", // Replace with actual image URL
+ },
+];
+
+export default function RecentOrders() {
+ return (
+
+
+
+
+ Recent Orders
+
+
+
+
+
+
+
+
+
+
+
+ Filter
+
+
+ See all
+
+
+
+
+
+ {/* Table Header */}
+
+
+
+ Products
+
+
+ Category
+
+
+ Price
+
+
+ Status
+
+
+
+
+ {/* Table Body */}
+
+
+ {tableData.map((product) => (
+
+
+
+
+
+
+
+
+ {product.name}
+
+
+ {product.variants}
+
+
+
+
+
+ {product.price}
+
+
+ {product.category}
+
+
+
+ {product.status}
+
+
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/ecommerce/StatisticsChart.tsx b/frontend/src/components/ecommerce/StatisticsChart.tsx
new file mode 100644
index 0000000000..833faf45b8
--- /dev/null
+++ b/frontend/src/components/ecommerce/StatisticsChart.tsx
@@ -0,0 +1,150 @@
+"use client";
+import React from "react";
+// import Chart from "react-apexcharts";
+import { ApexOptions } from "apexcharts";
+import ChartTab from "../common/ChartTab";
+import dynamic from "next/dynamic";
+
+// Dynamically import the ReactApexChart component
+const ReactApexChart = dynamic(() => import("react-apexcharts"), {
+ ssr: false,
+});
+
+export default function StatisticsChart() {
+ const options: ApexOptions = {
+ legend: {
+ show: false, // Hide legend
+ position: "top",
+ horizontalAlign: "left",
+ },
+ colors: ["#465FFF", "#9CB9FF"], // Define line colors
+ chart: {
+ fontFamily: "Outfit, sans-serif",
+ height: 310,
+ type: "line", // Set the chart type to 'line'
+ toolbar: {
+ show: false, // Hide chart toolbar
+ },
+ },
+ stroke: {
+ curve: "straight", // Define the line style (straight, smooth, or step)
+ width: [2, 2], // Line width for each dataset
+ },
+
+ fill: {
+ type: "gradient",
+ gradient: {
+ opacityFrom: 0.55,
+ opacityTo: 0,
+ },
+ },
+ markers: {
+ size: 0, // Size of the marker points
+ strokeColors: "#fff", // Marker border color
+ strokeWidth: 2,
+ hover: {
+ size: 6, // Marker size on hover
+ },
+ },
+ grid: {
+ xaxis: {
+ lines: {
+ show: false, // Hide grid lines on x-axis
+ },
+ },
+ yaxis: {
+ lines: {
+ show: true, // Show grid lines on y-axis
+ },
+ },
+ },
+ dataLabels: {
+ enabled: false, // Disable data labels
+ },
+ tooltip: {
+ enabled: true, // Enable tooltip
+ x: {
+ format: "dd MMM yyyy", // Format for x-axis tooltip
+ },
+ },
+ xaxis: {
+ type: "category", // Category-based x-axis
+ categories: [
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec",
+ ],
+ axisBorder: {
+ show: false, // Hide x-axis border
+ },
+ axisTicks: {
+ show: false, // Hide x-axis ticks
+ },
+ tooltip: {
+ enabled: false, // Disable tooltip for x-axis points
+ },
+ },
+ yaxis: {
+ labels: {
+ style: {
+ fontSize: "12px", // Adjust font size for y-axis labels
+ colors: ["#6B7280"], // Color of the labels
+ },
+ },
+ title: {
+ text: "", // Remove y-axis title
+ style: {
+ fontSize: "0px",
+ },
+ },
+ },
+ };
+
+ const series = [
+ {
+ name: "Sales",
+ data: [180, 190, 170, 160, 175, 165, 170, 205, 230, 210, 240, 235],
+ },
+ {
+ name: "Revenue",
+ data: [40, 30, 50, 40, 55, 40, 70, 100, 110, 120, 150, 140],
+ },
+ ];
+ return (
+
+
+
+
+ Statistics
+
+
+ Target you’ve set for each month
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/exam/QuestionInput.tsx b/frontend/src/components/exam/QuestionInput.tsx
new file mode 100644
index 0000000000..98ae05695f
--- /dev/null
+++ b/frontend/src/components/exam/QuestionInput.tsx
@@ -0,0 +1,9 @@
+import ListWithRadio from "../ui/list/ListWithRadio";
+
+export default function QuestionInput() {
+ return (
+
+
+
+
)
+}
diff --git a/frontend/src/components/exam/TakeExamForm.tsx b/frontend/src/components/exam/TakeExamForm.tsx
new file mode 100644
index 0000000000..e8acdd9ff0
--- /dev/null
+++ b/frontend/src/components/exam/TakeExamForm.tsx
@@ -0,0 +1,33 @@
+"use client";
+import React from "react";
+import Button from "../ui/button/Button";
+import Form from "../form/Form";
+import ComponentCard from "../common/ComponentCard";
+import QuestionInput from "./QuestionInput";
+
+export default function TakeExamForm() {
+ const handleSubmit = (e: React.FormEvent) => {
+ e.preventDefault();
+ console.log("Form submitted:");
+ };
+ return (
+
+
+
+ );
+}
diff --git a/frontend/src/components/example/ModalExample/DefaultModal.tsx b/frontend/src/components/example/ModalExample/DefaultModal.tsx
new file mode 100644
index 0000000000..c017f01501
--- /dev/null
+++ b/frontend/src/components/example/ModalExample/DefaultModal.tsx
@@ -0,0 +1,53 @@
+"use client";
+import React from "react";
+import ComponentCard from "../../common/ComponentCard";
+
+import { Modal } from "../../ui/modal";
+import Button from "../../ui/button/Button";
+import { useModal } from "@/hooks/useModal";
+
+export default function DefaultModal() {
+ const { isOpen, openModal, closeModal } = useModal();
+ const handleSave = () => {
+ // Handle save logic here
+ console.log("Saving changes...");
+ closeModal();
+ };
+ return (
+
+
+
+ Open Modal
+
+
+
+ Modal Heading
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Pellentesque euismod est quis mauris lacinia pharetra. Sed a ligula
+ ac odio condimentum aliquet a nec nulla. Aliquam bibendum ex sit
+ amet ipsum rutrum feugiat ultrices enim quam.
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Pellentesque euismod est quis mauris lacinia pharetra. Sed a ligula
+ ac odio.
+
+
+
+ Close
+
+
+ Save Changes
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/example/ModalExample/FormInModal.tsx b/frontend/src/components/example/ModalExample/FormInModal.tsx
new file mode 100644
index 0000000000..9b6c4e0718
--- /dev/null
+++ b/frontend/src/components/example/ModalExample/FormInModal.tsx
@@ -0,0 +1,71 @@
+"use client";
+import React from "react";
+import ComponentCard from "../../common/ComponentCard";
+import Button from "../../ui/button/Button";
+import { Modal } from "../../ui/modal";
+import Label from "../../form/Label";
+import Input from "../../form/input/InputField";
+import { useModal } from "@/hooks/useModal";
+
+export default function FormInModal() {
+ const { isOpen, openModal, closeModal } = useModal();
+ const handleSave = () => {
+ // Handle save logic here
+ console.log("Saving changes...");
+ closeModal();
+ };
+ return (
+
+
+ Open Modal
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/example/ModalExample/FullScreenModal.tsx b/frontend/src/components/example/ModalExample/FullScreenModal.tsx
new file mode 100644
index 0000000000..b51f69b083
--- /dev/null
+++ b/frontend/src/components/example/ModalExample/FullScreenModal.tsx
@@ -0,0 +1,66 @@
+"use client";
+import { useModal } from "@/hooks/useModal";
+import ComponentCard from "../../common/ComponentCard";
+
+import Button from "../../ui/button/Button";
+import { Modal } from "../../ui/modal";
+
+export default function FullScreenModal() {
+ const {
+ isOpen: isFullscreenModalOpen,
+ openModal: openFullscreenModal,
+ closeModal: closeFullscreenModal,
+ } = useModal();
+ const handleSave = () => {
+ // Handle save logic here
+ console.log("Saving changes...");
+ closeFullscreenModal();
+ };
+ return (
+
+
+ Open Modal
+
+
+
+
+
+ Modal Heading
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Pellentesque euismod est quis mauris lacinia pharetra. Sed a
+ ligula ac odio condimentum aliquet a nec nulla. Aliquam bibendum
+ ex sit amet ipsum rutrum feugiat ultrices enim quam.
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Pellentesque euismod est quis mauris lacinia pharetra. Sed a
+ ligula ac odio condimentum aliquet a nec nulla. Aliquam bibendum
+ ex sit amet ipsum rutrum feugiat ultrices enim quam odio
+ condimentum aliquet a nec nulla pellentesque euismod est quis
+ mauris lacinia pharetra.
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Pellentesque euismod est quis mauris lacinia pharetra.
+
+
+
+
+ Close
+
+
+ Save Changes
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/example/ModalExample/ModalBasedAlerts.tsx b/frontend/src/components/example/ModalExample/ModalBasedAlerts.tsx
new file mode 100644
index 0000000000..7a1c5603f9
--- /dev/null
+++ b/frontend/src/components/example/ModalExample/ModalBasedAlerts.tsx
@@ -0,0 +1,282 @@
+"use client";
+import React from "react";
+import ComponentCard from "../../common/ComponentCard";
+
+import { Modal } from "../../ui/modal";
+import { useModal } from "@/hooks/useModal";
+
+export default function ModalBasedAlerts() {
+ const successModal = useModal();
+ const infoModal = useModal();
+ const warningModal = useModal();
+ const errorModal = useModal();
+ return (
+
+
+
+ Success Alert
+
+
+ Info Alert
+
+
+ Warning Alert
+
+
+ Danger Alert
+
+
+ {/* Success Modal */}
+
+
+
+
+ Well Done!
+
+
+ Lorem ipsum dolor sit amet consectetur. Feugiat ipsum libero tempor
+ felis risus nisi non. Quisque eu ut tempor curabitur.
+
+
+
+
+ Okay, Got It
+
+
+
+
+ {/* Info Modal */}
+
+
+
+
+
+ Information Alert!
+
+
+ Lorem ipsum dolor sit amet consectetur. Feugiat ipsum libero tempor
+ felis risus nisi non. Quisque eu ut tempor curabitur.
+
+
+
+
+ Okay, Got It
+
+
+
+
+ {/* Warning Modal */}
+
+
+
+
+
+ Warning Alert!
+
+
+ Lorem ipsum dolor sit amet consectetur. Feugiat ipsum libero tempor
+ felis risus nisi non. Quisque eu ut tempor curabitur.
+
+
+
+
+ Okay, Got It
+
+
+
+
+ {/* Error Modal */}
+
+
+
+
+
+ Danger Alert!
+
+
+ Lorem ipsum dolor sit amet consectetur. Feugiat ipsum libero tempor
+ felis risus nisi non. Quisque eu ut tempor curabitur.
+
+
+
+
+ Okay, Got It
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/example/ModalExample/VerticallyCenteredModal.tsx b/frontend/src/components/example/ModalExample/VerticallyCenteredModal.tsx
new file mode 100644
index 0000000000..2ec90a7e5c
--- /dev/null
+++ b/frontend/src/components/example/ModalExample/VerticallyCenteredModal.tsx
@@ -0,0 +1,47 @@
+"use client";
+import React from "react";
+import ComponentCard from "../../common/ComponentCard";
+import Button from "../../ui/button/Button";
+import { Modal } from "../../ui/modal";
+import { useModal } from "@/hooks/useModal";
+
+export default function VerticallyCenteredModal() {
+ const { isOpen, openModal, closeModal } = useModal();
+ const handleSave = () => {
+ // Handle save logic here
+ console.log("Saving changes...");
+ closeModal();
+ };
+ return (
+
+
+ Open Modal
+
+
+
+
+ All Done! Success Confirmed
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Pellentesque euismod est quis mauris lacinia pharetra.
+
+
+
+
+ Close
+
+
+ Save Changes
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/form/Form.tsx b/frontend/src/components/form/Form.tsx
new file mode 100644
index 0000000000..0530a6a88c
--- /dev/null
+++ b/frontend/src/components/form/Form.tsx
@@ -0,0 +1,23 @@
+import React, { FC, ReactNode, FormEvent } from "react";
+
+interface FormProps {
+ onSubmit: (event: FormEvent) => void;
+ children: ReactNode;
+ className?: string;
+}
+
+const Form: FC = ({ onSubmit, children, className }) => {
+ return (
+
+ );
+};
+
+export default Form;
diff --git a/frontend/src/components/form/Label.tsx b/frontend/src/components/form/Label.tsx
new file mode 100644
index 0000000000..8b0628b367
--- /dev/null
+++ b/frontend/src/components/form/Label.tsx
@@ -0,0 +1,27 @@
+import React, { FC, ReactNode } from "react";
+import { twMerge } from "tailwind-merge";
+
+interface LabelProps {
+ htmlFor?: string;
+ children: ReactNode;
+ className?: string;
+}
+
+const Label: FC = ({ htmlFor, children, className }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+export default Label;
diff --git a/frontend/src/components/form/MultiSelect.tsx b/frontend/src/components/form/MultiSelect.tsx
new file mode 100644
index 0000000000..40361ec246
--- /dev/null
+++ b/frontend/src/components/form/MultiSelect.tsx
@@ -0,0 +1,166 @@
+import React, { useState } from "react";
+
+interface Option {
+ value: string;
+ text: string;
+ selected: boolean;
+}
+
+interface MultiSelectProps {
+ label: string;
+ options: Option[];
+ defaultSelected?: string[];
+ onChange?: (selected: string[]) => void;
+ disabled?: boolean;
+}
+
+const MultiSelect: React.FC = ({
+ label,
+ options,
+ defaultSelected = [],
+ onChange,
+ disabled = false,
+}) => {
+ const [selectedOptions, setSelectedOptions] =
+ useState(defaultSelected);
+ const [isOpen, setIsOpen] = useState(false);
+
+ const toggleDropdown = () => {
+ if (disabled) return;
+ setIsOpen((prev) => !prev);
+ };
+
+ const handleSelect = (optionValue: string) => {
+ const newSelectedOptions = selectedOptions.includes(optionValue)
+ ? selectedOptions.filter((value) => value !== optionValue)
+ : [...selectedOptions, optionValue];
+
+ setSelectedOptions(newSelectedOptions);
+ if (onChange) onChange(newSelectedOptions);
+ };
+
+ const removeOption = (index: number, value: string) => {
+ const newSelectedOptions = selectedOptions.filter((opt) => opt !== value);
+ setSelectedOptions(newSelectedOptions);
+ if (onChange) onChange(newSelectedOptions);
+ };
+
+ const selectedValuesText = selectedOptions.map(
+ (value) => options.find((option) => option.value === value)?.text || ""
+ );
+
+ return (
+
+
+ {label}
+
+
+
+
+
+
+
+ {selectedValuesText.length > 0 ? (
+ selectedValuesText.map((text, index) => (
+
+
{text}
+
+
+ removeOption(index, selectedOptions[index])
+ }
+ className="pl-2 text-gray-500 cursor-pointer group-hover:text-gray-400 dark:text-gray-400"
+ >
+
+
+
+
+
+
+ ))
+ ) : (
+
+ )}
+
+
+
+
+
+ {isOpen && (
+
e.stopPropagation()}
+ >
+
+ {options.map((option, index) => (
+
+
handleSelect(option.value)}
+ >
+
+
+
+ ))}
+
+
+ )}
+
+
+
+ );
+};
+
+export default MultiSelect;
diff --git a/frontend/src/components/form/Select.tsx b/frontend/src/components/form/Select.tsx
new file mode 100644
index 0000000000..b32c839ac8
--- /dev/null
+++ b/frontend/src/components/form/Select.tsx
@@ -0,0 +1,64 @@
+import React, { useState } from "react";
+
+interface Option {
+ value: string;
+ label: string;
+}
+
+interface SelectProps {
+ options: Option[];
+ placeholder?: string;
+ onChange: (value: string) => void;
+ className?: string;
+ defaultValue?: string;
+}
+
+const Select: React.FC = ({
+ options,
+ placeholder = "Select an option",
+ onChange,
+ className = "",
+ defaultValue = "",
+}) => {
+ // Manage the selected value
+ const [selectedValue, setSelectedValue] = useState(defaultValue);
+
+ const handleChange = (e: React.ChangeEvent) => {
+ const value = e.target.value;
+ setSelectedValue(value);
+ onChange(value); // Trigger parent handler
+ };
+
+ return (
+
+ {/* Placeholder option */}
+
+ {placeholder}
+
+ {/* Map over options */}
+ {options.map((option) => (
+
+ {option.label}
+
+ ))}
+
+ );
+};
+
+export default Select;
diff --git a/frontend/src/components/form/date-picker.tsx b/frontend/src/components/form/date-picker.tsx
new file mode 100644
index 0000000000..9cb9f179c4
--- /dev/null
+++ b/frontend/src/components/form/date-picker.tsx
@@ -0,0 +1,60 @@
+import { useEffect } from 'react';
+import flatpickr from 'flatpickr';
+import 'flatpickr/dist/flatpickr.css';
+import Label from './Label';
+import { CalenderIcon } from '../../icons';
+import Hook = flatpickr.Options.Hook;
+import DateOption = flatpickr.Options.DateOption;
+
+type PropsType = {
+ id: string;
+ mode?: "single" | "multiple" | "range" | "time";
+ onChange?: Hook | Hook[];
+ defaultDate?: DateOption;
+ label?: string;
+ placeholder?: string;
+};
+
+export default function DatePicker({
+ id,
+ mode,
+ onChange,
+ label,
+ defaultDate,
+ placeholder,
+}: PropsType) {
+ useEffect(() => {
+ const flatPickr = flatpickr(`#${id}`, {
+ mode: mode || "single",
+ static: true,
+ monthSelectorType: "static",
+ dateFormat: "Y-m-d",
+ defaultDate,
+ onChange,
+ });
+
+ return () => {
+ if (!Array.isArray(flatPickr)) {
+ flatPickr.destroy();
+ }
+ };
+ }, [mode, onChange, id, defaultDate]);
+
+ return (
+
+ {label &&
{label} }
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/form/form-elements/CheckboxComponents.tsx b/frontend/src/components/form/form-elements/CheckboxComponents.tsx
new file mode 100644
index 0000000000..6bf83ce666
--- /dev/null
+++ b/frontend/src/components/form/form-elements/CheckboxComponents.tsx
@@ -0,0 +1,37 @@
+"use client";
+import React, { useState } from "react";
+import ComponentCard from "../../common/ComponentCard";
+import Checkbox from "../input/Checkbox";
+
+export default function CheckboxComponents() {
+ const [isChecked, setIsChecked] = useState(false);
+ const [isCheckedTwo, setIsCheckedTwo] = useState(true);
+ const [isCheckedDisabled, setIsCheckedDisabled] = useState(false);
+ return (
+
+
+
+
+
+ Default
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/form/form-elements/DefaultInputs.tsx b/frontend/src/components/form/form-elements/DefaultInputs.tsx
new file mode 100644
index 0000000000..36cc77ec21
--- /dev/null
+++ b/frontend/src/components/form/form-elements/DefaultInputs.tsx
@@ -0,0 +1,120 @@
+"use client";
+import React, { useState } from 'react';
+import ComponentCard from '../../common/ComponentCard';
+import Label from '../Label';
+import Input from '../input/InputField';
+import Select from '../Select';
+import { ChevronDownIcon, EyeCloseIcon, EyeIcon, TimeIcon } from '../../../icons';
+import DatePicker from '@/components/form/date-picker';
+
+export default function DefaultInputs() {
+ const [showPassword, setShowPassword] = useState(false);
+ const options = [
+ { value: "marketing", label: "Marketing" },
+ { value: "template", label: "Template" },
+ { value: "development", label: "Development" },
+ ];
+ const handleSelectChange = (value: string) => {
+ console.log("Selected value:", value);
+ };
+ return (
+
+
+
+ Input
+
+
+
+ Input with Placeholder
+
+
+
+
Select Input
+
+
+
+
+
+
+
+
+
Password Input
+
+
+ setShowPassword(!showPassword)}
+ className="absolute z-30 -translate-y-1/2 cursor-pointer right-4 top-1/2"
+ >
+ {showPassword ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
+ {
+ // Handle your logic
+ console.log({ dates, currentDateString });
+ }}
+ />
+
+
+
+
Time Picker Input
+
+ console.log(e.target.value)}
+ />
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/form/form-elements/DocumentDropZone.tsx b/frontend/src/components/form/form-elements/DocumentDropZone.tsx
new file mode 100644
index 0000000000..f72e9b7bde
--- /dev/null
+++ b/frontend/src/components/form/form-elements/DocumentDropZone.tsx
@@ -0,0 +1,108 @@
+"use client";
+import React, { useState } from "react";
+import ComponentCard from "../../common/ComponentCard";
+import { useDropzone } from "react-dropzone";
+import SpinnerButton from "@/components/ui/button/SpinnerButton";
+
+const DropzoneComponent: React.FC = () => {
+ const [files, setFiles] = useState([]);
+
+ const onDrop = (acceptedFiles: File[]) => {
+ setFiles(prev => [...prev, ...acceptedFiles]); // add new files
+ };
+
+ const { getRootProps, getInputProps, isDragActive } = useDropzone({
+ onDrop,
+ accept: {
+ "application/pdf": [],
+ },
+ });
+
+ const handleDelete = (index: number) => {
+ setFiles(prev => prev.filter((_, i) => i !== index));
+ };
+
+ return (
+
+
+
+
+ {/* File List */}
+
+ {files.length > 0 && (
+
+ {files.map((file, index) => (
+
+ {file.name}
+ handleDelete(index)}
+ className="ml-2 text-red-500 hover:text-red-700"
+ type="button"
+ >
+ Delete
+
+
+ ))}
+
+ )}
+
+
+
+ Create Exam!
+
+
+
+
+
+ );
+};
+
+export default DropzoneComponent;
diff --git a/frontend/src/components/form/form-elements/DropZone.tsx b/frontend/src/components/form/form-elements/DropZone.tsx
new file mode 100644
index 0000000000..2fd8bb2774
--- /dev/null
+++ b/frontend/src/components/form/form-elements/DropZone.tsx
@@ -0,0 +1,77 @@
+"use client";
+import React from "react";
+import ComponentCard from "../../common/ComponentCard";
+import { useDropzone } from "react-dropzone";
+
+const DropzoneComponent: React.FC = () => {
+ const onDrop = (acceptedFiles: File[]) => {
+ console.log("Files dropped:", acceptedFiles);
+ // Handle file uploads here
+ };
+
+ const { getRootProps, getInputProps, isDragActive } = useDropzone({
+ onDrop,
+ accept: {
+ "image/png": [],
+ "image/jpeg": [],
+ "image/webp": [],
+ "image/svg+xml": [],
+ },
+ });
+ return (
+
+
+
+ );
+};
+
+export default DropzoneComponent;
diff --git a/frontend/src/components/form/form-elements/FileInputExample.tsx b/frontend/src/components/form/form-elements/FileInputExample.tsx
new file mode 100644
index 0000000000..2c96dc7fc6
--- /dev/null
+++ b/frontend/src/components/form/form-elements/FileInputExample.tsx
@@ -0,0 +1,23 @@
+"use client";
+import React from "react";
+import ComponentCard from "../../common/ComponentCard";
+import FileInput from "../input/FileInput";
+import Label from "../Label";
+
+export default function FileInputExample() {
+ const handleFileChange = (event: React.ChangeEvent) => {
+ const file = event.target.files?.[0];
+ if (file) {
+ console.log("Selected file:", file.name);
+ }
+ };
+
+ return (
+
+
+ Upload file
+
+
+
+ );
+}
diff --git a/frontend/src/components/form/form-elements/InputGroup.tsx b/frontend/src/components/form/form-elements/InputGroup.tsx
new file mode 100644
index 0000000000..cefd061093
--- /dev/null
+++ b/frontend/src/components/form/form-elements/InputGroup.tsx
@@ -0,0 +1,56 @@
+"use client";
+import React from "react";
+import ComponentCard from "../../common/ComponentCard";
+import Label from "../Label";
+import Input from "../input/InputField";
+import { EnvelopeIcon } from "../../../icons";
+import PhoneInput from "../group-input/PhoneInput";
+
+export default function InputGroup() {
+ const countries = [
+ { code: "US", label: "+1" },
+ { code: "GB", label: "+44" },
+ { code: "CA", label: "+1" },
+ { code: "AU", label: "+61" },
+ ];
+ const handlePhoneNumberChange = (phoneNumber: string) => {
+ console.log("Updated phone number:", phoneNumber);
+ };
+ return (
+
+
+
+ );
+}
diff --git a/frontend/src/components/form/form-elements/InputStates.tsx b/frontend/src/components/form/form-elements/InputStates.tsx
new file mode 100644
index 0000000000..3ef08b56bc
--- /dev/null
+++ b/frontend/src/components/form/form-elements/InputStates.tsx
@@ -0,0 +1,70 @@
+"use client";
+import React, { useState } from "react";
+import ComponentCard from "../../common/ComponentCard";
+import Input from "../input/InputField";
+import Label from "../Label";
+
+export default function InputStates() {
+ const [email, setEmail] = useState("");
+ const [error, setError] = useState(false);
+
+ // Simulate a validation check
+ const validateEmail = (value: string) => {
+ const isValidEmail =
+ /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value);
+ setError(!isValidEmail);
+ return isValidEmail;
+ };
+
+ const handleEmailChange = (e: React.ChangeEvent) => {
+ const value = e.target.value;
+ setEmail(value);
+ validateEmail(value);
+ };
+ return (
+
+
+
+ );
+}
diff --git a/frontend/src/components/form/form-elements/RadioButtons.tsx b/frontend/src/components/form/form-elements/RadioButtons.tsx
new file mode 100644
index 0000000000..d7ec327852
--- /dev/null
+++ b/frontend/src/components/form/form-elements/RadioButtons.tsx
@@ -0,0 +1,43 @@
+"use client";
+import React, { useState } from "react";
+import ComponentCard from "../../common/ComponentCard";
+import Radio from "../input/Radio";
+
+export default function RadioButtons() {
+ const [selectedValue, setSelectedValue] = useState("option2");
+
+ const handleRadioChange = (value: string) => {
+ setSelectedValue(value);
+ };
+ return (
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/form/form-elements/SelectInputs.tsx b/frontend/src/components/form/form-elements/SelectInputs.tsx
new file mode 100644
index 0000000000..e19a863445
--- /dev/null
+++ b/frontend/src/components/form/form-elements/SelectInputs.tsx
@@ -0,0 +1,61 @@
+"use client";
+import React, { useState } from "react";
+import ComponentCard from "../../common/ComponentCard";
+import Label from "../Label";
+import Select from "../Select";
+import MultiSelect from "../MultiSelect";
+import { ChevronDownIcon } from "@/icons";
+
+export default function SelectInputs() {
+ const options = [
+ { value: "marketing", label: "Marketing" },
+ { value: "template", label: "Template" },
+ { value: "development", label: "Development" },
+ ];
+
+ const [selectedValues, setSelectedValues] = useState([]);
+
+ const handleSelectChange = (value: string) => {
+ console.log("Selected value:", value);
+ };
+
+ const multiOptions = [
+ { value: "1", text: "Option 1", selected: false },
+ { value: "2", text: "Option 2", selected: false },
+ { value: "3", text: "Option 3", selected: false },
+ { value: "4", text: "Option 4", selected: false },
+ { value: "5", text: "Option 5", selected: false },
+ ];
+
+ return (
+
+
+
+
Select Input
+
+
+
+
+
+
+
+
+
setSelectedValues(values)}
+ />
+
+ Selected Values: {selectedValues.join(", ")}
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/form/form-elements/TextAreaInput.tsx b/frontend/src/components/form/form-elements/TextAreaInput.tsx
new file mode 100644
index 0000000000..692e4bf214
--- /dev/null
+++ b/frontend/src/components/form/form-elements/TextAreaInput.tsx
@@ -0,0 +1,43 @@
+"use client";
+import React, { useState } from "react";
+import ComponentCard from "../../common/ComponentCard";
+import TextArea from "../input/TextArea";
+import Label from "../Label";
+
+export default function TextAreaInput() {
+ const [message, setMessage] = useState("");
+ const [messageTwo, setMessageTwo] = useState("");
+ return (
+
+
+ {/* Default TextArea */}
+
+ Description
+
+
+ {/* Disabled TextArea */}
+
+ Description
+
+
+
+ {/* Error TextArea */}
+
+ Description
+
+
+
+ );
+}
diff --git a/frontend/src/components/form/form-elements/ToggleSwitch.tsx b/frontend/src/components/form/form-elements/ToggleSwitch.tsx
new file mode 100644
index 0000000000..8f7b28a71a
--- /dev/null
+++ b/frontend/src/components/form/form-elements/ToggleSwitch.tsx
@@ -0,0 +1,42 @@
+"use client";
+import React from "react";
+import ComponentCard from "../../common/ComponentCard";
+import Switch from "../switch/Switch";
+
+export default function ToggleSwitch() {
+ const handleSwitchChange = (checked: boolean) => {
+ console.log("Switch is now:", checked ? "ON" : "OFF");
+ };
+ return (
+
+
+
+
+
+
{" "}
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/form/group-input/PhoneInput.tsx b/frontend/src/components/form/group-input/PhoneInput.tsx
new file mode 100644
index 0000000000..1a481ceb9e
--- /dev/null
+++ b/frontend/src/components/form/group-input/PhoneInput.tsx
@@ -0,0 +1,141 @@
+"use client";
+import React, { useState } from "react";
+
+interface CountryCode {
+ code: string;
+ label: string;
+}
+
+interface PhoneInputProps {
+ countries: CountryCode[];
+ placeholder?: string;
+ onChange?: (phoneNumber: string) => void;
+ selectPosition?: "start" | "end"; // New prop for dropdown position
+}
+
+const PhoneInput: React.FC = ({
+ countries,
+ placeholder = "+1 (555) 000-0000",
+ onChange,
+ selectPosition = "start", // Default position is 'start'
+}) => {
+ const [selectedCountry, setSelectedCountry] = useState("US");
+ const [phoneNumber, setPhoneNumber] = useState("+1");
+
+ const countryCodes: Record = countries.reduce(
+ (acc, { code, label }) => ({ ...acc, [code]: label }),
+ {}
+ );
+
+ const handleCountryChange = (e: React.ChangeEvent) => {
+ const newCountry = e.target.value;
+ setSelectedCountry(newCountry);
+ setPhoneNumber(countryCodes[newCountry]);
+ if (onChange) {
+ onChange(countryCodes[newCountry]);
+ }
+ };
+
+ const handlePhoneNumberChange = (e: React.ChangeEvent) => {
+ const newPhoneNumber = e.target.value;
+ setPhoneNumber(newPhoneNumber);
+ if (onChange) {
+ onChange(newPhoneNumber);
+ }
+ };
+
+ return (
+
+ {/* Dropdown position: Start */}
+ {selectPosition === "start" && (
+
+
+ {countries.map((country) => (
+
+ {country.code}
+
+ ))}
+
+
+
+ )}
+
+ {/* Input field */}
+
+
+ {/* Dropdown position: End */}
+ {selectPosition === "end" && (
+
+
+ {countries.map((country) => (
+
+ {country.code}
+
+ ))}
+
+
+
+ )}
+
+ );
+};
+
+export default PhoneInput;
diff --git a/frontend/src/components/form/input/Checkbox.tsx b/frontend/src/components/form/input/Checkbox.tsx
new file mode 100644
index 0000000000..5314789201
--- /dev/null
+++ b/frontend/src/components/form/input/Checkbox.tsx
@@ -0,0 +1,82 @@
+import type React from "react";
+
+interface CheckboxProps {
+ label?: string;
+ checked: boolean;
+ className?: string;
+ id?: string;
+ onChange: (checked: boolean) => void;
+ disabled?: boolean;
+}
+
+const Checkbox: React.FC = ({
+ label,
+ checked,
+ id,
+ onChange,
+ className = "",
+ disabled = false,
+}) => {
+ return (
+
+
+
onChange(e.target.checked)}
+ disabled={disabled}
+ />
+ {checked && (
+
+
+
+ )}
+ {disabled && (
+
+
+
+ )}
+
+ {label && (
+
+ {label}
+
+ )}
+
+ );
+};
+
+export default Checkbox;
diff --git a/frontend/src/components/form/input/FileInput.tsx b/frontend/src/components/form/input/FileInput.tsx
new file mode 100644
index 0000000000..cdaf5b60d2
--- /dev/null
+++ b/frontend/src/components/form/input/FileInput.tsx
@@ -0,0 +1,18 @@
+import React, { FC } from "react";
+
+interface FileInputProps {
+ className?: string;
+ onChange?: (event: React.ChangeEvent) => void;
+}
+
+const FileInput: FC = ({ className, onChange }) => {
+ return (
+
+ );
+};
+
+export default FileInput;
diff --git a/frontend/src/components/form/input/InputField.tsx b/frontend/src/components/form/input/InputField.tsx
new file mode 100644
index 0000000000..35d6524200
--- /dev/null
+++ b/frontend/src/components/form/input/InputField.tsx
@@ -0,0 +1,84 @@
+import React, { FC } from "react";
+
+interface InputProps {
+ type?: "text" | "number" | "email" | "password" | "date" | "time" | string;
+ id?: string;
+ name?: string;
+ placeholder?: string;
+ defaultValue?: string | number;
+ onChange?: (e: React.ChangeEvent) => void;
+ className?: string;
+ min?: string;
+ max?: string;
+ step?: number;
+ disabled?: boolean;
+ success?: boolean;
+ error?: boolean;
+ hint?: string; // Optional hint text
+}
+
+const Input: FC = ({
+ type = "text",
+ id,
+ name,
+ placeholder,
+ defaultValue,
+ onChange,
+ className = "",
+ min,
+ max,
+ step,
+ disabled = false,
+ success = false,
+ error = false,
+ hint,
+}) => {
+ // Determine input styles based on state (disabled, success, error)
+ let inputClasses = `h-11 w-full rounded-lg border appearance-none px-4 py-2.5 text-sm shadow-theme-xs placeholder:text-gray-400 focus:outline-hidden focus:ring-3 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800 ${className}`;
+
+ // Add styles for the different states
+ if (disabled) {
+ inputClasses += ` text-gray-500 border-gray-300 cursor-not-allowed dark:bg-gray-800 dark:text-gray-400 dark:border-gray-700`;
+ } else if (error) {
+ inputClasses += ` text-error-800 border-error-500 focus:ring-3 focus:ring-error-500/10 dark:text-error-400 dark:border-error-500`;
+ } else if (success) {
+ inputClasses += ` text-success-500 border-success-400 focus:ring-success-500/10 focus:border-success-300 dark:text-success-400 dark:border-success-500`;
+ } else {
+ inputClasses += ` bg-transparent text-gray-800 border-gray-300 focus:border-brand-300 focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:focus:border-brand-800`;
+ }
+
+ return (
+
+
+
+ {/* Optional Hint Text */}
+ {hint && (
+
+ {hint}
+
+ )}
+
+ );
+};
+
+export default Input;
diff --git a/frontend/src/components/form/input/Radio.tsx b/frontend/src/components/form/input/Radio.tsx
new file mode 100644
index 0000000000..8c2ae504b5
--- /dev/null
+++ b/frontend/src/components/form/input/Radio.tsx
@@ -0,0 +1,65 @@
+import React from "react";
+
+interface RadioProps {
+ id: string; // Unique ID for the radio button
+ name: string; // Radio group name
+ value: string; // Value of the radio button
+ checked: boolean; // Whether the radio button is checked
+ label: string; // Label for the radio button
+ onChange: (value: string) => void; // Handler for value change
+ className?: string; // Optional additional classes
+ disabled?: boolean; // Optional disabled state for the radio button
+}
+
+const Radio: React.FC = ({
+ id,
+ name,
+ value,
+ checked,
+ label,
+ onChange,
+ className = "",
+ disabled = false,
+}) => {
+ return (
+
+ !disabled && onChange(value)} // Prevent onChange when disabled
+ className="sr-only"
+ disabled={disabled} // Disable input
+ />
+
+
+
+ {label}
+
+ );
+};
+
+export default Radio;
diff --git a/frontend/src/components/form/input/RadioSm.tsx b/frontend/src/components/form/input/RadioSm.tsx
new file mode 100644
index 0000000000..a9bf29bb6b
--- /dev/null
+++ b/frontend/src/components/form/input/RadioSm.tsx
@@ -0,0 +1,59 @@
+import React from "react";
+
+interface RadioProps {
+ id: string; // Unique ID for the radio button
+ name: string; // Group name for the radio button
+ value: string; // Value of the radio button
+ checked: boolean; // Whether the radio button is checked
+ label: string; // Label text for the radio button
+ onChange: (value: string) => void; // Handler for when the radio button is toggled
+ className?: string; // Optional custom classes for styling
+}
+
+const RadioSm: React.FC = ({
+ id,
+ name,
+ value,
+ checked,
+ label,
+ onChange,
+ className = "",
+}) => {
+ return (
+
+
+ {/* Hidden Input */}
+ onChange(value)}
+ className="sr-only"
+ />
+ {/* Styled Radio Circle */}
+
+ {/* Inner Dot */}
+
+
+
+ {label}
+
+ );
+};
+
+export default RadioSm;
diff --git a/frontend/src/components/form/input/TextArea.tsx b/frontend/src/components/form/input/TextArea.tsx
new file mode 100644
index 0000000000..613441979a
--- /dev/null
+++ b/frontend/src/components/form/input/TextArea.tsx
@@ -0,0 +1,63 @@
+import React from "react";
+
+interface TextareaProps {
+ placeholder?: string; // Placeholder text
+ rows?: number; // Number of rows
+ value?: string; // Current value
+ onChange?: (value: string) => void; // Change handler
+ className?: string; // Additional CSS classes
+ disabled?: boolean; // Disabled state
+ error?: boolean; // Error state
+ hint?: string; // Hint text to display
+}
+
+const TextArea: React.FC = ({
+ placeholder = "Enter your message", // Default placeholder
+ rows = 3, // Default number of rows
+ value = "", // Default value
+ onChange, // Callback for changes
+ className = "", // Additional custom styles
+ disabled = false, // Disabled state
+ error = false, // Error state
+ hint = "", // Default hint text
+}) => {
+ const handleChange = (e: React.ChangeEvent) => {
+ if (onChange) {
+ onChange(e.target.value);
+ }
+ };
+
+ let textareaClasses = `w-full rounded-lg border px-4 py-2.5 text-sm shadow-theme-xs focus:outline-hidden ${className}`;
+
+ if (disabled) {
+ textareaClasses += ` bg-gray-100 opacity-50 text-gray-500 border-gray-300 cursor-not-allowed dark:bg-gray-800 dark:text-gray-400 dark:border-gray-700`;
+ } else if (error) {
+ textareaClasses += ` bg-transparent text-gray-400 border-gray-300 focus:border-error-300 focus:ring-3 focus:ring-error-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:focus:border-error-800`;
+ } else {
+ textareaClasses += ` bg-transparent text-gray-400 border-gray-300 focus:border-brand-300 focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:focus:border-brand-800`;
+ }
+
+ return (
+
+
+ {hint && (
+
+ {hint}
+
+ )}
+
+ );
+};
+
+export default TextArea;
diff --git a/frontend/src/components/form/switch/Switch.tsx b/frontend/src/components/form/switch/Switch.tsx
new file mode 100644
index 0000000000..4a7e26aeff
--- /dev/null
+++ b/frontend/src/components/form/switch/Switch.tsx
@@ -0,0 +1,73 @@
+"use client";
+import React, { useState } from "react";
+
+interface SwitchProps {
+ label: string;
+ defaultChecked?: boolean;
+ disabled?: boolean;
+ onChange?: (checked: boolean) => void;
+ color?: "blue" | "gray"; // Added prop to toggle color theme
+}
+
+const Switch: React.FC = ({
+ label,
+ defaultChecked = false,
+ disabled = false,
+ onChange,
+ color = "blue", // Default to blue color
+}) => {
+ const [isChecked, setIsChecked] = useState(defaultChecked);
+
+ const handleToggle = () => {
+ if (disabled) return;
+ const newCheckedState = !isChecked;
+ setIsChecked(newCheckedState);
+ if (onChange) {
+ onChange(newCheckedState);
+ }
+ };
+
+ const switchColors =
+ color === "blue"
+ ? {
+ background: isChecked
+ ? "bg-brand-500 "
+ : "bg-gray-200 dark:bg-white/10", // Blue version
+ knob: isChecked
+ ? "translate-x-full bg-white"
+ : "translate-x-0 bg-white",
+ }
+ : {
+ background: isChecked
+ ? "bg-gray-800 dark:bg-white/10"
+ : "bg-gray-200 dark:bg-white/10", // Gray version
+ knob: isChecked
+ ? "translate-x-full bg-white"
+ : "translate-x-0 bg-white",
+ };
+
+ return (
+
+
+ {label}
+
+ );
+};
+
+export default Switch;
diff --git a/frontend/src/components/header/NotificationDropdown.tsx b/frontend/src/components/header/NotificationDropdown.tsx
new file mode 100644
index 0000000000..cf2c549423
--- /dev/null
+++ b/frontend/src/components/header/NotificationDropdown.tsx
@@ -0,0 +1,384 @@
+"use client";
+import Image from "next/image";
+import Link from "next/link";
+import React, { useState } from "react";
+import { Dropdown } from "../ui/dropdown/Dropdown";
+import { DropdownItem } from "../ui/dropdown/DropdownItem";
+
+export default function NotificationDropdown() {
+ const [isOpen, setIsOpen] = useState(false);
+ const [notifying, setNotifying] = useState(true);
+
+ function toggleDropdown() {
+ setIsOpen(!isOpen);
+ }
+
+ function closeDropdown() {
+ setIsOpen(false);
+ }
+
+ const handleClick = () => {
+ toggleDropdown();
+ setNotifying(false);
+ };
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ Notification
+
+
+
+
+
+
+
+
+ {/* Example notification items */}
+
+
+
+
+
+
+
+
+
+
+ Terry Franci
+
+ requests permission to change
+
+ Project - Nganter App
+
+
+
+
+ Project
+
+ 5 min ago
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Alena Franci
+
+ requests permission to change
+
+ Project - Nganter App
+
+
+
+
+ Project
+
+ 8 min ago
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Jocelyn Kenter
+
+ requests permission to change
+
+ Project - Nganter App
+
+
+
+
+ Project
+
+ 15 min ago
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Brandon Philips
+
+ requests permission to change
+
+ Project - Nganter App
+
+
+
+
+ Project
+
+ 1 hr ago
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Terry Franci
+
+ requests permission to change
+
+ Project - Nganter App
+
+
+
+
+ Project
+
+ 5 min ago
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Alena Franci
+
+ requests permission to change
+
+ Project - Nganter App
+
+
+
+
+ Project
+
+ 8 min ago
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Jocelyn Kenter
+
+ requests permission to change
+
+ Project - Nganter App
+
+
+
+
+ Project
+
+ 15 min ago
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Brandon Philips
+
+ requests permission to change
+
+ Project - Nganter App
+
+
+
+
+ Project
+
+ 1 hr ago
+
+
+
+
+ {/* Add more items as needed */}
+
+
+ View All Notifications
+
+
+
+ );
+}
diff --git a/frontend/src/components/header/UserDropdown.tsx b/frontend/src/components/header/UserDropdown.tsx
new file mode 100644
index 0000000000..f810fb2964
--- /dev/null
+++ b/frontend/src/components/header/UserDropdown.tsx
@@ -0,0 +1,171 @@
+"use client";
+import Image from "next/image";
+import Link from "next/link";
+import React, { useState } from "react";
+import { Dropdown } from "../ui/dropdown/Dropdown";
+import { DropdownItem } from "../ui/dropdown/DropdownItem";
+
+export default function UserDropdown() {
+ const [isOpen, setIsOpen] = useState(false);
+
+function toggleDropdown(e: React.MouseEvent) {
+ e.stopPropagation();
+ setIsOpen((prev) => !prev);
+}
+
+ function closeDropdown() {
+ setIsOpen(false);
+ }
+ return (
+
+
+
+
+
+
+ Musharof
+
+
+
+
+
+
+
+
+
+ Musharof Chowdhury
+
+
+ randomuser@pimjo.com
+
+
+
+
+
+
+
+
+
+ Edit profile
+
+
+
+
+
+
+
+ Account settings
+
+
+
+
+
+
+
+ Support
+
+
+
+
+
+
+
+ Sign out
+
+
+
+ );
+}
diff --git a/frontend/src/components/tables/BasicTableOne.tsx b/frontend/src/components/tables/BasicTableOne.tsx
new file mode 100644
index 0000000000..2927c17cb2
--- /dev/null
+++ b/frontend/src/components/tables/BasicTableOne.tsx
@@ -0,0 +1,226 @@
+import React from "react";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHeader,
+ TableRow,
+} from "../ui/table";
+
+import Badge from "../ui/badge/Badge";
+import Image from "next/image";
+
+interface Order {
+ id: number;
+ user: {
+ image: string;
+ name: string;
+ role: string;
+ };
+ projectName: string;
+ team: {
+ images: string[];
+ };
+ status: string;
+ budget: string;
+}
+
+// Define the table data using the interface
+const tableData: Order[] = [
+ {
+ id: 1,
+ user: {
+ image: "/images/user/user-17.jpg",
+ name: "Lindsey Curtis",
+ role: "Web Designer",
+ },
+ projectName: "Agency Website",
+ team: {
+ images: [
+ "/images/user/user-22.jpg",
+ "/images/user/user-23.jpg",
+ "/images/user/user-24.jpg",
+ ],
+ },
+ budget: "3.9K",
+ status: "Active",
+ },
+ {
+ id: 2,
+ user: {
+ image: "/images/user/user-18.jpg",
+ name: "Kaiya George",
+ role: "Project Manager",
+ },
+ projectName: "Technology",
+ team: {
+ images: ["/images/user/user-25.jpg", "/images/user/user-26.jpg"],
+ },
+ budget: "24.9K",
+ status: "Pending",
+ },
+ {
+ id: 3,
+ user: {
+ image: "/images/user/user-17.jpg",
+ name: "Zain Geidt",
+ role: "Content Writing",
+ },
+ projectName: "Blog Writing",
+ team: {
+ images: ["/images/user/user-27.jpg"],
+ },
+ budget: "12.7K",
+ status: "Active",
+ },
+ {
+ id: 4,
+ user: {
+ image: "/images/user/user-20.jpg",
+ name: "Abram Schleifer",
+ role: "Digital Marketer",
+ },
+ projectName: "Social Media",
+ team: {
+ images: [
+ "/images/user/user-28.jpg",
+ "/images/user/user-29.jpg",
+ "/images/user/user-30.jpg",
+ ],
+ },
+ budget: "2.8K",
+ status: "Cancel",
+ },
+ {
+ id: 5,
+ user: {
+ image: "/images/user/user-21.jpg",
+ name: "Carla George",
+ role: "Front-end Developer",
+ },
+ projectName: "Website",
+ team: {
+ images: [
+ "/images/user/user-31.jpg",
+ "/images/user/user-32.jpg",
+ "/images/user/user-33.jpg",
+ ],
+ },
+ budget: "4.5K",
+ status: "Active",
+ },
+];
+
+export default function BasicTableOne() {
+ return (
+
+
+
+
+ {/* Table Header */}
+
+
+
+ User
+
+
+ Project Name
+
+
+ Team
+
+
+ Status
+
+
+ Budget
+
+
+
+
+ {/* Table Body */}
+
+ {tableData.map((order) => (
+
+
+
+
+
+
+
+
+ {order.user.name}
+
+
+ {order.user.role}
+
+
+
+
+
+ {order.projectName}
+
+
+
+ {order.team.images.map((teamImage, index) => (
+
+
+
+ ))}
+
+
+
+
+ {order.status}
+
+
+
+ {order.budget}
+
+
+ ))}
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/tables/Pagination.tsx b/frontend/src/components/tables/Pagination.tsx
new file mode 100644
index 0000000000..354e804150
--- /dev/null
+++ b/frontend/src/components/tables/Pagination.tsx
@@ -0,0 +1,54 @@
+type PaginationProps = {
+ currentPage: number;
+ totalPages: number;
+ onPageChange: (page: number) => void;
+};
+
+const Pagination: React.FC = ({
+ currentPage,
+ totalPages,
+ onPageChange,
+}) => {
+ const pagesAroundCurrent = Array.from(
+ { length: Math.min(3, totalPages) },
+ (_, i) => i + Math.max(currentPage - 1, 1)
+ );
+
+ return (
+
+
onPageChange(currentPage - 1)}
+ disabled={currentPage === 1}
+ className="mr-2.5 flex items-center h-10 justify-center rounded-lg border border-gray-300 bg-white px-3.5 py-2.5 text-gray-700 shadow-theme-xs hover:bg-gray-50 disabled:opacity-50 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-white/[0.03] text-sm"
+ >
+ Previous
+
+
+ {currentPage > 3 && ... }
+ {pagesAroundCurrent.map((page) => (
+ onPageChange(page)}
+ className={`px-4 py-2 rounded ${
+ currentPage === page
+ ? "bg-brand-500 text-white"
+ : "text-gray-700 dark:text-gray-400"
+ } flex w-10 items-center justify-center h-10 rounded-lg text-sm font-medium hover:bg-blue-500/[0.08] hover:text-brand-500 dark:hover:text-brand-500`}
+ >
+ {page}
+
+ ))}
+ {currentPage < totalPages - 2 && ... }
+
+
onPageChange(currentPage + 1)}
+ disabled={currentPage === totalPages}
+ className="ml-2.5 flex items-center justify-center rounded-lg border border-gray-300 bg-white px-3.5 py-2.5 text-gray-700 shadow-theme-xs text-sm hover:bg-gray-50 h-10 disabled:opacity-50 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-white/[0.03]"
+ >
+ Next
+
+
+ );
+};
+
+export default Pagination;
diff --git a/frontend/src/components/ui/alert/Alert.tsx b/frontend/src/components/ui/alert/Alert.tsx
new file mode 100644
index 0000000000..352e14b362
--- /dev/null
+++ b/frontend/src/components/ui/alert/Alert.tsx
@@ -0,0 +1,145 @@
+import Link from "next/link";
+import React from "react";
+
+interface AlertProps {
+ variant: "success" | "error" | "warning" | "info"; // Alert type
+ title: string; // Title of the alert
+ message: string; // Message of the alert
+ showLink?: boolean; // Whether to show the "Learn More" link
+ linkHref?: string; // Link URL
+ linkText?: string; // Link text
+}
+
+const Alert: React.FC = ({
+ variant,
+ title,
+ message,
+ showLink = false,
+ linkHref = "#",
+ linkText = "Learn more",
+}) => {
+ // Tailwind classes for each variant
+ const variantClasses = {
+ success: {
+ container:
+ "border-success-500 bg-success-50 dark:border-success-500/30 dark:bg-success-500/15",
+ icon: "text-success-500",
+ },
+ error: {
+ container:
+ "border-error-500 bg-error-50 dark:border-error-500/30 dark:bg-error-500/15",
+ icon: "text-error-500",
+ },
+ warning: {
+ container:
+ "border-warning-500 bg-warning-50 dark:border-warning-500/30 dark:bg-warning-500/15",
+ icon: "text-warning-500",
+ },
+ info: {
+ container:
+ "border-blue-light-500 bg-blue-light-50 dark:border-blue-light-500/30 dark:bg-blue-light-500/15",
+ icon: "text-blue-light-500",
+ },
+ };
+
+ // Icon for each variant
+ const icons = {
+ success: (
+
+
+
+ ),
+ error: (
+
+
+
+ ),
+ warning: (
+
+
+
+ ),
+ info: (
+
+
+
+ ),
+ };
+
+ return (
+
+
+
+ {icons[variant]}
+
+
+
+
+ {title}
+
+
+
{message}
+
+ {showLink && (
+
+ {linkText}
+
+ )}
+
+
+
+ );
+};
+
+export default Alert;
diff --git a/frontend/src/components/ui/avatar/Avatar.tsx b/frontend/src/components/ui/avatar/Avatar.tsx
new file mode 100644
index 0000000000..cb1dd8172f
--- /dev/null
+++ b/frontend/src/components/ui/avatar/Avatar.tsx
@@ -0,0 +1,65 @@
+import Image from "next/image";
+import React from "react";
+
+interface AvatarProps {
+ src: string; // URL of the avatar image
+ alt?: string; // Alt text for the avatar
+ size?: "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge"; // Avatar size
+ status?: "online" | "offline" | "busy" | "none"; // Status indicator
+}
+
+const sizeClasses = {
+ xsmall: "h-6 w-6 max-w-6",
+ small: "h-8 w-8 max-w-8",
+ medium: "h-10 w-10 max-w-10",
+ large: "h-12 w-12 max-w-12",
+ xlarge: "h-14 w-14 max-w-14",
+ xxlarge: "h-16 w-16 max-w-16",
+};
+
+const statusSizeClasses = {
+ xsmall: "h-1.5 w-1.5 max-w-1.5",
+ small: "h-2 w-2 max-w-2",
+ medium: "h-2.5 w-2.5 max-w-2.5",
+ large: "h-3 w-3 max-w-3",
+ xlarge: "h-3.5 w-3.5 max-w-3.5",
+ xxlarge: "h-4 w-4 max-w-4",
+};
+
+const statusColorClasses = {
+ online: "bg-success-500",
+ offline: "bg-error-400",
+ busy: "bg-warning-500",
+};
+
+const Avatar: React.FC = ({
+ src,
+ alt = "User Avatar",
+ size = "medium",
+ status = "none",
+}) => {
+ return (
+
+ {/* Avatar Image */}
+
+
+ {/* Status Indicator */}
+ {status !== "none" && (
+
+ )}
+
+ );
+};
+
+export default Avatar;
diff --git a/frontend/src/components/ui/avatar/AvatarText.tsx b/frontend/src/components/ui/avatar/AvatarText.tsx
new file mode 100644
index 0000000000..5a3e101dd3
--- /dev/null
+++ b/frontend/src/components/ui/avatar/AvatarText.tsx
@@ -0,0 +1,47 @@
+import React from "react";
+
+interface AvatarTextProps {
+ name: string;
+ className?: string;
+}
+
+const AvatarText: React.FC = ({ name, className = "" }) => {
+ // Generate initials from name
+ const initials = name
+ .split(" ")
+ .map((word) => word[0])
+ .join("")
+ .toUpperCase()
+ .slice(0, 2);
+
+ // Generate a consistent pastel color based on the name
+ const getColorClass = (name: string) => {
+ const colors = [
+ "bg-brand-100 text-brand-600",
+ "bg-pink-100 text-pink-600",
+ "bg-cyan-100 text-cyan-600",
+ "bg-orange-100 text-orange-600",
+ "bg-green-100 text-green-600",
+ "bg-purple-100 text-purple-600",
+ "bg-yellow-100 text-yellow-600",
+ "bg-error-100 text-error-600",
+ ];
+
+ const index = name
+ .split("")
+ .reduce((acc, char) => acc + char.charCodeAt(0), 0);
+ return colors[index % colors.length];
+ };
+
+ return (
+
+ {initials}
+
+ );
+};
+
+export default AvatarText;
diff --git a/frontend/src/components/ui/badge/Badge.tsx b/frontend/src/components/ui/badge/Badge.tsx
new file mode 100644
index 0000000000..9c60553852
--- /dev/null
+++ b/frontend/src/components/ui/badge/Badge.tsx
@@ -0,0 +1,79 @@
+import React from "react";
+
+type BadgeVariant = "light" | "solid";
+type BadgeSize = "sm" | "md";
+type BadgeColor =
+ | "primary"
+ | "success"
+ | "error"
+ | "warning"
+ | "info"
+ | "light"
+ | "dark";
+
+interface BadgeProps {
+ variant?: BadgeVariant; // Light or solid variant
+ size?: BadgeSize; // Badge size
+ color?: BadgeColor; // Badge color
+ startIcon?: React.ReactNode; // Icon at the start
+ endIcon?: React.ReactNode; // Icon at the end
+ children: React.ReactNode; // Badge content
+}
+
+const Badge: React.FC = ({
+ variant = "light",
+ color = "primary",
+ size = "md",
+ startIcon,
+ endIcon,
+ children,
+}) => {
+ const baseStyles =
+ "inline-flex items-center px-2.5 py-0.5 justify-center gap-1 rounded-full font-medium";
+
+ // Define size styles
+ const sizeStyles = {
+ sm: "text-theme-xs", // Smaller padding and font size
+ md: "text-sm", // Default padding and font size
+ };
+
+ // Define color styles for variants
+ const variants = {
+ light: {
+ primary:
+ "bg-brand-50 text-brand-500 dark:bg-brand-500/15 dark:text-brand-400",
+ success:
+ "bg-success-50 text-success-600 dark:bg-success-500/15 dark:text-success-500",
+ error:
+ "bg-error-50 text-error-600 dark:bg-error-500/15 dark:text-error-500",
+ warning:
+ "bg-warning-50 text-warning-600 dark:bg-warning-500/15 dark:text-orange-400",
+ info: "bg-blue-light-50 text-blue-light-500 dark:bg-blue-light-500/15 dark:text-blue-light-500",
+ light: "bg-gray-100 text-gray-700 dark:bg-white/5 dark:text-white/80",
+ dark: "bg-gray-500 text-white dark:bg-white/5 dark:text-white",
+ },
+ solid: {
+ primary: "bg-brand-500 text-white dark:text-white",
+ success: "bg-success-500 text-white dark:text-white",
+ error: "bg-error-500 text-white dark:text-white",
+ warning: "bg-warning-500 text-white dark:text-white",
+ info: "bg-blue-light-500 text-white dark:text-white",
+ light: "bg-gray-400 dark:bg-white/5 text-white dark:text-white/80",
+ dark: "bg-gray-700 text-white dark:text-white",
+ },
+ };
+
+ // Get styles based on size and color variant
+ const sizeClass = sizeStyles[size];
+ const colorStyles = variants[variant][color];
+
+ return (
+
+ {startIcon && {startIcon} }
+ {children}
+ {endIcon && {endIcon} }
+
+ );
+};
+
+export default Badge;
diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx
deleted file mode 100644
index 21d5f4b550..0000000000
--- a/frontend/src/components/ui/button.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import type { ButtonProps as ChakraButtonProps } from "@chakra-ui/react"
-import {
- AbsoluteCenter,
- Button as ChakraButton,
- Span,
- Spinner,
-} from "@chakra-ui/react"
-import * as React from "react"
-
-interface ButtonLoadingProps {
- loading?: boolean
- loadingText?: React.ReactNode
-}
-
-export interface ButtonProps extends ChakraButtonProps, ButtonLoadingProps {}
-
-export const Button = React.forwardRef(
- function Button(props, ref) {
- const { loading, disabled, loadingText, children, ...rest } = props
- return (
-
- {loading && !loadingText ? (
- <>
-
-
-
- {children}
- >
- ) : loading && loadingText ? (
- <>
-
- {loadingText}
- >
- ) : (
- children
- )}
-
- )
- },
-)
diff --git a/frontend/src/components/ui/button/Button.tsx b/frontend/src/components/ui/button/Button.tsx
new file mode 100644
index 0000000000..fa9c7f10a4
--- /dev/null
+++ b/frontend/src/components/ui/button/Button.tsx
@@ -0,0 +1,55 @@
+import React, { ReactNode } from "react";
+
+interface ButtonProps {
+ children: ReactNode; // Button text or content
+ size?: "sm" | "md"; // Button size
+ variant?: "primary" | "outline"; // Button variant
+ startIcon?: ReactNode; // Icon before the text
+ endIcon?: ReactNode; // Icon after the text
+ onClick?: () => void; // Click handler
+ disabled?: boolean; // Disabled state
+ className?: string; // Disabled state
+}
+
+const Button: React.FC = ({
+ children,
+ size = "md",
+ variant = "primary",
+ startIcon,
+ endIcon,
+ onClick,
+ className = "",
+ disabled = false,
+}) => {
+ // Size Classes
+ const sizeClasses = {
+ sm: "px-4 py-3 text-sm",
+ md: "px-5 py-3.5 text-sm",
+ };
+
+ // Variant Classes
+ const variantClasses = {
+ primary:
+ "bg-brand-500 text-white shadow-theme-xs hover:bg-brand-600 disabled:bg-brand-300",
+ outline:
+ "bg-white text-gray-700 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 dark:bg-gray-800 dark:text-gray-400 dark:ring-gray-700 dark:hover:bg-white/[0.03] dark:hover:text-gray-300",
+ };
+
+ return (
+
+ {startIcon && {startIcon} }
+ {children}
+ {endIcon && {endIcon} }
+
+ );
+};
+
+export default Button;
diff --git a/frontend/src/components/ui/button/SpinnerButton.tsx b/frontend/src/components/ui/button/SpinnerButton.tsx
new file mode 100644
index 0000000000..0fa3c9daca
--- /dev/null
+++ b/frontend/src/components/ui/button/SpinnerButton.tsx
@@ -0,0 +1,41 @@
+import React, { ReactNode } from "react";
+import Button from "./Button";
+import Spinner from "@/components/ui/spinner";
+
+interface SpinnerButtonProps {
+ variant?: "primary" | "secondary" | "tertiary"; // Button variant
+ size?: "sm" | "md" | undefined;
+ children: ReactNode; // Button text or content
+ startIcon?: ReactNode; // Icon before the text
+ onClick?: () => void; // Click handler
+ disabled?: boolean; // Disabled state
+ className?: string; // Disabled state
+ loading?: boolean; // Loading state
+}
+
+const SpinnerButton: React.FC = ({
+ children,
+ startIcon,
+ onClick,
+ className = "",
+ disabled = false,
+ loading = false,
+ ...props
+}) => {
+ return (
+ : startIcon}
+ disabled={disabled || loading}
+ onClick={onClick}
+ className={className}
+ variant="primary"
+
+
+ >
+ {children}
+
+ );
+};
+
+export default SpinnerButton;
diff --git a/frontend/src/components/ui/checkbox.tsx b/frontend/src/components/ui/checkbox.tsx
deleted file mode 100644
index 2a27c2ffb3..0000000000
--- a/frontend/src/components/ui/checkbox.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Checkbox as ChakraCheckbox } from "@chakra-ui/react"
-import * as React from "react"
-
-export interface CheckboxProps extends ChakraCheckbox.RootProps {
- icon?: React.ReactNode
- inputProps?: React.InputHTMLAttributes
- rootRef?: React.Ref
-}
-
-export const Checkbox = React.forwardRef(
- function Checkbox(props, ref) {
- const { icon, children, inputProps, rootRef, ...rest } = props
- return (
-
-
-
- {icon || }
-
- {children != null && (
- {children}
- )}
-
- )
- },
-)
diff --git a/frontend/src/components/ui/close-button.tsx b/frontend/src/components/ui/close-button.tsx
deleted file mode 100644
index 94af488598..0000000000
--- a/frontend/src/components/ui/close-button.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import type { ButtonProps } from "@chakra-ui/react"
-import { IconButton as ChakraIconButton } from "@chakra-ui/react"
-import * as React from "react"
-import { LuX } from "react-icons/lu"
-
-export type CloseButtonProps = ButtonProps
-
-export const CloseButton = React.forwardRef<
- HTMLButtonElement,
- CloseButtonProps
->(function CloseButton(props, ref) {
- return (
-
- {props.children ?? }
-
- )
-})
diff --git a/frontend/src/components/ui/color-mode.tsx b/frontend/src/components/ui/color-mode.tsx
deleted file mode 100644
index f93feabca9..0000000000
--- a/frontend/src/components/ui/color-mode.tsx
+++ /dev/null
@@ -1,107 +0,0 @@
-"use client"
-
-import type { IconButtonProps, SpanProps } from "@chakra-ui/react"
-import { ClientOnly, IconButton, Skeleton, Span } from "@chakra-ui/react"
-import { ThemeProvider, useTheme } from "next-themes"
-import type { ThemeProviderProps } from "next-themes"
-import * as React from "react"
-import { LuMoon, LuSun } from "react-icons/lu"
-
-export interface ColorModeProviderProps extends ThemeProviderProps {}
-
-export function ColorModeProvider(props: ColorModeProviderProps) {
- return (
-
- )
-}
-
-export type ColorMode = "light" | "dark"
-
-export interface UseColorModeReturn {
- colorMode: ColorMode
- setColorMode: (colorMode: ColorMode) => void
- toggleColorMode: () => void
-}
-
-export function useColorMode(): UseColorModeReturn {
- const { resolvedTheme, setTheme } = useTheme()
- const toggleColorMode = () => {
- setTheme(resolvedTheme === "dark" ? "light" : "dark")
- }
- return {
- colorMode: resolvedTheme as ColorMode,
- setColorMode: setTheme,
- toggleColorMode,
- }
-}
-
-export function useColorModeValue(light: T, dark: T) {
- const { colorMode } = useColorMode()
- return colorMode === "dark" ? dark : light
-}
-
-export function ColorModeIcon() {
- const { colorMode } = useColorMode()
- return colorMode === "dark" ? :
-}
-
-interface ColorModeButtonProps extends Omit {}
-
-export const ColorModeButton = React.forwardRef<
- HTMLButtonElement,
- ColorModeButtonProps
->(function ColorModeButton(props, ref) {
- const { toggleColorMode } = useColorMode()
- return (
- }>
-
-
-
-
- )
-})
-
-export const LightMode = React.forwardRef(
- function LightMode(props, ref) {
- return (
-
- )
- },
-)
-
-export const DarkMode = React.forwardRef(
- function DarkMode(props, ref) {
- return (
-
- )
- },
-)
diff --git a/frontend/src/components/ui/dialog.tsx b/frontend/src/components/ui/dialog.tsx
deleted file mode 100644
index 1a038373ac..0000000000
--- a/frontend/src/components/ui/dialog.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { Dialog as ChakraDialog, Portal } from "@chakra-ui/react"
-import * as React from "react"
-import { CloseButton } from "./close-button"
-
-interface DialogContentProps extends ChakraDialog.ContentProps {
- portalled?: boolean
- portalRef?: React.RefObject
- backdrop?: boolean
-}
-
-export const DialogContent = React.forwardRef<
- HTMLDivElement,
- DialogContentProps
->(function DialogContent(props, ref) {
- const {
- children,
- portalled = true,
- portalRef,
- backdrop = true,
- ...rest
- } = props
-
- return (
-
- {backdrop && }
-
-
- {children}
-
-
-
- )
-})
-
-export const DialogCloseTrigger = React.forwardRef<
- HTMLButtonElement,
- ChakraDialog.CloseTriggerProps
->(function DialogCloseTrigger(props, ref) {
- return (
-
-
- {props.children}
-
-
- )
-})
-
-export const DialogRoot = ChakraDialog.Root
-export const DialogFooter = ChakraDialog.Footer
-export const DialogHeader = ChakraDialog.Header
-export const DialogBody = ChakraDialog.Body
-export const DialogBackdrop = ChakraDialog.Backdrop
-export const DialogTitle = ChakraDialog.Title
-export const DialogDescription = ChakraDialog.Description
-export const DialogTrigger = ChakraDialog.Trigger
-export const DialogActionTrigger = ChakraDialog.ActionTrigger
diff --git a/frontend/src/components/ui/drawer.tsx b/frontend/src/components/ui/drawer.tsx
deleted file mode 100644
index 7b0dab3b9d..0000000000
--- a/frontend/src/components/ui/drawer.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { Drawer as ChakraDrawer, Portal } from "@chakra-ui/react"
-import * as React from "react"
-import { CloseButton } from "./close-button"
-
-interface DrawerContentProps extends ChakraDrawer.ContentProps {
- portalled?: boolean
- portalRef?: React.RefObject
- offset?: ChakraDrawer.ContentProps["padding"]
-}
-
-export const DrawerContent = React.forwardRef<
- HTMLDivElement,
- DrawerContentProps
->(function DrawerContent(props, ref) {
- const { children, portalled = true, portalRef, offset, ...rest } = props
- return (
-
-
-
- {children}
-
-
-
- )
-})
-
-export const DrawerCloseTrigger = React.forwardRef<
- HTMLButtonElement,
- ChakraDrawer.CloseTriggerProps
->(function DrawerCloseTrigger(props, ref) {
- return (
-
-
-
- )
-})
-
-export const DrawerTrigger = ChakraDrawer.Trigger
-export const DrawerRoot = ChakraDrawer.Root
-export const DrawerFooter = ChakraDrawer.Footer
-export const DrawerHeader = ChakraDrawer.Header
-export const DrawerBody = ChakraDrawer.Body
-export const DrawerBackdrop = ChakraDrawer.Backdrop
-export const DrawerDescription = ChakraDrawer.Description
-export const DrawerTitle = ChakraDrawer.Title
-export const DrawerActionTrigger = ChakraDrawer.ActionTrigger
diff --git a/frontend/src/components/ui/dropdown/Dropdown.tsx b/frontend/src/components/ui/dropdown/Dropdown.tsx
new file mode 100644
index 0000000000..92d65b333a
--- /dev/null
+++ b/frontend/src/components/ui/dropdown/Dropdown.tsx
@@ -0,0 +1,48 @@
+"use client";
+import type React from "react";
+import { useEffect, useRef } from "react";
+
+interface DropdownProps {
+ isOpen: boolean;
+ onClose: () => void;
+ children: React.ReactNode;
+ className?: string;
+}
+
+export const Dropdown: React.FC = ({
+ isOpen,
+ onClose,
+ children,
+ className = "",
+}) => {
+ const dropdownRef = useRef(null);
+
+ useEffect(() => {
+ const handleClickOutside = (event: MouseEvent) => {
+ if (
+ dropdownRef.current &&
+ !dropdownRef.current.contains(event.target as Node) &&
+ !(event.target as HTMLElement).closest('.dropdown-toggle')
+ ) {
+ onClose();
+ }
+ };
+
+ document.addEventListener("mousedown", handleClickOutside);
+ return () => {
+ document.removeEventListener("mousedown", handleClickOutside);
+ };
+}, [onClose]);
+
+
+ if (!isOpen) return null;
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/frontend/src/components/ui/dropdown/DropdownItem.tsx b/frontend/src/components/ui/dropdown/DropdownItem.tsx
new file mode 100644
index 0000000000..54d6cdf1be
--- /dev/null
+++ b/frontend/src/components/ui/dropdown/DropdownItem.tsx
@@ -0,0 +1,46 @@
+import type React from "react";
+import Link from "next/link";
+
+interface DropdownItemProps {
+ tag?: "a" | "button";
+ href?: string;
+ onClick?: () => void;
+ onItemClick?: () => void;
+ baseClassName?: string;
+ className?: string;
+ children: React.ReactNode;
+}
+
+export const DropdownItem: React.FC = ({
+ tag = "button",
+ href,
+ onClick,
+ onItemClick,
+ baseClassName = "block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900",
+ className = "",
+ children,
+}) => {
+ const combinedClasses = `${baseClassName} ${className}`.trim();
+
+ const handleClick = (event: React.MouseEvent) => {
+ if (tag === "button") {
+ event.preventDefault();
+ }
+ if (onClick) onClick();
+ if (onItemClick) onItemClick();
+ };
+
+ if (tag === "a" && href) {
+ return (
+
+ {children}
+
+ );
+ }
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/frontend/src/components/ui/field.tsx b/frontend/src/components/ui/field.tsx
deleted file mode 100644
index dd3b66f100..0000000000
--- a/frontend/src/components/ui/field.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Field as ChakraField } from "@chakra-ui/react"
-import * as React from "react"
-
-export interface FieldProps extends Omit {
- label?: React.ReactNode
- helperText?: React.ReactNode
- errorText?: React.ReactNode
- optionalText?: React.ReactNode
-}
-
-export const Field = React.forwardRef(
- function Field(props, ref) {
- const { label, children, helperText, errorText, optionalText, ...rest } =
- props
- return (
-
- {label && (
-
- {label}
-
-
- )}
- {children}
- {helperText && (
- {helperText}
- )}
- {errorText && (
- {errorText}
- )}
-
- )
- },
-)
diff --git a/frontend/src/components/ui/images/ResponsiveImage.tsx b/frontend/src/components/ui/images/ResponsiveImage.tsx
new file mode 100644
index 0000000000..e0f3c29086
--- /dev/null
+++ b/frontend/src/components/ui/images/ResponsiveImage.tsx
@@ -0,0 +1,18 @@
+import Image from "next/image";
+import React from "react";
+
+export default function ResponsiveImage() {
+ return (
+
+ );
+}
diff --git a/frontend/src/components/ui/images/ThreeColumnImageGrid.tsx b/frontend/src/components/ui/images/ThreeColumnImageGrid.tsx
new file mode 100644
index 0000000000..780c0b5956
--- /dev/null
+++ b/frontend/src/components/ui/images/ThreeColumnImageGrid.tsx
@@ -0,0 +1,38 @@
+import Image from "next/image";
+import React from "react";
+
+export default function ThreeColumnImageGrid() {
+ return (
+
+ );
+}
diff --git a/frontend/src/components/ui/images/TwoColumnImageGrid.tsx b/frontend/src/components/ui/images/TwoColumnImageGrid.tsx
new file mode 100644
index 0000000000..ce740b53db
--- /dev/null
+++ b/frontend/src/components/ui/images/TwoColumnImageGrid.tsx
@@ -0,0 +1,28 @@
+import Image from "next/image";
+import React from "react";
+
+export default function TwoColumnImageGrid() {
+ return (
+
+ );
+}
diff --git a/frontend/src/components/ui/input-group.tsx b/frontend/src/components/ui/input-group.tsx
deleted file mode 100644
index 5d8fb32ad2..0000000000
--- a/frontend/src/components/ui/input-group.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import type { BoxProps, InputElementProps } from "@chakra-ui/react"
-import { Group, InputElement } from "@chakra-ui/react"
-import * as React from "react"
-
-export interface InputGroupProps extends BoxProps {
- startElementProps?: InputElementProps
- endElementProps?: InputElementProps
- startElement?: React.ReactNode
- endElement?: React.ReactNode
- children: React.ReactElement
- startOffset?: InputElementProps["paddingStart"]
- endOffset?: InputElementProps["paddingEnd"]
-}
-
-export const InputGroup = React.forwardRef(
- function InputGroup(props, ref) {
- const {
- startElement,
- startElementProps,
- endElement,
- endElementProps,
- children,
- startOffset = "6px",
- endOffset = "6px",
- ...rest
- } = props
-
- const child =
- React.Children.only>(children)
-
- return (
-
- {startElement && (
-
- {startElement}
-
- )}
- {React.cloneElement(child, {
- ...(startElement && {
- ps: `calc(var(--input-height) - ${startOffset})`,
- }),
- ...(endElement && { pe: `calc(var(--input-height) - ${endOffset})` }),
- ...children.props,
- })}
- {endElement && (
-
- {endElement}
-
- )}
-
- )
- },
-)
diff --git a/frontend/src/components/ui/link-button.tsx b/frontend/src/components/ui/link-button.tsx
deleted file mode 100644
index defa1c3776..0000000000
--- a/frontend/src/components/ui/link-button.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-"use client"
-
-import type { HTMLChakraProps, RecipeProps } from "@chakra-ui/react"
-import { createRecipeContext } from "@chakra-ui/react"
-
-export interface LinkButtonProps
- extends HTMLChakraProps<"a", RecipeProps<"button">> {}
-
-const { withContext } = createRecipeContext({ key: "button" })
-
-// Replace "a" with your framework's link component
-export const LinkButton = withContext("a")
diff --git a/frontend/src/components/ui/list/ListWithRadio.tsx b/frontend/src/components/ui/list/ListWithRadio.tsx
new file mode 100644
index 0000000000..57b45adca9
--- /dev/null
+++ b/frontend/src/components/ui/list/ListWithRadio.tsx
@@ -0,0 +1,68 @@
+"use client";
+import React, { useState } from "react";
+import RadioSm from "../../form/input/RadioSm";
+
+export default function ListWithRadio() {
+ const [selectedValue, setSelectedValue] = useState("option1");
+
+ const handleChange = (value: string) => {
+ setSelectedValue(value);
+ console.log("Selected Value:", value);
+ };
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/ui/menu.tsx b/frontend/src/components/ui/menu.tsx
deleted file mode 100644
index 08e5db64f8..0000000000
--- a/frontend/src/components/ui/menu.tsx
+++ /dev/null
@@ -1,112 +0,0 @@
-"use client"
-
-import { AbsoluteCenter, Menu as ChakraMenu, Portal } from "@chakra-ui/react"
-import * as React from "react"
-import { LuCheck, LuChevronRight } from "react-icons/lu"
-
-interface MenuContentProps extends ChakraMenu.ContentProps {
- portalled?: boolean
- portalRef?: React.RefObject
-}
-
-export const MenuContent = React.forwardRef(
- function MenuContent(props, ref) {
- const { portalled = true, portalRef, ...rest } = props
- return (
-
-
-
-
-
- )
- },
-)
-
-export const MenuArrow = React.forwardRef<
- HTMLDivElement,
- ChakraMenu.ArrowProps
->(function MenuArrow(props, ref) {
- return (
-
-
-
- )
-})
-
-export const MenuCheckboxItem = React.forwardRef<
- HTMLDivElement,
- ChakraMenu.CheckboxItemProps
->(function MenuCheckboxItem(props, ref) {
- return (
-
-
-
-
-
-
- {props.children}
-
- )
-})
-
-export const MenuRadioItem = React.forwardRef<
- HTMLDivElement,
- ChakraMenu.RadioItemProps
->(function MenuRadioItem(props, ref) {
- const { children, ...rest } = props
- return (
-
-
-
-
-
-
- {children}
-
- )
-})
-
-export const MenuItemGroup = React.forwardRef<
- HTMLDivElement,
- ChakraMenu.ItemGroupProps
->(function MenuItemGroup(props, ref) {
- const { title, children, ...rest } = props
- return (
-
- {title && (
-
- {title}
-
- )}
- {children}
-
- )
-})
-
-export interface MenuTriggerItemProps extends ChakraMenu.ItemProps {
- startIcon?: React.ReactNode
-}
-
-export const MenuTriggerItem = React.forwardRef<
- HTMLDivElement,
- MenuTriggerItemProps
->(function MenuTriggerItem(props, ref) {
- const { startIcon, children, ...rest } = props
- return (
-
- {startIcon}
- {children}
-
-
- )
-})
-
-export const MenuRadioItemGroup = ChakraMenu.RadioItemGroup
-export const MenuContextTrigger = ChakraMenu.ContextTrigger
-export const MenuRoot = ChakraMenu.Root
-export const MenuSeparator = ChakraMenu.Separator
-
-export const MenuItem = ChakraMenu.Item
-export const MenuItemText = ChakraMenu.ItemText
-export const MenuItemCommand = ChakraMenu.ItemCommand
-export const MenuTrigger = ChakraMenu.Trigger
diff --git a/frontend/src/components/ui/modal/index.tsx b/frontend/src/components/ui/modal/index.tsx
new file mode 100644
index 0000000000..7048e38a56
--- /dev/null
+++ b/frontend/src/components/ui/modal/index.tsx
@@ -0,0 +1,95 @@
+"use client";
+import React, { useRef, useEffect } from "react";
+
+interface ModalProps {
+ isOpen: boolean;
+ onClose: () => void;
+ className?: string;
+ children: React.ReactNode;
+ showCloseButton?: boolean; // New prop to control close button visibility
+ isFullscreen?: boolean; // Default to false for backwards compatibility
+}
+
+export const Modal: React.FC = ({
+ isOpen,
+ onClose,
+ children,
+ className,
+ showCloseButton = true, // Default to true for backwards compatibility
+ isFullscreen = false,
+}) => {
+ const modalRef = useRef(null);
+
+ useEffect(() => {
+ const handleEscape = (event: KeyboardEvent) => {
+ if (event.key === "Escape") {
+ onClose();
+ }
+ };
+
+ if (isOpen) {
+ document.addEventListener("keydown", handleEscape);
+ }
+
+ return () => {
+ document.removeEventListener("keydown", handleEscape);
+ };
+ }, [isOpen, onClose]);
+
+ useEffect(() => {
+ if (isOpen) {
+ document.body.style.overflow = "hidden";
+ } else {
+ document.body.style.overflow = "unset";
+ }
+
+ return () => {
+ document.body.style.overflow = "unset";
+ };
+ }, [isOpen]);
+
+ if (!isOpen) return null;
+
+ const contentClasses = isFullscreen
+ ? "w-full h-full"
+ : "relative w-full rounded-3xl bg-white dark:bg-gray-900";
+
+ return (
+
+ {!isFullscreen && (
+
+ )}
+
e.stopPropagation()}
+ >
+ {showCloseButton && (
+
+
+
+
+
+ )}
+
{children}
+
+
+ );
+};
diff --git a/frontend/src/components/ui/pagination.tsx b/frontend/src/components/ui/pagination.tsx
deleted file mode 100644
index 706e2da854..0000000000
--- a/frontend/src/components/ui/pagination.tsx
+++ /dev/null
@@ -1,211 +0,0 @@
-"use client"
-
-import type { ButtonProps, TextProps } from "@chakra-ui/react"
-import {
- Button,
- Pagination as ChakraPagination,
- IconButton,
- Text,
- createContext,
- usePaginationContext,
-} from "@chakra-ui/react"
-import * as React from "react"
-import {
- HiChevronLeft,
- HiChevronRight,
- HiMiniEllipsisHorizontal,
-} from "react-icons/hi2"
-import { LinkButton } from "./link-button"
-
-interface ButtonVariantMap {
- current: ButtonProps["variant"]
- default: ButtonProps["variant"]
- ellipsis: ButtonProps["variant"]
-}
-
-type PaginationVariant = "outline" | "solid" | "subtle"
-
-interface ButtonVariantContext {
- size: ButtonProps["size"]
- variantMap: ButtonVariantMap
- getHref?: (page: number) => string
-}
-
-const [RootPropsProvider, useRootProps] = createContext({
- name: "RootPropsProvider",
-})
-
-export interface PaginationRootProps
- extends Omit {
- size?: ButtonProps["size"]
- variant?: PaginationVariant
- getHref?: (page: number) => string
-}
-
-const variantMap: Record = {
- outline: { default: "ghost", ellipsis: "plain", current: "outline" },
- solid: { default: "outline", ellipsis: "outline", current: "solid" },
- subtle: { default: "ghost", ellipsis: "plain", current: "subtle" },
-}
-
-export const PaginationRoot = React.forwardRef<
- HTMLDivElement,
- PaginationRootProps
->(function PaginationRoot(props, ref) {
- const { size = "sm", variant = "outline", getHref, ...rest } = props
- return (
-
-
-
- )
-})
-
-export const PaginationEllipsis = React.forwardRef<
- HTMLDivElement,
- ChakraPagination.EllipsisProps
->(function PaginationEllipsis(props, ref) {
- const { size, variantMap } = useRootProps()
- return (
-
-
-
-
-
- )
-})
-
-export const PaginationItem = React.forwardRef<
- HTMLButtonElement,
- ChakraPagination.ItemProps
->(function PaginationItem(props, ref) {
- const { page } = usePaginationContext()
- const { size, variantMap, getHref } = useRootProps()
-
- const current = page === props.value
- const variant = current ? variantMap.current : variantMap.default
-
- if (getHref) {
- return (
-
- {props.value}
-
- )
- }
-
- return (
-
-
- {props.value}
-
-
- )
-})
-
-export const PaginationPrevTrigger = React.forwardRef<
- HTMLButtonElement,
- ChakraPagination.PrevTriggerProps
->(function PaginationPrevTrigger(props, ref) {
- const { size, variantMap, getHref } = useRootProps()
- const { previousPage } = usePaginationContext()
-
- if (getHref) {
- return (
-
-
-
- )
- }
-
- return (
-
-
-
-
-
- )
-})
-
-export const PaginationNextTrigger = React.forwardRef<
- HTMLButtonElement,
- ChakraPagination.NextTriggerProps
->(function PaginationNextTrigger(props, ref) {
- const { size, variantMap, getHref } = useRootProps()
- const { nextPage } = usePaginationContext()
-
- if (getHref) {
- return (
-
-
-
- )
- }
-
- return (
-
-
-
-
-
- )
-})
-
-export const PaginationItems = (props: React.HTMLAttributes) => {
- return (
-
- {({ pages }) =>
- pages.map((page, index) => {
- return page.type === "ellipsis" ? (
-
- ) : (
-
- )
- })
- }
-
- )
-}
-
-interface PageTextProps extends TextProps {
- format?: "short" | "compact" | "long"
-}
-
-export const PaginationPageText = React.forwardRef<
- HTMLParagraphElement,
- PageTextProps
->(function PaginationPageText(props, ref) {
- const { format = "compact", ...rest } = props
- const { page, totalPages, pageRange, count } = usePaginationContext()
- const content = React.useMemo(() => {
- if (format === "short") return `${page} / ${totalPages}`
- if (format === "compact") return `${page} of ${totalPages}`
- return `${pageRange.start + 1} - ${Math.min(
- pageRange.end,
- count,
- )} of ${count}`
- }, [format, page, totalPages, pageRange, count])
-
- return (
-
- {content}
-
- )
-})
diff --git a/frontend/src/components/ui/password-input.tsx b/frontend/src/components/ui/password-input.tsx
deleted file mode 100644
index de99c85d6e..0000000000
--- a/frontend/src/components/ui/password-input.tsx
+++ /dev/null
@@ -1,162 +0,0 @@
-"use client"
-
-import type {
- ButtonProps,
- GroupProps,
- InputProps,
- StackProps,
-} from "@chakra-ui/react"
-import {
- Box,
- HStack,
- IconButton,
- Input,
- Stack,
- mergeRefs,
- useControllableState,
-} from "@chakra-ui/react"
-import { forwardRef, useRef } from "react"
-import { FiEye, FiEyeOff } from "react-icons/fi"
-import { Field } from "./field"
-import { InputGroup } from "./input-group"
-
-export interface PasswordVisibilityProps {
- defaultVisible?: boolean
- visible?: boolean
- onVisibleChange?: (visible: boolean) => void
- visibilityIcon?: { on: React.ReactNode; off: React.ReactNode }
-}
-
-export interface PasswordInputProps
- extends InputProps,
- PasswordVisibilityProps {
- rootProps?: GroupProps
- startElement?: React.ReactNode
- type: string
- errors: any
-}
-
-export const PasswordInput = forwardRef(
- function PasswordInput(props, ref) {
- const {
- rootProps,
- defaultVisible,
- visible: visibleProp,
- onVisibleChange,
- visibilityIcon = { on: , off: },
- startElement,
- type,
- errors,
- ...rest
- } = props
-
- const [visible, setVisible] = useControllableState({
- value: visibleProp,
- defaultValue: defaultVisible || false,
- onChange: onVisibleChange,
- })
-
- const inputRef = useRef(null)
-
- return (
-
- {
- if (rest.disabled) return
- if (e.button !== 0) return
- e.preventDefault()
- setVisible(!visible)
- }}
- >
- {visible ? visibilityIcon.off : visibilityIcon.on}
-
- }
- {...rootProps}
- >
-
-
-
- )
- },
-)
-
-const VisibilityTrigger = forwardRef(
- function VisibilityTrigger(props, ref) {
- return (
-
- )
- },
-)
-
-interface PasswordStrengthMeterProps extends StackProps {
- max?: number
- value: number
-}
-
-export const PasswordStrengthMeter = forwardRef<
- HTMLDivElement,
- PasswordStrengthMeterProps
->(function PasswordStrengthMeter(props, ref) {
- const { max = 4, value, ...rest } = props
-
- const percent = (value / max) * 100
- const { label, colorPalette } = getColorPalette(percent)
-
- return (
-
-
- {Array.from({ length: max }).map((_, index) => (
-
- ))}
-
- {label && {label} }
-
- )
-})
-
-function getColorPalette(percent: number) {
- switch (true) {
- case percent < 33:
- return { label: "Low", colorPalette: "red" }
- case percent < 66:
- return { label: "Medium", colorPalette: "orange" }
- default:
- return { label: "High", colorPalette: "green" }
- }
-}
diff --git a/frontend/src/components/ui/provider.tsx b/frontend/src/components/ui/provider.tsx
deleted file mode 100644
index 6725536909..0000000000
--- a/frontend/src/components/ui/provider.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-"use client"
-
-import { ChakraProvider } from "@chakra-ui/react"
-import { type PropsWithChildren } from "react"
-import { system } from "../../theme"
-import { ColorModeProvider } from "./color-mode"
-import { Toaster } from "./toaster"
-
-export function CustomProvider(props: PropsWithChildren) {
- return (
-
-
- {props.children}
-
-
-
- )
-}
diff --git a/frontend/src/components/ui/radio.tsx b/frontend/src/components/ui/radio.tsx
deleted file mode 100644
index b3919d08c8..0000000000
--- a/frontend/src/components/ui/radio.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import { RadioGroup as ChakraRadioGroup } from "@chakra-ui/react"
-import * as React from "react"
-
-export interface RadioProps extends ChakraRadioGroup.ItemProps {
- rootRef?: React.Ref
- inputProps?: React.InputHTMLAttributes
-}
-
-export const Radio = React.forwardRef(
- function Radio(props, ref) {
- const { children, inputProps, rootRef, ...rest } = props
- return (
-
-
-
- {children && (
- {children}
- )}
-
- )
- },
-)
-
-export const RadioGroup = ChakraRadioGroup.Root
diff --git a/frontend/src/components/ui/skeleton.tsx b/frontend/src/components/ui/skeleton.tsx
deleted file mode 100644
index 4f2c25be57..0000000000
--- a/frontend/src/components/ui/skeleton.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-import type {
- SkeletonProps as ChakraSkeletonProps,
- CircleProps,
-} from "@chakra-ui/react"
-import { Skeleton as ChakraSkeleton, Circle, Stack } from "@chakra-ui/react"
-import * as React from "react"
-
-export interface SkeletonCircleProps extends ChakraSkeletonProps {
- size?: CircleProps["size"]
-}
-
-export const SkeletonCircle = React.forwardRef<
- HTMLDivElement,
- SkeletonCircleProps
->(function SkeletonCircle(props, ref) {
- const { size, ...rest } = props
- return (
-
-
-
- )
-})
-
-export interface SkeletonTextProps extends ChakraSkeletonProps {
- noOfLines?: number
-}
-
-export const SkeletonText = React.forwardRef(
- function SkeletonText(props, ref) {
- const { noOfLines = 3, gap, ...rest } = props
- return (
-
- {Array.from({ length: noOfLines }).map((_, index) => (
-
- ))}
-
- )
- },
-)
-
-export const Skeleton = ChakraSkeleton
diff --git a/frontend/src/components/ui/spinner/index.tsx b/frontend/src/components/ui/spinner/index.tsx
new file mode 100644
index 0000000000..34c9b421f7
--- /dev/null
+++ b/frontend/src/components/ui/spinner/index.tsx
@@ -0,0 +1,194 @@
+import React from "react";
+
+
+
+export default function Spinner() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/ui/table/index.tsx b/frontend/src/components/ui/table/index.tsx
new file mode 100644
index 0000000000..2a5b2eeca9
--- /dev/null
+++ b/frontend/src/components/ui/table/index.tsx
@@ -0,0 +1,64 @@
+import React, { ReactNode } from "react";
+
+// Props for Table
+interface TableProps {
+ children: ReactNode; // Table content (thead, tbody, etc.)
+ className?: string; // Optional className for styling
+}
+
+// Props for TableHeader
+interface TableHeaderProps {
+ children: ReactNode; // Header row(s)
+ className?: string; // Optional className for styling
+}
+
+// Props for TableBody
+interface TableBodyProps {
+ children: ReactNode; // Body row(s)
+ className?: string; // Optional className for styling
+}
+
+// Props for TableRow
+interface TableRowProps {
+ children: ReactNode; // Cells (th or td)
+ className?: string; // Optional className for styling
+}
+
+// Props for TableCell
+interface TableCellProps {
+ children: ReactNode; // Cell content
+ isHeader?: boolean; // If true, renders as , otherwise
+ className?: string; // Optional className for styling
+}
+
+// Table Component
+const Table: React.FC = ({ children, className }) => {
+ return ;
+};
+
+// TableHeader Component
+const TableHeader: React.FC = ({ children, className }) => {
+ return {children} ;
+};
+
+// TableBody Component
+const TableBody: React.FC = ({ children, className }) => {
+ return {children} ;
+};
+
+// TableRow Component
+const TableRow: React.FC = ({ children, className }) => {
+ return {children} ;
+};
+
+// TableCell Component
+const TableCell: React.FC = ({
+ children,
+ isHeader = false,
+ className,
+}) => {
+ const CellTag = isHeader ? "th" : "td";
+ return {children} ;
+};
+
+export { Table, TableHeader, TableBody, TableRow, TableCell };
diff --git a/frontend/src/components/ui/toaster.tsx b/frontend/src/components/ui/toaster.tsx
deleted file mode 100644
index baac2e7406..0000000000
--- a/frontend/src/components/ui/toaster.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-"use client"
-
-import {
- Toaster as ChakraToaster,
- Portal,
- Spinner,
- Stack,
- Toast,
- createToaster,
-} from "@chakra-ui/react"
-
-export const toaster = createToaster({
- placement: "top-end",
- pauseOnPageIdle: true,
-})
-
-export const Toaster = () => {
- return (
-
-
- {(toast) => (
-
- {toast.type === "loading" ? (
-
- ) : (
-
- )}
-
- {toast.title && {toast.title} }
- {toast.description && (
- {toast.description}
- )}
-
- {toast.action && (
- {toast.action.label}
- )}
- {toast.meta?.closable && }
-
- )}
-
-
- )
-}
diff --git a/frontend/src/components/ui/video/VideosExample.tsx b/frontend/src/components/ui/video/VideosExample.tsx
new file mode 100644
index 0000000000..967d7cc542
--- /dev/null
+++ b/frontend/src/components/ui/video/VideosExample.tsx
@@ -0,0 +1,28 @@
+import React from "react";
+import YouTubeEmbed from "./YouTubeEmbed";
+import ComponentCard from "@/components/common/ComponentCard";
+
+export default function VideosExample() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/ui/video/YouTubeEmbed.tsx b/frontend/src/components/ui/video/YouTubeEmbed.tsx
new file mode 100644
index 0000000000..7dddb9c1b4
--- /dev/null
+++ b/frontend/src/components/ui/video/YouTubeEmbed.tsx
@@ -0,0 +1,41 @@
+import React from "react";
+
+type AspectRatio = "16:9" | "4:3" | "21:9" | "1:1";
+
+interface YouTubeEmbedProps {
+ videoId: string;
+ aspectRatio?: AspectRatio;
+ title?: string;
+ className?: string;
+}
+
+const YouTubeEmbed: React.FC = ({
+ videoId,
+ aspectRatio = "16:9",
+ title = "YouTube video",
+ className = "",
+}) => {
+ const aspectRatioClass = {
+ "16:9": "aspect-video",
+ "4:3": "aspect-4/3",
+ "21:9": "aspect-21/9",
+ "1:1": "aspect-square",
+ }[aspectRatio];
+
+ return (
+
+ VIDEO
+
+ );
+};
+
+export default YouTubeEmbed;
diff --git a/frontend/src/components/user-profile/UserAddressCard.tsx b/frontend/src/components/user-profile/UserAddressCard.tsx
new file mode 100644
index 0000000000..e7430e35fb
--- /dev/null
+++ b/frontend/src/components/user-profile/UserAddressCard.tsx
@@ -0,0 +1,134 @@
+"use client";
+import React from "react";
+import { useModal } from "../../hooks/useModal";
+import { Modal } from "../ui/modal";
+import Button from "../ui/button/Button";
+import Input from "../form/input/InputField";
+import Label from "../form/Label";
+
+export default function UserAddressCard() {
+ const { isOpen, openModal, closeModal } = useModal();
+ const handleSave = () => {
+ // Handle save logic here
+ console.log("Saving changes...");
+ closeModal();
+ };
+ return (
+ <>
+
+
+
+
+ Address
+
+
+
+
+
+ Country
+
+
+ United States
+
+
+
+
+
+ City/State
+
+
+ Phoenix, Arizona, United States.
+
+
+
+
+
+ Postal Code
+
+
+ ERT 2489
+
+
+
+
+
+ TAX ID
+
+
+ AS4568384
+
+
+
+
+
+
+
+
+
+ Edit
+
+
+
+
+
+
+
+ Edit Address
+
+
+ Update your details to keep your profile up-to-date.
+
+
+
+
+
+ >
+ );
+}
diff --git a/frontend/src/components/user-profile/UserInfoCard.tsx b/frontend/src/components/user-profile/UserInfoCard.tsx
new file mode 100644
index 0000000000..0e8473cbe9
--- /dev/null
+++ b/frontend/src/components/user-profile/UserInfoCard.tsx
@@ -0,0 +1,189 @@
+"use client";
+import React from "react";
+import { useModal } from "../../hooks/useModal";
+import { Modal } from "../ui/modal";
+import Button from "../ui/button/Button";
+import Input from "../form/input/InputField";
+import Label from "../form/Label";
+
+export default function UserInfoCard() {
+ const { isOpen, openModal, closeModal } = useModal();
+ const handleSave = () => {
+ // Handle save logic here
+ console.log("Saving changes...");
+ closeModal();
+ };
+ return (
+
+
+
+
+ Personal Information
+
+
+
+
+
+ First Name
+
+
+ Musharof
+
+
+
+
+
+ Last Name
+
+
+ Chowdhury
+
+
+
+
+
+ Email address
+
+
+ randomuser@pimjo.com
+
+
+
+
+
+ Phone
+
+
+ +09 363 398 46
+
+
+
+
+
+ Bio
+
+
+ Team Manager
+
+
+
+
+
+
+
+
+
+ Edit
+
+
+
+
+
+
+
+ Edit Personal Information
+
+
+ Update your details to keep your profile up-to-date.
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/user-profile/UserMetaCard.tsx b/frontend/src/components/user-profile/UserMetaCard.tsx
new file mode 100644
index 0000000000..036b536f65
--- /dev/null
+++ b/frontend/src/components/user-profile/UserMetaCard.tsx
@@ -0,0 +1,233 @@
+"use client";
+import React from "react";
+import { useModal } from "../../hooks/useModal";
+import { Modal } from "../ui/modal";
+import Button from "../ui/button/Button";
+import Input from "../form/input/InputField";
+import Label from "../form/Label";
+import Image from "next/image";
+
+
+export default function UserMetaCard() {
+ const { isOpen, openModal, closeModal } = useModal();
+ const handleSave = () => {
+ // Handle save logic here
+ console.log("Saving changes...");
+ closeModal();
+ };
+ return (
+ <>
+
+
+
+
+
+
+
+
+ Musharof Chowdhury
+
+
+
+ Team Manager
+
+
+
+ Arizona, United States
+
+
+
+
+
+
+
+
+
+ Edit
+
+
+
+
+
+
+
+ Edit Personal Information
+
+
+ Update your details to keep your profile up-to-date.
+
+
+
+
+
+ >
+ );
+}
diff --git a/frontend/src/components/videos/FourIsToThree.tsx b/frontend/src/components/videos/FourIsToThree.tsx
new file mode 100644
index 0000000000..00889743fd
--- /dev/null
+++ b/frontend/src/components/videos/FourIsToThree.tsx
@@ -0,0 +1,16 @@
+import React from "react";
+
+export default function FourIsToThree() {
+ return (
+
+ VIDEO
+
+ );
+}
diff --git a/frontend/src/components/videos/OneIsToOne.tsx b/frontend/src/components/videos/OneIsToOne.tsx
new file mode 100644
index 0000000000..68fcc46c3c
--- /dev/null
+++ b/frontend/src/components/videos/OneIsToOne.tsx
@@ -0,0 +1,16 @@
+import React from "react";
+
+export default function OneIsToOne() {
+ return (
+
+ VIDEO
+
+ );
+}
diff --git a/frontend/src/components/videos/SixteenIsToNine.tsx b/frontend/src/components/videos/SixteenIsToNine.tsx
new file mode 100644
index 0000000000..0685597420
--- /dev/null
+++ b/frontend/src/components/videos/SixteenIsToNine.tsx
@@ -0,0 +1,16 @@
+import React from "react";
+
+export default function SixteenIsToNine() {
+ return (
+
+ VIDEO
+
+ );
+}
diff --git a/frontend/src/components/videos/TwentyOneIsToNine.tsx b/frontend/src/components/videos/TwentyOneIsToNine.tsx
new file mode 100644
index 0000000000..2133a9e9c1
--- /dev/null
+++ b/frontend/src/components/videos/TwentyOneIsToNine.tsx
@@ -0,0 +1,16 @@
+import React from "react";
+
+export default function TwentyOneIsToNine() {
+ return (
+
+ VIDEO
+
+ );
+}
diff --git a/frontend/src/context/SidebarContext.tsx b/frontend/src/context/SidebarContext.tsx
new file mode 100644
index 0000000000..c377119ebf
--- /dev/null
+++ b/frontend/src/context/SidebarContext.tsx
@@ -0,0 +1,84 @@
+"use client";
+import React, { createContext, useContext, useState, useEffect } from "react";
+
+type SidebarContextType = {
+ isExpanded: boolean;
+ isMobileOpen: boolean;
+ isHovered: boolean;
+ activeItem: string | null;
+ openSubmenu: string | null;
+ toggleSidebar: () => void;
+ toggleMobileSidebar: () => void;
+ setIsHovered: (isHovered: boolean) => void;
+ setActiveItem: (item: string | null) => void;
+ toggleSubmenu: (item: string) => void;
+};
+
+const SidebarContext = createContext(undefined);
+
+export const useSidebar = () => {
+ const context = useContext(SidebarContext);
+ if (!context) {
+ throw new Error("useSidebar must be used within a SidebarProvider");
+ }
+ return context;
+};
+
+export const SidebarProvider: React.FC<{ children: React.ReactNode }> = ({
+ children,
+}) => {
+ const [isExpanded, setIsExpanded] = useState(true);
+ const [isMobileOpen, setIsMobileOpen] = useState(false);
+ const [isMobile, setIsMobile] = useState(false);
+ const [isHovered, setIsHovered] = useState(false);
+ const [activeItem, setActiveItem] = useState(null);
+ const [openSubmenu, setOpenSubmenu] = useState(null);
+
+ useEffect(() => {
+ const handleResize = () => {
+ const mobile = window.innerWidth < 768;
+ setIsMobile(mobile);
+ if (!mobile) {
+ setIsMobileOpen(false);
+ }
+ };
+
+ handleResize();
+ window.addEventListener("resize", handleResize);
+
+ return () => {
+ window.removeEventListener("resize", handleResize);
+ };
+ }, []);
+
+ const toggleSidebar = () => {
+ setIsExpanded((prev) => !prev);
+ };
+
+ const toggleMobileSidebar = () => {
+ setIsMobileOpen((prev) => !prev);
+ };
+
+ const toggleSubmenu = (item: string) => {
+ setOpenSubmenu((prev) => (prev === item ? null : item));
+ };
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/frontend/src/context/ThemeContext.tsx b/frontend/src/context/ThemeContext.tsx
new file mode 100644
index 0000000000..1e6cc7d653
--- /dev/null
+++ b/frontend/src/context/ThemeContext.tsx
@@ -0,0 +1,58 @@
+"use client";
+
+import type React from "react";
+import { createContext, useState, useContext, useEffect } from "react";
+
+type Theme = "light" | "dark";
+
+type ThemeContextType = {
+ theme: Theme;
+ toggleTheme: () => void;
+};
+
+const ThemeContext = createContext(undefined);
+
+export const ThemeProvider: React.FC<{ children: React.ReactNode }> = ({
+ children,
+}) => {
+ const [theme, setTheme] = useState("light");
+ const [isInitialized, setIsInitialized] = useState(false);
+
+ useEffect(() => {
+ // This code will only run on the client side
+ const savedTheme = localStorage.getItem("theme") as Theme | null;
+ const initialTheme = savedTheme || "light"; // Default to light theme
+
+ setTheme(initialTheme);
+ setIsInitialized(true);
+ }, []);
+
+ useEffect(() => {
+ if (isInitialized) {
+ localStorage.setItem("theme", theme);
+ if (theme === "dark") {
+ document.documentElement.classList.add("dark");
+ } else {
+ document.documentElement.classList.remove("dark");
+ }
+ }
+ }, [theme, isInitialized]);
+
+ const toggleTheme = () => {
+ setTheme((prevTheme) => (prevTheme === "light" ? "dark" : "light"));
+ };
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const useTheme = () => {
+ const context = useContext(ThemeContext);
+ if (context === undefined) {
+ throw new Error("useTheme must be used within a ThemeProvider");
+ }
+ return context;
+};
diff --git a/frontend/src/hooks/useAuth.ts b/frontend/src/hooks/useAuth.ts
deleted file mode 100644
index 5344493d49..0000000000
--- a/frontend/src/hooks/useAuth.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
-import { useNavigate } from "@tanstack/react-router"
-import { useState } from "react"
-
-import {
- type Body_login_login_access_token as AccessToken,
- type ApiError,
- LoginService,
- type UserPublic,
- type UserRegister,
- UsersService,
-} from "@/client"
-import { handleError } from "@/utils"
-
-const isLoggedIn = () => {
- return localStorage.getItem("access_token") !== null
-}
-
-const useAuth = () => {
- const [error, setError] = useState(null)
- const navigate = useNavigate()
- const queryClient = useQueryClient()
- const { data: user } = useQuery({
- queryKey: ["currentUser"],
- queryFn: UsersService.readUserMe,
- enabled: isLoggedIn(),
- })
-
- const signUpMutation = useMutation({
- mutationFn: (data: UserRegister) =>
- UsersService.registerUser({ requestBody: data }),
-
- onSuccess: () => {
- navigate({ to: "/login" })
- },
- onError: (err: ApiError) => {
- handleError(err)
- },
- onSettled: () => {
- queryClient.invalidateQueries({ queryKey: ["users"] })
- },
- })
-
- const login = async (data: AccessToken) => {
- const response = await LoginService.loginAccessToken({
- formData: data,
- })
- localStorage.setItem("access_token", response.access_token)
- }
-
- const loginMutation = useMutation({
- mutationFn: login,
- onSuccess: () => {
- navigate({ to: "/" })
- },
- onError: (err: ApiError) => {
- handleError(err)
- },
- })
-
- const logout = () => {
- localStorage.removeItem("access_token")
- navigate({ to: "/login" })
- }
-
- return {
- signUpMutation,
- loginMutation,
- logout,
- user,
- error,
- resetError: () => setError(null),
- }
-}
-
-export { isLoggedIn }
-export default useAuth
diff --git a/frontend/src/hooks/useCustomToast.ts b/frontend/src/hooks/useCustomToast.ts
deleted file mode 100644
index fb04623516..0000000000
--- a/frontend/src/hooks/useCustomToast.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-"use client"
-
-import { toaster } from "@/components/ui/toaster"
-
-const useCustomToast = () => {
- const showSuccessToast = (description: string) => {
- toaster.create({
- title: "Success!",
- description,
- type: "success",
- })
- }
-
- const showErrorToast = (description: string) => {
- toaster.create({
- title: "Something went wrong!",
- description,
- type: "error",
- })
- }
-
- return { showSuccessToast, showErrorToast }
-}
-
-export default useCustomToast
diff --git a/frontend/src/hooks/useGoBack.ts b/frontend/src/hooks/useGoBack.ts
new file mode 100644
index 0000000000..87c628f9d5
--- /dev/null
+++ b/frontend/src/hooks/useGoBack.ts
@@ -0,0 +1,17 @@
+import { useRouter } from "next/navigation";
+
+const useGoBack = () => {
+ const router = useRouter();
+
+ const goBack = () => {
+ if (window.history.length > 1) {
+ router.back(); // Navigate to the previous route
+ } else {
+ router.push("/"); // Redirect to home if no history exists
+ }
+ };
+
+ return goBack;
+};
+
+export default useGoBack;
diff --git a/frontend/src/hooks/useModal.ts b/frontend/src/hooks/useModal.ts
new file mode 100644
index 0000000000..1389504791
--- /dev/null
+++ b/frontend/src/hooks/useModal.ts
@@ -0,0 +1,12 @@
+"use client";
+import { useState, useCallback } from "react";
+
+export const useModal = (initialState: boolean = false) => {
+ const [isOpen, setIsOpen] = useState(initialState);
+
+ const openModal = useCallback(() => setIsOpen(true), []);
+ const closeModal = useCallback(() => setIsOpen(false), []);
+ const toggleModal = useCallback(() => setIsOpen((prev) => !prev), []);
+
+ return { isOpen, openModal, closeModal, toggleModal };
+};
diff --git a/frontend/src/icons/alert.svg b/frontend/src/icons/alert.svg
new file mode 100644
index 0000000000..b4500eb031
--- /dev/null
+++ b/frontend/src/icons/alert.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/angle-down.svg b/frontend/src/icons/angle-down.svg
new file mode 100644
index 0000000000..1de281ca2a
--- /dev/null
+++ b/frontend/src/icons/angle-down.svg
@@ -0,0 +1,12 @@
+
+
+
diff --git a/frontend/src/icons/angle-left.svg b/frontend/src/icons/angle-left.svg
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/frontend/src/icons/angle-right.svg b/frontend/src/icons/angle-right.svg
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/frontend/src/icons/angle-up.svg b/frontend/src/icons/angle-up.svg
new file mode 100644
index 0000000000..ee3e2c8787
--- /dev/null
+++ b/frontend/src/icons/angle-up.svg
@@ -0,0 +1,13 @@
+
+
+
diff --git a/frontend/src/icons/arrow-down.svg b/frontend/src/icons/arrow-down.svg
new file mode 100644
index 0000000000..07c7e9de00
--- /dev/null
+++ b/frontend/src/icons/arrow-down.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/arrow-right.svg b/frontend/src/icons/arrow-right.svg
new file mode 100644
index 0000000000..35ca3f09cc
--- /dev/null
+++ b/frontend/src/icons/arrow-right.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/arrow-up.svg b/frontend/src/icons/arrow-up.svg
new file mode 100644
index 0000000000..63aa736d09
--- /dev/null
+++ b/frontend/src/icons/arrow-up.svg
@@ -0,0 +1,16 @@
+
+
+
+
diff --git a/frontend/src/icons/audio.svg b/frontend/src/icons/audio.svg
new file mode 100644
index 0000000000..bfd807c009
--- /dev/null
+++ b/frontend/src/icons/audio.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/bell.svg b/frontend/src/icons/bell.svg
new file mode 100644
index 0000000000..1fc13f6e6f
--- /dev/null
+++ b/frontend/src/icons/bell.svg
@@ -0,0 +1,14 @@
+
+
+
diff --git a/frontend/src/icons/bolt.svg b/frontend/src/icons/bolt.svg
new file mode 100644
index 0000000000..b8d2ef1eb2
--- /dev/null
+++ b/frontend/src/icons/bolt.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/box-cube.svg b/frontend/src/icons/box-cube.svg
new file mode 100644
index 0000000000..cac5f8bd7c
--- /dev/null
+++ b/frontend/src/icons/box-cube.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/box-line.svg b/frontend/src/icons/box-line.svg
new file mode 100644
index 0000000000..d0fa1ca287
--- /dev/null
+++ b/frontend/src/icons/box-line.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/box.svg b/frontend/src/icons/box.svg
new file mode 100644
index 0000000000..af760637f2
--- /dev/null
+++ b/frontend/src/icons/box.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/calendar.svg b/frontend/src/icons/calendar.svg
new file mode 100644
index 0000000000..334478ac1a
--- /dev/null
+++ b/frontend/src/icons/calendar.svg
@@ -0,0 +1,13 @@
+
+
+
diff --git a/frontend/src/icons/calender-line.svg b/frontend/src/icons/calender-line.svg
new file mode 100644
index 0000000000..61c0b6f7e6
--- /dev/null
+++ b/frontend/src/icons/calender-line.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/src/icons/chat.svg b/frontend/src/icons/chat.svg
new file mode 100644
index 0000000000..678886a35e
--- /dev/null
+++ b/frontend/src/icons/chat.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/src/icons/check-circle.svg b/frontend/src/icons/check-circle.svg
new file mode 100644
index 0000000000..b73d765621
--- /dev/null
+++ b/frontend/src/icons/check-circle.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/check-line.svg b/frontend/src/icons/check-line.svg
new file mode 100644
index 0000000000..670d266f1e
--- /dev/null
+++ b/frontend/src/icons/check-line.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/chevron-down.svg b/frontend/src/icons/chevron-down.svg
new file mode 100644
index 0000000000..88775fdaf3
--- /dev/null
+++ b/frontend/src/icons/chevron-down.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/frontend/src/icons/chevron-left.svg b/frontend/src/icons/chevron-left.svg
new file mode 100644
index 0000000000..73c6c992e4
--- /dev/null
+++ b/frontend/src/icons/chevron-left.svg
@@ -0,0 +1,16 @@
+
+
+
diff --git a/frontend/src/icons/chevron-up.svg b/frontend/src/icons/chevron-up.svg
new file mode 100644
index 0000000000..9bb13b9648
--- /dev/null
+++ b/frontend/src/icons/chevron-up.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/src/icons/close-line.svg b/frontend/src/icons/close-line.svg
new file mode 100644
index 0000000000..fb8b7f6b41
--- /dev/null
+++ b/frontend/src/icons/close-line.svg
@@ -0,0 +1,14 @@
+
+
+
diff --git a/frontend/src/icons/close.svg b/frontend/src/icons/close.svg
new file mode 100644
index 0000000000..0badc78bcb
--- /dev/null
+++ b/frontend/src/icons/close.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/copy.svg b/frontend/src/icons/copy.svg
new file mode 100644
index 0000000000..0deb7c1e22
--- /dev/null
+++ b/frontend/src/icons/copy.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/docs.svg b/frontend/src/icons/docs.svg
new file mode 100644
index 0000000000..d577942e36
--- /dev/null
+++ b/frontend/src/icons/docs.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/dollar-line.svg b/frontend/src/icons/dollar-line.svg
new file mode 100644
index 0000000000..0e6e6dd409
--- /dev/null
+++ b/frontend/src/icons/dollar-line.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/download.svg b/frontend/src/icons/download.svg
new file mode 100644
index 0000000000..ac503e40e8
--- /dev/null
+++ b/frontend/src/icons/download.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/envelope.svg b/frontend/src/icons/envelope.svg
new file mode 100644
index 0000000000..c16d9b1b53
--- /dev/null
+++ b/frontend/src/icons/envelope.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/eye-close.svg b/frontend/src/icons/eye-close.svg
new file mode 100644
index 0000000000..d6a20280dc
--- /dev/null
+++ b/frontend/src/icons/eye-close.svg
@@ -0,0 +1,14 @@
+
+
+
diff --git a/frontend/src/icons/eye.svg b/frontend/src/icons/eye.svg
new file mode 100644
index 0000000000..5cf343b7b8
--- /dev/null
+++ b/frontend/src/icons/eye.svg
@@ -0,0 +1,14 @@
+
+
+
diff --git a/frontend/src/icons/file.svg b/frontend/src/icons/file.svg
new file mode 100644
index 0000000000..c57d2fc9d2
--- /dev/null
+++ b/frontend/src/icons/file.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/folder.svg b/frontend/src/icons/folder.svg
new file mode 100644
index 0000000000..ca78691aa5
--- /dev/null
+++ b/frontend/src/icons/folder.svg
@@ -0,0 +1,13 @@
+
+
+
diff --git a/frontend/src/icons/grid.svg b/frontend/src/icons/grid.svg
new file mode 100644
index 0000000000..2895f02f82
--- /dev/null
+++ b/frontend/src/icons/grid.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/group.svg b/frontend/src/icons/group.svg
new file mode 100644
index 0000000000..8f2e241e90
--- /dev/null
+++ b/frontend/src/icons/group.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/horizontal-dots.svg b/frontend/src/icons/horizontal-dots.svg
new file mode 100644
index 0000000000..4806011dab
--- /dev/null
+++ b/frontend/src/icons/horizontal-dots.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/index.tsx b/frontend/src/icons/index.tsx
new file mode 100644
index 0000000000..ab3ee7d9a4
--- /dev/null
+++ b/frontend/src/icons/index.tsx
@@ -0,0 +1,109 @@
+import PlusIcon from "./plus.svg";
+import CloseIcon from "./close.svg";
+import BoxIcon from "./box.svg";
+import CheckCircleIcon from "./check-circle.svg";
+import AlertIcon from "./alert.svg";
+import InfoIcon from "./info.svg";
+import ErrorIcon from "./info-hexa.svg";
+import BoltIcon from "./bolt.svg";
+import ArrowUpIcon from "./arrow-up.svg";
+import ArrowDownIcon from "./arrow-down.svg";
+import FolderIcon from "./folder.svg";
+import VideoIcon from "./videos.svg";
+import AudioIcon from "./audio.svg";
+import GridIcon from "./grid.svg";
+import FileIcon from "./file.svg";
+import DownloadIcon from "./download.svg";
+import ArrowRightIcon from "./arrow-right.svg";
+import GroupIcon from "./group.svg";
+import BoxIconLine from "./box-line.svg";
+import ShootingStarIcon from "./shooting-star.svg";
+import DollarLineIcon from "./dollar-line.svg";
+import TrashBinIcon from "./trash.svg";
+import AngleUpIcon from "./angle-up.svg";
+import AngleDownIcon from "./angle-down.svg";
+import PencilIcon from "./pencil.svg";
+import CheckLineIcon from "./check-line.svg";
+import CloseLineIcon from "./close-line.svg";
+import ChevronDownIcon from "./chevron-down.svg";
+import ChevronUpIcon from "./chevron-up.svg";
+import PaperPlaneIcon from "./paper-plane.svg";
+import LockIcon from "./lock.svg";
+import EnvelopeIcon from "./envelope.svg";
+import UserIcon from "./user-line.svg";
+import CalenderIcon from "./calender-line.svg";
+import EyeIcon from "./eye.svg";
+import EyeCloseIcon from "./eye-close.svg";
+import TimeIcon from "./time.svg";
+import CopyIcon from "./copy.svg";
+import ChevronLeftIcon from "./chevron-left.svg";
+import UserCircleIcon from "./user-circle.svg";
+import TaskIcon from "./task-icon.svg";
+import ListIcon from "./list.svg";
+import TableIcon from "./table.svg";
+import PageIcon from "./page.svg";
+import PieChartIcon from "./pie-chart.svg";
+import BoxCubeIcon from "./box-cube.svg";
+import PlugInIcon from "./plug-in.svg";
+import DocsIcon from "./docs.svg";
+import MailIcon from "./mail-line.svg";
+import HorizontaLDots from "./horizontal-dots.svg";
+import ChatIcon from "./chat.svg";
+import MoreDotIcon from "./more-dot.svg";
+import BellIcon from "./bell.svg";
+
+export {
+ DownloadIcon,
+ BellIcon,
+ MoreDotIcon,
+ FileIcon,
+ GridIcon,
+ AudioIcon,
+ VideoIcon,
+ BoltIcon,
+ PlusIcon,
+ BoxIcon,
+ CloseIcon,
+ CheckCircleIcon,
+ AlertIcon,
+ InfoIcon,
+ ErrorIcon,
+ ArrowUpIcon,
+ FolderIcon,
+ ArrowDownIcon,
+ ArrowRightIcon,
+ GroupIcon,
+ BoxIconLine,
+ ShootingStarIcon,
+ DollarLineIcon,
+ TrashBinIcon,
+ AngleUpIcon,
+ AngleDownIcon,
+ PencilIcon,
+ CheckLineIcon,
+ CloseLineIcon,
+ ChevronDownIcon,
+ PaperPlaneIcon,
+ EnvelopeIcon,
+ LockIcon,
+ UserIcon,
+ CalenderIcon,
+ EyeIcon,
+ EyeCloseIcon,
+ TimeIcon,
+ CopyIcon,
+ ChevronLeftIcon,
+ UserCircleIcon,
+ ListIcon,
+ TableIcon,
+ PageIcon,
+ TaskIcon,
+ PieChartIcon,
+ BoxCubeIcon,
+ PlugInIcon,
+ DocsIcon,
+ MailIcon,
+ HorizontaLDots,
+ ChevronUpIcon,
+ ChatIcon,
+};
diff --git a/frontend/src/icons/info-hexa.svg b/frontend/src/icons/info-hexa.svg
new file mode 100644
index 0000000000..c60604cc96
--- /dev/null
+++ b/frontend/src/icons/info-hexa.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/info.svg b/frontend/src/icons/info.svg
new file mode 100644
index 0000000000..6253c53190
--- /dev/null
+++ b/frontend/src/icons/info.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/list.svg b/frontend/src/icons/list.svg
new file mode 100644
index 0000000000..5173991213
--- /dev/null
+++ b/frontend/src/icons/list.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/lock.svg b/frontend/src/icons/lock.svg
new file mode 100644
index 0000000000..511bc8fc03
--- /dev/null
+++ b/frontend/src/icons/lock.svg
@@ -0,0 +1,19 @@
+
+
+
+
diff --git a/frontend/src/icons/mail-line.svg b/frontend/src/icons/mail-line.svg
new file mode 100644
index 0000000000..de1ae0c1b6
--- /dev/null
+++ b/frontend/src/icons/mail-line.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/more-dot.svg b/frontend/src/icons/more-dot.svg
new file mode 100644
index 0000000000..9b90194fb2
--- /dev/null
+++ b/frontend/src/icons/more-dot.svg
@@ -0,0 +1,14 @@
+
+
+
diff --git a/frontend/src/icons/page.svg b/frontend/src/icons/page.svg
new file mode 100644
index 0000000000..609aa27613
--- /dev/null
+++ b/frontend/src/icons/page.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/paper-plane.svg b/frontend/src/icons/paper-plane.svg
new file mode 100644
index 0000000000..b86c3f1957
--- /dev/null
+++ b/frontend/src/icons/paper-plane.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/pencil.svg b/frontend/src/icons/pencil.svg
new file mode 100644
index 0000000000..560ef94e6a
--- /dev/null
+++ b/frontend/src/icons/pencil.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/pie-chart.svg b/frontend/src/icons/pie-chart.svg
new file mode 100644
index 0000000000..653d143067
--- /dev/null
+++ b/frontend/src/icons/pie-chart.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/plug-in.svg b/frontend/src/icons/plug-in.svg
new file mode 100644
index 0000000000..811b61d795
--- /dev/null
+++ b/frontend/src/icons/plug-in.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/plus.svg b/frontend/src/icons/plus.svg
new file mode 100644
index 0000000000..d857a28c13
--- /dev/null
+++ b/frontend/src/icons/plus.svg
@@ -0,0 +1,14 @@
+
+
+
diff --git a/frontend/src/icons/shooting-star.svg b/frontend/src/icons/shooting-star.svg
new file mode 100644
index 0000000000..4e7e11fb02
--- /dev/null
+++ b/frontend/src/icons/shooting-star.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/table.svg b/frontend/src/icons/table.svg
new file mode 100644
index 0000000000..5000d4644f
--- /dev/null
+++ b/frontend/src/icons/table.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/task-icon.svg b/frontend/src/icons/task-icon.svg
new file mode 100644
index 0000000000..b84944634f
--- /dev/null
+++ b/frontend/src/icons/task-icon.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/task.svg b/frontend/src/icons/task.svg
new file mode 100644
index 0000000000..d6d2cc6efd
--- /dev/null
+++ b/frontend/src/icons/task.svg
@@ -0,0 +1 @@
+
diff --git a/frontend/src/icons/time.svg b/frontend/src/icons/time.svg
new file mode 100644
index 0000000000..e96dcc4dc1
--- /dev/null
+++ b/frontend/src/icons/time.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/trash.svg b/frontend/src/icons/trash.svg
new file mode 100644
index 0000000000..9651a5cb3d
--- /dev/null
+++ b/frontend/src/icons/trash.svg
@@ -0,0 +1,13 @@
+
+
+
diff --git a/frontend/src/icons/user-circle.svg b/frontend/src/icons/user-circle.svg
new file mode 100644
index 0000000000..fa6c14ae17
--- /dev/null
+++ b/frontend/src/icons/user-circle.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/frontend/src/icons/user-line.svg b/frontend/src/icons/user-line.svg
new file mode 100644
index 0000000000..27877f0b98
--- /dev/null
+++ b/frontend/src/icons/user-line.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/icons/videos.svg b/frontend/src/icons/videos.svg
new file mode 100644
index 0000000000..dc00dce07a
--- /dev/null
+++ b/frontend/src/icons/videos.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/frontend/src/layout/AppHeader.tsx b/frontend/src/layout/AppHeader.tsx
new file mode 100644
index 0000000000..0f09b69d9a
--- /dev/null
+++ b/frontend/src/layout/AppHeader.tsx
@@ -0,0 +1,180 @@
+"use client";
+import { ThemeToggleButton } from "@/components/common/ThemeToggleButton";
+import NotificationDropdown from "@/components/header/NotificationDropdown";
+import UserDropdown from "@/components/header/UserDropdown";
+import { useSidebar } from "@/context/SidebarContext";
+import Image from "next/image";
+import Link from "next/link";
+import React, { useState ,useEffect,useRef} from "react";
+
+const AppHeader: React.FC = () => {
+ const [isApplicationMenuOpen, setApplicationMenuOpen] = useState(false);
+
+ const { isMobileOpen, toggleSidebar, toggleMobileSidebar } = useSidebar();
+
+ const handleToggle = () => {
+ if (window.innerWidth >= 1024) {
+ toggleSidebar();
+ } else {
+ toggleMobileSidebar();
+ }
+ };
+
+ const toggleApplicationMenu = () => {
+ setApplicationMenuOpen(!isApplicationMenuOpen);
+ };
+ const inputRef = useRef(null);
+
+ useEffect(() => {
+ const handleKeyDown = (event: KeyboardEvent) => {
+ if ((event.metaKey || event.ctrlKey) && event.key === "k") {
+ event.preventDefault();
+ inputRef.current?.focus();
+ }
+ };
+
+ document.addEventListener("keydown", handleKeyDown);
+
+ return () => {
+ document.removeEventListener("keydown", handleKeyDown);
+ };
+ }, []);
+
+ return (
+
+
+
+
+ {isMobileOpen ? (
+
+
+
+ ) : (
+
+
+
+ )}
+ {/* Cross Icon */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* */}
+
+ {/* */}
+
+
+ {/* */}
+
+ {/* */}
+
+
+
+
+
+ );
+};
+
+export default AppHeader;
diff --git a/frontend/src/layout/AppSidebar.tsx b/frontend/src/layout/AppSidebar.tsx
new file mode 100644
index 0000000000..30cd1af339
--- /dev/null
+++ b/frontend/src/layout/AppSidebar.tsx
@@ -0,0 +1,383 @@
+"use client";
+import React, { useEffect, useRef, useState,useCallback } from "react";
+import Link from "next/link";
+import Image from "next/image";
+import { usePathname } from "next/navigation";
+import { useSidebar } from "../context/SidebarContext";
+import {
+ BoxCubeIcon,
+ CalenderIcon,
+ ChevronDownIcon,
+ GridIcon,
+ HorizontaLDots,
+ ListIcon,
+ PageIcon,
+ PieChartIcon,
+ PlugInIcon,
+ TableIcon,
+ UserCircleIcon,
+} from "../icons/index";
+import SidebarWidget from "./SidebarWidget";
+
+type NavItem = {
+ name: string;
+ icon: React.ReactNode;
+ path?: string;
+ subItems?: { name: string; path: string; pro?: boolean; new?: boolean }[];
+};
+
+const navItems: NavItem[] = [
+ {
+ icon: ,
+ name: "Dashboard",
+ subItems: [{ name: "Ecommerce", path: "/", pro: false }],
+ },
+ {
+ icon: ,
+ name: "Calendar",
+ path: "/calendar",
+ },
+ {
+ icon: ,
+ name: "User Profile",
+ path: "/profile",
+ },
+
+ {
+ name: "Forms",
+ icon: ,
+ subItems: [{ name: "Form Elements", path: "/form-elements", pro: false }],
+ },
+ {
+ name: "Tables",
+ icon: ,
+ subItems: [{ name: "Basic Tables", path: "/basic-tables", pro: false }],
+ },
+ {
+ name: "Pages",
+ icon: ,
+ subItems: [
+ { name: "Blank Page", path: "/blank", pro: false },
+ { name: "404 Error", path: "/error-404", pro: false },
+ ],
+ },
+];
+
+const othersItems: NavItem[] = [
+ {
+ icon: ,
+ name: "Charts",
+ subItems: [
+ { name: "Line Chart", path: "/line-chart", pro: false },
+ { name: "Bar Chart", path: "/bar-chart", pro: false },
+ ],
+ },
+ {
+ icon: ,
+ name: "UI Elements",
+ subItems: [
+ { name: "Alerts", path: "/alerts", pro: false },
+ { name: "Avatar", path: "/avatars", pro: false },
+ { name: "Badge", path: "/badge", pro: false },
+ { name: "Buttons", path: "/buttons", pro: false },
+ { name: "Images", path: "/images", pro: false },
+ { name: "Videos", path: "/videos", pro: false },
+ ],
+ },
+ {
+ icon: ,
+ name: "Authentication",
+ subItems: [
+ { name: "Sign In", path: "/signin", pro: false },
+ { name: "Sign Up", path: "/signup", pro: false },
+ ],
+ },
+];
+
+const AppSidebar: React.FC = () => {
+ const { isExpanded, isMobileOpen, isHovered, setIsHovered } = useSidebar();
+ const pathname = usePathname();
+
+ const renderMenuItems = (
+ navItems: NavItem[],
+ menuType: "main" | "others"
+ ) => (
+
+ {navItems.map((nav, index) => (
+
+ {nav.subItems ? (
+ handleSubmenuToggle(index, menuType)}
+ className={`menu-item group ${
+ openSubmenu?.type === menuType && openSubmenu?.index === index
+ ? "menu-item-active"
+ : "menu-item-inactive"
+ } cursor-pointer ${
+ !isExpanded && !isHovered
+ ? "lg:justify-center"
+ : "lg:justify-start"
+ }`}
+ >
+
+ {nav.icon}
+
+ {(isExpanded || isHovered || isMobileOpen) && (
+ {nav.name}
+ )}
+ {(isExpanded || isHovered || isMobileOpen) && (
+
+ )}
+
+ ) : (
+ nav.path && (
+
+
+ {nav.icon}
+
+ {(isExpanded || isHovered || isMobileOpen) && (
+ {nav.name}
+ )}
+
+ )
+ )}
+ {nav.subItems && (isExpanded || isHovered || isMobileOpen) && (
+ {
+ subMenuRefs.current[`${menuType}-${index}`] = el;
+ }}
+ className="overflow-hidden transition-all duration-300"
+ style={{
+ height:
+ openSubmenu?.type === menuType && openSubmenu?.index === index
+ ? `${subMenuHeight[`${menuType}-${index}`]}px`
+ : "0px",
+ }}
+ >
+
+ {nav.subItems.map((subItem) => (
+
+
+ {subItem.name}
+
+ {subItem.new && (
+
+ new
+
+ )}
+ {subItem.pro && (
+
+ pro
+
+ )}
+
+
+
+ ))}
+
+
+ )}
+
+ ))}
+
+ );
+
+ const [openSubmenu, setOpenSubmenu] = useState<{
+ type: "main" | "others";
+ index: number;
+ } | null>(null);
+ const [subMenuHeight, setSubMenuHeight] = useState>(
+ {}
+ );
+ const subMenuRefs = useRef>({});
+
+ // const isActive = (path: string) => path === pathname;
+ const isActive = useCallback((path: string) => path === pathname, [pathname]);
+
+ useEffect(() => {
+ // Check if the current path matches any submenu item
+ let submenuMatched = false;
+ ["main", "others"].forEach((menuType) => {
+ const items = menuType === "main" ? navItems : othersItems;
+ items.forEach((nav, index) => {
+ if (nav.subItems) {
+ nav.subItems.forEach((subItem) => {
+ if (isActive(subItem.path)) {
+ setOpenSubmenu({
+ type: menuType as "main" | "others",
+ index,
+ });
+ submenuMatched = true;
+ }
+ });
+ }
+ });
+ });
+
+ // If no submenu item matches, close the open submenu
+ if (!submenuMatched) {
+ setOpenSubmenu(null);
+ }
+ }, [pathname,isActive]);
+
+ useEffect(() => {
+ // Set the height of the submenu items when the submenu is opened
+ if (openSubmenu !== null) {
+ const key = `${openSubmenu.type}-${openSubmenu.index}`;
+ if (subMenuRefs.current[key]) {
+ setSubMenuHeight((prevHeights) => ({
+ ...prevHeights,
+ [key]: subMenuRefs.current[key]?.scrollHeight || 0,
+ }));
+ }
+ }
+ }, [openSubmenu]);
+
+ const handleSubmenuToggle = (index: number, menuType: "main" | "others") => {
+ setOpenSubmenu((prevOpenSubmenu) => {
+ if (
+ prevOpenSubmenu &&
+ prevOpenSubmenu.type === menuType &&
+ prevOpenSubmenu.index === index
+ ) {
+ return null;
+ }
+ return { type: menuType, index };
+ });
+ };
+
+ return (
+ !isExpanded && setIsHovered(true)}
+ onMouseLeave={() => setIsHovered(false)}
+ >
+
+
+ {isExpanded || isHovered || isMobileOpen ? (
+ <>
+
+
+ >
+ ) : (
+
+ )}
+
+
+
+
+
+
+
+ {isExpanded || isHovered || isMobileOpen ? (
+ "Menu"
+ ) : (
+
+ )}
+
+ {renderMenuItems(navItems, "main")}
+
+
+
+
+ {isExpanded || isHovered || isMobileOpen ? (
+ "Others"
+ ) : (
+
+ )}
+
+ {renderMenuItems(othersItems, "others")}
+
+
+
+ {isExpanded || isHovered || isMobileOpen ?
: null}
+
+
+ );
+};
+
+export default AppSidebar;
diff --git a/frontend/src/layout/Backdrop.tsx b/frontend/src/layout/Backdrop.tsx
new file mode 100644
index 0000000000..8ae31671d2
--- /dev/null
+++ b/frontend/src/layout/Backdrop.tsx
@@ -0,0 +1,17 @@
+import { useSidebar } from "@/context/SidebarContext";
+import React from "react";
+
+const Backdrop: React.FC = () => {
+ const { isMobileOpen, toggleMobileSidebar } = useSidebar();
+
+ if (!isMobileOpen) return null;
+
+ return (
+
+ );
+};
+
+export default Backdrop;
diff --git a/frontend/src/layout/SidebarWidget.tsx b/frontend/src/layout/SidebarWidget.tsx
new file mode 100644
index 0000000000..917908c90c
--- /dev/null
+++ b/frontend/src/layout/SidebarWidget.tsx
@@ -0,0 +1,25 @@
+import React from "react";
+
+export default function SidebarWidget() {
+ return (
+
+
+ #1 Tailwind CSS Dashboard
+
+
+ Leading Tailwind CSS Admin Template with 400+ UI Component and Pages.
+
+
+ Upgrade To Pro
+
+
+ );
+}
diff --git a/frontend/src/layout/StaticHeader.tsx b/frontend/src/layout/StaticHeader.tsx
new file mode 100644
index 0000000000..861a80c809
--- /dev/null
+++ b/frontend/src/layout/StaticHeader.tsx
@@ -0,0 +1,54 @@
+"use client";
+
+import { ThemeToggleButton } from "@/components/common/ThemeToggleButton";
+import Image from "next/image";
+import Link from "next/link";
+import React from "react";
+
+const StaticHeader: React.FC = () => {
+ return (
+
+ );
+};
+
+export default StaticHeader;
diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx
deleted file mode 100644
index 77f648090d..0000000000
--- a/frontend/src/main.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import {
- MutationCache,
- QueryCache,
- QueryClient,
- QueryClientProvider,
-} from "@tanstack/react-query"
-import { createRouter, RouterProvider } from "@tanstack/react-router"
-import { StrictMode } from "react"
-import ReactDOM from "react-dom/client"
-import { ApiError, OpenAPI } from "./client"
-import { CustomProvider } from "./components/ui/provider"
-import { routeTree } from "./routeTree.gen"
-
-OpenAPI.BASE = import.meta.env.VITE_API_URL
-OpenAPI.TOKEN = async () => {
- return localStorage.getItem("access_token") || ""
-}
-
-const handleApiError = (error: Error) => {
- if (error instanceof ApiError && [401, 403].includes(error.status)) {
- localStorage.removeItem("access_token")
- window.location.href = "/login"
- }
-}
-const queryClient = new QueryClient({
- queryCache: new QueryCache({
- onError: handleApiError,
- }),
- mutationCache: new MutationCache({
- onError: handleApiError,
- }),
-})
-
-const router = createRouter({ routeTree })
-declare module "@tanstack/react-router" {
- interface Register {
- router: typeof router
- }
-}
-
-ReactDOM.createRoot(document.getElementById("root")!).render(
-
-
-
-
-
-
- ,
-)
diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts
deleted file mode 100644
index 8849130b4c..0000000000
--- a/frontend/src/routeTree.gen.ts
+++ /dev/null
@@ -1,235 +0,0 @@
-/* eslint-disable */
-
-// @ts-nocheck
-
-// noinspection JSUnusedGlobalSymbols
-
-// This file was automatically generated by TanStack Router.
-// You should NOT make any changes in this file as it will be overwritten.
-// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
-
-import { Route as rootRouteImport } from './routes/__root'
-import { Route as SignupRouteImport } from './routes/signup'
-import { Route as ResetPasswordRouteImport } from './routes/reset-password'
-import { Route as RecoverPasswordRouteImport } from './routes/recover-password'
-import { Route as LoginRouteImport } from './routes/login'
-import { Route as LayoutRouteImport } from './routes/_layout'
-import { Route as LayoutIndexRouteImport } from './routes/_layout/index'
-import { Route as LayoutSettingsRouteImport } from './routes/_layout/settings'
-import { Route as LayoutItemsRouteImport } from './routes/_layout/items'
-import { Route as LayoutAdminRouteImport } from './routes/_layout/admin'
-
-const SignupRoute = SignupRouteImport.update({
- id: '/signup',
- path: '/signup',
- getParentRoute: () => rootRouteImport,
-} as any)
-const ResetPasswordRoute = ResetPasswordRouteImport.update({
- id: '/reset-password',
- path: '/reset-password',
- getParentRoute: () => rootRouteImport,
-} as any)
-const RecoverPasswordRoute = RecoverPasswordRouteImport.update({
- id: '/recover-password',
- path: '/recover-password',
- getParentRoute: () => rootRouteImport,
-} as any)
-const LoginRoute = LoginRouteImport.update({
- id: '/login',
- path: '/login',
- getParentRoute: () => rootRouteImport,
-} as any)
-const LayoutRoute = LayoutRouteImport.update({
- id: '/_layout',
- getParentRoute: () => rootRouteImport,
-} as any)
-const LayoutIndexRoute = LayoutIndexRouteImport.update({
- id: '/',
- path: '/',
- getParentRoute: () => LayoutRoute,
-} as any)
-const LayoutSettingsRoute = LayoutSettingsRouteImport.update({
- id: '/settings',
- path: '/settings',
- getParentRoute: () => LayoutRoute,
-} as any)
-const LayoutItemsRoute = LayoutItemsRouteImport.update({
- id: '/items',
- path: '/items',
- getParentRoute: () => LayoutRoute,
-} as any)
-const LayoutAdminRoute = LayoutAdminRouteImport.update({
- id: '/admin',
- path: '/admin',
- getParentRoute: () => LayoutRoute,
-} as any)
-
-export interface FileRoutesByFullPath {
- '/login': typeof LoginRoute
- '/recover-password': typeof RecoverPasswordRoute
- '/reset-password': typeof ResetPasswordRoute
- '/signup': typeof SignupRoute
- '/admin': typeof LayoutAdminRoute
- '/items': typeof LayoutItemsRoute
- '/settings': typeof LayoutSettingsRoute
- '/': typeof LayoutIndexRoute
-}
-export interface FileRoutesByTo {
- '/login': typeof LoginRoute
- '/recover-password': typeof RecoverPasswordRoute
- '/reset-password': typeof ResetPasswordRoute
- '/signup': typeof SignupRoute
- '/admin': typeof LayoutAdminRoute
- '/items': typeof LayoutItemsRoute
- '/settings': typeof LayoutSettingsRoute
- '/': typeof LayoutIndexRoute
-}
-export interface FileRoutesById {
- __root__: typeof rootRouteImport
- '/_layout': typeof LayoutRouteWithChildren
- '/login': typeof LoginRoute
- '/recover-password': typeof RecoverPasswordRoute
- '/reset-password': typeof ResetPasswordRoute
- '/signup': typeof SignupRoute
- '/_layout/admin': typeof LayoutAdminRoute
- '/_layout/items': typeof LayoutItemsRoute
- '/_layout/settings': typeof LayoutSettingsRoute
- '/_layout/': typeof LayoutIndexRoute
-}
-export interface FileRouteTypes {
- fileRoutesByFullPath: FileRoutesByFullPath
- fullPaths:
- | '/login'
- | '/recover-password'
- | '/reset-password'
- | '/signup'
- | '/admin'
- | '/items'
- | '/settings'
- | '/'
- fileRoutesByTo: FileRoutesByTo
- to:
- | '/login'
- | '/recover-password'
- | '/reset-password'
- | '/signup'
- | '/admin'
- | '/items'
- | '/settings'
- | '/'
- id:
- | '__root__'
- | '/_layout'
- | '/login'
- | '/recover-password'
- | '/reset-password'
- | '/signup'
- | '/_layout/admin'
- | '/_layout/items'
- | '/_layout/settings'
- | '/_layout/'
- fileRoutesById: FileRoutesById
-}
-export interface RootRouteChildren {
- LayoutRoute: typeof LayoutRouteWithChildren
- LoginRoute: typeof LoginRoute
- RecoverPasswordRoute: typeof RecoverPasswordRoute
- ResetPasswordRoute: typeof ResetPasswordRoute
- SignupRoute: typeof SignupRoute
-}
-
-declare module '@tanstack/react-router' {
- interface FileRoutesByPath {
- '/signup': {
- id: '/signup'
- path: '/signup'
- fullPath: '/signup'
- preLoaderRoute: typeof SignupRouteImport
- parentRoute: typeof rootRouteImport
- }
- '/reset-password': {
- id: '/reset-password'
- path: '/reset-password'
- fullPath: '/reset-password'
- preLoaderRoute: typeof ResetPasswordRouteImport
- parentRoute: typeof rootRouteImport
- }
- '/recover-password': {
- id: '/recover-password'
- path: '/recover-password'
- fullPath: '/recover-password'
- preLoaderRoute: typeof RecoverPasswordRouteImport
- parentRoute: typeof rootRouteImport
- }
- '/login': {
- id: '/login'
- path: '/login'
- fullPath: '/login'
- preLoaderRoute: typeof LoginRouteImport
- parentRoute: typeof rootRouteImport
- }
- '/_layout': {
- id: '/_layout'
- path: ''
- fullPath: ''
- preLoaderRoute: typeof LayoutRouteImport
- parentRoute: typeof rootRouteImport
- }
- '/_layout/': {
- id: '/_layout/'
- path: '/'
- fullPath: '/'
- preLoaderRoute: typeof LayoutIndexRouteImport
- parentRoute: typeof LayoutRoute
- }
- '/_layout/settings': {
- id: '/_layout/settings'
- path: '/settings'
- fullPath: '/settings'
- preLoaderRoute: typeof LayoutSettingsRouteImport
- parentRoute: typeof LayoutRoute
- }
- '/_layout/items': {
- id: '/_layout/items'
- path: '/items'
- fullPath: '/items'
- preLoaderRoute: typeof LayoutItemsRouteImport
- parentRoute: typeof LayoutRoute
- }
- '/_layout/admin': {
- id: '/_layout/admin'
- path: '/admin'
- fullPath: '/admin'
- preLoaderRoute: typeof LayoutAdminRouteImport
- parentRoute: typeof LayoutRoute
- }
- }
-}
-
-interface LayoutRouteChildren {
- LayoutAdminRoute: typeof LayoutAdminRoute
- LayoutItemsRoute: typeof LayoutItemsRoute
- LayoutSettingsRoute: typeof LayoutSettingsRoute
- LayoutIndexRoute: typeof LayoutIndexRoute
-}
-
-const LayoutRouteChildren: LayoutRouteChildren = {
- LayoutAdminRoute: LayoutAdminRoute,
- LayoutItemsRoute: LayoutItemsRoute,
- LayoutSettingsRoute: LayoutSettingsRoute,
- LayoutIndexRoute: LayoutIndexRoute,
-}
-
-const LayoutRouteWithChildren =
- LayoutRoute._addFileChildren(LayoutRouteChildren)
-
-const rootRouteChildren: RootRouteChildren = {
- LayoutRoute: LayoutRouteWithChildren,
- LoginRoute: LoginRoute,
- RecoverPasswordRoute: RecoverPasswordRoute,
- ResetPasswordRoute: ResetPasswordRoute,
- SignupRoute: SignupRoute,
-}
-export const routeTree = rootRouteImport
- ._addFileChildren(rootRouteChildren)
- ._addFileTypes()
diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx
deleted file mode 100644
index ab74696101..0000000000
--- a/frontend/src/routes/__root.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import { createRootRoute, Outlet } from "@tanstack/react-router"
-import React, { Suspense } from "react"
-
-import NotFound from "@/components/Common/NotFound"
-
-const loadDevtools = () =>
- Promise.all([
- import("@tanstack/router-devtools"),
- import("@tanstack/react-query-devtools"),
- ]).then(([routerDevtools, reactQueryDevtools]) => {
- return {
- default: () => (
- <>
-
-
- >
- ),
- }
- })
-
-const TanStackDevtools =
- process.env.NODE_ENV === "production" ? () => null : React.lazy(loadDevtools)
-
-export const Route = createRootRoute({
- component: () => (
- <>
-
-
-
-
- >
- ),
- notFoundComponent: () => ,
-})
diff --git a/frontend/src/routes/_layout.tsx b/frontend/src/routes/_layout.tsx
deleted file mode 100644
index 2514324271..0000000000
--- a/frontend/src/routes/_layout.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Flex } from "@chakra-ui/react"
-import { createFileRoute, Outlet, redirect } from "@tanstack/react-router"
-
-import Navbar from "@/components/Common/Navbar"
-import Sidebar from "@/components/Common/Sidebar"
-import { isLoggedIn } from "@/hooks/useAuth"
-
-export const Route = createFileRoute("/_layout")({
- component: Layout,
- beforeLoad: async () => {
- if (!isLoggedIn()) {
- throw redirect({
- to: "/login",
- })
- }
- },
-})
-
-function Layout() {
- return (
-
-
-
-
-
-
-
-
-
- )
-}
-
-export default Layout
diff --git a/frontend/src/routes/_layout/admin.tsx b/frontend/src/routes/_layout/admin.tsx
deleted file mode 100644
index 706fd58dc9..0000000000
--- a/frontend/src/routes/_layout/admin.tsx
+++ /dev/null
@@ -1,129 +0,0 @@
-import { Badge, Container, Flex, Heading, Table } from "@chakra-ui/react"
-import { useQuery, useQueryClient } from "@tanstack/react-query"
-import { createFileRoute, useNavigate } from "@tanstack/react-router"
-import { z } from "zod"
-
-import { type UserPublic, UsersService } from "@/client"
-import AddUser from "@/components/Admin/AddUser"
-import { UserActionsMenu } from "@/components/Common/UserActionsMenu"
-import PendingUsers from "@/components/Pending/PendingUsers"
-import {
- PaginationItems,
- PaginationNextTrigger,
- PaginationPrevTrigger,
- PaginationRoot,
-} from "@/components/ui/pagination.tsx"
-
-const usersSearchSchema = z.object({
- page: z.number().catch(1),
-})
-
-const PER_PAGE = 5
-
-function getUsersQueryOptions({ page }: { page: number }) {
- return {
- queryFn: () =>
- UsersService.readUsers({ skip: (page - 1) * PER_PAGE, limit: PER_PAGE }),
- queryKey: ["users", { page }],
- }
-}
-
-export const Route = createFileRoute("/_layout/admin")({
- component: Admin,
- validateSearch: (search) => usersSearchSchema.parse(search),
-})
-
-function UsersTable() {
- const queryClient = useQueryClient()
- const currentUser = queryClient.getQueryData(["currentUser"])
- const navigate = useNavigate({ from: Route.fullPath })
- const { page } = Route.useSearch()
-
- const { data, isLoading, isPlaceholderData } = useQuery({
- ...getUsersQueryOptions({ page }),
- placeholderData: (prevData) => prevData,
- })
-
- const setPage = (page: number) => {
- navigate({
- to: "/admin",
- search: (prev) => ({ ...prev, page }),
- })
- }
-
- const users = data?.data.slice(0, PER_PAGE) ?? []
- const count = data?.count ?? 0
-
- if (isLoading) {
- return
- }
-
- return (
- <>
-
-
-
- Full name
- Email
- Role
- Status
- Actions
-
-
-
- {users?.map((user) => (
-
-
- {user.full_name || "N/A"}
- {currentUser?.id === user.id && (
-
- You
-
- )}
-
-
- {user.email}
-
-
- {user.is_superuser ? "Superuser" : "User"}
-
- {user.is_active ? "Active" : "Inactive"}
-
-
-
-
- ))}
-
-
-
- setPage(page)}
- >
-
-
-
-
-
-
-
- >
- )
-}
-
-function Admin() {
- return (
-
-
- Users Management
-
-
-
-
-
- )
-}
diff --git a/frontend/src/routes/_layout/index.tsx b/frontend/src/routes/_layout/index.tsx
deleted file mode 100644
index 66e32e0b30..0000000000
--- a/frontend/src/routes/_layout/index.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { Box, Container, Text } from "@chakra-ui/react"
-import { createFileRoute } from "@tanstack/react-router"
-
-import useAuth from "@/hooks/useAuth"
-
-export const Route = createFileRoute("/_layout/")({
- component: Dashboard,
-})
-
-function Dashboard() {
- const { user: currentUser } = useAuth()
-
- return (
-
-
-
- Hi, {currentUser?.full_name || currentUser?.email} 👋🏼
-
- Welcome back, nice to see you again!
-
-
- )
-}
diff --git a/frontend/src/routes/_layout/items.tsx b/frontend/src/routes/_layout/items.tsx
deleted file mode 100644
index 487ede9138..0000000000
--- a/frontend/src/routes/_layout/items.tsx
+++ /dev/null
@@ -1,146 +0,0 @@
-import {
- Container,
- EmptyState,
- Flex,
- Heading,
- Table,
- VStack,
-} from "@chakra-ui/react"
-import { useQuery } from "@tanstack/react-query"
-import { createFileRoute, useNavigate } from "@tanstack/react-router"
-import { FiSearch } from "react-icons/fi"
-import { z } from "zod"
-
-import { ItemsService } from "@/client"
-import { ItemActionsMenu } from "@/components/Common/ItemActionsMenu"
-import AddItem from "@/components/Items/AddItem"
-import PendingItems from "@/components/Pending/PendingItems"
-import {
- PaginationItems,
- PaginationNextTrigger,
- PaginationPrevTrigger,
- PaginationRoot,
-} from "@/components/ui/pagination.tsx"
-
-const itemsSearchSchema = z.object({
- page: z.number().catch(1),
-})
-
-const PER_PAGE = 5
-
-function getItemsQueryOptions({ page }: { page: number }) {
- return {
- queryFn: () =>
- ItemsService.readItems({ skip: (page - 1) * PER_PAGE, limit: PER_PAGE }),
- queryKey: ["items", { page }],
- }
-}
-
-export const Route = createFileRoute("/_layout/items")({
- component: Items,
- validateSearch: (search) => itemsSearchSchema.parse(search),
-})
-
-function ItemsTable() {
- const navigate = useNavigate({ from: Route.fullPath })
- const { page } = Route.useSearch()
-
- const { data, isLoading, isPlaceholderData } = useQuery({
- ...getItemsQueryOptions({ page }),
- placeholderData: (prevData) => prevData,
- })
-
- const setPage = (page: number) => {
- navigate({
- to: "/items",
- search: (prev) => ({ ...prev, page }),
- })
- }
-
- const items = data?.data.slice(0, PER_PAGE) ?? []
- const count = data?.count ?? 0
-
- if (isLoading) {
- return
- }
-
- if (items.length === 0) {
- return (
-
-
-
-
-
-
- You don't have any items yet
-
- Add a new item to get started
-
-
-
-
- )
- }
-
- return (
- <>
-
-
-
- ID
- Title
- Description
- Actions
-
-
-
- {items?.map((item) => (
-
-
- {item.id}
-
-
- {item.title}
-
-
- {item.description || "N/A"}
-
-
-
-
-
- ))}
-
-
-
- setPage(page)}
- >
-
-
-
-
-
-
-
- >
- )
-}
-
-function Items() {
- return (
-
-
- Items Management
-
-
-
-
- )
-}
diff --git a/frontend/src/routes/_layout/settings.tsx b/frontend/src/routes/_layout/settings.tsx
deleted file mode 100644
index 3a544acb8b..0000000000
--- a/frontend/src/routes/_layout/settings.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import { Container, Heading, Tabs } from "@chakra-ui/react"
-import { createFileRoute } from "@tanstack/react-router"
-
-import Appearance from "@/components/UserSettings/Appearance"
-import ChangePassword from "@/components/UserSettings/ChangePassword"
-import DeleteAccount from "@/components/UserSettings/DeleteAccount"
-import UserInformation from "@/components/UserSettings/UserInformation"
-import useAuth from "@/hooks/useAuth"
-
-const tabsConfig = [
- { value: "my-profile", title: "My profile", component: UserInformation },
- { value: "password", title: "Password", component: ChangePassword },
- { value: "appearance", title: "Appearance", component: Appearance },
- { value: "danger-zone", title: "Danger zone", component: DeleteAccount },
-]
-
-export const Route = createFileRoute("/_layout/settings")({
- component: UserSettings,
-})
-
-function UserSettings() {
- const { user: currentUser } = useAuth()
- const finalTabs = currentUser?.is_superuser
- ? tabsConfig.slice(0, 3)
- : tabsConfig
-
- if (!currentUser) {
- return null
- }
-
- return (
-
-
- User Settings
-
-
-
-
- {finalTabs.map((tab) => (
-
- {tab.title}
-
- ))}
-
- {finalTabs.map((tab) => (
-
-
-
- ))}
-
-
- )
-}
diff --git a/frontend/src/routes/login.tsx b/frontend/src/routes/login.tsx
deleted file mode 100644
index 2e0539d9d9..0000000000
--- a/frontend/src/routes/login.tsx
+++ /dev/null
@@ -1,112 +0,0 @@
-import { Container, Image, Input, Text } from "@chakra-ui/react"
-import {
- createFileRoute,
- Link as RouterLink,
- redirect,
-} from "@tanstack/react-router"
-import { type SubmitHandler, useForm } from "react-hook-form"
-import { FiLock, FiMail } from "react-icons/fi"
-
-import type { Body_login_login_access_token as AccessToken } from "@/client"
-import { Button } from "@/components/ui/button"
-import { Field } from "@/components/ui/field"
-import { InputGroup } from "@/components/ui/input-group"
-import { PasswordInput } from "@/components/ui/password-input"
-import useAuth, { isLoggedIn } from "@/hooks/useAuth"
-import Logo from "/assets/images/fastapi-logo.svg"
-import { emailPattern, passwordRules } from "../utils"
-
-export const Route = createFileRoute("/login")({
- component: Login,
- beforeLoad: async () => {
- if (isLoggedIn()) {
- throw redirect({
- to: "/",
- })
- }
- },
-})
-
-function Login() {
- const { loginMutation, error, resetError } = useAuth()
- const {
- register,
- handleSubmit,
- formState: { errors, isSubmitting },
- } = useForm({
- mode: "onBlur",
- criteriaMode: "all",
- defaultValues: {
- username: "",
- password: "",
- },
- })
-
- const onSubmit: SubmitHandler = async (data) => {
- if (isSubmitting) return
-
- resetError()
-
- try {
- await loginMutation.mutateAsync(data)
- } catch {
- // error is handled by useAuth hook
- }
- }
-
- return (
-
-
-
- }>
-
-
-
- }
- {...register("password", passwordRules())}
- placeholder="Password"
- errors={errors}
- />
-
- Forgot Password?
-
-
- Log In
-
-
- Don't have an account?{" "}
-
- Sign Up
-
-
-
- )
-}
diff --git a/frontend/src/routes/recover-password.tsx b/frontend/src/routes/recover-password.tsx
deleted file mode 100644
index 084fbdd73a..0000000000
--- a/frontend/src/routes/recover-password.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import { Container, Heading, Input, Text } from "@chakra-ui/react"
-import { useMutation } from "@tanstack/react-query"
-import { createFileRoute, redirect } from "@tanstack/react-router"
-import { type SubmitHandler, useForm } from "react-hook-form"
-import { FiMail } from "react-icons/fi"
-
-import { type ApiError, LoginService } from "@/client"
-import { Button } from "@/components/ui/button"
-import { Field } from "@/components/ui/field"
-import { InputGroup } from "@/components/ui/input-group"
-import { isLoggedIn } from "@/hooks/useAuth"
-import useCustomToast from "@/hooks/useCustomToast"
-import { emailPattern, handleError } from "@/utils"
-
-interface FormData {
- email: string
-}
-
-export const Route = createFileRoute("/recover-password")({
- component: RecoverPassword,
- beforeLoad: async () => {
- if (isLoggedIn()) {
- throw redirect({
- to: "/",
- })
- }
- },
-})
-
-function RecoverPassword() {
- const {
- register,
- handleSubmit,
- reset,
- formState: { errors, isSubmitting },
- } = useForm()
- const { showSuccessToast } = useCustomToast()
-
- const recoverPassword = async (data: FormData) => {
- await LoginService.recoverPassword({
- email: data.email,
- })
- }
-
- const mutation = useMutation({
- mutationFn: recoverPassword,
- onSuccess: () => {
- showSuccessToast("Password recovery email sent successfully.")
- reset()
- },
- onError: (err: ApiError) => {
- handleError(err)
- },
- })
-
- const onSubmit: SubmitHandler = async (data) => {
- mutation.mutate(data)
- }
-
- return (
-
-
- Password Recovery
-
-
- A password recovery email will be sent to the registered account.
-
-
- }>
-
-
-
-
- Continue
-
-
- )
-}
diff --git a/frontend/src/routes/reset-password.tsx b/frontend/src/routes/reset-password.tsx
deleted file mode 100644
index f55f49e287..0000000000
--- a/frontend/src/routes/reset-password.tsx
+++ /dev/null
@@ -1,106 +0,0 @@
-import { Container, Heading, Text } from "@chakra-ui/react"
-import { useMutation } from "@tanstack/react-query"
-import { createFileRoute, redirect, useNavigate } from "@tanstack/react-router"
-import { type SubmitHandler, useForm } from "react-hook-form"
-import { FiLock } from "react-icons/fi"
-
-import { type ApiError, LoginService, type NewPassword } from "@/client"
-import { Button } from "@/components/ui/button"
-import { PasswordInput } from "@/components/ui/password-input"
-import { isLoggedIn } from "@/hooks/useAuth"
-import useCustomToast from "@/hooks/useCustomToast"
-import { confirmPasswordRules, handleError, passwordRules } from "@/utils"
-
-interface NewPasswordForm extends NewPassword {
- confirm_password: string
-}
-
-export const Route = createFileRoute("/reset-password")({
- component: ResetPassword,
- beforeLoad: async () => {
- if (isLoggedIn()) {
- throw redirect({
- to: "/",
- })
- }
- },
-})
-
-function ResetPassword() {
- const {
- register,
- handleSubmit,
- getValues,
- reset,
- formState: { errors },
- } = useForm({
- mode: "onBlur",
- criteriaMode: "all",
- defaultValues: {
- new_password: "",
- },
- })
- const { showSuccessToast } = useCustomToast()
- const navigate = useNavigate()
-
- const resetPassword = async (data: NewPassword) => {
- const token = new URLSearchParams(window.location.search).get("token")
- if (!token) return
- await LoginService.resetPassword({
- requestBody: { new_password: data.new_password, token: token },
- })
- }
-
- const mutation = useMutation({
- mutationFn: resetPassword,
- onSuccess: () => {
- showSuccessToast("Password updated successfully.")
- reset()
- navigate({ to: "/login" })
- },
- onError: (err: ApiError) => {
- handleError(err)
- },
- })
-
- const onSubmit: SubmitHandler = async (data) => {
- mutation.mutate(data)
- }
-
- return (
-
-
- Reset Password
-
-
- Please enter your new password and confirm it to reset your password.
-
- }
- type="new_password"
- errors={errors}
- {...register("new_password", passwordRules())}
- placeholder="New Password"
- />
- }
- type="confirm_password"
- errors={errors}
- {...register("confirm_password", confirmPasswordRules(getValues))}
- placeholder="Confirm Password"
- />
-
- Reset Password
-
-
- )
-}
diff --git a/frontend/src/routes/signup.tsx b/frontend/src/routes/signup.tsx
deleted file mode 100644
index 6e7890c485..0000000000
--- a/frontend/src/routes/signup.tsx
+++ /dev/null
@@ -1,132 +0,0 @@
-import { Container, Flex, Image, Input, Text } from "@chakra-ui/react"
-import {
- createFileRoute,
- Link as RouterLink,
- redirect,
-} from "@tanstack/react-router"
-import { type SubmitHandler, useForm } from "react-hook-form"
-import { FiLock, FiUser } from "react-icons/fi"
-
-import type { UserRegister } from "@/client"
-import { Button } from "@/components/ui/button"
-import { Field } from "@/components/ui/field"
-import { InputGroup } from "@/components/ui/input-group"
-import { PasswordInput } from "@/components/ui/password-input"
-import useAuth, { isLoggedIn } from "@/hooks/useAuth"
-import { confirmPasswordRules, emailPattern, passwordRules } from "@/utils"
-import Logo from "/assets/images/fastapi-logo.svg"
-
-export const Route = createFileRoute("/signup")({
- component: SignUp,
- beforeLoad: async () => {
- if (isLoggedIn()) {
- throw redirect({
- to: "/",
- })
- }
- },
-})
-
-interface UserRegisterForm extends UserRegister {
- confirm_password: string
-}
-
-function SignUp() {
- const { signUpMutation } = useAuth()
- const {
- register,
- handleSubmit,
- getValues,
- formState: { errors, isSubmitting },
- } = useForm({
- mode: "onBlur",
- criteriaMode: "all",
- defaultValues: {
- email: "",
- full_name: "",
- password: "",
- confirm_password: "",
- },
- })
-
- const onSubmit: SubmitHandler = (data) => {
- signUpMutation.mutate(data)
- }
-
- return (
-
-
-
-
- }>
-
-
-
-
-
- }>
-
-
-
- }
- {...register("password", passwordRules())}
- placeholder="Password"
- errors={errors}
- />
- }
- {...register("confirm_password", confirmPasswordRules(getValues))}
- placeholder="Confirm Password"
- errors={errors}
- />
-
- Sign Up
-
-
- Already have an account?{" "}
-
- Log In
-
-
-
-
- )
-}
-
-export default SignUp
diff --git a/frontend/src/svg.d.ts b/frontend/src/svg.d.ts
new file mode 100644
index 0000000000..fe632a3e5c
--- /dev/null
+++ b/frontend/src/svg.d.ts
@@ -0,0 +1,9 @@
+// svg.d.ts
+declare module "*.svg" {
+ import * as React from "react";
+ export const ReactComponent: React.FunctionComponent<
+ React.SVGProps & { title?: string }
+ >;
+ const src: string;
+ export default src;
+}
diff --git a/frontend/src/theme.tsx b/frontend/src/theme.tsx
deleted file mode 100644
index e7f2e60f66..0000000000
--- a/frontend/src/theme.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { createSystem, defaultConfig } from "@chakra-ui/react"
-import { buttonRecipe } from "./theme/button.recipe"
-
-export const system = createSystem(defaultConfig, {
- globalCss: {
- html: {
- fontSize: "16px",
- },
- body: {
- fontSize: "0.875rem",
- margin: 0,
- padding: 0,
- },
- ".main-link": {
- color: "ui.main",
- fontWeight: "bold",
- },
- },
- theme: {
- tokens: {
- colors: {
- ui: {
- main: { value: "#009688" },
- },
- },
- },
- recipes: {
- button: buttonRecipe,
- },
- },
-})
diff --git a/frontend/src/theme/button.recipe.ts b/frontend/src/theme/button.recipe.ts
deleted file mode 100644
index 766ca29b9a..0000000000
--- a/frontend/src/theme/button.recipe.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { defineRecipe } from "@chakra-ui/react"
-
-export const buttonRecipe = defineRecipe({
- base: {
- fontWeight: "bold",
- display: "flex",
- alignItems: "center",
- justifyContent: "center",
- colorPalette: "teal",
- },
- variants: {
- variant: {
- ghost: {
- bg: "transparent",
- _hover: {
- bg: "gray.100",
- },
- },
- },
- },
-})
diff --git a/frontend/src/utils.ts b/frontend/src/utils.ts
deleted file mode 100644
index ce1d184f9b..0000000000
--- a/frontend/src/utils.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import type { ApiError } from "./client"
-import useCustomToast from "./hooks/useCustomToast"
-
-export const emailPattern = {
- value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i,
- message: "Invalid email address",
-}
-
-export const namePattern = {
- value: /^[A-Za-z\s\u00C0-\u017F]{1,30}$/,
- message: "Invalid name",
-}
-
-export const passwordRules = (isRequired = true) => {
- const rules: any = {
- minLength: {
- value: 8,
- message: "Password must be at least 8 characters",
- },
- }
-
- if (isRequired) {
- rules.required = "Password is required"
- }
-
- return rules
-}
-
-export const confirmPasswordRules = (
- getValues: () => any,
- isRequired = true,
-) => {
- const rules: any = {
- validate: (value: string) => {
- const password = getValues().password || getValues().new_password
- return value === password ? true : "The passwords do not match"
- },
- }
-
- if (isRequired) {
- rules.required = "Password confirmation is required"
- }
-
- return rules
-}
-
-export const handleError = (err: ApiError) => {
- const { showErrorToast } = useCustomToast()
- const errDetail = (err.body as any)?.detail
- let errorMessage = errDetail || "Something went wrong."
- if (Array.isArray(errDetail) && errDetail.length > 0) {
- errorMessage = errDetail[0].msg
- }
- showErrorToast(errorMessage)
-}
diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts
deleted file mode 100644
index b54b4c9828..0000000000
--- a/frontend/src/vite-env.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-///
-
-interface ImportMetaEnv {
- readonly VITE_API_URL: string
-}
-
-interface ImportMeta {
- readonly env: ImportMetaEnv
-}
diff --git a/frontend/tests/auth.setup.ts b/frontend/tests/auth.setup.ts
deleted file mode 100644
index 3882f4f810..0000000000
--- a/frontend/tests/auth.setup.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { test as setup } from "@playwright/test"
-import { firstSuperuser, firstSuperuserPassword } from "./config.ts"
-
-const authFile = "playwright/.auth/user.json"
-
-setup("authenticate", async ({ page }) => {
- await page.goto("/login")
- await page.getByPlaceholder("Email").fill(firstSuperuser)
- await page.getByPlaceholder("Password").fill(firstSuperuserPassword)
- await page.getByRole("button", { name: "Log In" }).click()
- await page.waitForURL("/")
- await page.context().storageState({ path: authFile })
-})
diff --git a/frontend/tests/config.ts b/frontend/tests/config.ts
deleted file mode 100644
index 188cb367e3..0000000000
--- a/frontend/tests/config.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import path from "node:path"
-import { fileURLToPath } from "node:url"
-import dotenv from "dotenv"
-
-const __filename = fileURLToPath(import.meta.url)
-const __dirname = path.dirname(__filename)
-
-dotenv.config({ path: path.join(__dirname, "../../.env") })
-
-const { FIRST_SUPERUSER, FIRST_SUPERUSER_PASSWORD } = process.env
-
-if (typeof FIRST_SUPERUSER !== "string") {
- throw new Error("Environment variable FIRST_SUPERUSER is undefined")
-}
-
-if (typeof FIRST_SUPERUSER_PASSWORD !== "string") {
- throw new Error("Environment variable FIRST_SUPERUSER_PASSWORD is undefined")
-}
-
-export const firstSuperuser = FIRST_SUPERUSER as string
-export const firstSuperuserPassword = FIRST_SUPERUSER_PASSWORD as string
diff --git a/frontend/tests/login.spec.ts b/frontend/tests/login.spec.ts
deleted file mode 100644
index b639fd7998..0000000000
--- a/frontend/tests/login.spec.ts
+++ /dev/null
@@ -1,127 +0,0 @@
-import { expect, type Page, test } from "@playwright/test"
-import { firstSuperuser, firstSuperuserPassword } from "./config.ts"
-import { randomPassword } from "./utils/random.ts"
-
-test.use({ storageState: { cookies: [], origins: [] } })
-
-type OptionsType = {
- exact?: boolean
-}
-
-const fillForm = async (page: Page, email: string, password: string) => {
- await page.getByPlaceholder("Email").fill(email)
- await page.getByPlaceholder("Password", { exact: true }).fill(password)
-}
-
-const verifyInput = async (
- page: Page,
- placeholder: string,
- options?: OptionsType,
-) => {
- const input = page.getByPlaceholder(placeholder, options)
- await expect(input).toBeVisible()
- await expect(input).toHaveText("")
- await expect(input).toBeEditable()
-}
-
-test("Inputs are visible, empty and editable", async ({ page }) => {
- await page.goto("/login")
-
- await verifyInput(page, "Email")
- await verifyInput(page, "Password", { exact: true })
-})
-
-test("Log In button is visible", async ({ page }) => {
- await page.goto("/login")
-
- await expect(page.getByRole("button", { name: "Log In" })).toBeVisible()
-})
-
-test("Forgot Password link is visible", async ({ page }) => {
- await page.goto("/login")
-
- await expect(
- page.getByRole("link", { name: "Forgot password?" }),
- ).toBeVisible()
-})
-
-test("Log in with valid email and password ", async ({ page }) => {
- await page.goto("/login")
-
- await fillForm(page, firstSuperuser, firstSuperuserPassword)
- await page.getByRole("button", { name: "Log In" }).click()
-
- await page.waitForURL("/")
-
- await expect(
- page.getByText("Welcome back, nice to see you again!"),
- ).toBeVisible()
-})
-
-test("Log in with invalid email", async ({ page }) => {
- await page.goto("/login")
-
- await fillForm(page, "invalidemail", firstSuperuserPassword)
- await page.getByRole("button", { name: "Log In" }).click()
-
- await expect(page.getByText("Invalid email address")).toBeVisible()
-})
-
-test("Log in with invalid password", async ({ page }) => {
- const password = randomPassword()
-
- await page.goto("/login")
- await fillForm(page, firstSuperuser, password)
- await page.getByRole("button", { name: "Log In" }).click()
-
- await expect(page.getByText("Incorrect email or password")).toBeVisible()
-})
-
-// Log out
-
-test("Successful log out", async ({ page }) => {
- await page.goto("/login")
-
- await fillForm(page, firstSuperuser, firstSuperuserPassword)
- await page.getByRole("button", { name: "Log In" }).click()
-
- await page.waitForURL("/")
-
- await expect(
- page.getByText("Welcome back, nice to see you again!"),
- ).toBeVisible()
-
- await page.getByTestId("user-menu").click()
- await page.getByRole("menuitem", { name: "Log out" }).click()
- await page.waitForURL("/login")
-})
-
-test("Logged-out user cannot access protected routes", async ({ page }) => {
- await page.goto("/login")
-
- await fillForm(page, firstSuperuser, firstSuperuserPassword)
- await page.getByRole("button", { name: "Log In" }).click()
-
- await page.waitForURL("/")
-
- await expect(
- page.getByText("Welcome back, nice to see you again!"),
- ).toBeVisible()
-
- await page.getByTestId("user-menu").click()
- await page.getByRole("menuitem", { name: "Log out" }).click()
- await page.waitForURL("/login")
-
- await page.goto("/settings")
- await page.waitForURL("/login")
-})
-
-test("Redirects to /login when token is wrong", async ({ page }) => {
- await page.goto("/settings")
- await page.evaluate(() => {
- localStorage.setItem("access_token", "invalid_token")
- })
- await page.goto("/settings")
- await page.waitForURL("/login")
- await expect(page).toHaveURL("/login")
-})
diff --git a/frontend/tests/reset-password.spec.ts b/frontend/tests/reset-password.spec.ts
deleted file mode 100644
index 6c7096f33e..0000000000
--- a/frontend/tests/reset-password.spec.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-import { expect, test } from "@playwright/test"
-import { findLastEmail } from "./utils/mailcatcher"
-import { randomEmail, randomPassword } from "./utils/random"
-import { logInUser, signUpNewUser } from "./utils/user"
-
-test.use({ storageState: { cookies: [], origins: [] } })
-
-test("Password Recovery title is visible", async ({ page }) => {
- await page.goto("/recover-password")
-
- await expect(
- page.getByRole("heading", { name: "Password Recovery" }),
- ).toBeVisible()
-})
-
-test("Input is visible, empty and editable", async ({ page }) => {
- await page.goto("/recover-password")
-
- await expect(page.getByPlaceholder("Email")).toBeVisible()
- await expect(page.getByPlaceholder("Email")).toHaveText("")
- await expect(page.getByPlaceholder("Email")).toBeEditable()
-})
-
-test("Continue button is visible", async ({ page }) => {
- await page.goto("/recover-password")
-
- await expect(page.getByRole("button", { name: "Continue" })).toBeVisible()
-})
-
-test("User can reset password successfully using the link", async ({
- page,
- request,
-}) => {
- const fullName = "Test User"
- const email = randomEmail()
- const password = randomPassword()
- const newPassword = randomPassword()
-
- // Sign up a new user
- await signUpNewUser(page, fullName, email, password)
-
- await page.goto("/recover-password")
- await page.getByPlaceholder("Email").fill(email)
-
- await page.getByRole("button", { name: "Continue" }).click()
-
- const emailData = await findLastEmail({
- request,
- filter: (e) => e.recipients.includes(`<${email}>`),
- timeout: 5000,
- })
-
- await page.goto(
- `${process.env.MAILCATCHER_HOST}/messages/${emailData.id}.html`,
- )
-
- const selector = 'a[href*="/reset-password?token="]'
-
- let url = await page.getAttribute(selector, "href")
-
- // TODO: update var instead of doing a replace
- url = url!.replace("http://localhost/", "http://localhost:5173/")
-
- // Set the new password and confirm it
- await page.goto(url)
-
- await page.getByPlaceholder("New Password").fill(newPassword)
- await page.getByPlaceholder("Confirm Password").fill(newPassword)
- await page.getByRole("button", { name: "Reset Password" }).click()
- await expect(page.getByText("Password updated successfully")).toBeVisible()
-
- // Check if the user is able to login with the new password
- await logInUser(page, email, newPassword)
-})
-
-test("Expired or invalid reset link", async ({ page }) => {
- const password = randomPassword()
- const invalidUrl = "/reset-password?token=invalidtoken"
-
- await page.goto(invalidUrl)
-
- await page.getByPlaceholder("New Password").fill(password)
- await page.getByPlaceholder("Confirm Password").fill(password)
- await page.getByRole("button", { name: "Reset Password" }).click()
-
- await expect(page.getByText("Invalid token")).toBeVisible()
-})
-
-test("Weak new password validation", async ({ page, request }) => {
- const fullName = "Test User"
- const email = randomEmail()
- const password = randomPassword()
- const weakPassword = "123"
-
- // Sign up a new user
- await signUpNewUser(page, fullName, email, password)
-
- await page.goto("/recover-password")
- await page.getByPlaceholder("Email").fill(email)
- await page.getByRole("button", { name: "Continue" }).click()
-
- const emailData = await findLastEmail({
- request,
- filter: (e) => e.recipients.includes(`<${email}>`),
- timeout: 5000,
- })
-
- await page.goto(
- `${process.env.MAILCATCHER_HOST}/messages/${emailData.id}.html`,
- )
-
- const selector = 'a[href*="/reset-password?token="]'
- let url = await page.getAttribute(selector, "href")
- url = url!.replace("http://localhost/", "http://localhost:5173/")
-
- // Set a weak new password
- await page.goto(url)
- await page.getByPlaceholder("New Password").fill(weakPassword)
- await page.getByPlaceholder("Confirm Password").fill(weakPassword)
- await page.getByRole("button", { name: "Reset Password" }).click()
-
- await expect(
- page.getByText("Password must be at least 8 characters"),
- ).toBeVisible()
-})
diff --git a/frontend/tests/sign-up.spec.ts b/frontend/tests/sign-up.spec.ts
deleted file mode 100644
index 750edb1830..0000000000
--- a/frontend/tests/sign-up.spec.ts
+++ /dev/null
@@ -1,169 +0,0 @@
-import { expect, type Page, test } from "@playwright/test"
-
-import { randomEmail, randomPassword } from "./utils/random"
-
-test.use({ storageState: { cookies: [], origins: [] } })
-
-type OptionsType = {
- exact?: boolean
-}
-
-const fillForm = async (
- page: Page,
- full_name: string,
- email: string,
- password: string,
- confirm_password: string,
-) => {
- await page.getByPlaceholder("Full Name").fill(full_name)
- await page.getByPlaceholder("Email").fill(email)
- await page.getByPlaceholder("Password", { exact: true }).fill(password)
- await page.getByPlaceholder("Confirm Password").fill(confirm_password)
-}
-
-const verifyInput = async (
- page: Page,
- placeholder: string,
- options?: OptionsType,
-) => {
- const input = page.getByPlaceholder(placeholder, options)
- await expect(input).toBeVisible()
- await expect(input).toHaveText("")
- await expect(input).toBeEditable()
-}
-
-test("Inputs are visible, empty and editable", async ({ page }) => {
- await page.goto("/signup")
-
- await verifyInput(page, "Full Name")
- await verifyInput(page, "Email")
- await verifyInput(page, "Password", { exact: true })
- await verifyInput(page, "Confirm Password")
-})
-
-test("Sign Up button is visible", async ({ page }) => {
- await page.goto("/signup")
-
- await expect(page.getByRole("button", { name: "Sign Up" })).toBeVisible()
-})
-
-test("Log In link is visible", async ({ page }) => {
- await page.goto("/signup")
-
- await expect(page.getByRole("link", { name: "Log In" })).toBeVisible()
-})
-
-test("Sign up with valid name, email, and password", async ({ page }) => {
- const full_name = "Test User"
- const email = randomEmail()
- const password = randomPassword()
-
- await page.goto("/signup")
- await fillForm(page, full_name, email, password, password)
- await page.getByRole("button", { name: "Sign Up" }).click()
-})
-
-test("Sign up with invalid email", async ({ page }) => {
- await page.goto("/signup")
-
- await fillForm(
- page,
- "Playwright Test",
- "invalid-email",
- "changethis",
- "changethis",
- )
- await page.getByRole("button", { name: "Sign Up" }).click()
-
- await expect(page.getByText("Invalid email address")).toBeVisible()
-})
-
-test("Sign up with existing email", async ({ page }) => {
- const fullName = "Test User"
- const email = randomEmail()
- const password = randomPassword()
-
- // Sign up with an email
- await page.goto("/signup")
-
- await fillForm(page, fullName, email, password, password)
- await page.getByRole("button", { name: "Sign Up" }).click()
-
- // Sign up again with the same email
- await page.goto("/signup")
-
- await fillForm(page, fullName, email, password, password)
- await page.getByRole("button", { name: "Sign Up" }).click()
-
- await page
- .getByText("The user with this email already exists in the system")
- .click()
-})
-
-test("Sign up with weak password", async ({ page }) => {
- const fullName = "Test User"
- const email = randomEmail()
- const password = "weak"
-
- await page.goto("/signup")
-
- await fillForm(page, fullName, email, password, password)
- await page.getByRole("button", { name: "Sign Up" }).click()
-
- await expect(
- page.getByText("Password must be at least 8 characters"),
- ).toBeVisible()
-})
-
-test("Sign up with mismatched passwords", async ({ page }) => {
- const fullName = "Test User"
- const email = randomEmail()
- const password = randomPassword()
- const password2 = randomPassword()
-
- await page.goto("/signup")
-
- await fillForm(page, fullName, email, password, password2)
- await page.getByRole("button", { name: "Sign Up" }).click()
-
- await expect(page.getByText("Passwords do not match")).toBeVisible()
-})
-
-test("Sign up with missing full name", async ({ page }) => {
- const fullName = ""
- const email = randomEmail()
- const password = randomPassword()
-
- await page.goto("/signup")
-
- await fillForm(page, fullName, email, password, password)
- await page.getByRole("button", { name: "Sign Up" }).click()
-
- await expect(page.getByText("Full Name is required")).toBeVisible()
-})
-
-test("Sign up with missing email", async ({ page }) => {
- const fullName = "Test User"
- const email = ""
- const password = randomPassword()
-
- await page.goto("/signup")
-
- await fillForm(page, fullName, email, password, password)
- await page.getByRole("button", { name: "Sign Up" }).click()
-
- await expect(page.getByText("Email is required")).toBeVisible()
-})
-
-test("Sign up with missing password", async ({ page }) => {
- const fullName = ""
- const email = randomEmail()
- const password = ""
-
- await page.goto("/signup")
-
- await fillForm(page, fullName, email, password, password)
- await page.getByRole("button", { name: "Sign Up" }).click()
-
- await expect(page.getByText("Password is required")).toBeVisible()
-})
diff --git a/frontend/tests/user-settings.spec.ts b/frontend/tests/user-settings.spec.ts
deleted file mode 100644
index bd344d3dda..0000000000
--- a/frontend/tests/user-settings.spec.ts
+++ /dev/null
@@ -1,330 +0,0 @@
-import { expect, test } from "@playwright/test"
-import { firstSuperuser, firstSuperuserPassword } from "./config.ts"
-import { createUser } from "./utils/privateApi.ts"
-import { randomEmail, randomPassword } from "./utils/random"
-import { logInUser, logOutUser } from "./utils/user"
-
-const tabs = ["My profile", "Password", "Appearance"]
-
-// User Information
-
-test("My profile tab is active by default", async ({ page }) => {
- await page.goto("/settings")
- await expect(page.getByRole("tab", { name: "My profile" })).toHaveAttribute(
- "aria-selected",
- "true",
- )
-})
-
-test("All tabs are visible", async ({ page }) => {
- await page.goto("/settings")
- for (const tab of tabs) {
- await expect(page.getByRole("tab", { name: tab })).toBeVisible()
- }
-})
-
-test.describe("Edit user full name and email successfully", () => {
- test.use({ storageState: { cookies: [], origins: [] } })
-
- test("Edit user name with a valid name", async ({ page }) => {
- const email = randomEmail()
- const updatedName = "Test User 2"
- const password = randomPassword()
-
- await createUser({ email, password })
-
- // Log in the user
- await logInUser(page, email, password)
-
- await page.goto("/settings")
- await page.getByRole("tab", { name: "My profile" }).click()
- await page.getByRole("button", { name: "Edit" }).click()
- await page.getByLabel("Full name").fill(updatedName)
- await page.getByRole("button", { name: "Save" }).click()
- await expect(page.getByText("User updated successfully")).toBeVisible()
- // Check if the new name is displayed on the page
- await expect(
- page.getByLabel("My profile").getByText(updatedName, { exact: true }),
- ).toBeVisible()
- })
-
- test("Edit user email with a valid email", async ({ page }) => {
- const email = randomEmail()
- const updatedEmail = randomEmail()
- const password = randomPassword()
-
- await createUser({ email, password })
-
- // Log in the user
- await logInUser(page, email, password)
-
- await page.goto("/settings")
- await page.getByRole("tab", { name: "My profile" }).click()
- await page.getByRole("button", { name: "Edit" }).click()
- await page.getByLabel("Email").fill(updatedEmail)
- await page.getByRole("button", { name: "Save" }).click()
- await expect(page.getByText("User updated successfully")).toBeVisible()
- await expect(
- page.getByLabel("My profile").getByText(updatedEmail, { exact: true }),
- ).toBeVisible()
- })
-})
-
-test.describe("Edit user with invalid data", () => {
- test.use({ storageState: { cookies: [], origins: [] } })
-
- test("Edit user email with an invalid email", async ({ page }) => {
- const email = randomEmail()
- const password = randomPassword()
- const invalidEmail = ""
-
- await createUser({ email, password })
-
- // Log in the user
- await logInUser(page, email, password)
-
- await page.goto("/settings")
- await page.getByRole("tab", { name: "My profile" }).click()
- await page.getByRole("button", { name: "Edit" }).click()
- await page.getByLabel("Email").fill(invalidEmail)
- await page.locator("body").click()
- await expect(page.getByText("Email is required")).toBeVisible()
- })
-
- test("Cancel edit action restores original name", async ({ page }) => {
- const email = randomEmail()
- const password = randomPassword()
- const updatedName = "Test User"
-
- const user = await createUser({ email, password })
-
- // Log in the user
- await logInUser(page, email, password)
-
- await page.goto("/settings")
- await page.getByRole("tab", { name: "My profile" }).click()
- await page.getByRole("button", { name: "Edit" }).click()
- await page.getByLabel("Full name").fill(updatedName)
- await page.getByRole("button", { name: "Cancel" }).first().click()
- await expect(
- page
- .getByLabel("My profile")
- .getByText(user.full_name as string, { exact: true }),
- ).toBeVisible()
- })
-
- test("Cancel edit action restores original email", async ({ page }) => {
- const email = randomEmail()
- const password = randomPassword()
- const updatedEmail = randomEmail()
-
- await createUser({ email, password })
-
- // Log in the user
- await logInUser(page, email, password)
-
- await page.goto("/settings")
- await page.getByRole("tab", { name: "My profile" }).click()
- await page.getByRole("button", { name: "Edit" }).click()
- await page.getByLabel("Email").fill(updatedEmail)
- await page.getByRole("button", { name: "Cancel" }).first().click()
- await expect(
- page.getByLabel("My profile").getByText(email, { exact: true }),
- ).toBeVisible()
- })
-})
-
-// Change Password
-
-test.describe("Change password successfully", () => {
- test.use({ storageState: { cookies: [], origins: [] } })
-
- test("Update password successfully", async ({ page }) => {
- const email = randomEmail()
- const password = randomPassword()
- const NewPassword = randomPassword()
-
- await createUser({ email, password })
-
- // Log in the user
- await logInUser(page, email, password)
-
- await page.goto("/settings")
- await page.getByRole("tab", { name: "Password" }).click()
- await page.getByPlaceholder("Current Password").fill(password)
- await page.getByPlaceholder("New Password").fill(NewPassword)
- await page.getByPlaceholder("Confirm Password").fill(NewPassword)
- await page.getByRole("button", { name: "Save" }).click()
- await expect(page.getByText("Password updated successfully.")).toBeVisible()
-
- await logOutUser(page)
-
- // Check if the user can log in with the new password
- await logInUser(page, email, NewPassword)
- })
-})
-
-test.describe("Change password with invalid data", () => {
- test.use({ storageState: { cookies: [], origins: [] } })
-
- test("Update password with weak passwords", async ({ page }) => {
- const email = randomEmail()
- const password = randomPassword()
- const weakPassword = "weak"
-
- await createUser({ email, password })
-
- // Log in the user
- await logInUser(page, email, password)
-
- await page.goto("/settings")
- await page.getByRole("tab", { name: "Password" }).click()
- await page.getByPlaceholder("Current Password").fill(password)
- await page.getByPlaceholder("New Password").fill(weakPassword)
- await page.getByPlaceholder("Confirm Password").fill(weakPassword)
- await expect(
- page.getByText("Password must be at least 8 characters"),
- ).toBeVisible()
- })
-
- test("New password and confirmation password do not match", async ({
- page,
- }) => {
- const email = randomEmail()
- const password = randomPassword()
- const newPassword = randomPassword()
- const confirmPassword = randomPassword()
-
- await createUser({ email, password })
-
- // Log in the user
- await logInUser(page, email, password)
-
- await page.goto("/settings")
- await page.getByRole("tab", { name: "Password" }).click()
- await page.getByPlaceholder("Current Password").fill(password)
- await page.getByPlaceholder("New Password").fill(newPassword)
- await page.getByPlaceholder("Confirm Password").fill(confirmPassword)
- await page.getByLabel("Password", { exact: true }).locator("form").click()
- await expect(page.getByText("The passwords do not match")).toBeVisible()
- })
-
- test("Current password and new password are the same", async ({ page }) => {
- const email = randomEmail()
- const password = randomPassword()
-
- await createUser({ email, password })
-
- // Log in the user
- await logInUser(page, email, password)
-
- await page.goto("/settings")
- await page.getByRole("tab", { name: "Password" }).click()
- await page.getByPlaceholder("Current Password").fill(password)
- await page.getByPlaceholder("New Password").fill(password)
- await page.getByPlaceholder("Confirm Password").fill(password)
- await page.getByRole("button", { name: "Save" }).click()
- await expect(
- page.getByText("New password cannot be the same as the current one"),
- ).toBeVisible()
- })
-})
-
-// Appearance
-
-test("Appearance tab is visible", async ({ page }) => {
- await page.goto("/settings")
- await page.getByRole("tab", { name: "Appearance" }).click()
- await expect(page.getByLabel("Appearance")).toBeVisible()
-})
-
-test("User can switch from light mode to dark mode and vice versa", async ({
- page,
-}) => {
- await page.goto("/settings")
- await page.getByRole("tab", { name: "Appearance" }).click()
-
- // Ensure the initial state is light mode
- if (
- await page.evaluate(() =>
- document.documentElement.classList.contains("dark"),
- )
- ) {
- await page
- .locator("label")
- .filter({ hasText: "Light Mode" })
- .locator("span")
- .first()
- .click()
- }
-
- let isLightMode = await page.evaluate(() =>
- document.documentElement.classList.contains("light"),
- )
- expect(isLightMode).toBe(true)
-
- await page
- .locator("label")
- .filter({ hasText: "Dark Mode" })
- .locator("span")
- .first()
- .click()
- const isDarkMode = await page.evaluate(() =>
- document.documentElement.classList.contains("dark"),
- )
- expect(isDarkMode).toBe(true)
-
- await page
- .locator("label")
- .filter({ hasText: "Light Mode" })
- .locator("span")
- .first()
- .click()
- isLightMode = await page.evaluate(() =>
- document.documentElement.classList.contains("light"),
- )
- expect(isLightMode).toBe(true)
-})
-
-test("Selected mode is preserved across sessions", async ({ page }) => {
- await page.goto("/settings")
- await page.getByRole("tab", { name: "Appearance" }).click()
-
- // Ensure the initial state is light mode
- if (
- await page.evaluate(() =>
- document.documentElement.classList.contains("dark"),
- )
- ) {
- await page
- .locator("label")
- .filter({ hasText: "Light Mode" })
- .locator("span")
- .first()
- .click()
- }
-
- const isLightMode = await page.evaluate(() =>
- document.documentElement.classList.contains("light"),
- )
- expect(isLightMode).toBe(true)
-
- await page
- .locator("label")
- .filter({ hasText: "Dark Mode" })
- .locator("span")
- .first()
- .click()
- let isDarkMode = await page.evaluate(() =>
- document.documentElement.classList.contains("dark"),
- )
- expect(isDarkMode).toBe(true)
-
- await logOutUser(page)
- await logInUser(page, firstSuperuser, firstSuperuserPassword)
-
- isDarkMode = await page.evaluate(() =>
- document.documentElement.classList.contains("dark"),
- )
- expect(isDarkMode).toBe(true)
-})
diff --git a/frontend/tests/utils/mailcatcher.ts b/frontend/tests/utils/mailcatcher.ts
deleted file mode 100644
index 8e6f78b2c8..0000000000
--- a/frontend/tests/utils/mailcatcher.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import type { APIRequestContext } from "@playwright/test"
-
-type Email = {
- id: number
- recipients: string[]
- subject: string
-}
-
-async function findEmail({
- request,
- filter,
-}: {
- request: APIRequestContext
- filter?: (email: Email) => boolean
-}) {
- const response = await request.get(`${process.env.MAILCATCHER_HOST}/messages`)
-
- let emails = await response.json()
-
- if (filter) {
- emails = emails.filter(filter)
- }
-
- const email = emails[emails.length - 1]
-
- if (email) {
- return email as Email
- }
-
- return null
-}
-
-export function findLastEmail({
- request,
- filter,
- timeout = 5000,
-}: {
- request: APIRequestContext
- filter?: (email: Email) => boolean
- timeout?: number
-}) {
- const timeoutPromise = new Promise((_, reject) =>
- setTimeout(
- () => reject(new Error("Timeout while trying to get latest email")),
- timeout,
- ),
- )
-
- const checkEmails = async () => {
- while (true) {
- const emailData = await findEmail({ request, filter })
-
- if (emailData) {
- return emailData
- }
- // Wait for 100ms before checking again
- await new Promise((resolve) => setTimeout(resolve, 100))
- }
- }
-
- return Promise.race([timeoutPromise, checkEmails()])
-}
diff --git a/frontend/tests/utils/privateApi.ts b/frontend/tests/utils/privateApi.ts
deleted file mode 100644
index b6fa0afe67..0000000000
--- a/frontend/tests/utils/privateApi.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-// Note: the `PrivateService` is only available when generating the client
-// for local environments
-import { OpenAPI, PrivateService } from "../../src/client"
-
-OpenAPI.BASE = `${process.env.VITE_API_URL}`
-
-export const createUser = async ({
- email,
- password,
-}: {
- email: string
- password: string
-}) => {
- return await PrivateService.createUser({
- requestBody: {
- email,
- password,
- is_verified: true,
- full_name: "Test User",
- },
- })
-}
diff --git a/frontend/tests/utils/random.ts b/frontend/tests/utils/random.ts
deleted file mode 100644
index d96f0833ce..0000000000
--- a/frontend/tests/utils/random.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-export const randomEmail = () =>
- `test_${Math.random().toString(36).substring(7)}@example.com`
-
-export const randomTeamName = () =>
- `Team ${Math.random().toString(36).substring(7)}`
-
-export const randomPassword = () => `${Math.random().toString(36).substring(2)}`
-
-export const slugify = (text: string) =>
- text
- .toLowerCase()
- .replace(/\s+/g, "-")
- .replace(/[^\w-]+/g, "")
diff --git a/frontend/tests/utils/user.ts b/frontend/tests/utils/user.ts
deleted file mode 100644
index 4e31fe0ff7..0000000000
--- a/frontend/tests/utils/user.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { expect, type Page } from "@playwright/test"
-
-export async function signUpNewUser(
- page: Page,
- name: string,
- email: string,
- password: string,
-) {
- await page.goto("/signup")
-
- await page.getByPlaceholder("Full Name").fill(name)
- await page.getByPlaceholder("Email").fill(email)
- await page.getByPlaceholder("Password", { exact: true }).fill(password)
- await page.getByPlaceholder("Confirm Password").fill(password)
- await page.getByRole("button", { name: "Sign Up" }).click()
- await page.goto("/login")
-}
-
-export async function logInUser(page: Page, email: string, password: string) {
- await page.goto("/login")
-
- await page.getByPlaceholder("Email").fill(email)
- await page.getByPlaceholder("Password", { exact: true }).fill(password)
- await page.getByRole("button", { name: "Log In" }).click()
- await page.waitForURL("/")
- await expect(
- page.getByText("Welcome back, nice to see you again!"),
- ).toBeVisible()
-}
-
-export async function logOutUser(page: Page) {
- await page.getByTestId("user-menu").click()
- await page.getByRole("menuitem", { name: "Log out" }).click()
- await page.goto("/login")
-}
diff --git a/frontend/tsconfig.build.json b/frontend/tsconfig.build.json
deleted file mode 100644
index 13bd2efc21..0000000000
--- a/frontend/tsconfig.build.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "extends": "./tsconfig.json",
- "exclude": ["tests/**/*.ts"]
-}
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
index bb73d7ef9f..c1334095f8 100644
--- a/frontend/tsconfig.json
+++ b/frontend/tsconfig.json
@@ -1,30 +1,27 @@
{
"compilerOptions": {
- "target": "ES2020",
- "useDefineForClassFields": true,
- "lib": ["ES2020", "DOM", "DOM.Iterable"],
- "module": "ESNext",
+ "target": "ES2017",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
"skipLibCheck": true,
- /* Bundler mode */
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
"moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
- "noEmit": true,
- "jsx": "react-jsx",
- /* Linting */
- "strict": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
"paths": {
"@/*": ["./src/*"]
}
},
- "include": ["src", "tests", "playwright.config.ts"],
- "references": [
- {
- "path": "./tsconfig.node.json"
- }
- ]
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
}
diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json
deleted file mode 100644
index 42872c59f5..0000000000
--- a/frontend/tsconfig.node.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "compilerOptions": {
- "composite": true,
- "skipLibCheck": true,
- "module": "ESNext",
- "moduleResolution": "bundler",
- "allowSyntheticDefaultImports": true
- },
- "include": ["vite.config.ts"]
-}
diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts
deleted file mode 100644
index 997b7dd7fc..0000000000
--- a/frontend/vite.config.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import path from "node:path"
-import { tanstackRouter } from "@tanstack/router-plugin/vite"
-import react from "@vitejs/plugin-react-swc"
-import { defineConfig } from "vite"
-
-// https://vitejs.dev/config/
-export default defineConfig({
- resolve: {
- alias: {
- "@": path.resolve(__dirname, "./src"),
- },
- },
- plugins: [
- tanstackRouter({
- target: "react",
- autoCodeSplitting: true,
- }),
- react(),
- ],
-})