diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 84376cc..e6b4ff3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,10 +58,21 @@ jobs: cd backend poetry install --all-extras --with dev --verbose - - name: Run python tests + - name: Run python tests with coverage run: | cd backend - poetry run pytest + poetry run pytest --cov=app --cov-report=xml --cov-report=term-missing + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + with: + file: ./backend/coverage.xml + token: ${{ secrets.CODECOV_TOKEN }} + + - name: Run Ruff + run: | + cd backend + poetry run ruff check . - name: Install frontend dependencies run: | diff --git a/.gitignore b/.gitignore index cd348c5..b102009 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ .env -.DS_Store \ No newline at end of file +.DS_Store diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..5bf5a96 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,46 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files + + - repo: https://github.com/psf/black + rev: 24.3.0 + hooks: + - id: black + language_version: python3.11 + + - repo: https://github.com/pycqa/isort + rev: 5.13.2 + hooks: + - id: isort + args: ["--profile", "black"] + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.3.4 + hooks: + - id: ruff + args: [--fix, --exit-non-zero-on-fix] + + - repo: local + hooks: + - id: pytest-check + name: pytest-check + entry: bash -c 'cd backend && poetry run pytest' + language: system + pass_filenames: false + always_run: false + files: ^(backend/|tests/) + types: [python] + + - id: coverage-check + name: coverage-check + entry: bash -c 'cd backend && poetry run coverage erase && poetry run coverage run -m pytest && poetry run coverage report -m && poetry run coverage xml' + language: system + pass_filenames: false + always_run: false + files: ^(backend/|tests/) + types: [python] diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a2650a8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,20 @@ +{ + "editor.formatOnSave": true, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "prettier.configPath": "frontend/.prettierrc", + "prettier.ignorePath": "frontend/.prettierignore", + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff" + }, + "ruff.organizeImports": true, + "ruff.fixAll": true, + "ruff.path": ["backend"] +} diff --git a/backend/.coveragerc b/backend/.coveragerc new file mode 100644 index 0000000..7ae83d3 --- /dev/null +++ b/backend/.coveragerc @@ -0,0 +1,16 @@ +[run] +source = app +omit = + */tests/* + */__init__.py + +[report] +exclude_lines = + pragma: no cover + def __repr__ + if self.debug: + if __name__ == .__main__.: + raise NotImplementedError + pass + except ImportError: + def __str__ diff --git a/backend/.gitignore b/backend/.gitignore index 5124e14..c080f0c 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -22,3 +22,8 @@ __pycache__/ !/instance/ uploads/ processed/ + + +# coverage +.coverage +coverage.xml \ No newline at end of file diff --git a/backend/alembic/versions/0371afa4fbf0_generate_chat_models.py b/backend/alembic/versions/0371afa4fbf0_generate_chat_models.py index cb77484..6071e74 100644 --- a/backend/alembic/versions/0371afa4fbf0_generate_chat_models.py +++ b/backend/alembic/versions/0371afa4fbf0_generate_chat_models.py @@ -10,7 +10,6 @@ from alembic import op import sqlalchemy as sa -from sqlalchemy.dialects import sqlite # revision identifiers, used by Alembic. revision: str = "0371afa4fbf0" diff --git a/backend/alembic/versions/883990c30c41_update_asset_type_and_add_metadata.py b/backend/alembic/versions/883990c30c41_update_asset_type_and_add_metadata.py index 3d9cbcc..0ac9fca 100644 --- a/backend/alembic/versions/883990c30c41_update_asset_type_and_add_metadata.py +++ b/backend/alembic/versions/883990c30c41_update_asset_type_and_add_metadata.py @@ -10,7 +10,6 @@ from alembic import op import sqlalchemy as sa -from sqlalchemy.dialects import sqlite # revision identifiers, used by Alembic. revision: str = "883990c30c41" diff --git a/backend/alembic/versions/92f4fabcce75_merge_1df766359982_and_2484b46ee17d.py b/backend/alembic/versions/92f4fabcce75_merge_1df766359982_and_2484b46ee17d.py index 91c3011..e691206 100644 --- a/backend/alembic/versions/92f4fabcce75_merge_1df766359982_and_2484b46ee17d.py +++ b/backend/alembic/versions/92f4fabcce75_merge_1df766359982_and_2484b46ee17d.py @@ -7,8 +7,6 @@ """ from typing import Sequence, Union -from alembic import op -import sqlalchemy as sa # revision identifiers, used by Alembic. diff --git a/backend/alembic/versions/ccfafd40eaf9_merge_284ed84c1933_and_fc88c981b40e.py b/backend/alembic/versions/ccfafd40eaf9_merge_284ed84c1933_and_fc88c981b40e.py index 859ec7d..e4278ee 100644 --- a/backend/alembic/versions/ccfafd40eaf9_merge_284ed84c1933_and_fc88c981b40e.py +++ b/backend/alembic/versions/ccfafd40eaf9_merge_284ed84c1933_and_fc88c981b40e.py @@ -7,8 +7,6 @@ """ from typing import Sequence, Union -from alembic import op -import sqlalchemy as sa # revision identifiers, used by Alembic. diff --git a/backend/alembic/versions/e1e475154dfc_add_process_step.py b/backend/alembic/versions/e1e475154dfc_add_process_step.py index 02059b2..b3aaa24 100644 --- a/backend/alembic/versions/e1e475154dfc_add_process_step.py +++ b/backend/alembic/versions/e1e475154dfc_add_process_step.py @@ -10,7 +10,6 @@ from alembic import op import sqlalchemy as sa -from sqlalchemy.dialects import sqlite # revision identifiers, used by Alembic. diff --git a/backend/app/api/v1/chat.py b/backend/app/api/v1/chat.py index 6afe530..f6854e0 100644 --- a/backend/app/api/v1/chat.py +++ b/backend/app/api/v1/chat.py @@ -1,17 +1,21 @@ import traceback from typing import Optional + +from app.config import settings from app.database import get_db from app.logger import Logger from app.models.asset_content import AssetProcessingStatus -from app.repositories import project_repository, user_repository -from app.repositories import conversation_repository +from app.repositories import ( + conversation_repository, + project_repository, + user_repository, +) from app.requests import chat_query +from app.utils import clean_text from app.vectorstore.chroma import ChromaDB from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel from sqlalchemy.orm import Session -from app.config import settings - chat_router = APIRouter() @@ -24,22 +28,46 @@ class ChatRequest(BaseModel): logger = Logger() +def group_by_start_end(references): + grouped_references = {} + for ref in references: + key = (ref["start"], ref["end"]) + grouped_ref = grouped_references.setdefault( + key, {"start": ref["start"], "end": ref["end"], "references": []} + ) + for existing_ref in grouped_ref["references"]: + if ( + existing_ref["asset_id"] == ref["asset_id"] + and existing_ref["page_number"] == ref["page_number"] + ): + existing_ref["source"].extend(ref["source"]) + break + else: + grouped_ref["references"].append(ref) + return list(grouped_references.values()) + + @chat_router.post("/project/{project_id}", status_code=200) def chat(project_id: int, chat_request: ChatRequest, db: Session = Depends(get_db)): try: vectorstore = ChromaDB(f"panda-etl-{project_id}") - docs = vectorstore.get_relevant_docs( + + docs, doc_ids, _ = vectorstore.get_relevant_segments( chat_request.query, settings.max_relevant_docs ) - file_names = project_repository.get_assets_filename( - db, [metadata["doc_id"] for metadata in docs["metadatas"][0]] - ) - extracted_documents = docs["documents"][0] + unique_doc_ids = list(set(doc_ids)) + file_names = project_repository.get_assets_filename(db, unique_doc_ids) + + doc_id_to_filename = { + doc_id: filename for doc_id, filename in zip(unique_doc_ids, file_names) + } + + ordered_file_names = [doc_id_to_filename[doc_id] for doc_id in doc_ids] docs_formatted = [ {"filename": filename, "quote": quote} - for filename, quote in zip(file_names, extracted_documents) + for filename, quote in zip(ordered_file_names, docs) ] api_key = user_repository.get_user_api_key(db) @@ -63,34 +91,98 @@ def chat(project_id: int, chat_request: ChatRequest, db: Session = Depends(get_d ) conversation_id = str(conversation.id) + content = response["response"] + content_length = len(content) + clean_content = clean_text(content) + text_references = [] + not_exact_matched_refs = [] + + for reference in response["references"]: + sentence = reference["sentence"] + + for reference_content in reference["references"]: + original_filename = reference_content["file"] + original_sentence = reference_content["sentence"] + + doc_sent, doc_ids, doc_metadata = vectorstore.get_relevant_segments( + original_sentence, + k=5, + num_surrounding_sentences=0, + metadata_filter={"filename": original_filename}, + ) + + # Search for exact match + best_match_index = 0 + + for index, sent in enumerate(doc_sent): + if clean_text(original_sentence) in clean_text(sent): + best_match_index = index + + metadata = doc_metadata[best_match_index] + sent = doc_sent[best_match_index] + + index = clean_content.find(clean_text(sentence)) + + if index != -1: + text_reference = { + "asset_id": metadata["asset_id"], + "project_id": metadata["project_id"], + "page_number": metadata["page_number"], + "filename": original_filename, + "source": [sent], + "start": index, + "end": index + len(sentence), + } + text_references.append(text_reference) + else: + no_exact_reference = { + "asset_id": metadata["asset_id"], + "project_id": metadata["project_id"], + "page_number": metadata["page_number"], + "filename": original_filename, + "source": [sent], + "start": 0, + "end": content_length, + } + not_exact_matched_refs.append(no_exact_reference) + + # group text references based on start and end + if len(text_references) > 0: + refs = group_by_start_end(text_references) + else: + refs = group_by_start_end(not_exact_matched_refs) + conversation_repository.create_conversation_message( db, conversation_id=conversation_id, query=chat_request.query, - response=response["response"], + response=content, ) return { "status": "success", - "message": "chat response successfully returned!", + "message": "Chat response successfully generated.", "data": { "conversation_id": conversation_id, - "response": response["response"], + "response": content, + "response_references": refs, }, } except HTTPException: raise - except Exception as e: - logger.error(traceback.print_exc()) - raise HTTPException(status_code=400, detail="Unable to process query!") + except Exception: + logger.error(traceback.format_exc()) + raise HTTPException( + status_code=400, + detail="Unable to process the chat query. Please try again.", + ) @chat_router.get("/project/{project_id}/status", status_code=200) def chat_status(project_id: int, db: Session = Depends(get_db)): try: - asset_contents = project_repository.get_assets_without_content( db=db, project_id=project_id ) @@ -109,13 +201,16 @@ def chat_status(project_id: int, db: Session = Depends(get_db)): return { "status": "success", - "message": "Chat response successfully returned!", + "message": "Chat message successfully generated.", "data": {"status": status}, } except HTTPException: raise - except Exception as e: - logger.error(traceback.print_exc()) - raise HTTPException(status_code=400, detail="Unable to process query!") + except Exception: + logger.error(traceback.format_exc()) + raise HTTPException( + status_code=400, + detail="Unable to process the chat query. Please try again.", + ) diff --git a/backend/app/api/v1/extract.py b/backend/app/api/v1/extract.py index d6fe141..71bddaf 100644 --- a/backend/app/api/v1/extract.py +++ b/backend/app/api/v1/extract.py @@ -41,7 +41,7 @@ async def extract( if asset.project_id != project_id: raise HTTPException( - status_code=400, detail="Check asset permission doesn't exists" + status_code=400, detail="Asset does not belong to the specified project." ) api_key = user_repository.get_user_api_key(db) @@ -60,16 +60,16 @@ async def extract( return { "status": "success", - "message": "File processed successfully", + "message": "Data extracted successfully from the file.", "data": data["fields"], } except HTTPException: raise - except Exception as e: - logger.error(traceback.print_exc()) - raise HTTPException(status_code=400, detail="Unable to process file!") + except Exception: + logger.error(traceback.format_exc()) + raise HTTPException(status_code=400, detail="An error occurred while processing the file. Please try again or contact support if the issue persists.") @extract_router.post("/{project_id}/field-descriptions", status_code=200) @@ -80,7 +80,7 @@ async def get_field_descriptions( project = project_repository.get_project(db=db, project_id=project_id) if not project: - raise HTTPException(status_code=400, detail="Project doesn't exists") + raise HTTPException(status_code=404, detail="Project not found.") api_key = user_repository.get_user_api_key(db) @@ -95,22 +95,22 @@ async def get_field_descriptions( success = True return { "status": "success", - "message": "File processed successfully", + "message": "Field descriptions generated successfully.", "data": data, } except Exception as e: logger.error(e) - logger.log("Retrying AI Field Extraction!") + logger.log("Retrying AI field description generation.") retries += 1 raise HTTPException( - status_code=400, detail="Unable to fetch AI Field Descriptions" + status_code=400, detail="Unable to generate AI field descriptions. Please try again later." ) except HTTPException: raise - except Exception as e: - logger.error(traceback.print_exc()) - raise HTTPException(status_code=400, detail="Unable to process file!") + except Exception: + logger.error(traceback.format_exc()) + raise HTTPException(status_code=500, detail="An unexpected error occurred. Please try again or contact support if the issue persists.") diff --git a/backend/app/api/v1/processes.py b/backend/app/api/v1/processes.py index 31fbea8..0e8834a 100644 --- a/backend/app/api/v1/processes.py +++ b/backend/app/api/v1/processes.py @@ -1,5 +1,6 @@ import io import os +import traceback import zipfile from app.processing.process_queue import submit_process @@ -510,7 +511,7 @@ async def get_file(step_id: int, db: Session = Depends(get_db)): ) except Exception as e: - print(e) + logger.error(f"Error retrieving file: {str(e)}\n{traceback.format_exc()}") raise HTTPException(status_code=500, detail="Failed to retrieve file") @@ -528,5 +529,5 @@ def get_process_suggestion( } except Exception as e: - print(e) + logger.error(f"Error retrieving file: {str(e)}\n{traceback.format_exc()}") raise HTTPException(status_code=500, detail="Failed to retrieve file") \ No newline at end of file diff --git a/backend/app/api/v1/projects.py b/backend/app/api/v1/projects.py index bd7966a..2a95586 100644 --- a/backend/app/api/v1/projects.py +++ b/backend/app/api/v1/projects.py @@ -16,7 +16,6 @@ from app.utils import fetch_html_and_save, generate_unique_filename, is_valid_url from app.schemas.asset import UrlAssetCreate from app.vectorstore.chroma import ChromaDB -import time project_router = APIRouter() @@ -27,7 +26,9 @@ @project_router.post("/", status_code=201) def create_project(project: ProjectCreate, db: Session = Depends(get_db)): if not project.name.strip(): - raise HTTPException(status_code=400, detail="Project title is required") + raise HTTPException( + status_code=400, detail="Project name is required and cannot be empty." + ) db_project = project_repository.create_project(db=db, project=project) return { @@ -40,7 +41,7 @@ def create_project(project: ProjectCreate, db: Session = Depends(get_db)): @project_router.get("/") def get_projects( page: int = Query(1, ge=1), - page_size: int = Query(20, ge=1, le=100), + page_size: int = Query(100, ge=1, le=100), db: Session = Depends(get_db), ): try: @@ -66,9 +67,12 @@ def get_projects( "page": page, "page_size": page_size, } - except Exception as e: - logger.error(traceback.print_exc()) - raise HTTPException(status_code=500, detail="Unable to process request!") + except Exception: + logger.error(traceback.format_exc()) + raise HTTPException( + status_code=500, + detail="An internal server error occurred while processing your request. Please try again later.", + ) @project_router.get("/{id}") @@ -76,7 +80,9 @@ def get_project(id: int, db: Session = Depends(get_db)): try: project = project_repository.get_project(db=db, project_id=id) if project is None: - raise HTTPException(status_code=404, detail="Project not found") + raise HTTPException( + status_code=404, detail="The requested project could not be found." + ) return { "status": "success", @@ -91,9 +97,12 @@ def get_project(id: int, db: Session = Depends(get_db)): } except HTTPException: raise - except Exception as e: - logger.error(traceback.print_exc()) - raise HTTPException(status_code=500, detail="Unable to process request!") + except Exception: + logger.error(traceback.format_exc()) + raise HTTPException( + status_code=500, + detail="An internal server error occurred while retrieving the project. Please try again later.", + ) @project_router.get("/{id}/assets") @@ -126,9 +135,12 @@ def get_assets( "page": page, "page_size": page_size, } - except Exception as e: - logger.error(traceback.print_exc()) - raise HTTPException(status_code=500, detail="Unable to process request!") + except Exception: + logger.error(traceback.format_exc()) + raise HTTPException( + status_code=500, + detail="An internal server error occurred while retrieving assets. Please try again later.", + ) @project_router.post("/{id}/assets") @@ -138,7 +150,9 @@ async def upload_files( try: project = project_repository.get_project(db=db, project_id=id) if project is None: - raise HTTPException(status_code=400, detail="Project not found") + raise HTTPException( + status_code=404, detail="The specified project could not be found." + ) # Ensure the upload directory exists os.makedirs(os.path.join(settings.upload_dir, str(id)), exist_ok=True) @@ -148,14 +162,15 @@ async def upload_files( # Check if the uploaded file is a PDF if file.content_type != "application/pdf": raise HTTPException( - status_code=400, detail=f"The file {file.filename} is not a PDF" + status_code=400, + detail=f"The file '{file.filename}' is not a valid PDF. Please upload only PDF files.", ) # Check if the file size is greater than 20MB if file.size > settings.MAX_FILE_SIZE: raise HTTPException( status_code=400, - detail=f"The file {file.filename} exceeds the size limit of 20MB", + detail=f"The file '{file.filename}' exceeds the maximum allowed size of 20MB. Please upload a smaller file.", ) # Generate a secure filename @@ -189,9 +204,12 @@ async def upload_files( return JSONResponse(content="Successfully uploaded the files") except HTTPException: raise - except Exception as e: - print(traceback.print_exc()) - raise HTTPException(status_code=500, detail="Failed to upload files") + except Exception: + logger.error(traceback.format_exc()) + raise HTTPException( + status_code=500, + detail="An error occurred while uploading files. Please try again later.", + ) @project_router.post("/{id}/assets/url") @@ -200,14 +218,22 @@ async def add_url_asset(id: int, data: UrlAssetCreate, db: Session = Depends(get urls = data.url project = project_repository.get_project(db=db, project_id=id) if project is None: - raise HTTPException(status_code=400, detail="Project not found") + raise HTTPException( + status_code=404, detail="The specified project could not be found." + ) if not urls: - raise HTTPException(status_code=400, detail="Invalid Url") + raise HTTPException( + status_code=400, + detail="No URLs provided. Please provide at least one valid URL.", + ) for url in urls: if not is_valid_url(url): - raise HTTPException(status_code=400, detail="Invalid Url") + raise HTTPException( + status_code=400, + detail=f"Invalid URL format: {url}. Please provide a valid URL.", + ) url_assets = [] for url in urls: @@ -243,9 +269,12 @@ async def add_url_asset(id: int, data: UrlAssetCreate, db: Session = Depends(get return JSONResponse(content="Successfully uploaded the files") except HTTPException: raise - except Exception as e: - print(traceback.print_exc()) - raise HTTPException(status_code=500, detail="Failed to upload files") + except Exception: + logger.error(traceback.format_exc()) + raise HTTPException( + status_code=500, + detail="An error occurred while processing the URL asset. Please try again later.", + ) @project_router.get("/{id}/assets/{asset_id}") @@ -255,14 +284,18 @@ async def get_file(asset_id: int, db: Session = Depends(get_db)): if asset is None: raise HTTPException( - status_code=404, detail="File not found in the database" + status_code=404, + detail="The requested file could not be found in the database.", ) filepath = asset.path # Check if the file exists if not os.path.isfile(filepath): - raise HTTPException(status_code=404, detail="File not found on server") + raise HTTPException( + status_code=404, + detail="The requested file could not be found on the server.", + ) # Return the file return FileResponse( @@ -272,8 +305,11 @@ async def get_file(asset_id: int, db: Session = Depends(get_db)): except HTTPException: raise except Exception as e: - print(e) - raise HTTPException(status_code=500, detail="Failed to retrieve file") + logger.error(f"Error retrieving file: {str(e)}\n{traceback.format_exc()}") + raise HTTPException( + status_code=500, + detail="An error occurred while retrieving the file. Please try again later.", + ) @project_router.get("/{id}/processes") @@ -308,8 +344,8 @@ def get_processes(id: int, db: Session = Depends(get_db)): except HTTPException: raise - except Exception as e: - logger.error(traceback.print_exc()) + except Exception: + logger.error(traceback.format_exc()) raise HTTPException(status_code=500, detail="Failed to fetch response") @@ -318,7 +354,9 @@ def update_project(id: int, project: ProjectUpdate, db: Session = Depends(get_db try: db_project = project_repository.get_project(db=db, project_id=id) if db_project is None: - raise HTTPException(status_code=404, detail="Project not found") + raise HTTPException( + status_code=404, detail="The specified project could not be found." + ) updated_project = project_repository.update_project( db=db, project_id=id, project=project ) @@ -329,9 +367,12 @@ def update_project(id: int, project: ProjectUpdate, db: Session = Depends(get_db } except HTTPException: raise - except Exception as e: - logger.error(traceback.print_exc()) - raise HTTPException(status_code=500, detail="Unable to process request!") + except Exception: + logger.error(traceback.format_exc()) + raise HTTPException( + status_code=500, + detail="An error occurred while updating the project. Please try again later.", + ) @project_router.delete("/{project_id}") @@ -339,7 +380,9 @@ async def delete_project(project_id: int, db: Session = Depends(get_db)): try: project = project_repository.get_project(db, project_id) if not project: - raise HTTPException(status_code=404, detail="Project not found") + raise HTTPException( + status_code=404, detail="The specified project could not be found." + ) project.deleted_at = datetime.now(tz=timezone.utc) @@ -358,9 +401,12 @@ async def delete_project(project_id: int, db: Session = Depends(get_db)): except HTTPException: raise - except Exception as e: - logger.error(traceback.print_exc()) - raise HTTPException(status_code=500, detail="Failed to delete!") + except Exception: + logger.error(traceback.format_exc()) + raise HTTPException( + status_code=500, + detail="An error occurred while deleting the project. Please try again later.", + ) @project_router.delete("/{project_id}/assets/{asset_id}") @@ -368,23 +414,55 @@ async def delete_asset(project_id: int, asset_id: int, db: Session = Depends(get try: project = project_repository.get_project(db, project_id) if not project: - raise HTTPException(status_code=404, detail="Project not found") + raise HTTPException( + status_code=404, detail="The specified project could not be found." + ) asset = project_repository.get_asset(db, asset_id) - if asset is None: raise HTTPException( - status_code=404, detail="File not found in the database" + status_code=404, + detail="The specified asset could not be found in the database.", + ) + + if asset.project_id != project_id: + raise HTTPException( + status_code=400, + detail="The specified asset does not belong to the given project.", ) + + # Store asset information before deletion + asset_info = { + "id": asset.id, + "filename": asset.filename, + "project_id": asset.project_id, + } + + try: + vectorstore = ChromaDB(f"panda-etl-{asset.project_id}") + vectorstore.delete_docs(where={"asset_id": str(asset.id)}) + except Exception as vec_error: + logger.error(f"Error deleting from vectorstore: {str(vec_error)}") + # Continue with the asset deletion even if vectorstore deletion fails + + # Soft delete the asset asset.deleted_at = datetime.now(tz=timezone.utc) - vectorstore = ChromaDB(f"panda-etl-{asset.project_id}") - vectorstore.delete_docs(where={"asset_id": asset.id}) db.commit() + + logger.log( + "info", + f"Asset {asset_info['id']} successfully marked as deleted in the database", + ) return {"message": "Asset deleted successfully"} - except HTTPException: - raise + except HTTPException as http_error: + raise http_error except Exception as e: - logger.error(traceback.print_exc()) - raise HTTPException(status_code=500, detail="Failed to retrieve file") + db.rollback() + error_msg = f"An error occurred while deleting the asset: {str(e)}" + logger.error(f"{error_msg}\n{traceback.format_exc()}") + raise HTTPException( + status_code=500, + detail="An error occurred while deleting the asset. Please try again later.", + ) diff --git a/backend/app/api/v1/user.py b/backend/app/api/v1/user.py index 87303dc..8cad774 100644 --- a/backend/app/api/v1/user.py +++ b/backend/app/api/v1/user.py @@ -61,7 +61,7 @@ def get_user_api_key(db: Session = Depends(get_db)): @user_router.get("/getme", status_code=200) -def get_user_api_key(db: Session = Depends(get_db)): +def get_me(db: Session = Depends(get_db)): user_email = "john.doe@example.com" user = user_repository.get_user(db, user_email) @@ -104,7 +104,7 @@ async def get_user_usage(db: Session = Depends(get_db)): } except HTTPException: raise - except Exception as e: + except Exception: raise HTTPException( status_code=500, detail="Failed to retrieve user usage data" ) diff --git a/backend/app/database/query.py b/backend/app/database/query.py index f0a8a73..324a291 100644 --- a/backend/app/database/query.py +++ b/backend/app/database/query.py @@ -14,7 +14,7 @@ def __iter__(self): def from_self(self, *ent): # Filter out soft deleted records - return self.enable_assertions(False).filter(self.model.deleted_at == None) + return self.enable_assertions(False).filter(self.model.deleted_at is None) def _get(self, ident): # Filter out soft deleted records diff --git a/backend/app/main.py b/backend/app/main.py index 91cb61f..100a033 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -7,14 +7,11 @@ from fastapi.middleware.cors import CORSMiddleware from app.processing.file_preprocessing import process_file from .config import settings +from .api import v1_router # Initialize the FastAPI app app = FastAPI() -# Import and include the routes with the /v1 prefix -from .api import v1_router - - def startup_file_preprocessing(): try: with SessionLocal() as db: diff --git a/backend/app/models/__init__.py b/backend/app/models/__init__.py index c9d530c..5ee5e3b 100644 --- a/backend/app/models/__init__.py +++ b/backend/app/models/__init__.py @@ -4,7 +4,7 @@ from .asset_content import AssetContent from .api_key import APIKey from .process import Process, ProcessStatus -from .process_step import ProcessStep +from .process_step import ProcessStep, ProcessStepStatus from .conversation_message import ConversationMessage from .conversation import Conversation @@ -15,6 +15,7 @@ "APIKey", "Process", "ProcessStep", + "ProcessStepStatus", "ProcessStatus", "AssetContent", "ConversationMessage", diff --git a/backend/app/models/process_step.py b/backend/app/models/process_step.py index aa987a2..0e80d87 100644 --- a/backend/app/models/process_step.py +++ b/backend/app/models/process_step.py @@ -3,7 +3,6 @@ Integer, ForeignKey, JSON, - DateTime, Enum as SQLAlchemyEnum, ) from sqlalchemy.orm import relationship diff --git a/backend/app/processing/file_preprocessing.py b/backend/app/processing/file_preprocessing.py index 259db33..514877b 100644 --- a/backend/app/processing/file_preprocessing.py +++ b/backend/app/processing/file_preprocessing.py @@ -22,10 +22,10 @@ def process_file(asset_id: int): file_preprocessor.submit(preprocess_file, asset_id) -def process_segmentation(project_id: int, asset_content_id: int, api_key: str): +def process_segmentation(project_id: int, asset_id: int, asset_file_name: str): try: with SessionLocal() as db: - asset_content = project_repository.get_asset_content(db, asset_content_id) + asset_content = project_repository.get_asset_content(db, asset_id) # segmentation = extract_file_segmentation( # api_token=api_key, pdf_content=asset_content.content @@ -36,7 +36,8 @@ def process_segmentation(project_id: int, asset_content_id: int, api_key: str): docs=asset_content.content["content"], metadatas=[ { - "asset_id": asset_content.asset_id, + "asset_id": asset_id, + "filename": asset_file_name, "project_id": project_id, "page_number": asset_content.content["page_number_data"][index], } @@ -46,16 +47,16 @@ def process_segmentation(project_id: int, asset_content_id: int, api_key: str): project_repository.update_asset_content_status( db, - asset_content_id=asset_content_id, + asset_id=asset_id, status=AssetProcessingStatus.COMPLETED, ) except Exception as e: - logger.error(f"Error during segmentation for asset {asset_content_id}: {e}") + logger.error(f"Error during segmentation for asset {asset_id}: {e}") with SessionLocal() as db: project_repository.update_asset_content_status( db, - asset_content_id=asset_content_id, + asset_id=asset_id, status=AssetProcessingStatus.FAILED, ) @@ -116,8 +117,8 @@ def preprocess_file(asset_id: int): file_segmentation_executor.submit( process_segmentation, asset.project_id, - asset_content.id, - api_key, + asset_content.asset_id, + asset.filename, ) except Exception as e: diff --git a/backend/app/processing/process_queue.py b/backend/app/processing/process_queue.py index 9188172..36d3671 100644 --- a/backend/app/processing/process_queue.py +++ b/backend/app/processing/process_queue.py @@ -1,8 +1,8 @@ +from functools import wraps import os from typing import List from app.database import SessionLocal from app.exceptions import CreditLimitExceededException -from app.models import Process, ProcessStep from app.repositories import process_repository from app.repositories import project_repository from concurrent.futures import ThreadPoolExecutor @@ -13,7 +13,7 @@ highlight_sentences_in_pdf, ) from datetime import datetime - +from app.requests import extract_summary from app.models.process_step import ProcessStepStatus from app.repositories import user_repository from app.config import settings @@ -21,6 +21,7 @@ from app.logger import Logger import traceback +from app.utils import clean_text from app.vectorstore.chroma import ChromaDB @@ -44,7 +45,6 @@ def process_step_task( try: # Initial DB operations (open and fetch relevant data) with SessionLocal() as db: - process = process_repository.get_process(db, process_id) process_step = process_repository.get_process_step(db, process_step_id) @@ -57,9 +57,7 @@ def process_step_task( return True # Mark step as in progress - process_repository.update_process_step_status( - db, process_step, ProcessStepStatus.IN_PROGRESS - ) + update_process_step_status(db, process_step, ProcessStepStatus.IN_PROGRESS) retries = 0 success = False @@ -71,148 +69,28 @@ def process_step_task( while retries < settings.max_retries and not success: try: if process.type == "extractive_summary": - # Extract summary - from app.requests import extract_summary - - data = extract_summary( - api_token=api_key, - config=process.details, - file_path=( - process_step.asset.path - if not asset_content or not asset_content.content - else None - ), - pdf_content=( - asset_content.content - if asset_content and asset_content.content - else None - ), - ) - - summary = data.get("summary", "") - summary_sentences = data.get("summary_sentences", "") - - # Create directory for highlighted PDF - highlighted_file_dir = os.path.join( - settings.process_dir, str(process.id), str(process_step.id) - ) - os.makedirs(highlighted_file_dir, exist_ok=True) - - highlighted_file_path = os.path.join( - highlighted_file_dir, - f"highlighted_{process_step.asset.filename}", - ) - - # Highlight sentences in PDF (expensive operation) - highlight_sentences_in_pdf( - api_token=api_key, - sentences=summary_sentences, - file_path=process_step.asset.path, - output_path=highlighted_file_path, + data = extractive_summary_process( + api_key, process, process_step, asset_content ) - data = { - "highlighted_pdf": highlighted_file_path, - "summary": summary, - } - - if summary: - summaries.append(summary) + if data["summary"]: + summaries.append(data["summary"]) # Update process step output outside the expensive operations with SessionLocal() as db: - process_repository.update_process_step_status( + update_process_step_status( db, process_step, ProcessStepStatus.COMPLETED, output=data ) - else: + elif process.type == "extract": # Handle non-extractive summary process - pdf_content = "" - vectorstore = ChromaDB( - f"panda-etl-{process.project_id}", similary_threshold=3 - ) - if ( - ( - "multiple_fields" not in process.details - or not process.details["multiple_fields"] - ) - and asset_content.content - and asset_content.content["word_count"] > 500 - ): - - for field in process.details["fields"]: - relevant_docs = vectorstore.get_relevant_docs( - field["key"], - where={ - "$and": [ - {"asset_id": process_step.asset.id}, - {"project_id": process.project_id}, - ] - }, - k=5, - ) - for index, metadata in enumerate( - relevant_docs["metadatas"][0] - ): - segment_data = [relevant_docs["documents"][0][index]] - if metadata["previous_sentence_id"] != -1: - prev_sentence = vectorstore.get_relevant_docs_by_id( - ids=[metadata["previous_sentence_id"]] - ) - segment_data = [ - prev_sentence["documents"][0] - ] + segment_data - - if metadata["next_sentence_id"] != -1: - next_sentence = vectorstore.get_relevant_docs_by_id( - ids=[metadata["next_sentence_id"]] - ) - segment_data.append(next_sentence["documents"][0]) - - pdf_content += "\n" + " ".join(segment_data) - - if not pdf_content: - pdf_content = ( - "\n".join(asset_content.content["content"]) - if asset_content.content - else None - ) - - # Extract data (expensive operation) - data = extract_data( - api_key, - process.details, - file_path=( - process_step.asset.path if not pdf_content else None - ), - pdf_content=pdf_content if pdf_content else None, + data = extract_process( + api_key, process, process_step, asset_content ) - for context in data["context"]: - for sources in context: - page_numbers = [] - for source in sources["sources"]: - relevant_docs = vectorstore.get_relevant_docs( - source, - where={ - "$and": [ - {"asset_id": process_step.asset.id}, - {"project_id": process.project_id}, - ] - }, - k=1, - ) - - if len(relevant_docs["metadatas"][0]) > 0: - page_numbers.append( - relevant_docs["metadatas"][0][0]["page_number"] - ) - - sources["page_numbers"] = page_numbers - # Update process step output outside the expensive operations with SessionLocal() as db: - process_repository.update_process_step_status( + update_process_step_status( db, process_step, ProcessStepStatus.COMPLETED, @@ -222,26 +100,26 @@ def process_step_task( success = True - except CreditLimitExceededException as e: + except CreditLimitExceededException: with SessionLocal() as db: process = process_repository.get_process(db, process_id) process_repository.update_process_status( db, process, ProcessStatus.STOPPED ) - except Exception as e: + except Exception: logger.error(traceback.format_exc()) retries += 1 if retries == settings.max_retries: failed_docs.append(process_step.asset.id) with SessionLocal() as db: - process_repository.update_process_step_status( + update_process_step_status( db, process_step, ProcessStepStatus.FAILED ) return True - except Exception as e: + except Exception: logger.error(traceback.format_exc()) return False @@ -287,7 +165,7 @@ def process_task(process_id: int): "show_final_summary" in process.details and process.details["show_final_summary"] ): - logger.log(f"Extracting summary from summaries") + logger.log("Extracting summary from summaries") if process.output: return @@ -297,7 +175,7 @@ def process_task(process_id: int): api_key, summaries, process.details["transformation_prompt"] ) summary_of_summaries = data.get("summary", "") - logger.log(f"Extracting summary from summaries completed") + logger.log("Extracting summary from summaries completed") # Step 4: After all steps are processed, update the process status and output in the DB with SessionLocal() as db: @@ -323,3 +201,185 @@ def process_task(process_id: int): process.status = ProcessStatus.FAILED process.message = str(e) db.commit() + + +def handle_exceptions(func): + @wraps(func) + def wrapper(*args, **kwargs): + try: + return func(*args, **kwargs) + except CreditLimitExceededException: + logger.error("Credit limit exceeded") + raise + except Exception as e: + logger.error(f"Error in {func.__name__}: {str(e)}") + logger.error(traceback.format_exc()) + raise + + return wrapper + + +@handle_exceptions +def extractive_summary_process(api_key, process, process_step, asset_content): + try: + data = extract_summary( + api_token=api_key, + config=process.details, + file_path=( + process_step.asset.path + if not asset_content or not asset_content.content + else None + ), + pdf_content=( + asset_content.content + if asset_content and asset_content.content + else None + ), + ) + except Exception as e: + logger.error(f"Error in extract_summary: {str(e)}") + return { + "highlighted_pdf": None, + "summary": "", + } + + summary = data.get("summary", "") + summary_sentences = data.get("summary_sentences", "") + + # Create directory for highlighted PDF + highlighted_file_dir = os.path.join( + settings.process_dir, str(process.id), str(process_step.id) + ) + os.makedirs(highlighted_file_dir, exist_ok=True) + + highlighted_file_path = os.path.join( + highlighted_file_dir, + f"highlighted_{process_step.asset.filename}", + ) + + highlight_sentences_in_pdf( + api_token=api_key, + sentences=summary_sentences, + file_path=process_step.asset.path, + output_path=highlighted_file_path, + ) + + return { + "highlighted_pdf": highlighted_file_path, + "summary": summary, + } + + +@handle_exceptions +def extract_process(api_key, process, process_step, asset_content): + pdf_content = "" + vectorstore = ChromaDB(f"panda-etl-{process.project_id}", similary_threshold=3) + if ( + ( + "multiple_fields" not in process.details + or not process.details["multiple_fields"] + ) + and asset_content.content + and asset_content.content.get("word_count", 0) > 500 + ): + for field in process.details["fields"]: + relevant_docs = vectorstore.get_relevant_docs( + field["key"], + where={ + "$and": [ + {"asset_id": process_step.asset.id}, + {"project_id": process.project_id}, + ] + }, + k=5, + ) + + for index, metadata in enumerate(relevant_docs["metadatas"][0]): + segment_data = [relevant_docs["documents"][0][index]] + if metadata["previous_sentence_id"] != -1: + prev_sentence = vectorstore.get_relevant_docs_by_id( + ids=[metadata["previous_sentence_id"]] + ) + segment_data = [prev_sentence["documents"][0]] + segment_data + + if metadata["next_sentence_id"] != -1: + next_sentence = vectorstore.get_relevant_docs_by_id( + ids=[metadata["next_sentence_id"]] + ) + segment_data.append(next_sentence["documents"][0]) + + pdf_content += "\n" + " ".join(segment_data) + + if not pdf_content: + pdf_content = ( + "\n".join(asset_content.content["content"]) + if asset_content.content + else None + ) + + data = extract_data( + api_key, + process.details, + file_path=(process_step.asset.path if not pdf_content else None), + pdf_content=pdf_content if pdf_content else None, + ) + + for context in data["context"]: + for sources in context: + page_numbers = [] + for source_index, source in enumerate(sources["sources"]): + + relevant_docs = vectorstore.get_relevant_docs( + source, + where={ + "$and": [ + {"asset_id": process_step.asset.id}, + {"project_id": process.project_id}, + ] + }, + k=5, + ) + + most_relevant_index = 0 + match = False + clean_source = clean_text(source) + # search for exact match Index + for index, relevant_doc in enumerate(relevant_docs["documents"][0]): + if clean_source in clean_text(relevant_doc): + most_relevant_index = index + match = True + + if not match and len(relevant_docs["documents"][0]) > 0: + sources["sources"][source_index] = relevant_docs["documents"][0][0] + + if len(relevant_docs["metadatas"][0]) > 0: + page_numbers.append( + relevant_docs["metadatas"][0][most_relevant_index][ + "page_number" + ] + ) + + sources["page_numbers"] = page_numbers + + return { + "fields": data["fields"], + "context": data["context"], + } + + +def update_process_step_status( + db, process_step, status, output=None, output_references=None +): + """ + Update the status of a process step. + + Args: + db: Database session + process_step: The process step to update + status: The new status + output: Optional output data + output_references: Optional output references + """ + process_repository.update_process_step_status( + db, process_step, status, output=output, output_references=output_references + ) diff --git a/backend/app/repositories/process_repository.py b/backend/app/repositories/process_repository.py index 9521df2..8560e68 100644 --- a/backend/app/repositories/process_repository.py +++ b/backend/app/repositories/process_repository.py @@ -1,5 +1,5 @@ from app.models.process import ProcessStatus -from sqlalchemy import desc, func, or_ +from sqlalchemy import func, or_ from sqlalchemy.orm import Session, joinedload, defer, aliased from app import models @@ -32,7 +32,7 @@ def get_processes(db: Session): ).label("completed_steps_count"), ) .filter( - models.Process.deleted_at == None, + models.Process.deleted_at.is_(None), ) .outerjoin( completed_steps_count_subquery, diff --git a/backend/app/repositories/project_repository.py b/backend/app/repositories/project_repository.py index f2c9bd4..3ebdecb 100644 --- a/backend/app/repositories/project_repository.py +++ b/backend/app/repositories/project_repository.py @@ -26,7 +26,7 @@ def get_projects(db: Session, page: int = 1, page_size: int = 20): models.Project, func.count(models.Asset.id).label("asset_count"), # Count the assets ) - .filter(models.Project.deleted_at == None) + .filter(models.Project.deleted_at.is_(None)) .outerjoin(models.Asset, models.Project.id == models.Asset.project_id) .group_by(models.Project.id) .offset((page - 1) * page_size) diff --git a/backend/app/repositories/user_repository.py b/backend/app/repositories/user_repository.py index c8269f7..7eeaa58 100644 --- a/backend/app/repositories/user_repository.py +++ b/backend/app/repositories/user_repository.py @@ -3,7 +3,7 @@ from fastapi import HTTPException from app import models -from app.schemas.user import APIKeyRequest, UpdateAPIKeyRequest, UserUpdateRequest +from app.schemas.user import APIKeyRequest, UserUpdateRequest def create_user(db: Session, user: APIKeyRequest) -> models.User: @@ -61,4 +61,4 @@ def update_user(db: Session, user_update: UserUpdateRequest): user.last_name = user_update.last_name db.commit() - return user \ No newline at end of file + return user diff --git a/backend/app/utils.py b/backend/app/utils.py index c67ac63..cc78983 100644 --- a/backend/app/utils.py +++ b/backend/app/utils.py @@ -3,6 +3,7 @@ import uuid import requests import re +import string def generate_unique_filename(url, extension=".html"): @@ -28,6 +29,16 @@ def is_valid_url(url): return re.match(regex, url) is not None +def clean_text(text): + # Remove newline characters + text = text.replace("\n", " ") + + # Remove punctuation + text = text.translate(str.maketrans("", "", string.punctuation)) + + return text + + def fetch_html_and_save(url, file_path): parsed_url = urlparse(url) if not parsed_url.scheme: diff --git a/backend/app/vectorstore/chroma.py b/backend/app/vectorstore/chroma.py index 9f8fd88..d65652f 100644 --- a/backend/app/vectorstore/chroma.py +++ b/backend/app/vectorstore/chroma.py @@ -1,16 +1,12 @@ -import os import uuid -from typing import Callable, Iterable, List, Optional, Union +from typing import Callable, Iterable, List, Optional, Tuple import chromadb +from app.config import settings +from app.vectorstore import VectorStore from chromadb import config from chromadb.utils import embedding_functions -from app.vectorstore import VectorStore -from app.config import settings -import time - - DEFAULT_EMBEDDING_FUNCTION = embedding_functions.DefaultEmbeddingFunction() @@ -141,6 +137,59 @@ def get_relevant_docs( relevant_data, self._similarity_threshold ) + def get_relevant_segments( + self, + question: str, + k: int = None, + num_surrounding_sentences: int = 3, + metadata_filter: Optional[dict] = None, + ) -> Tuple[List[str], List[str], List[dict]]: + k = k or self._max_samples + + relevant_docs = self.get_relevant_docs( + question, + k=k, + where=metadata_filter, + ) + + segments = [] + doc_ids = [] + metadatas = [] + # Iterate over each document's metadata and fetch surrounding sentences + for index, metadata in enumerate(relevant_docs["metadatas"][0]): + pdf_content = "" + segment_data = [relevant_docs["documents"][0][index]] + + # Get previous sentences + prev_id = metadata.get("previous_sentence_id") + for _ in range(num_surrounding_sentences): + if prev_id != -1: + prev_sentence = self.get_relevant_docs_by_id(ids=[prev_id]) + segment_data = [prev_sentence["documents"][0]] + segment_data + prev_id = prev_sentence["metadatas"][0].get( + "previous_sentence_id", -1 + ) + else: + break + + # Get next sentences + next_id = metadata.get("next_sentence_id") + for _ in range(num_surrounding_sentences): + if next_id != -1: + next_sentence = self.get_relevant_docs_by_id(ids=[next_id]) + segment_data.append(next_sentence["documents"][0]) + next_id = next_sentence["metadatas"][0].get("next_sentence_id", -1) + else: + break + + # Add the segment data to the PDF content + pdf_content += "\n" + " ".join(segment_data) + segments.append(pdf_content) + doc_ids.append(metadata["asset_id"]) + metadatas.append(metadata) + + return (segments, doc_ids, metadatas) + def get_relevant_docs_by_id(self, ids: Iterable[str]) -> List[dict]: """ Returns relevant question answers based on ids diff --git a/backend/poetry.lock b/backend/poetry.lock index 11dff3b..5ae7484 100644 --- a/backend/poetry.lock +++ b/backend/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "alembic" @@ -382,6 +382,80 @@ humanfriendly = ">=9.1" [package.extras] cron = ["capturer (>=2.4)"] +[[package]] +name = "coverage" +version = "7.6.2" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "coverage-7.6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9df1950fb92d49970cce38100d7e7293c84ed3606eaa16ea0b6bc27175bb667"}, + {file = "coverage-7.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:24500f4b0e03aab60ce575c85365beab64b44d4db837021e08339f61d1fbfe52"}, + {file = "coverage-7.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a663b180b6669c400b4630a24cc776f23a992d38ce7ae72ede2a397ce6b0f170"}, + {file = "coverage-7.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfde025e2793a22efe8c21f807d276bd1d6a4bcc5ba6f19dbdfc4e7a12160909"}, + {file = "coverage-7.6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:087932079c065d7b8ebadd3a0160656c55954144af6439886c8bcf78bbbcde7f"}, + {file = "coverage-7.6.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9c6b0c1cafd96213a0327cf680acb39f70e452caf8e9a25aeb05316db9c07f89"}, + {file = "coverage-7.6.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6e85830eed5b5263ffa0c62428e43cb844296f3b4461f09e4bdb0d44ec190bc2"}, + {file = "coverage-7.6.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:62ab4231c01e156ece1b3a187c87173f31cbeee83a5e1f6dff17f288dca93345"}, + {file = "coverage-7.6.2-cp310-cp310-win32.whl", hash = "sha256:7b80fbb0da3aebde102a37ef0138aeedff45997e22f8962e5f16ae1742852676"}, + {file = "coverage-7.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:d20c3d1f31f14d6962a4e2f549c21d31e670b90f777ef4171be540fb7fb70f02"}, + {file = "coverage-7.6.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bb21bac7783c1bf6f4bbe68b1e0ff0d20e7e7732cfb7995bc8d96e23aa90fc7b"}, + {file = "coverage-7.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a7b2e437fbd8fae5bc7716b9c7ff97aecc95f0b4d56e4ca08b3c8d8adcaadb84"}, + {file = "coverage-7.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:536f77f2bf5797983652d1d55f1a7272a29afcc89e3ae51caa99b2db4e89d658"}, + {file = "coverage-7.6.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f361296ca7054f0936b02525646b2731b32c8074ba6defab524b79b2b7eeac72"}, + {file = "coverage-7.6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7926d8d034e06b479797c199747dd774d5e86179f2ce44294423327a88d66ca7"}, + {file = "coverage-7.6.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0bbae11c138585c89fb4e991faefb174a80112e1a7557d507aaa07675c62e66b"}, + {file = "coverage-7.6.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fcad7d5d2bbfeae1026b395036a8aa5abf67e8038ae7e6a25c7d0f88b10a8e6a"}, + {file = "coverage-7.6.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f01e53575f27097d75d42de33b1b289c74b16891ce576d767ad8c48d17aeb5e0"}, + {file = "coverage-7.6.2-cp311-cp311-win32.whl", hash = "sha256:7781f4f70c9b0b39e1b129b10c7d43a4e0c91f90c60435e6da8288efc2b73438"}, + {file = "coverage-7.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:9bcd51eeca35a80e76dc5794a9dd7cb04b97f0e8af620d54711793bfc1fbba4b"}, + {file = "coverage-7.6.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ebc94fadbd4a3f4215993326a6a00e47d79889391f5659bf310f55fe5d9f581c"}, + {file = "coverage-7.6.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9681516288e3dcf0aa7c26231178cc0be6cac9705cac06709f2353c5b406cfea"}, + {file = "coverage-7.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d9c5d13927d77af4fbe453953810db766f75401e764727e73a6ee4f82527b3e"}, + {file = "coverage-7.6.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b92f9ca04b3e719d69b02dc4a69debb795af84cb7afd09c5eb5d54b4a1ae2191"}, + {file = "coverage-7.6.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ff2ef83d6d0b527b5c9dad73819b24a2f76fdddcfd6c4e7a4d7e73ecb0656b4"}, + {file = "coverage-7.6.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:47ccb6e99a3031ffbbd6e7cc041e70770b4fe405370c66a54dbf26a500ded80b"}, + {file = "coverage-7.6.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a867d26f06bcd047ef716175b2696b315cb7571ccb951006d61ca80bbc356e9e"}, + {file = "coverage-7.6.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cdfcf2e914e2ba653101157458afd0ad92a16731eeba9a611b5cbb3e7124e74b"}, + {file = "coverage-7.6.2-cp312-cp312-win32.whl", hash = "sha256:f9035695dadfb397bee9eeaf1dc7fbeda483bf7664a7397a629846800ce6e276"}, + {file = "coverage-7.6.2-cp312-cp312-win_amd64.whl", hash = "sha256:5ed69befa9a9fc796fe015a7040c9398722d6b97df73a6b608e9e275fa0932b0"}, + {file = "coverage-7.6.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4eea60c79d36a8f39475b1af887663bc3ae4f31289cd216f514ce18d5938df40"}, + {file = "coverage-7.6.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa68a6cdbe1bc6793a9dbfc38302c11599bbe1837392ae9b1d238b9ef3dafcf1"}, + {file = "coverage-7.6.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ec528ae69f0a139690fad6deac8a7d33629fa61ccce693fdd07ddf7e9931fba"}, + {file = "coverage-7.6.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed5ac02126f74d190fa2cc14a9eb2a5d9837d5863920fa472b02eb1595cdc925"}, + {file = "coverage-7.6.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21c0ea0d4db8a36b275cb6fb2437a3715697a4ba3cb7b918d3525cc75f726304"}, + {file = "coverage-7.6.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:35a51598f29b2a19e26d0908bd196f771a9b1c5d9a07bf20be0adf28f1ad4f77"}, + {file = "coverage-7.6.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c9192925acc33e146864b8cf037e2ed32a91fdf7644ae875f5d46cd2ef086a5f"}, + {file = "coverage-7.6.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf4eeecc9e10f5403ec06138978235af79c9a79af494eb6b1d60a50b49ed2869"}, + {file = "coverage-7.6.2-cp313-cp313-win32.whl", hash = "sha256:e4ee15b267d2dad3e8759ca441ad450c334f3733304c55210c2a44516e8d5530"}, + {file = "coverage-7.6.2-cp313-cp313-win_amd64.whl", hash = "sha256:c71965d1ced48bf97aab79fad56df82c566b4c498ffc09c2094605727c4b7e36"}, + {file = "coverage-7.6.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7571e8bbecc6ac066256f9de40365ff833553e2e0c0c004f4482facb131820ef"}, + {file = "coverage-7.6.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:078a87519057dacb5d77e333f740708ec2a8f768655f1db07f8dfd28d7a005f0"}, + {file = "coverage-7.6.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e5e92e3e84a8718d2de36cd8387459cba9a4508337b8c5f450ce42b87a9e760"}, + {file = "coverage-7.6.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebabdf1c76593a09ee18c1a06cd3022919861365219ea3aca0247ededf6facd6"}, + {file = "coverage-7.6.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12179eb0575b8900912711688e45474f04ab3934aaa7b624dea7b3c511ecc90f"}, + {file = "coverage-7.6.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:39d3b964abfe1519b9d313ab28abf1d02faea26cd14b27f5283849bf59479ff5"}, + {file = "coverage-7.6.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:84c4315577f7cd511d6250ffd0f695c825efe729f4205c0340f7004eda51191f"}, + {file = "coverage-7.6.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ff797320dcbff57caa6b2301c3913784a010e13b1f6cf4ab3f563f3c5e7919db"}, + {file = "coverage-7.6.2-cp313-cp313t-win32.whl", hash = "sha256:2b636a301e53964550e2f3094484fa5a96e699db318d65398cfba438c5c92171"}, + {file = "coverage-7.6.2-cp313-cp313t-win_amd64.whl", hash = "sha256:d03a060ac1a08e10589c27d509bbdb35b65f2d7f3f8d81cf2fa199877c7bc58a"}, + {file = "coverage-7.6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c37faddc8acd826cfc5e2392531aba734b229741d3daec7f4c777a8f0d4993e5"}, + {file = "coverage-7.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab31fdd643f162c467cfe6a86e9cb5f1965b632e5e65c072d90854ff486d02cf"}, + {file = "coverage-7.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97df87e1a20deb75ac7d920c812e9326096aa00a9a4b6d07679b4f1f14b06c90"}, + {file = "coverage-7.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:343056c5e0737487a5291f5691f4dfeb25b3e3c8699b4d36b92bb0e586219d14"}, + {file = "coverage-7.6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad4ef1c56b47b6b9024b939d503ab487231df1f722065a48f4fc61832130b90e"}, + {file = "coverage-7.6.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fca4a92c8a7a73dee6946471bce6d1443d94155694b893b79e19ca2a540d86e"}, + {file = "coverage-7.6.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69f251804e052fc46d29d0e7348cdc5fcbfc4861dc4a1ebedef7e78d241ad39e"}, + {file = "coverage-7.6.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e8ea055b3ea046c0f66217af65bc193bbbeca1c8661dc5fd42698db5795d2627"}, + {file = "coverage-7.6.2-cp39-cp39-win32.whl", hash = "sha256:6c2ba1e0c24d8fae8f2cf0aeb2fc0a2a7f69b6d20bd8d3749fd6b36ecef5edf0"}, + {file = "coverage-7.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:2186369a654a15628e9c1c9921409a6b3eda833e4b91f3ca2a7d9f77abb4987c"}, + {file = "coverage-7.6.2-pp39.pp310-none-any.whl", hash = "sha256:667952739daafe9616db19fbedbdb87917eee253ac4f31d70c7587f7ab531b4e"}, + {file = "coverage-7.6.2.tar.gz", hash = "sha256:a5f81e68aa62bc0cfca04f7b19eaa8f9c826b53fc82ab9e2121976dc74f131f3"}, +] + +[package.extras] +toml = ["tomli"] + [[package]] name = "dateparser" version = "1.2.0" @@ -1924,6 +1998,24 @@ pytest = ">=7.0.0,<9" docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] +[[package]] +name = "pytest-cov" +version = "4.1.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, + {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -2196,6 +2288,32 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" +[[package]] +name = "ruff" +version = "0.3.7" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0e8377cccb2f07abd25e84fc5b2cbe48eeb0fea9f1719cad7caedb061d70e5ce"}, + {file = "ruff-0.3.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:15a4d1cc1e64e556fa0d67bfd388fed416b7f3b26d5d1c3e7d192c897e39ba4b"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d28bdf3d7dc71dd46929fafeec98ba89b7c3550c3f0978e36389b5631b793663"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:379b67d4f49774ba679593b232dcd90d9e10f04d96e3c8ce4a28037ae473f7bb"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c060aea8ad5ef21cdfbbe05475ab5104ce7827b639a78dd55383a6e9895b7c51"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:ebf8f615dde968272d70502c083ebf963b6781aacd3079081e03b32adfe4d58a"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48098bd8f5c38897b03604f5428901b65e3c97d40b3952e38637b5404b739a2"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da8a4fda219bf9024692b1bc68c9cff4b80507879ada8769dc7e985755d662ea"}, + {file = "ruff-0.3.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c44e0149f1d8b48c4d5c33d88c677a4aa22fd09b1683d6a7ff55b816b5d074f"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3050ec0af72b709a62ecc2aca941b9cd479a7bf2b36cc4562f0033d688e44fa1"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a29cc38e4c1ab00da18a3f6777f8b50099d73326981bb7d182e54a9a21bb4ff7"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5b15cc59c19edca917f51b1956637db47e200b0fc5e6e1878233d3a938384b0b"}, + {file = "ruff-0.3.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e491045781b1e38b72c91247cf4634f040f8d0cb3e6d3d64d38dcf43616650b4"}, + {file = "ruff-0.3.7-py3-none-win32.whl", hash = "sha256:bc931de87593d64fad3a22e201e55ad76271f1d5bfc44e1a1887edd0903c7d9f"}, + {file = "ruff-0.3.7-py3-none-win_amd64.whl", hash = "sha256:5ef0e501e1e39f35e03c2acb1d1238c595b8bb36cf7a170e7c1df1b73da00e74"}, + {file = "ruff-0.3.7-py3-none-win_arm64.whl", hash = "sha256:789e144f6dc7019d1f92a812891c645274ed08af6037d11fc65fcbc183b7d59f"}, + {file = "ruff-0.3.7.tar.gz", hash = "sha256:d5c1aebee5162c2226784800ae031f660c350e7a3402c4d1f8ea4e97e232e3ba"}, +] + [[package]] name = "setuptools" version = "74.0.0" @@ -3036,4 +3154,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.11,<3.13" -content-hash = "73aec58b440d47d1cf8bd643ae78a4ac53ae45fcef73c194704b2526303684c0" +content-hash = "9e6c182950fed6da9590f4809fb8dd02a7f72e22fd995af1964ead9494fc57d3" diff --git a/backend/pyproject.toml b/backend/pyproject.toml index c1ec7f7..2ba6c07 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "backend" -version = "0.1.0" +version = "0.2.0" description = "No-code ETL and data pipelines with AI and NLP" authors = ["Gabriele Venturi ", "ArslanSaleem "] readme = "README.md" @@ -20,7 +20,32 @@ chromadb = "^0.5.5" [tool.poetry.group.dev.dependencies] pytest = "^8.3.2" pytest-asyncio = "^0.23.8" +ruff = "^0.3.4" +pytest-cov = "^4.1.0" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" + +[tool.ruff] +line-length = 120 +target-version = "py311" + +[tool.pytest.ini_options] +addopts = "--cov=app --cov-report=xml --cov-report=term-missing" +testpaths = ["tests"] + +[tool.coverage.run] +source = ["app"] +omit = ["*/tests/*", "*/migrations/*"] + +[tool.coverage.report] +exclude_lines = [ + "pragma: no cover", + "def __repr__", + "if self.debug:", + "if __name__ == .__main__.:", + "raise NotImplementedError", + "pass", + "except ImportError:", +] diff --git a/backend/tests/api/v1/test_chat.py b/backend/tests/api/v1/test_chat.py new file mode 100644 index 0000000..6a524b8 --- /dev/null +++ b/backend/tests/api/v1/test_chat.py @@ -0,0 +1,283 @@ +from unittest.mock import MagicMock, patch + +import pytest +from app.api.v1.chat import group_by_start_end +from app.main import app +from fastapi.testclient import TestClient + +client = TestClient(app) + + +@pytest.fixture +def mock_db(): + return MagicMock() + + +@pytest.fixture +def mock_vectorstore(): + with patch("app.vectorstore.chroma.ChromaDB") as mock: + yield mock + + +@pytest.fixture +def mock_chat_query(): + with patch("app.api.v1.chat.chat_query") as mock: + yield mock + +def test_chat_status_endpoint(mock_db): + # Arrange + project_id = 1 + + with patch("app.repositories.project_repository.get_assets_without_content", return_value=[]): + with patch("app.repositories.project_repository.get_assets_content_pending", return_value=[]): + # Act + response = client.get(f"/v1/chat/project/{project_id}/status") + + # Assert + assert response.status_code == 200 + assert response.json()["status"] == "success" + assert response.json()["data"]["status"] is True + + +def test_group_by_start_end(): + # Arrange + references = [ + { + "asset_id": 1, + "project_id": 1, + "page_number": 1, + "filename": "file1.pdf", + "source": ["source1"], + "start": 0, + "end": 10, + }, + { + "asset_id": 2, + "project_id": 1, + "page_number": 1, + "filename": "file2.pdf", + "source": ["source2"], + "start": 0, + "end": 10, + }, + { + "asset_id": 1, + "project_id": 1, + "page_number": 1, + "filename": "file1.pdf", + "source": ["source3"], + "start": 0, + "end": 10, + }, + { + "asset_id": 3, + "project_id": 1, + "page_number": 2, + "filename": "file3.pdf", + "source": ["source4"], + "start": 15, + "end": 25, + }, + ] + + # Act + result = group_by_start_end(references) + + # Assert + assert len(result) == 2 # Two groups: (0, 10) and (15, 25) + + # Check first group + assert result[0]["start"] == 0 + assert result[0]["end"] == 10 + assert len(result[0]["references"]) == 2 # Two unique asset_ids in this group + + # Check that sources for the same asset_id are combined + for ref in result[0]["references"]: + if ref["asset_id"] == 1: + assert ref["source"] == ["source1", "source3"] + elif ref["asset_id"] == 2: + assert ref["source"] == ["source2"] + + # Check second group + assert result[1]["start"] == 15 + assert result[1]["end"] == 25 + assert len(result[1]["references"]) == 1 + assert result[1]["references"][0]["asset_id"] == 3 + assert result[1]["references"][0]["source"] == ["source4"] + + +def test_group_by_start_end_empty_input(): + # Arrange + references = [] + + # Act + result = group_by_start_end(references) + + # Assert + assert len(result) == 0 + + +def test_group_by_start_end_single_reference(): + # Arrange + references = [ + { + "asset_id": 1, + "project_id": 1, + "page_number": 1, + "filename": "file1.pdf", + "source": ["source1"], + "start": 0, + "end": 10, + } + ] + + # Act + result = group_by_start_end(references) + + # Assert + assert len(result) == 1 + assert result[0]["start"] == 0 + assert result[0]["end"] == 10 + assert len(result[0]["references"]) == 1 + assert result[0]["references"][0]["source"] == ["source1"] + + +def test_group_by_start_end_same_asset_different_pages(): + # Arrange + references = [ + { + "asset_id": 1, + "project_id": 1, + "page_number": 1, + "filename": "file1.pdf", + "source": ["source1"], + "start": 0, + "end": 10, + }, + { + "asset_id": 1, + "project_id": 1, + "page_number": 2, + "filename": "file1.pdf", + "source": ["source2"], + "start": 0, + "end": 10, + }, + ] + + # Act + result = group_by_start_end(references) + + # Assert + assert len(result) == 1 + assert len(result[0]["references"]) == 2 + assert ( + result[0]["references"][0]["page_number"] + != result[0]["references"][1]["page_number"] + ) + + +def test_group_by_start_end_overlapping_ranges(): + # Arrange + references = [ + { + "asset_id": 1, + "project_id": 1, + "page_number": 1, + "filename": "file1.pdf", + "source": ["source1"], + "start": 0, + "end": 10, + }, + { + "asset_id": 2, + "project_id": 1, + "page_number": 1, + "filename": "file2.pdf", + "source": ["source2"], + "start": 5, + "end": 15, + }, + ] + + # Act + result = group_by_start_end(references) + + # Assert + assert len(result) == 2 + assert result[0]["start"] == 0 and result[0]["end"] == 10 + assert result[1]["start"] == 5 and result[1]["end"] == 15 + + +def test_group_by_start_end_non_contiguous_ranges(): + # Arrange + references = [ + { + "asset_id": 1, + "project_id": 1, + "page_number": 1, + "filename": "file1.pdf", + "source": ["source1"], + "start": 0, + "end": 10, + }, + { + "asset_id": 2, + "project_id": 1, + "page_number": 1, + "filename": "file2.pdf", + "source": ["source2"], + "start": 20, + "end": 30, + }, + { + "asset_id": 3, + "project_id": 1, + "page_number": 1, + "filename": "file3.pdf", + "source": ["source3"], + "start": 40, + "end": 50, + }, + ] + + # Act + result = group_by_start_end(references) + + # Assert + assert len(result) == 3 + assert result[0]["start"] == 0 and result[0]["end"] == 10 + assert result[1]["start"] == 20 and result[1]["end"] == 30 + assert result[2]["start"] == 40 and result[2]["end"] == 50 + + +def test_group_by_start_end_large_values(): + # Arrange + references = [ + { + "asset_id": 1, + "project_id": 1, + "page_number": 1, + "filename": "file1.pdf", + "source": ["source1"], + "start": 1000000, + "end": 1000010, + }, + { + "asset_id": 2, + "project_id": 1, + "page_number": 1, + "filename": "file2.pdf", + "source": ["source2"], + "start": 1000000, + "end": 1000010, + }, + ] + + # Act + result = group_by_start_end(references) + + # Assert + assert len(result) == 1 + assert result[0]["start"] == 1000000 and result[0]["end"] == 1000010 + assert len(result[0]["references"]) == 2 diff --git a/backend/tests/extract/test_extract_fields.py b/backend/tests/extract/test_extract_fields.py index 133ccb8..c02de5b 100644 --- a/backend/tests/extract/test_extract_fields.py +++ b/backend/tests/extract/test_extract_fields.py @@ -2,7 +2,6 @@ import pytest from fastapi.testclient import TestClient from sqlalchemy.orm import Session -from fastapi import HTTPException from app.main import app from app.api.v1.extract import GetFieldDescriptionRequest @@ -58,13 +57,13 @@ def test_get_field_descriptions_success( } response = client.post( - f"/v1/extract/1/field-descriptions", json=field_description_request.dict() + "/v1/extract/1/field-descriptions", json=field_description_request.dict() ) assert response.status_code == 200 assert response.json() == { "status": "success", - "message": "File processed successfully", + "message": "Field descriptions generated successfully.", "data": {"field1": "description1", "field2": "description2"}, } @@ -83,11 +82,11 @@ def test_get_field_descriptions_project_not_found( mock_get_project.return_value = None response = client.post( - f"/v1/extract/1/field-descriptions", json=field_description_request.dict() + "/v1/extract/1/field-descriptions", json=field_description_request.dict() ) - assert response.status_code == 400 - assert response.json() == {"detail": "Project doesn't exists"} + assert response.status_code == 404 + assert response.json() == {"detail": "Project not found."} # Note the period at the end mock_get_project.assert_called_once_with(db=mock_db, project_id=1) mock_db.commit.assert_not_called() @@ -110,11 +109,13 @@ def test_get_field_descriptions_exception( mock_extract_field_descriptions.side_effect = Exception("Unexpected error") response = client.post( - f"/v1/extract/1/field-descriptions", json=field_description_request.dict() + "/v1/extract/1/field-descriptions", json=field_description_request.dict() ) assert response.status_code == 400 - assert response.json() == {"detail": "Unable to fetch AI Field Descriptions"} + assert response.json() == { + "detail": "Unable to generate AI field descriptions. Please try again later." + } mock_get_project.assert_called_once_with(db=mock_db, project_id=1) mock_get_user_api_key.assert_called_once_with(mock_db) diff --git a/backend/tests/extract/test_extract_pdf.py b/backend/tests/extract/test_extract_pdf.py index 0aa893d..c4892cb 100644 --- a/backend/tests/extract/test_extract_pdf.py +++ b/backend/tests/extract/test_extract_pdf.py @@ -2,7 +2,6 @@ import pytest from fastapi.testclient import TestClient from sqlalchemy.orm import Session -from fastapi import HTTPException from app.main import app from app.api.v1.extract import ExtractFields @@ -71,7 +70,7 @@ def test_extract_success( assert response.status_code == 200 assert response.json() == { "status": "success", - "message": "File processed successfully", + "message": "Data extracted successfully from the file.", "data": {"extracted_field1": "value1", "extracted_field2": "value2"}, } @@ -95,7 +94,7 @@ def test_extract_asset_permission_error(mock_get_asset, extract_fields, mock_db) response = client.post("/v1/extract/1", json=extract_fields.dict()) assert response.status_code == 400 - assert response.json() == {"detail": "Check asset permission doesn't exists"} + assert response.json() == {"detail": "Asset does not belong to the specified project."} mock_get_asset.assert_called_once_with(db=mock_db, asset_id=1) mock_db.commit.assert_not_called() @@ -150,7 +149,9 @@ def test_extract_exception( response = client.post("/v1/extract/1", json=extract_fields.dict()) assert response.status_code == 400 - assert response.json() == {"detail": "Unable to process file!"} + assert response.json() == { + "detail": "An error occurred while processing the file. Please try again or contact support if the issue persists." + } mock_get_asset.assert_called_once_with(db=mock_db, asset_id=1) mock_get_user_api_key.assert_called_once_with(mock_db) diff --git a/backend/tests/processes/test_process_steps_zip.py b/backend/tests/processes/test_process_steps_zip.py index 27eabc7..de5bb7b 100644 --- a/backend/tests/processes/test_process_steps_zip.py +++ b/backend/tests/processes/test_process_steps_zip.py @@ -3,7 +3,6 @@ from sqlalchemy.orm import Session from app.main import app import pytest -from io import BytesIO from app.database import get_db diff --git a/backend/tests/processing/test_process_queue.py b/backend/tests/processing/test_process_queue.py new file mode 100644 index 0000000..cd2da91 --- /dev/null +++ b/backend/tests/processing/test_process_queue.py @@ -0,0 +1,107 @@ +import pytest +from unittest.mock import Mock, patch, mock_open +from app.processing.process_queue import ( + handle_exceptions, + extractive_summary_process, + extract_process, + update_process_step_status, +) +from app.exceptions import CreditLimitExceededException +from app.models import ProcessStepStatus + +@pytest.fixture +def mock_logger(): + with patch('app.processing.process_queue.logger') as mock: + yield mock + +def test_handle_exceptions_decorator(mock_logger): + @handle_exceptions + def test_function(): + raise ValueError("Test error") + + with pytest.raises(ValueError): + test_function() + + mock_logger.error.assert_called() + +def test_handle_exceptions_decorator_credit_limit(mock_logger): + @handle_exceptions + def test_function(): + raise CreditLimitExceededException("Credit limit exceeded") + + with pytest.raises(CreditLimitExceededException): + test_function() + + mock_logger.error.assert_called_with("Credit limit exceeded") + +@patch('app.processing.process_queue.extract_summary') +@patch('app.processing.process_queue.highlight_sentences_in_pdf') +@patch('os.path.isfile') +@patch('builtins.open', new_callable=mock_open, read_data="test file content") +def test_extractive_summary_process(mock_file, mock_isfile, mock_highlight, mock_extract_summary): + mock_isfile.return_value = True # Mock the file existence check + mock_extract_summary.return_value = { + "summary": "Test summary", + "summary_sentences": ["Sentence 1", "Sentence 2"] + } + mock_highlight.return_value = b"highlighted pdf content" + + process = Mock(id=1, details={}) + process_step = Mock(id=1, asset=Mock(path="/test/path", filename="test.pdf")) + asset_content = Mock(content=None) + + result = extractive_summary_process("api_key", process, process_step, asset_content) + + assert result["summary"] == "Test summary" + assert "highlighted_pdf" in result + mock_extract_summary.assert_called_once() + mock_highlight.assert_called_once() + +@patch('app.processing.process_queue.extract_data') +@patch('app.processing.process_queue.ChromaDB') +def test_extract_process(mock_chroma, mock_extract_data): + mock_chroma_instance = Mock() + mock_chroma.return_value = mock_chroma_instance + mock_chroma_instance.get_relevant_docs.return_value = { + "metadatas": [[{ + "page_number": 1, + "previous_sentence_id": -1, + "next_sentence_id": -1 # Add this line + }]], + "documents": [["Test document"]] + } + mock_extract_data.return_value = { + "fields": {"field1": "value1"}, + "context": [[{"sources": ["source1"]}]] + } + + process = Mock(id=1, project_id=1, details={"fields": [{"key": "field1"}]}) + process_step = Mock(id=1, asset=Mock(id=1)) + asset_content = Mock(content={"word_count": 1000, "content": ["Test content"]}) + + result = extract_process("api_key", process, process_step, asset_content) + + assert "fields" in result + assert "context" in result + assert result["fields"] == {"field1": "value1"} + assert result["context"][0][0]["page_numbers"] == [1] + mock_extract_data.assert_called_once() + mock_chroma_instance.get_relevant_docs.assert_called() + +def test_update_process_step_status(): + mock_db = Mock() + mock_process_step = Mock() + mock_status = ProcessStepStatus.COMPLETED + mock_output = {"test": "output"} + mock_output_references = {"test": "references"} + + with patch('app.processing.process_queue.process_repository.update_process_step_status') as mock_update: + update_process_step_status(mock_db, mock_process_step, mock_status, mock_output, mock_output_references) + + mock_update.assert_called_once_with( + mock_db, + mock_process_step, + mock_status, + output=mock_output, + output_references=mock_output_references + ) diff --git a/backend/tests/projects/test_add_assets.py b/backend/tests/projects/test_add_assets.py index a2fd89d..37b1996 100644 --- a/backend/tests/projects/test_add_assets.py +++ b/backend/tests/projects/test_add_assets.py @@ -1,14 +1,12 @@ import os -from unittest.mock import MagicMock, patch, AsyncMock +from unittest.mock import MagicMock, patch import pytest from fastapi.testclient import TestClient from sqlalchemy.orm import Session -from fastapi import UploadFile, HTTPException +from fastapi import UploadFile from io import BytesIO from app.main import app -from app.repositories import project_repository -from app.models import Asset from app.config import settings from app.database import get_db @@ -66,6 +64,8 @@ def test_upload_files_success( """Test uploading files successfully""" mock_get_project.return_value = MagicMock(id=1) mock_open.return_value.__enter__.return_value.write = MagicMock() + mock_os_path.normcase.return_value = "normalized/path" + mock_os_path.join.return_value = "joined/path" response = client.post( "/v1/projects/1/assets", @@ -91,8 +91,8 @@ def test_upload_files_project_not_found(mock_get_project, mock_file, mock_db): files={"files": ("test.pdf", mock_file.file, "application/pdf")}, ) - assert response.status_code == 400 - assert response.json() == {"detail": "Project not found"} + assert response.status_code == 404 + assert response.json() == {"detail": "The specified project could not be found."} @patch("app.repositories.project_repository.get_project") @@ -106,4 +106,4 @@ def test_upload_files_non_pdf(mock_get_project, mock_non_pdf_file, mock_db): ) assert response.status_code == 400 - assert response.json() == {"detail": "The file test.txt is not a PDF"} + assert response.json() == {"detail": "The file 'test.txt' is not a valid PDF. Please upload only PDF files."} diff --git a/backend/tests/projects/test_create_project.py b/backend/tests/projects/test_create_project.py index 96f720e..a0fd8b3 100644 --- a/backend/tests/projects/test_create_project.py +++ b/backend/tests/projects/test_create_project.py @@ -7,7 +7,6 @@ from app.main import app from app.api.v1.projects import create_project from app.schemas.project import ProjectCreate -from app.repositories import project_repository # Test client setup @@ -44,7 +43,7 @@ def test_create_project_empty_name(mock_db): create_project(project=project_data, db=mock_db) assert excinfo.value.status_code == 400 - assert excinfo.value.detail == "Project title is required" + assert excinfo.value.detail == "Project name is required and cannot be empty." def test_create_project_whitespace_name(mock_db): @@ -55,7 +54,7 @@ def test_create_project_whitespace_name(mock_db): create_project(project=project_data, db=mock_db) assert excinfo.value.status_code == 400 - assert excinfo.value.detail == "Project title is required" + assert excinfo.value.detail == "Project name is required and cannot be empty." @patch("app.repositories.project_repository.create_project") @@ -92,7 +91,7 @@ def test_create_project_api_empty_name(): response = client.post("/v1/projects/", json={"name": ""}) assert response.status_code == 400 - assert response.json() == {"detail": "Project title is required"} + assert response.json() == {"detail": "Project name is required and cannot be empty."} def test_create_project_api_whitespace_name(): @@ -100,4 +99,4 @@ def test_create_project_api_whitespace_name(): response = client.post("/v1/projects/", json={"name": " "}) assert response.status_code == 400 - assert response.json() == {"detail": "Project title is required"} + assert response.json() == {"detail": "Project name is required and cannot be empty."} diff --git a/backend/tests/projects/test_delete_asset.py b/backend/tests/projects/test_delete_asset.py index 7420da5..9a22f0a 100644 --- a/backend/tests/projects/test_delete_asset.py +++ b/backend/tests/projects/test_delete_asset.py @@ -2,10 +2,8 @@ import pytest from fastapi.testclient import TestClient from sqlalchemy.orm import Session -from datetime import datetime, timezone from app.main import app -from app.repositories import project_repository from app.database import get_db # Test client setup @@ -40,9 +38,12 @@ def test_delete_asset_success(mock_chroma, mock_get_asset, mock_get_project, moc mock_project = MagicMock(id=1, deleted_at=None) mock_get_project.return_value = mock_project - mock_asset = MagicMock(id=1, deleted_at=None) + mock_asset = MagicMock(id=1, project_id=1, deleted_at=None) mock_get_asset.return_value = mock_asset + mock_chroma_instance = MagicMock() + mock_chroma.return_value = mock_chroma_instance + response = client.delete("/v1/projects/1/assets/1") assert response.status_code == 200 @@ -54,6 +55,8 @@ def test_delete_asset_success(mock_chroma, mock_get_asset, mock_get_project, moc mock_get_project.assert_called_once_with(mock_db, 1) mock_get_asset.assert_called_once_with(mock_db, 1) + mock_chroma.assert_called_once_with("panda-etl-1") + mock_chroma_instance.delete_docs.assert_called_once_with(where={"asset_id": "1"}) @patch("app.repositories.project_repository.get_project") @@ -64,7 +67,7 @@ def test_delete_asset_project_not_found(mock_get_project, mock_db): response = client.delete("/v1/projects/999/assets/1") assert response.status_code == 404 - assert response.json() == {"detail": "Project not found"} + assert response.json() == {"detail": "The specified project could not be found."} mock_get_project.assert_called_once_with(mock_db, 999) mock_db.commit.assert_not_called() @@ -82,7 +85,7 @@ def test_delete_asset_not_found(mock_get_asset, mock_get_project, mock_db): response = client.delete("/v1/projects/1/assets/999") assert response.status_code == 404 - assert response.json() == {"detail": "File not found in the database"} + assert response.json() == {"detail": "The specified asset could not be found in the database."} mock_get_project.assert_called_once_with(mock_db, 1) mock_get_asset.assert_called_once_with(mock_db, 999) @@ -97,7 +100,7 @@ def test_delete_asset_db_error(mock_chroma, mock_get_asset, mock_get_project, mo mock_project = MagicMock(id=1, deleted_at=None) mock_get_project.return_value = mock_project - mock_asset = MagicMock(id=1, deleted_at=None) + mock_asset = MagicMock(id=1, project_id=1, deleted_at=None) mock_get_asset.return_value = mock_asset mock_db.commit.side_effect = Exception("Database error") @@ -105,8 +108,28 @@ def test_delete_asset_db_error(mock_chroma, mock_get_asset, mock_get_project, mo response = client.delete("/v1/projects/1/assets/1") assert response.status_code == 500 - assert response.json() == {"detail": "Failed to retrieve file"} + assert response.json() == {"detail": "An error occurred while deleting the asset. Please try again later."} mock_get_project.assert_called_once_with(mock_db, 1) mock_get_asset.assert_called_once_with(mock_db, 1) mock_db.commit.assert_called_once() + + +@patch("app.repositories.project_repository.get_project") +@patch("app.repositories.project_repository.get_asset") +def test_delete_asset_wrong_project(mock_get_asset, mock_get_project, mock_db): + """Test deletion when asset doesn't belong to the specified project""" + mock_project = MagicMock(id=1, deleted_at=None) + mock_get_project.return_value = mock_project + + mock_asset = MagicMock(id=1, project_id=2, deleted_at=None) # Different project_id + mock_get_asset.return_value = mock_asset + + response = client.delete("/v1/projects/1/assets/1") + + assert response.status_code == 400 + assert response.json() == {"detail": "The specified asset does not belong to the given project."} + + mock_get_project.assert_called_once_with(mock_db, 1) + mock_get_asset.assert_called_once_with(mock_db, 1) + mock_db.commit.assert_not_called() diff --git a/backend/tests/projects/test_delete_project.py b/backend/tests/projects/test_delete_project.py index 283c447..c8e92a7 100644 --- a/backend/tests/projects/test_delete_project.py +++ b/backend/tests/projects/test_delete_project.py @@ -4,8 +4,6 @@ from sqlalchemy.orm import Session from app.main import app -from app.repositories import project_repository -from app.models import Asset, Process from app.database import get_db # Test client setup @@ -76,7 +74,7 @@ def test_delete_project_not_found(mock_get_project, mock_delete_process_steps, m response = client.delete("/v1/projects/999") assert response.status_code == 404 - assert response.json() == {"detail": "Project not found"} + assert response.json() == {"detail": "The specified project could not be found."} mock_get_project.assert_called_once_with(mock_db, 999) mock_delete_process_steps.assert_not_called() @@ -97,7 +95,7 @@ def test_delete_project_db_error( response = client.delete("/v1/projects/1") assert response.status_code == 500 - assert response.json() == {"detail": "Failed to delete!"} + assert response.json() == {"detail": "An error occurred while deleting the project. Please try again later."} mock_get_project.assert_called_once_with(mock_db, 1) mock_get_assets.assert_called_once_with(mock_db, 1) @@ -112,19 +110,17 @@ def test_delete_project_process_steps_failure( mock_get_assets, mock_get_project, mock_delete_process_steps, mock_db ): """Test deletion when delete_process_steps fails""" - # Mock project and assets mock_project = MagicMock(id=1, deleted_at=None) mock_get_project.return_value = mock_project mock_asset = MagicMock(id=1, deleted_at=None) mock_get_assets.return_value = ([mock_asset], 1) - # Simulate delete_process_steps raising an exception mock_delete_process_steps.side_effect = Exception("Process steps deletion failed") response = client.delete("/v1/projects/1") assert response.status_code == 500 - assert response.json() == {"detail": "Failed to delete!"} + assert response.json() == {"detail": "An error occurred while deleting the project. Please try again later."} mock_get_project.assert_called_once_with(mock_db, 1) mock_get_assets.assert_called_once_with(mock_db, 1) diff --git a/backend/tests/projects/test_get_assets.py b/backend/tests/projects/test_get_assets.py index 792fa3b..d938ac6 100644 --- a/backend/tests/projects/test_get_assets.py +++ b/backend/tests/projects/test_get_assets.py @@ -159,7 +159,7 @@ def test_get_assets_db_error(mock_get_assets, mock_db): response = client.get("/v1/projects/1/assets?page=1&page_size=2") assert response.status_code == 500 - assert response.json() == {"detail": "Unable to process request!"} + assert response.json() == {"detail": "An internal server error occurred while retrieving assets. Please try again later."} # Check that the correct parameters were passed, and that db is an instance of Session _, kwargs = mock_get_assets.call_args diff --git a/backend/tests/projects/test_get_file.py b/backend/tests/projects/test_get_file.py index c27cc48..1b54a93 100644 --- a/backend/tests/projects/test_get_file.py +++ b/backend/tests/projects/test_get_file.py @@ -1,13 +1,9 @@ -import os from unittest.mock import MagicMock, patch import pytest from fastapi.testclient import TestClient from sqlalchemy.orm import Session -from fastapi import HTTPException from app.main import app -from app.repositories import project_repository -from app.models import Asset # Test client setup client = TestClient(app) @@ -50,10 +46,7 @@ def test_get_file_not_found_in_db(mock_get_asset, mock_db): response = client.get("/v1/projects/1/assets/999") assert response.status_code == 404 - assert response.json() == {"detail": "File not found in the database"} - args, kwargs = mock_get_asset.call_args - assert isinstance(args[0], Session) - assert args[1] == 999 + assert response.json() == {"detail": "The requested file could not be found in the database."} @patch("app.repositories.project_repository.get_asset") @@ -66,13 +59,8 @@ def test_get_file_not_found_on_server(mock_isfile, mock_get_asset, mock_db): response = client.get("/v1/projects/1/assets/1") - print(response.json()) assert response.status_code == 404 - assert response.json() == {"detail": "File not found on server"} - args, _ = mock_get_asset.call_args - assert isinstance(args[0], Session) - assert args[1] == 1 - mock_isfile.assert_called_once_with("/fake/path/test.pdf") + assert response.json() == {"detail": "The requested file could not be found on the server."} @patch("app.repositories.project_repository.get_asset") @@ -86,8 +74,4 @@ def test_get_file_general_exception(mock_isfile, mock_get_asset, mock_db): response = client.get("/v1/projects/1/assets/1") assert response.status_code == 500 - assert response.json() == {"detail": "Failed to retrieve file"} - args, _ = mock_get_asset.call_args - assert isinstance(args[0], Session) - assert args[1] == 1 - mock_isfile.assert_called_once_with("/fake/path/test.pdf") + assert response.json() == {"detail": "An error occurred while retrieving the file. Please try again later."} diff --git a/backend/tests/projects/test_get_project.py b/backend/tests/projects/test_get_project.py index 370fe52..fea94c1 100644 --- a/backend/tests/projects/test_get_project.py +++ b/backend/tests/projects/test_get_project.py @@ -3,10 +3,8 @@ from fastapi.testclient import TestClient from sqlalchemy.orm import Session from datetime import datetime -from fastapi import HTTPException from app.main import app -from app.repositories import project_repository from app.models import Project # Import your Project model # Test client setup @@ -74,7 +72,7 @@ def test_get_project_not_found(mock_get_project, mock_db): response = client.get("/v1/projects/999") assert response.status_code == 404 - assert response.json() == {"detail": "Project not found"} + assert response.json() == {"detail": "The requested project could not be found."} # Check that the correct parameters were passed, and that db is an instance of Session _, kwargs = mock_get_project.call_args @@ -90,7 +88,7 @@ def test_get_project_db_error(mock_get_project, mock_db): response = client.get("/v1/projects/1") assert response.status_code == 500 - assert response.json() == {"detail": "Unable to process request!"} + assert response.json() == {"detail": "An internal server error occurred while retrieving the project. Please try again later."} # Check that the correct parameters were passed, and that db is an instance of Session _, kwargs = mock_get_project.call_args diff --git a/backend/tests/projects/test_get_projects.py b/backend/tests/projects/test_get_projects.py index 410e069..41206a1 100644 --- a/backend/tests/projects/test_get_projects.py +++ b/backend/tests/projects/test_get_projects.py @@ -146,8 +146,4 @@ def test_get_projects_db_error(mock_get_projects, mock_db): response = client.get("/v1/projects?page=1&page_size=2") assert response.status_code == 500 - assert response.json() == {"detail": "Unable to process request!"} - _, kwargs = mock_get_projects.call_args - assert isinstance(kwargs["db"], Session) - assert kwargs["page"] == 1 - assert kwargs["page_size"] == 2 + assert response.json() == {"detail": "An internal server error occurred while processing your request. Please try again later."} diff --git a/backend/tests/projects/test_update_project.py b/backend/tests/projects/test_update_project.py index 2b4fc9c..437fecc 100644 --- a/backend/tests/projects/test_update_project.py +++ b/backend/tests/projects/test_update_project.py @@ -57,7 +57,7 @@ def test_update_project_not_found(mock_get_project, mock_db): update_project(id=project_id, project=project_data, db=mock_db) assert excinfo.value.status_code == 404 - assert excinfo.value.detail == "Project not found" + assert excinfo.value.detail == "The specified project could not be found." @patch("app.repositories.project_repository.update_project") @@ -74,7 +74,7 @@ def test_update_project_db_error(mock_get_project, mock_update_project, mock_db) update_project(id=project_id, project=project_data, db=mock_db) assert excinfo.value.status_code == 500 - assert excinfo.value.detail == "Unable to process request!" + assert excinfo.value.detail == "An error occurred while updating the project. Please try again later." # Integration Test @@ -116,7 +116,7 @@ def test_update_project_api_not_found(mock_get_project): f"/v1/projects/{project_id}", json={"name": "Updated Project"} ) assert response.status_code == 404 - assert response.json() == {"detail": "Project not found"} + assert response.json() == {"detail": "The specified project could not be found."} @patch("app.repositories.project_repository.get_project") @@ -130,4 +130,4 @@ def test_update_project_api_db_error(mock_get_project): ) assert response.status_code == 500 - assert response.json() == {"detail": "Unable to process request!"} + assert response.json() == {"detail": "An error occurred while updating the project. Please try again later."} diff --git a/frontend/.husky/pre-commit b/frontend/.husky/pre-commit index 99f7117..9c12759 100644 --- a/frontend/.husky/pre-commit +++ b/frontend/.husky/pre-commit @@ -1,4 +1,2 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -cd frontend && npx lint-staged \ No newline at end of file +cd frontend && npx lint-staged +cd ../backend && poetry run ruff check . diff --git a/frontend/.lintstagedrc.js b/frontend/.lintstagedrc.js index f9c00c0..5fecbfb 100644 --- a/frontend/.lintstagedrc.js +++ b/frontend/.lintstagedrc.js @@ -1,7 +1,7 @@ module.exports = { "**/*.{js,jsx,ts,tsx}": (filenames) => { const filteredFiles = filenames.filter( - (file) => !file.startsWith("public/"), + (file) => !file.startsWith("public/") ); if (filteredFiles.length === 0) return []; return [ @@ -11,7 +11,7 @@ module.exports = { }, "**/*.{css,scss,md}": (filenames) => { const filteredFiles = filenames.filter( - (file) => !file.startsWith("public/"), + (file) => !file.startsWith("public/") ); if (filteredFiles.length === 0) return []; return [`prettier --write ${filteredFiles.join(" ")}`]; diff --git a/frontend/public/.prettierignore b/frontend/.prettierignore similarity index 100% rename from frontend/public/.prettierignore rename to frontend/.prettierignore diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 0000000..8f1866a --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,6 @@ +{ + "semi": true, + "singleQuote": false, + "tabWidth": 2, + "trailingComma": "es5" +} diff --git a/frontend/package-lock.json b/frontend/package-lock.json deleted file mode 100644 index ad1548d..0000000 --- a/frontend/package-lock.json +++ /dev/null @@ -1,10018 +0,0 @@ -{ - "name": "pandaetl-frontend", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "pandaetl-frontend", - "version": "0.1.0", - "dependencies": { - "@headlessui/react": "^2.1.2", - "@radix-ui/react-context-menu": "^2.2.1", - "@radix-ui/react-radio-group": "^1.2.0", - "@react-pdf/renderer": "^4.0.0", - "@tanstack/react-query": "^5.51.1", - "@tippyjs/react": "^4.2.6", - "axios": "^1.7.2", - "date-fns": "^3.6.0", - "framer-motion": "^11.3.31", - "lucide-react": "^0.408.0", - "marked": "^13.0.2", - "next": "14.2.4", - "openai": "^4.52.5", - "papaparse": "^5.4.1", - "react": "^18", - "react-data-grid": "^7.0.0-beta.47", - "react-dom": "^18", - "react-hot-toast": "^2.4.1", - "react-icons": "^5.2.1", - "react-intersection-observer": "^9.13.1", - "react-markdown": "^9.0.1", - "react-pdf": "^9.1.1", - "react-quill": "^2.0.0", - "rehype-raw": "^7.0.0", - "remark-gfm": "^4.0.0", - "tailwind-merge": "^2.4.0" - }, - "devDependencies": { - "@types/node": "^20", - "@types/papaparse": "^5.3.14", - "@types/react": "^18", - "@types/react-dom": "^18", - "eslint": "^8", - "eslint-config-next": "14.2.4", - "husky": "^9.1.5", - "lint-staged": "^15.2.10", - "postcss": "^8", - "prettier": "^3.3.3", - "tailwindcss": "^3.4.1", - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@babel/runtime": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", - "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.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": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.8" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz", - "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.8" - } - }, - "node_modules/@floating-ui/react": { - "version": "0.26.24", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.24.tgz", - "integrity": "sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.1.2", - "@floating-ui/utils": "^0.2.8", - "tabbable": "^6.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", - "license": "MIT" - }, - "node_modules/@headlessui/react": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.1.8.tgz", - "integrity": "sha512-uajqVkAcVG/wHwG9Fh5PFMcFpf2VxM4vNRNKxRjuK009kePVur8LkuuygHfIE+2uZ7z7GnlTtYsyUe6glPpTLg==", - "license": "MIT", - "dependencies": { - "@floating-ui/react": "^0.26.16", - "@react-aria/focus": "^3.17.1", - "@react-aria/interactions": "^3.21.3", - "@tanstack/react-virtual": "^3.8.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^18", - "react-dom": "^18" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "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/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/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": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "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/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@next/env": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.4.tgz", - "integrity": "sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg==", - "license": "MIT" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.4.tgz", - "integrity": "sha512-svSFxW9f3xDaZA3idQmlFw7SusOuWTpDTAeBlO3AEPDltrraV+lqs7mAc6A27YdnpQVVIA3sODqUAAHdWhVWsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "10.3.10" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz", - "integrity": "sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@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/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", - "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", - "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.0.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", - "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", - "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context-menu": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.1.tgz", - "integrity": "sha512-wvMKKIeb3eOrkJ96s722vcidZ+2ZNfcYZWBPRHIB1VWrF+fiF851Io6LX0kmK5wTDQFKdulCCKJk2c3SBaQHvA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-menu": "2.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", - "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz", - "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-escape-keydown": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz", - "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", - "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", - "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.1.tgz", - "integrity": "sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", - "@radix-ui/react-focus-guards": "1.1.0", - "@radix-ui/react-focus-scope": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.1", - "@radix-ui/react-presence": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-roving-focus": "1.1.0", - "@radix-ui/react-slot": "1.1.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popper": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", - "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-use-rect": "1.1.0", - "@radix-ui/react-use-size": "1.1.0", - "@radix-ui/rect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popper/node_modules/@floating-ui/react-dom": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", - "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz", - "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz", - "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", - "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-radio-group": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.0.tgz", - "integrity": "sha512-yv+oiLaicYMBpqgfpSPw6q+RyXlLdIpQWDHZbUKURxe+nEh53hFXPPlfhfQQtYkS5MMK/5IWIa76SksleQZSzw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-presence": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-roving-focus": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-use-size": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", - "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", - "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", - "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", - "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", - "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", - "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", - "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/rect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", - "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/rect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", - "license": "MIT" - }, - "node_modules/@react-aria/focus": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.18.2.tgz", - "integrity": "sha512-Jc/IY+StjA3uqN73o6txKQ527RFU7gnG5crEl5Xy3V+gbYp2O5L3ezAo/E0Ipi2cyMbG6T5Iit1IDs7hcGu8aw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.22.2", - "@react-aria/utils": "^3.25.2", - "@react-types/shared": "^3.24.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@react-aria/interactions": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.22.2.tgz", - "integrity": "sha512-xE/77fRVSlqHp2sfkrMeNLrqf2amF/RyuAS6T5oDJemRSgYM3UoxTbWjucPhfnoW7r32pFPHHgz4lbdX8xqD/g==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.5", - "@react-aria/utils": "^3.25.2", - "@react-types/shared": "^3.24.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@react-aria/ssr": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.5.tgz", - "integrity": "sha512-xEwGKoysu+oXulibNUSkXf8itW0npHHTa6c4AyYeZIJyRoegeteYuFpZUBPtIDE8RfHdNsSmE1ssOkxRnwbkuQ==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@react-aria/utils": { - "version": "3.25.2", - "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.25.2.tgz", - "integrity": "sha512-GdIvG8GBJJZygB4L2QJP1Gabyn2mjFsha73I2wSe+o4DYeGWoJiMZRM06PyTIxLH4S7Sn7eVDtsSBfkc2VY/NA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.5", - "@react-stately/utils": "^3.10.3", - "@react-types/shared": "^3.24.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@react-pdf/fns": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@react-pdf/fns/-/fns-3.0.0.tgz", - "integrity": "sha512-ICbIWR93PE6+xf2Xd/fXYO1dAuiOAJaszEuGGv3wp5lLSeeelDXlEYLh6R05okxh28YqMzc0Qd85x6n6MtaLUQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.13" - } - }, - "node_modules/@react-pdf/font": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-3.0.0.tgz", - "integrity": "sha512-/SYEud06maGQiAD0H6J5xnqigKm/FpLKqFYH6+2OjQ2tb32nnKqwqL3pS7glDTFYBJ11B6fVgSNex6tc1V8UDA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@react-pdf/types": "^2.7.0", - "cross-fetch": "^3.1.5", - "fontkit": "^2.0.2", - "is-url": "^1.2.4" - } - }, - "node_modules/@react-pdf/image": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@react-pdf/image/-/image-3.0.0.tgz", - "integrity": "sha512-l4HV5NutPw52Wbuvxol0BiFc6TkKXK/kJNwVIElphw47nwfueLEjIfBxRTuOeHmpdibvEh3a5STwYmMTQjXSxg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@react-pdf/png-js": "^3.0.0", - "cross-fetch": "^3.1.5", - "jay-peg": "^1.1.0" - } - }, - "node_modules/@react-pdf/layout": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@react-pdf/layout/-/layout-4.0.0.tgz", - "integrity": "sha512-BNipDwULk9ehvf0V5HLrP2QIujkfj2LzHs8yfCQ/Z8TkAX6dEt1AgwDttBpBLfzcu8w8HFjgpLR1TNOTXiOsAQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@react-pdf/fns": "3.0.0", - "@react-pdf/image": "^3.0.0", - "@react-pdf/pdfkit": "^4.0.0", - "@react-pdf/primitives": "^4.0.0", - "@react-pdf/stylesheet": "^5.0.0", - "@react-pdf/textkit": "^5.0.0", - "@react-pdf/types": "^2.7.0", - "cross-fetch": "^3.1.5", - "emoji-regex": "^10.3.0", - "queue": "^6.0.1", - "yoga-layout": "^3.1.0" - } - }, - "node_modules/@react-pdf/pdfkit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@react-pdf/pdfkit/-/pdfkit-4.0.0.tgz", - "integrity": "sha512-HaaAoBpoRGJ6c1ZOANNQZ3q6Ehmagqa8n40x+OZ5s9HcmUviZ34SCm+QBa42s1o4299M+Lgw3UoqpW7sHv3/Hg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@react-pdf/png-js": "^3.0.0", - "browserify-zlib": "^0.2.0", - "crypto-js": "^4.2.0", - "fontkit": "^2.0.2", - "jay-peg": "^1.1.0", - "vite-compatible-readable-stream": "^3.6.1" - } - }, - "node_modules/@react-pdf/png-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@react-pdf/png-js/-/png-js-3.0.0.tgz", - "integrity": "sha512-eSJnEItZ37WPt6Qv5pncQDxLJRK15eaRwPT+gZoujP548CodenOVp49GST8XJvKMFt9YqIBzGBV/j9AgrOQzVA==", - "license": "MIT", - "dependencies": { - "browserify-zlib": "^0.2.0" - } - }, - "node_modules/@react-pdf/primitives": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-4.0.0.tgz", - "integrity": "sha512-yp4E0rDL03NaUp/CnDBz3HQNfH2Mzdlgku57yhTMGNzetwB0NJusXcjYg5XsTGIXnR7Tv80JKI4O4ajj+oaLeQ==", - "license": "MIT" - }, - "node_modules/@react-pdf/render": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@react-pdf/render/-/render-4.0.0.tgz", - "integrity": "sha512-gvrw4HM9RocuDLd+19cvP2xaSs3h4OgYn2N6VDXzj6LYQnoHBAazRV9qMpGi8FuNlQ3Va+s82R1ynXYMr0FXIg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@react-pdf/fns": "3.0.0", - "@react-pdf/primitives": "^4.0.0", - "@react-pdf/textkit": "^5.0.0", - "@react-pdf/types": "^2.7.0", - "abs-svg-path": "^0.1.1", - "color-string": "^1.9.1", - "normalize-svg-path": "^1.1.0", - "parse-svg-path": "^0.1.2", - "svg-arc-to-cubic-bezier": "^3.2.0" - } - }, - "node_modules/@react-pdf/renderer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@react-pdf/renderer/-/renderer-4.0.0.tgz", - "integrity": "sha512-yDObqmnF08Mwc24W8axmT/y+JPxJkweVQ/EM3GOXh0qyZN5VP5JvKDiCqmftI6QEKfvTFNsquuEQm13GBjkbMg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@react-pdf/font": "^3.0.0", - "@react-pdf/layout": "^4.0.0", - "@react-pdf/pdfkit": "^4.0.0", - "@react-pdf/primitives": "^4.0.0", - "@react-pdf/render": "^4.0.0", - "@react-pdf/types": "^2.7.0", - "events": "^3.3.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "queue": "^6.0.1", - "scheduler": "^0.17.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@react-pdf/stylesheet": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-5.0.0.tgz", - "integrity": "sha512-FrJXUMsvSGee13gpL82HOhhk16y3IKxLmYvmJU1ZUo9Jm9pLydnHDPlSUDK+rKmxdSD2X+twUR7sv6FlrA5i+A==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@react-pdf/fns": "3.0.0", - "@react-pdf/types": "^2.7.0", - "color-string": "^1.9.1", - "hsl-to-hex": "^1.0.0", - "media-engine": "^1.0.3", - "postcss-value-parser": "^4.1.0" - } - }, - "node_modules/@react-pdf/textkit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@react-pdf/textkit/-/textkit-5.0.0.tgz", - "integrity": "sha512-+K6zkF6lDXHIZZ9nNzplJ48IrjXNGQqVfO5v73AsutHbvx44E62t46EeoGLHsmjGeMG70TooSI1Mwq/7f/5tLw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@react-pdf/fns": "3.0.0", - "bidi-js": "^1.0.2", - "hyphen": "^1.6.4", - "unicode-properties": "^1.4.1" - } - }, - "node_modules/@react-pdf/types": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@react-pdf/types/-/types-2.7.0.tgz", - "integrity": "sha512-7KrPPCpgRPKR+g+T127PE4bpw9Q84ZiY07EYRwXKVtTEVW9wJ5BZiF9smT9IvH19s+MQaDLmYRgjESsnqlyH0Q==", - "license": "MIT" - }, - "node_modules/@react-stately/utils": { - "version": "3.10.3", - "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.3.tgz", - "integrity": "sha512-moClv7MlVSHpbYtQIkm0Cx+on8Pgt1XqtPx6fy9rQFb2DNc9u1G3AUVnqA17buOkH1vLxAtX4MedlxMWyRCYYA==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@react-types/shared": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.24.1.tgz", - "integrity": "sha512-AUQeGYEm/zDTN6zLzdXolDxz3Jk5dDL7f506F07U8tBwxNNI3WRdhU84G0/AaFikOZzDXhOZDr3MhQMzyE7Ydw==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" - } - }, - "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.10.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", - "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", - "dev": true, - "license": "MIT" - }, - "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.13", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", - "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@tanstack/query-core": { - "version": "5.56.2", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.56.2.tgz", - "integrity": "sha512-gor0RI3/R5rVV3gXfddh1MM+hgl0Z4G7tj6Xxpq6p2I03NGPaJ8dITY9Gz05zYYb/EJq9vPas/T4wn9EaDPd4Q==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@tanstack/react-query": { - "version": "5.56.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.56.2.tgz", - "integrity": "sha512-SR0GzHVo6yzhN72pnRhkEFRAHMsUo5ZPzAxfTMvUxFIDVS6W9LYUp6nXW3fcHVdg0ZJl8opSH85jqahvm6DSVg==", - "license": "MIT", - "dependencies": { - "@tanstack/query-core": "5.56.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^18 || ^19" - } - }, - "node_modules/@tanstack/react-virtual": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.10.8.tgz", - "integrity": "sha512-VbzbVGSsZlQktyLrP5nxE+vE1ZR+U0NFAWPbJLoG2+DKPwd2D7dVICTVIIaYlJqX1ZCEnYDbaOpmMwbsyhBoIA==", - "license": "MIT", - "dependencies": { - "@tanstack/virtual-core": "3.10.8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@tanstack/virtual-core": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.10.8.tgz", - "integrity": "sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@tippyjs/react": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", - "integrity": "sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==", - "license": "MIT", - "dependencies": { - "tippy.js": "^6.3.1" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "license": "MIT" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/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/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", - "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/node-fetch/node_modules/@types/node": { - "version": "22.5.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", - "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/papaparse": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.14.tgz", - "integrity": "sha512-LxJ4iEFcpqc6METwp9f6BV6VVc43m6MfH0VqFosHvrUgfXiFe6ww7R3itkOQ+TCK6Y+Iv/+RnnvtRZnkc5Kc9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/papaparse/node_modules/@types/node": { - "version": "22.5.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", - "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.16", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", - "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", - "license": "MIT" - }, - "node_modules/@types/quill": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz", - "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==", - "license": "MIT", - "dependencies": { - "parchment": "^1.1.2" - } - }, - "node_modules/@types/react": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.7.tgz", - "integrity": "sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==", - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "license": "MIT" - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.2.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "license": "ISC" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "license": "ISC", - "optional": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/abs-svg-path": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", - "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==", - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "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": { - "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/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "license": "ISC", - "optional": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-hidden": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", - "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/aria-query/node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": { - "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/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "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": { - "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/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "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/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": { - "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/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/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/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": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", - "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", - "dev": true, - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "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/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", - "license": "MIT", - "dependencies": { - "require-from-string": "^2.0.2" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "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": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.1.2" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "license": "MIT", - "dependencies": { - "pako": "~1.0.5" - } - }, - "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/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "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/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001660", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", - "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/canvas": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", - "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/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": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", - "optional": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/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==", - "dev": 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==", - "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", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/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==", - "license": "ISC", - "optional": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "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" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "license": "ISC", - "optional": true - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", - "license": "MIT" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "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.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/date-fns": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", - "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/kossnocorp" - } - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "license": "MIT", - "optional": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/deep-equal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", - "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", - "license": "MIT", - "dependencies": { - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.5.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "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/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "license": "MIT", - "optional": true - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/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", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "license": "MIT" - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "license": "MIT" - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.4.tgz", - "integrity": "sha512-Qr0wMgG9m6m4uYy2jrYJmyuNlYZzPRQq5Kvb9IDlYwn+7yq6W6sfMNFgb+9guM1KYwuIo6TIaiFhZJ6SnQ/Efw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@next/eslint-plugin-next": "14.2.4", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "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": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "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": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", - "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.5", - "enhanced-resolve": "^5.15.0", - "eslint-module-utils": "^2.8.1", - "fast-glob": "^3.3.2", - "get-tsconfig": "^4.7.5", - "is-bun-module": "^1.0.2", - "is-glob": "^4.0.3" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "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/eslint-module-utils": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz", - "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "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", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", - "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.9.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", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "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": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz", - "integrity": "sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "aria-query": "~5.1.3", - "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", - "es-iterator-helpers": "^1.0.19", - "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.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-jsx-a11y/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": "MIT" - }, - "node_modules/eslint-plugin-react": { - "version": "7.36.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", - "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "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.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "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-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "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/node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint/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": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "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": ">=0.10" - } - }, - "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": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "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": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/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": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", - "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", - "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "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.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fontkit": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", - "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", - "license": "MIT", - "dependencies": { - "@swc/helpers": "^0.5.12", - "brotli": "^1.3.2", - "clone": "^2.1.2", - "dfa": "^1.2.0", - "fast-deep-equal": "^3.1.3", - "restructure": "^3.0.0", - "tiny-inflate": "^1.0.3", - "unicode-properties": "^1.4.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "license": "MIT", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/framer-motion": { - "version": "11.5.4", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.5.4.tgz", - "integrity": "sha512-E+tb3/G6SO69POkdJT+3EpdMuhmtCh9EWuK4I1DnIC23L7tFPrl8vxP+LSovwaw6uUr73rUbpb4FgK011wbRJQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - }, - "peerDependencies": { - "@emotion/is-prop-valid": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/is-prop-valid": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "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==", - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "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==", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gauge/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC", - "optional": true - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "optional": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "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, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", - "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/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": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/goober": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.14.tgz", - "integrity": "sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==", - "license": "MIT", - "peerDependencies": { - "csstype": "^3.0.10" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "license": "ISC", - "optional": true - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", - "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^8.0.0", - "property-information": "^6.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz", - "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", - "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hsl-to-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz", - "integrity": "sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==", - "license": "MIT", - "dependencies": { - "hsl-to-rgb-for-reals": "^1.1.0" - } - }, - "node_modules/hsl-to-rgb-for-reals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz", - "integrity": "sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==", - "license": "ISC" - }, - "node_modules/html-url-attributes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.0.tgz", - "integrity": "sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "optional": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "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==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/husky": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.5.tgz", - "integrity": "sha512-rowAVRUBfI0b4+niA4SJMhfQwc107VLkBUgEYYAOQAbqDCnra1nYh83hF/MDmhYs9t9n1E3DuKOrs2LYNC+0Ag==", - "dev": true, - "license": "MIT", - "bin": { - "husky": "bin.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/hyphen": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/hyphen/-/hyphen-1.10.6.tgz", - "integrity": "sha512-fXHXcGFTXOvZTSkPJuGOQf5Lv5T/R2itiiCVPg9LxAje5D00O0pP83yJShFq5V89Ly//Gt6acj7z8pbBr34stw==", - "license": "ISC" - }, - "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": ">= 4" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/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": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", - "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==", - "license": "MIT" - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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" - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bun-module": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", - "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.6.3" - } - }, - "node_modules/is-bun-module/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-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/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-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": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "license": "MIT" - }, - "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, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "license": "MIT" - }, - "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/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jay-peg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jay-peg/-/jay-peg-1.1.0.tgz", - "integrity": "sha512-WhyKySfx5CEFoKDnpmHyJUrpX5fUrr/X3kqVHISmiO9jrJC73RQBOAZJB8bDrWT4PHEkl0QgNZLlWJfAWAIFew==", - "license": "MIT", - "dependencies": { - "restructure": "^3.0.0" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "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, - "license": "MIT" - }, - "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, - "license": "MIT" - }, - "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, - "license": "MIT" - }, - "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" - } - }, - "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, - "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" - } - }, - "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, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "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, - "license": "CC0-1.0" - }, - "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, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "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" - } - }, - "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged": { - "version": "15.2.10", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", - "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "~5.3.0", - "commander": "~12.1.0", - "debug": "~4.3.6", - "execa": "~8.0.1", - "lilconfig": "~3.1.2", - "listr2": "~8.2.4", - "micromatch": "~4.0.8", - "pidtree": "~0.6.0", - "string-argv": "~0.3.2", - "yaml": "~2.5.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/listr2": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", - "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/listr2/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/lucide-react": { - "version": "0.408.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.408.0.tgz", - "integrity": "sha512-8kETAAeWmOvtGIr7HPHm51DXoxlfkNncQ5FZWXR+abX8saQwMYXANWIkUstaYtcKSo/imOe/q+tVFA8ANzdSVA==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/make-cancellable-promise": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz", - "integrity": "sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==", - "license": "MIT", - "funding": { - "url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "license": "MIT", - "optional": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-event-props": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz", - "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==", - "license": "MIT", - "funding": { - "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1" - } - }, - "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/marked": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.3.tgz", - "integrity": "sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", - "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", - "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", - "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/media-engine": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/media-engine/-/media-engine-1.0.3.tgz", - "integrity": "sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg==", - "license": "MIT" - }, - "node_modules/merge-refs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.3.0.tgz", - "integrity": "sha512-nqXPXbso+1dcKDpPCXvwZyJILz+vSLqGGOnDrYHQYE+B8n9JTCekVLC65AfCpR4ggVyA/45Y0iR9LDyS2iI+zA==", - "license": "MIT", - "funding": { - "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", - "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimatch/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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "license": "MIT", - "optional": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "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==", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "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==", - "license": "MIT", - "optional": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nan": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", - "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", - "license": "MIT", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/next": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.4.tgz", - "integrity": "sha512-R8/V7vugY+822rsQGQCjoLhMuC9oFj9SOi4Cl4b2wjDrseD0LRZ10W7R6Czo4w9ZznVSshKjuIomsRjvm9EKJQ==", - "license": "MIT", - "dependencies": { - "@next/env": "14.2.4", - "@swc/helpers": "0.5.5", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001579", - "graceful-fs": "^4.2.11", - "postcss": "8.4.31", - "styled-jsx": "5.1.1" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=18.17.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.4", - "@next/swc-darwin-x64": "14.2.4", - "@next/swc-linux-arm64-gnu": "14.2.4", - "@next/swc-linux-arm64-musl": "14.2.4", - "@next/swc-linux-x64-gnu": "14.2.4", - "@next/swc-linux-x64-musl": "14.2.4", - "@next/swc-win32-arm64-msvc": "14.2.4", - "@next/swc-win32-ia32-msvc": "14.2.4", - "@next/swc-win32-x64-msvc": "14.2.4" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next/node_modules/@swc/helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", - "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3", - "tslib": "^2.4.0" - } - }, - "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" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "license": "ISC", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-svg-path": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz", - "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==", - "license": "MIT", - "dependencies": { - "svg-arc-to-cubic-bezier": "^3.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "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" - } - }, - "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, - "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" - } - }, - "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, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "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" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/openai": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.61.1.tgz", - "integrity": "sha512-jZ2WRn+f4QWZkYnrUS+xzEUIBllsGN75dUCaXmMIHcv2W9yn7O8amaReTbGHCNEYkL43vuDOcxPUWfNPUmoD3Q==", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "@types/qs": "^6.9.15", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7", - "qs": "^6.10.3" - }, - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } - } - }, - "node_modules/openai/node_modules/@types/node": { - "version": "18.19.50", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", - "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/openai/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": 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" - } - }, - "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" - } - }, - "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" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/papaparse": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", - "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==", - "license": "MIT" - }, - "node_modules/parchment": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", - "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==", - "license": "BSD-3-Clause" - }, - "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" - } - }, - "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/parse-svg-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", - "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==", - "license": "MIT" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "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" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path2d": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.1.tgz", - "integrity": "sha512-Fl2z/BHvkTNvkuBzYTpTuirHZg6wW9z8+4SND/3mDTEcYbbNKWAy21dz9D3ePNNwrrK8pqZO5vLPZ1hLF6T7XA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pdfjs-dist": { - "version": "4.4.168", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.4.168.tgz", - "integrity": "sha512-MbkAjpwka/dMHaCfQ75RY1FXX3IewBVu6NGZOcxerRFlaBiIkZmUoR0jotX5VUzYZEXAGzSFtknWs5xRKliXPA==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "canvas": "^2.11.2", - "path2d": "^0.2.0" - } - }, - "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "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", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "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, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/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" - }, - "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, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quill": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", - "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", - "license": "BSD-3-Clause", - "dependencies": { - "clone": "^2.1.1", - "deep-equal": "^1.0.1", - "eventemitter3": "^2.0.3", - "extend": "^3.0.2", - "parchment": "^1.1.4", - "quill-delta": "^3.6.2" - } - }, - "node_modules/quill-delta": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", - "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", - "license": "MIT", - "dependencies": { - "deep-equal": "^1.0.1", - "extend": "^3.0.2", - "fast-diff": "1.1.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-data-grid": { - "version": "7.0.0-beta.47", - "resolved": "https://registry.npmjs.org/react-data-grid/-/react-data-grid-7.0.0-beta.47.tgz", - "integrity": "sha512-28kjsmwQGD/9RXYC50zn5Zv/SQMhBBoSvG5seq0fM8XXi9TZ0zr9Z5T3YJqLwcEtoNzTOq3y0njkmdujGkIwQQ==", - "license": "MIT", - "dependencies": { - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^18.0 || ^19.0", - "react-dom": "^18.0 || ^19.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-dom/node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/react-hot-toast": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.1.tgz", - "integrity": "sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==", - "license": "MIT", - "dependencies": { - "goober": "^2.1.10" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": ">=16", - "react-dom": ">=16" - } - }, - "node_modules/react-icons": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz", - "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==", - "license": "MIT", - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-intersection-observer": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.13.1.tgz", - "integrity": "sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==", - "license": "MIT", - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": 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" - }, - "node_modules/react-markdown": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.1.tgz", - "integrity": "sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "devlop": "^1.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "html-url-attributes": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "unified": "^11.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=18", - "react": ">=18" - } - }, - "node_modules/react-pdf": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-9.1.1.tgz", - "integrity": "sha512-Cn3RTJZMqVOOCgLMRXDamLk4LPGfyB2Np3OwQAUjmHIh47EpuGW1OpAA1Z1GVDLoHx4d5duEDo/YbUkDbr4QFQ==", - "license": "MIT", - "dependencies": { - "clsx": "^2.0.0", - "dequal": "^2.0.3", - "make-cancellable-promise": "^1.3.1", - "make-event-props": "^1.6.0", - "merge-refs": "^1.3.0", - "pdfjs-dist": "4.4.168", - "tiny-invariant": "^1.0.0", - "warning": "^4.0.0" - }, - "funding": { - "url": "https://github.com/wojtekmaj/react-pdf?sponsor=1" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "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" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-quill": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz", - "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==", - "license": "MIT", - "dependencies": { - "@types/quill": "^1.3.10", - "lodash": "^4.17.4", - "quill": "^1.3.7" - }, - "peerDependencies": { - "react": "^16 || ^17 || ^18", - "react-dom": "^16 || ^17 || ^18" - } - }, - "node_modules/react-remove-scroll": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", - "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.4", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.1", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", - "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "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, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restructure": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", - "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==", - "license": "MIT" - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/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.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", - "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "devOptional": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "license": "ISC", - "optional": true - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/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==", - "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" - } - }, - "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, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "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", - "optional": true - }, - "node_modules/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "license": "MIT", - "optional": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.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", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "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==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.includes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", - "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "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", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "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" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.7.tgz", - "integrity": "sha512-uSjr59G5u6fbxUfKbb8GcqMGT3Xs9v5IbPkjb0S16GyOeBLAzSRK0CixBv5YrYvzO6TDLzIS6QCn78tkqWngPw==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.2.3" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "license": "MIT", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/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" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-arc-to-cubic-bezier": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", - "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==", - "license": "ISC" - }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", - "license": "MIT" - }, - "node_modules/tailwind-merge": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.2.tgz", - "integrity": "sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, - "node_modules/tailwindcss": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.12.tgz", - "integrity": "sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/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": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tailwindcss/node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "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==", - "license": "ISC", - "optional": true, - "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/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "license": "MIT" - }, - "node_modules/tippy.js": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", - "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", - "license": "MIT", - "dependencies": { - "@popperjs/core": "^2.9.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/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" - } - }, - "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "license": "0BSD" - }, - "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, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "license": "MIT" - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "license": "MIT", - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, - "node_modules/unicode-trie/node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "license": "MIT" - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-callback-ref": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", - "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vite-compatible-readable-stream": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz", - "integrity": "sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "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, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", - "dev": true, - "license": "MIT", - "dependencies": { - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "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" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "license": "ISC", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "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, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/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": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", - "optional": true - }, - "node_modules/yaml": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "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" - } - }, - "node_modules/yoga-layout": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.1.0.tgz", - "integrity": "sha512-auzJ8lEovThZIpR8wLGWNo/JEj4VTO79q9/gOJ0dWb3shAYPFdX3t9VN0fC0v+jeQF77STUdCzebLwRMqzn5gQ==", - "license": "MIT" - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz", - "integrity": "sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz", - "integrity": "sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz", - "integrity": "sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.4.tgz", - "integrity": "sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.4.tgz", - "integrity": "sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz", - "integrity": "sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz", - "integrity": "sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.4.tgz", - "integrity": "sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - } - } -} diff --git a/frontend/package.json b/frontend/package.json index 436c448..60ab647 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "pandaetl-frontend", "description": "No-code ETL and data pipelines with AI and NLP", - "version": "0.1.0", + "version": "0.2.0", "scripts": { "dev": "next dev", "build": "next build", @@ -35,7 +35,7 @@ "react-markdown": "^9.0.1", "react-pdf": "^9.1.1", "react-quill": "^2.0.0", - "rehype-raw": "^7.0.0", + "rehype-sanitize": "^6.0.0", "remark-gfm": "^4.0.0", "tailwind-merge": "^2.4.0" }, diff --git a/frontend/public/pdf.worker.mjs b/frontend/public/pdf.worker.mjs index 672f4d1..9a3ec48 100644 --- a/frontend/public/pdf.worker.mjs +++ b/frontend/public/pdf.worker.mjs @@ -497,7 +497,7 @@ function string32(value) { (value >> 24) & 0xff, (value >> 16) & 0xff, (value >> 8) & 0xff, - value & 0xff, + value & 0xff ); } function objectSize(obj) { @@ -535,7 +535,7 @@ class FeatureTest { return shadow( this, "isOffscreenCanvasSupported", - typeof OffscreenCanvas !== "undefined", + typeof OffscreenCanvas !== "undefined" ); } static get platform() { @@ -555,12 +555,12 @@ class FeatureTest { return shadow( this, "isCSSRoundSupported", - globalThis.CSS?.supports?.("width: round(1.5px, 1px)"), + globalThis.CSS?.supports?.("width: round(1.5px, 1px)") ); } } const hexNumbers = Array.from(Array(256).keys(), (n) => - n.toString(16).padStart(2, "0"), + n.toString(16).padStart(2, "0") ); class Util { static makeHexColor(r, g, b) { @@ -681,22 +681,22 @@ class Util { static intersect(rect1, rect2) { const xLow = Math.max( Math.min(rect1[0], rect1[2]), - Math.min(rect2[0], rect2[2]), + Math.min(rect2[0], rect2[2]) ); const xHigh = Math.min( Math.max(rect1[0], rect1[2]), - Math.max(rect2[0], rect2[2]), + Math.max(rect2[0], rect2[2]) ); if (xLow > xHigh) { return null; } const yLow = Math.max( Math.min(rect1[1], rect1[3]), - Math.min(rect2[1], rect2[3]), + Math.min(rect2[1], rect2[3]) ); const yHigh = Math.min( Math.max(rect1[1], rect1[3]), - Math.max(rect2[1], rect2[3]), + Math.max(rect2[1], rect2[3]) ); if (yLow > yHigh) { return null; @@ -730,7 +730,7 @@ class Util { y2, y3, -c / b, - minMax, + minMax ); } return; @@ -751,7 +751,7 @@ class Util { y2, y3, (-b + sqrtDelta) / a2, - minMax, + minMax ); this.#getExtremumOnCurve( x0, @@ -763,7 +763,7 @@ class Util { y2, y3, (-b - sqrtDelta) / a2, - minMax, + minMax ); } static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) { @@ -792,7 +792,7 @@ class Util { 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), - minMax, + minMax ); this.#getExtremum( x0, @@ -806,7 +806,7 @@ class Util { 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), - minMax, + minMax ); return minMax; } @@ -903,7 +903,7 @@ function normalizeUnicode(str) { NormalizationMap = new Map([["ſt", "ſt"]]); } return str.replaceAll(NormalizeRegex, (_, p1, p2) => - p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2), + p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2) ); } function getUuid() { @@ -1124,7 +1124,7 @@ class Ref { } return (RefCache[str] = new Ref( parseInt(m[1]), - !m[2] ? 0 : parseInt(m[2]), + !m[2] ? 0 : parseInt(m[2]) )); } static get(num, gen) { @@ -1394,7 +1394,7 @@ const ROMAN_NUMBER_MAP = [ function toRomanNumerals(number, lowerCase = false) { assert( Number.isInteger(number) && number > 0, - "The number should be a positive integer.", + "The number should be a positive integer." ); const romanBuf = []; let pos; @@ -1707,7 +1707,7 @@ function recoverJsURL(str) { "^\\s*(" + URL_OPEN_METHODS.join("|").replaceAll(".", "\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", - "i", + "i" ); const jsUrl = regex.exec(str); if (jsUrl?.[2]) { @@ -1763,7 +1763,7 @@ function stringToUTF16HexString(str) { const char = str.charCodeAt(i); buf.push( ((char >> 8) & 0xff).toString(16).padStart(2, "0"), - (char & 0xff).toString(16).padStart(2, "0"), + (char & 0xff).toString(16).padStart(2, "0") ); } return buf.join(""); @@ -1777,7 +1777,7 @@ function stringToUTF16String(str, bigEndian = false) { const char = str.charCodeAt(i); buf.push( String.fromCharCode((char >> 8) & 0xff), - String.fromCharCode(char & 0xff), + String.fromCharCode(char & 0xff) ); } return buf.join(""); @@ -1950,7 +1950,7 @@ class ChunkedStream extends Stream { } const endChunk = Math.min( Math.floor((end - 1) / this.chunkSize) + 1, - this.numChunks, + this.numChunks ); for (let chunk = beginChunk; chunk < endChunk; ++chunk) { if (!this._loadedChunks.has(chunk)) { @@ -2146,7 +2146,7 @@ class ChunkedStreamManager { const begin = groupedChunk.beginChunk * this.chunkSize; const end = Math.min( groupedChunk.endChunk * this.chunkSize, - this.length, + this.length ); this.sendRequest(begin, end).catch(capability.reject); } @@ -2358,7 +2358,7 @@ class ColorSpace { actualHeight, bpc, comps, - alpha01, + alpha01 ) { const count = originalWidth * originalHeight; let rgbBuf = null; @@ -2415,7 +2415,7 @@ class ColorSpace { originalHeight, width, height, - alpha01, + alpha01 ); } else { let destPos = 0, @@ -2435,12 +2435,12 @@ class ColorSpace { static _cache(cacheKey, xref, localColorSpaceCache, parsedColorSpace) { if (!localColorSpaceCache) { throw new Error( - 'ColorSpace._cache - expected "localColorSpaceCache" argument.', + 'ColorSpace._cache - expected "localColorSpaceCache" argument.' ); } if (!parsedColorSpace) { throw new Error( - 'ColorSpace._cache - expected "parsedColorSpace" argument.', + 'ColorSpace._cache - expected "parsedColorSpace" argument.' ); } let csName, csRef; @@ -2458,7 +2458,7 @@ class ColorSpace { static getCached(cacheKey, xref, localColorSpaceCache) { if (!localColorSpaceCache) { throw new Error( - 'ColorSpace.getCached - expected "localColorSpaceCache" argument.', + 'ColorSpace.getCached - expected "localColorSpaceCache" argument.' ); } if (cacheKey instanceof Ref) { @@ -2493,7 +2493,7 @@ class ColorSpace { cs, xref, resources, - pdfFunctionFactory, + pdfFunctionFactory ); this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); return parsedColorSpace; @@ -2513,7 +2513,7 @@ class ColorSpace { cs, xref, resources, - pdfFunctionFactory, + pdfFunctionFactory ); this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); return parsedColorSpace; @@ -2546,7 +2546,7 @@ class ColorSpace { resourcesCS, xref, resources, - pdfFunctionFactory, + pdfFunctionFactory ); } cs = resourcesCS; @@ -2715,7 +2715,7 @@ class AlternateCS extends ColorSpace { getOutputLength(inputLength, alpha01) { return this.base.getOutputLength( (inputLength * this.base.numComps) / this.numComps, - alpha01, + alpha01 ); } } @@ -2925,7 +2925,7 @@ class CalGrayCS extends ColorSpace { super("CalGray", 1); if (!whitePoint) { throw new FormatError( - "WhitePoint missing - required for color space CalGray", + "WhitePoint missing - required for color space CalGray" ); } [this.XW, this.YW, this.ZW] = whitePoint; @@ -2933,7 +2933,7 @@ class CalGrayCS extends ColorSpace { this.G = gamma || 1; if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { throw new FormatError( - `Invalid WhitePoint components for ${this.name}, no fallback available`, + `Invalid WhitePoint components for ${this.name}, no fallback available` ); } if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { @@ -2943,12 +2943,12 @@ class CalGrayCS extends ColorSpace { if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) { warn( `${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + - `ZB: ${this.ZB}, only default values are supported.`, + `ZB: ${this.ZB}, only default values are supported.` ); } if (this.G < 1) { info( - `Invalid Gamma: ${this.G} for ${this.name}, falling back to default.`, + `Invalid Gamma: ${this.G} for ${this.name}, falling back to default.` ); this.G = 1; } @@ -2998,7 +2998,7 @@ class CalRGBCS extends ColorSpace { super("CalRGB", 3); if (!whitePoint) { throw new FormatError( - "WhitePoint missing - required for color space CalRGB", + "WhitePoint missing - required for color space CalRGB" ); } const [XW, YW, ZW] = (this.whitePoint = whitePoint); @@ -3017,20 +3017,20 @@ class CalRGBCS extends ColorSpace { ] = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); if (XW < 0 || ZW < 0 || YW !== 1) { throw new FormatError( - `Invalid WhitePoint components for ${this.name}, no fallback available`, + `Invalid WhitePoint components for ${this.name}, no fallback available` ); } if (XB < 0 || YB < 0 || ZB < 0) { info( `Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + - "falling back to default.", + "falling back to default." ); this.blackPoint = new Float32Array(3); } if (this.GR < 0 || this.GG < 0 || this.GB < 0) { info( `Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + - `${this.name}, falling back to default.`, + `${this.name}, falling back to default.` ); this.GR = this.GG = this.GB = 1; } @@ -3116,7 +3116,7 @@ class CalRGBCS extends ColorSpace { this.#matrixProduct( CalRGBCS.#BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, - result, + result ); } #normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) { @@ -3127,7 +3127,7 @@ class CalRGBCS extends ColorSpace { this.#matrixProduct( CalRGBCS.#BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, - result, + result ); } #toRgb(src, srcOffset, dest, destOffset, scale) { @@ -3152,7 +3152,7 @@ class CalRGBCS extends ColorSpace { this.#normalizeWhitePointToD65( CalRGBCS.#FLAT_WHITEPOINT_MATRIX, XYZ_Black, - XYZ_D65, + XYZ_D65 ); const SRGB = CalRGBCS.#tempConvertMatrix1; this.#matrixProduct(CalRGBCS.#SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB); @@ -3180,7 +3180,7 @@ class LabCS extends ColorSpace { super("Lab", 3); if (!whitePoint) { throw new FormatError( - "WhitePoint missing - required for color space Lab", + "WhitePoint missing - required for color space Lab" ); } [this.XW, this.YW, this.ZW] = whitePoint; @@ -3190,7 +3190,7 @@ class LabCS extends ColorSpace { [this.XB, this.YB, this.ZB] = blackPoint || [0, 0, 0]; if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { throw new FormatError( - "Invalid WhitePoint components, no fallback available", + "Invalid WhitePoint components, no fallback available" ); } if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { @@ -3425,7 +3425,7 @@ class BinaryCMapReader { cMap.addCodespaceRange( dataSize + 1, hexToInt(start, dataSize), - hexToInt(end, dataSize), + hexToInt(end, dataSize) ); for (let i = 1; i < subitemsCount; i++) { incHex(end, dataSize); @@ -3436,7 +3436,7 @@ class BinaryCMapReader { cMap.addCodespaceRange( dataSize + 1, hexToInt(start, dataSize), - hexToInt(end, dataSize), + hexToInt(end, dataSize) ); } break; @@ -3476,7 +3476,7 @@ class BinaryCMapReader { cMap.mapCidRange( hexToInt(start, dataSize), hexToInt(end, dataSize), - code, + code ); for (let i = 1; i < subitemsCount; i++) { incHex(end, dataSize); @@ -3492,7 +3492,7 @@ class BinaryCMapReader { cMap.mapCidRange( hexToInt(start, dataSize), hexToInt(end, dataSize), - code, + code ); } break; @@ -3501,7 +3501,7 @@ class BinaryCMapReader { stream.readHex(charCode, dataSize); cMap.mapOne( hexToInt(char, ucs2DataSize), - hexToStr(charCode, dataSize), + hexToStr(charCode, dataSize) ); for (let i = 1; i < subitemsCount; i++) { incHex(char, ucs2DataSize); @@ -3514,7 +3514,7 @@ class BinaryCMapReader { addHex(charCode, tmp, dataSize); cMap.mapOne( hexToInt(char, ucs2DataSize), - hexToStr(charCode, dataSize), + hexToStr(charCode, dataSize) ); } break; @@ -3526,7 +3526,7 @@ class BinaryCMapReader { cMap.mapBfRange( hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), - hexToStr(charCode, dataSize), + hexToStr(charCode, dataSize) ); for (let i = 1; i < subitemsCount; i++) { incHex(end, ucs2DataSize); @@ -3542,7 +3542,7 @@ class BinaryCMapReader { cMap.mapBfRange( hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), - hexToStr(charCode, dataSize), + hexToStr(charCode, dataSize) ); } break; @@ -4984,7 +4984,7 @@ class CCITTFaxDecoder { if (codingLine[this.codingPos] < columns) { this._addPixels( codingLine[this.codingPos] + code2, - blackPixels ^ 1, + blackPixels ^ 1 ); } while ( @@ -5218,7 +5218,7 @@ class CCITTFaxDecoder { do { if (typeof this.outputBits !== "number") { throw new FormatError( - 'Invalid /CCITTFaxDecode data, "outputBits" must be a number.', + 'Invalid /CCITTFaxDecode data, "outputBits" must be a number.' ); } if (this.outputBits > bits) { @@ -5557,7 +5557,7 @@ class FlateStream extends DecodeStream { } if ((cmf & 0x0f) !== 0x08) { throw new FormatError( - `Unknown compression method in flate stream: ${cmf}, ${flg}`, + `Unknown compression method in flate stream: ${cmf}, ${flg}` ); } if (((cmf << 8) + flg) % 31 !== 0) { @@ -5782,10 +5782,10 @@ class FlateStream extends DecodeStream { } } litCodeTable = this.generateHuffmanTable( - codeLengths.subarray(0, numLitCodes), + codeLengths.subarray(0, numLitCodes) ); distCodeTable = this.generateHuffmanTable( - codeLengths.subarray(numLitCodes, codes), + codeLengths.subarray(numLitCodes, codes) ); } else { throw new FormatError("Unknown block type in flate stream"); @@ -6662,13 +6662,13 @@ function decodeBitmap( prediction, skip, at, - decodingContext, + decodingContext ) { if (mmr) { const input = new Reader( decodingContext.data, decodingContext.start, - decodingContext.end, + decodingContext.end ); return decodeMMRBitmap(input, width, height, false); } @@ -6801,7 +6801,7 @@ function decodeRefinement( offsetY, prediction, at, - decodingContext, + decodingContext ) { let codingTemplate = RefinementTemplates[templateIndex].coding; if (templateIndex === 0) { @@ -6882,7 +6882,7 @@ function decodeSymbolDictionary( refinementTemplateIndex, refinementAt, decodingContext, - huffmanInput, + huffmanInput ) { if (huffman && refinement) { throw new Jbig2Error("symbol refinement with Huffman is not supported"); @@ -6938,7 +6938,7 @@ function decodeSymbolDictionary( refinementAt, decodingContext, 0, - huffmanInput, + huffmanInput ); } else { const symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); @@ -6957,7 +6957,7 @@ function decodeSymbolDictionary( rdy, false, refinementAt, - decodingContext, + decodingContext ); } newSymbols.push(bitmap); @@ -6972,7 +6972,7 @@ function decodeSymbolDictionary( false, null, at, - decodingContext, + decodingContext ); newSymbols.push(bitmap); } @@ -6985,7 +6985,7 @@ function decodeSymbolDictionary( collectiveBitmap = readUncompressedBitmap( huffmanInput, totalWidth, - currentHeight, + currentHeight ); } else { const originalEnd = huffmanInput.end; @@ -6995,7 +6995,7 @@ function decodeSymbolDictionary( huffmanInput, totalWidth, currentHeight, - false, + false ); huffmanInput.end = originalEnd; huffmanInput.position = bitmapEnd; @@ -7069,7 +7069,7 @@ function decodeTextRegion( refinementAt, decodingContext, logStripSize, - huffmanInput, + huffmanInput ) { if (huffman && refinement) { throw new Jbig2Error("refinement with Huffman is not supported"); @@ -7137,7 +7137,7 @@ function decodeTextRegion( (rdh >> 1) + rdy, false, refinementAt, - decodingContext, + decodingContext ); } let increment = 0; @@ -7176,7 +7176,7 @@ function decodeTextRegion( break; default: throw new Jbig2Error( - `operator ${combinationOperator} is not supported`, + `operator ${combinationOperator} is not supported` ); } } @@ -7200,7 +7200,7 @@ function decodeTextRegion( break; default: throw new Jbig2Error( - `operator ${combinationOperator} is not supported`, + `operator ${combinationOperator} is not supported` ); } } @@ -7223,7 +7223,7 @@ function decodePatternDictionary( patternHeight, maxPatternIndex, template, - decodingContext, + decodingContext ) { const at = []; if (!mmr) { @@ -7244,7 +7244,7 @@ function decodePatternDictionary( { x: -2, y: -2, - }, + } ); } } @@ -7257,7 +7257,7 @@ function decodePatternDictionary( false, null, at, - decodingContext, + decodingContext ); const patterns = []; for (let i = 0; i <= maxPatternIndex; i++) { @@ -7286,7 +7286,7 @@ function decodeHalftoneRegion( gridOffsetY, gridVectorX, gridVectorY, - decodingContext, + decodingContext ) { const skip = null; if (enableSkip) { @@ -7294,7 +7294,7 @@ function decodeHalftoneRegion( } if (combinationOperator !== 0) { throw new Jbig2Error( - `operator "${combinationOperator}" is not supported in halftone region`, + `operator "${combinationOperator}" is not supported in halftone region` ); } const regionBitmap = []; @@ -7332,7 +7332,7 @@ function decodeHalftoneRegion( { x: -2, y: -2, - }, + } ); } } @@ -7342,7 +7342,7 @@ function decodeHalftoneRegion( mmrInput = new Reader( decodingContext.data, decodingContext.start, - decodingContext.end, + decodingContext.end ); } for (i = bitsPerValue - 1; i >= 0; i--) { @@ -7357,7 +7357,7 @@ function decodeHalftoneRegion( false, skip, at, - decodingContext, + decodingContext ); } grayScaleBitPlanes[i] = bitmap; @@ -7735,7 +7735,7 @@ function processSegment(segment, visitor) { break; default: throw new Jbig2Error( - `segment type ${header.typeName}(${header.type}) is not implemented`, + `segment type ${header.typeName}(${header.type}) is not implemented` ); } const callbackName = "on" + header.typeName; @@ -7819,7 +7819,7 @@ class SimpleSegmentVisitor { break; default: throw new Jbig2Error( - `operator ${combinationOperator} is not supported`, + `operator ${combinationOperator} is not supported` ); } } @@ -7834,7 +7834,7 @@ class SimpleSegmentVisitor { region.prediction, null, region.at, - decodingContext, + decodingContext ); this.drawBitmap(regionInfo, bitmap); } @@ -7847,14 +7847,14 @@ class SimpleSegmentVisitor { referredSegments, data, start, - end, + end ) { let huffmanTables, huffmanInput; if (dictionary.huffman) { huffmanTables = getSymbolDictionaryHuffmanTables( dictionary, referredSegments, - this.customTables, + this.customTables ); huffmanInput = new Reader(data, start, end); } @@ -7882,7 +7882,7 @@ class SimpleSegmentVisitor { dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, - huffmanInput, + huffmanInput ); } onImmediateTextRegion(region, referredSegments, data, start, end) { @@ -7904,7 +7904,7 @@ class SimpleSegmentVisitor { referredSegments, this.customTables, inputSymbols.length, - huffmanInput, + huffmanInput ); } const decodingContext = new DecodingContext(data, start, end); @@ -7927,7 +7927,7 @@ class SimpleSegmentVisitor { region.refinementAt, decodingContext, region.logStripSize, - huffmanInput, + huffmanInput ); this.drawBitmap(regionInfo, bitmap); } @@ -7946,7 +7946,7 @@ class SimpleSegmentVisitor { dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, - decodingContext, + decodingContext ); } onImmediateHalftoneRegion(region, referredSegments, data, start, end) { @@ -7968,7 +7968,7 @@ class SimpleSegmentVisitor { region.gridOffsetY, region.gridVectorX, region.gridVectorY, - decodingContext, + decodingContext ); this.drawBitmap(regionInfo, bitmap); } @@ -8105,7 +8105,7 @@ function decodeTablesSegment(data, start, end) { prefixLength = reader.readBits(prefixSizeBits); rangeLength = reader.readBits(rangeSizeBits); lines.push( - new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0]), + new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0]) ); currentRangeLow += 1 << rangeLength; } while (currentRangeLow < highestValue); @@ -8438,7 +8438,7 @@ function getTextRegionHuffmanTables( referredTo, customTables, numberOfSymbols, - reader, + reader ) { const codes = []; for (let i = 0; i <= 34; i++) { @@ -8494,7 +8494,7 @@ function getTextRegionHuffmanTables( tableFirstS = getCustomHuffmanTable( customIndex, referredTo, - customTables, + customTables ); customIndex++; break; @@ -8511,7 +8511,7 @@ function getTextRegionHuffmanTables( tableDeltaS = getCustomHuffmanTable( customIndex, referredTo, - customTables, + customTables ); customIndex++; break; @@ -8528,7 +8528,7 @@ function getTextRegionHuffmanTables( tableDeltaT = getCustomHuffmanTable( customIndex, referredTo, - customTables, + customTables ); customIndex++; break; @@ -8548,7 +8548,7 @@ function getTextRegionHuffmanTables( function getSymbolDictionaryHuffmanTables( dictionary, referredTo, - customTables, + customTables ) { let customIndex = 0, tableDeltaHeight, @@ -8562,7 +8562,7 @@ function getSymbolDictionaryHuffmanTables( tableDeltaHeight = getCustomHuffmanTable( customIndex, referredTo, - customTables, + customTables ); customIndex++; break; @@ -8578,7 +8578,7 @@ function getSymbolDictionaryHuffmanTables( tableDeltaWidth = getCustomHuffmanTable( customIndex, referredTo, - customTables, + customTables ); customIndex++; break; @@ -8590,7 +8590,7 @@ function getSymbolDictionaryHuffmanTables( tableBitmapSize = getCustomHuffmanTable( customIndex, referredTo, - customTables, + customTables ); customIndex++; } else { @@ -8600,7 +8600,7 @@ function getSymbolDictionaryHuffmanTables( tableAggregateInstances = getCustomHuffmanTable( customIndex, referredTo, - customTables, + customTables ); } else { tableAggregateInstances = getStandardTable(1); @@ -8894,7 +8894,7 @@ function buildHuffmanTable(codeLengths, values) { (q = { children: [], index: 0, - }), + }) ); p.children[p.index] = q.children; p = q; @@ -8906,7 +8906,7 @@ function buildHuffmanTable(codeLengths, values) { (q = { children: [], index: 0, - }), + }) ); p.children[p.index] = q.children; p = q; @@ -8927,7 +8927,7 @@ function decodeScan( spectralEnd, successivePrev, successive, - parseDNLMarker = false, + parseDNLMarker = false ) { const mcusPerLine = frame.mcusPerLine; const progressive = frame.progressive; @@ -8950,7 +8950,7 @@ function decodeScan( if (scanLines > 0 && scanLines !== frame.scanLines) { throw new DNLMarkerError( "Found DNL marker (0xFFDC) while parsing scan data", - scanLines, + scanLines ); } } else if (nextByte === 0xd9) { @@ -8963,16 +8963,16 @@ function decodeScan( throw new DNLMarkerError( "Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", - maybeScanLines, + maybeScanLines ); } } throw new EOIMarkerError( - "Found EOI marker (0xFFD9) while parsing scan data", + "Found EOI marker (0xFFD9) while parsing scan data" ); } throw new JpegError( - `unexpected marker ${((bitsData << 8) | nextByte).toString(16)}`, + `unexpected marker ${((bitsData << 8) | nextByte).toString(16)}` ); } } @@ -9206,7 +9206,7 @@ function decodeScan( if (fileMarker.invalid) { const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive"; warn( - `decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`, + `decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}` ); offset = fileMarker.offset; } @@ -9474,7 +9474,7 @@ class JpegImage { if (fileMarker?.invalid) { warn( "readDataBlock - incorrect length, current marker is: " + - fileMarker.invalid, + fileMarker.invalid ); endOffset = fileMarker.offset; } @@ -9487,10 +9487,10 @@ class JpegImage { const mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); for (const component of frame.components) { const blocksPerLine = Math.ceil( - (Math.ceil(frame.samplesPerLine / 8) * component.h) / frame.maxH, + (Math.ceil(frame.samplesPerLine / 8) * component.h) / frame.maxH ); const blocksPerColumn = Math.ceil( - (Math.ceil(frame.scanLines / 8) * component.v) / frame.maxV, + (Math.ceil(frame.scanLines / 8) * component.v) / frame.maxV ); const blocksPerLineForMcu = mcusPerLine * component.h; const blocksPerColumnForMcu = mcusPerColumn * component.v; @@ -9559,7 +9559,7 @@ class JpegImage { thumbHeight: appData[13], thumbData: appData.subarray( 14, - 14 + 3 * appData[12] * appData[13], + 14 + 3 * appData[12] * appData[13] ), }; } @@ -9705,7 +9705,7 @@ class JpegImage { spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, - parseDNLMarker, + parseDNLMarker ); offset += processed; } catch (ex) { @@ -9733,12 +9733,12 @@ class JpegImage { const nextFileMarker = findNextFileMarker( data, offset - 2, - offset - 3, + offset - 3 ); if (nextFileMarker?.invalid) { warn( "JpegImage.parse - unexpected data, current marker is: " + - nextFileMarker.invalid, + nextFileMarker.invalid ); offset = nextFileMarker.offset; break; @@ -9746,12 +9746,12 @@ class JpegImage { if (!nextFileMarker || offset >= data.length - 1) { warn( "JpegImage.parse - reached the end of the image data " + - "without finding an EOI marker (0xFFD9).", + "without finding an EOI marker (0xFFD9)." ); break markerLoop; } throw new JpegError( - "JpegImage.parse - unknown marker: " + fileMarker.toString(16), + "JpegImage.parse - unknown marker: " + fileMarker.toString(16) ); } fileMarker = readUint16(data, offset); @@ -10287,7 +10287,7 @@ var OpenJPEG = (() => { var ENVIRONMENT_IS_WORKER = false; Module.decode = function ( bytes, - { numComponents = 4, isIndexedColormap = false, smaskInData = false }, + { numComponents = 4, isIndexedColormap = false, smaskInData = false } ) { const size = bytes.length; const ptr = Module._malloc(size); @@ -10297,7 +10297,7 @@ var OpenJPEG = (() => { size, numComponents > 0 ? numComponents : 0, !!isIndexedColormap, - !!smaskInData, + !!smaskInData ); Module._free(ptr); if (ret) { @@ -10334,7 +10334,7 @@ var OpenJPEG = (() => { } else { scriptDirectory = scriptDirectory.substr( 0, - scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1, + scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1 ); } read_ = (url) => { @@ -10361,7 +10361,7 @@ var OpenJPEG = (() => { return response.arrayBuffer(); } return Promise.reject( - new Error(response.status + " : " + response.url), + new Error(response.status + " : " + response.url) ); }) .then(onload, onerror); @@ -10539,7 +10539,7 @@ var OpenJPEG = (() => { compG_ptr >>= 2; compB_ptr >>= 2; const imageData = (Module.imageData = new Uint8ClampedArray( - nb_pixels * 3, + nb_pixels * 3 )); const compR = Module.HEAP32.subarray(compR_ptr, compR_ptr + nb_pixels); const compG = Module.HEAP32.subarray(compG_ptr, compG_ptr + nb_pixels); @@ -10555,14 +10555,14 @@ var OpenJPEG = (() => { compG_ptr, compB_ptr, compA_ptr, - nb_pixels, + nb_pixels ) { compR_ptr >>= 2; compG_ptr >>= 2; compB_ptr >>= 2; compA_ptr >>= 2; const imageData = (Module.imageData = new Uint8ClampedArray( - nb_pixels * 4, + nb_pixels * 4 )); const compR = Module.HEAP32.subarray(compR_ptr, compR_ptr + nb_pixels); const compG = Module.HEAP32.subarray(compG_ptr, compG_ptr + nb_pixels); @@ -10598,11 +10598,11 @@ var OpenJPEG = (() => { var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); overGrownHeapSize = Math.min( overGrownHeapSize, - requestedSize + 100663296, + requestedSize + 100663296 ); var newSize = Math.min( maxHeapSize, - alignUp(Math.max(requestedSize, overGrownHeapSize), 65536), + alignUp(Math.max(requestedSize, overGrownHeapSize), 65536) ); var replacement = growMemory(newSize); if (replacement) { @@ -10745,7 +10745,7 @@ var OpenJPEG = (() => { function _gray_to_rgba(compG_ptr, nb_pixels) { compG_ptr >>= 2; const imageData = (Module.imageData = new Uint8ClampedArray( - nb_pixels * 4, + nb_pixels * 4 )); const compG = Module.HEAP32.subarray(compG_ptr, compG_ptr + nb_pixels); for (let i = 0; i < nb_pixels; i++) { @@ -10760,7 +10760,7 @@ var OpenJPEG = (() => { compG_ptr >>= 2; compA_ptr >>= 2; const imageData = (Module.imageData = new Uint8ClampedArray( - nb_pixels * 4, + nb_pixels * 4 )); const compG = Module.HEAP32.subarray(compG_ptr, compG_ptr + nb_pixels); const compA = Module.HEAP32.subarray(compA_ptr, compA_ptr + nb_pixels); @@ -10781,7 +10781,7 @@ var OpenJPEG = (() => { compG_ptr >>= 2; compB_ptr >>= 2; const imageData = (Module.imageData = new Uint8ClampedArray( - nb_pixels * 4, + nb_pixels * 4 )); const compR = Module.HEAP32.subarray(compR_ptr, compR_ptr + nb_pixels); const compG = Module.HEAP32.subarray(compG_ptr, compG_ptr + nb_pixels); @@ -11046,7 +11046,7 @@ class LZWStream extends DecodeStream { ? codeLength : Math.min( Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, - 12, + 12 ) | 0; } prevCode = code; @@ -11451,13 +11451,13 @@ class Parser { } if (!knownCommands) { warn( - "findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.", + "findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined." ); continue; } const tmpLexer = new Lexer( new Stream(followingBytes.slice()), - knownCommands, + knownCommands ); tmpLexer._hexStringWarn = () => {}; let numArgs = 0; @@ -11495,7 +11495,7 @@ class Parser { if (ch === -1) { warn( "findDefaultInlineStreamEnd: " + - "Reached the end of the stream without finding a valid EI marker", + "Reached the end of the stream without finding a valid EI marker" ); if (maybeEIPos) { warn('... trying to recover by using the last "EI" occurrence.'); @@ -11583,7 +11583,7 @@ class Parser { if (b === -1) { warn( "Inline DCTDecode image stream: " + - "EOI marker not found, searching for /EI/ instead.", + "EOI marker not found, searching for /EI/ instead." ); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); @@ -11620,7 +11620,7 @@ class Parser { if (ch === -1) { warn( "Inline ASCII85Decode image stream: " + - "EOD marker not found, searching for /EI/ instead.", + "EOD marker not found, searching for /EI/ instead." ); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); @@ -11641,7 +11641,7 @@ class Parser { if (ch === -1) { warn( "Inline ASCIIHexDecode image stream: " + - "EOD marker not found, searching for /EI/ instead.", + "EOD marker not found, searching for /EI/ instead." ); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); @@ -11785,7 +11785,7 @@ class Parser { if (isWhiteSpace(lastByte)) { info( `Found "${bytesToString([...END_SIGNATURE, ...part])}" when ` + - "searching for endstream command.", + "searching for endstream command." ); found = true; } @@ -11876,7 +11876,7 @@ class Parser { return new PredictorStream( new FlateStream(stream, maybeLength), maybeLength, - params, + params ); } return new FlateStream(stream, maybeLength); @@ -11890,7 +11890,7 @@ class Parser { return new PredictorStream( new LZWStream(stream, maybeLength, earlyChange), maybeLength, - params, + params ); } return new LZWStream(stream, maybeLength, earlyChange); @@ -12144,7 +12144,7 @@ class Lexer { if (specialChars[ch]) { warn( "Lexer_getName: " + - "NUMBER SIGN (#) should be followed by a hexadecimal number.", + "NUMBER SIGN (#) should be followed by a hexadecimal number." ); strBuf.push("#"); break; @@ -12157,7 +12157,7 @@ class Lexer { if (x2 === -1) { warn( `Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + - "in hexadecimal number.", + "in hexadecimal number." ); strBuf.push("#", String.fromCharCode(previousCh)); if (specialChars[ch]) { @@ -12358,7 +12358,7 @@ class Linearization { } throw new Error( `The "${name}" parameter in the linearization ` + - "dictionary is invalid.", + "dictionary is invalid." ); } function getHints(linDict) { @@ -12372,7 +12372,7 @@ class Linearization { const hint = hints[index]; if (!(Number.isInteger(hint) && hint > 0)) { throw new Error( - `Hint (${index}) in the linearization dictionary is invalid.`, + `Hint (${index}) in the linearization dictionary is invalid.` ); } } @@ -12403,7 +12403,7 @@ class Linearization { } else if ((length = getInt(linDict, "L")) !== stream.length) { throw new Error( 'The "L" parameter in the linearization dictionary ' + - "does not equal the stream length.", + "does not equal the stream length." ); } return { @@ -13002,7 +13002,7 @@ async function createBuiltInCMap(name, fetchBuiltInCMap) { const cMap = new CMap(true); if (compressionType === CMapCompressionType.BINARY) { return new BinaryCMapReader().process(cMapData, cMap, (useCMap) => - extendCMap(cMap, fetchBuiltInCMap, useCMap), + extendCMap(cMap, fetchBuiltInCMap, useCMap) ); } if (compressionType === CMapCompressionType.NONE) { @@ -13020,7 +13020,7 @@ class CMapFactory { new CMap(), new Lexer(encoding), fetchBuiltInCMap, - useCMap, + useCMap ); if (parsedCMap.isIdentityCMap) { return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap); @@ -16067,7 +16067,7 @@ class CFFParser { const fontDict = this.createDict( CFFTopDict, this.parseDict(dictRaw), - cff.strings, + cff.strings ); this.parsePrivateDict(fontDict); cff.fdArray.push(fontDict); @@ -16077,24 +16077,24 @@ class CFFParser { topDict.getByName("charset"), charStringIndex.count, cff.strings, - true, + true ); cff.fdSelect = this.parseFDSelect( topDict.getByName("FDSelect"), - charStringIndex.count, + charStringIndex.count ); } else { charset = this.parseCharsets( topDict.getByName("charset"), charStringIndex.count, cff.strings, - false, + false ); encoding = this.parseEncoding( topDict.getByName("Encoding"), properties, cff.strings, - charset.charset, + charset.charset ); } cff.charset = charset; @@ -16362,7 +16362,7 @@ class CFFParser { state, subrsIndex.get(subrNumber), localSubrIndex, - globalSubrIndex, + globalSubrIndex ); if (!valid) { return false; @@ -16402,7 +16402,7 @@ class CFFParser { "; actual: " + stackSize + ", expected: " + - validationCommand.min, + validationCommand.min ); if (stackSize === 0) { data[j - 1] = 14; @@ -16495,7 +16495,7 @@ class CFFParser { state, charstring, localSubrToUse, - globalSubrIndex, + globalSubrIndex ); } if (state.width !== null) { @@ -16545,7 +16545,7 @@ class CFFParser { const privateDict = this.createDict( CFFPrivateDict, dict, - parentDict.strings, + parentDict.strings ); parentDict.privateDict = privateDict; if (privateDict.getByName("ExpansionFactor") === 0) { @@ -16568,19 +16568,19 @@ class CFFParser { return new CFFCharset( true, CFFCharsetPredefinedTypes.ISO_ADOBE, - ISOAdobeCharset, + ISOAdobeCharset ); } else if (pos === 1) { return new CFFCharset( true, CFFCharsetPredefinedTypes.EXPERT, - ExpertCharset, + ExpertCharset ); } else if (pos === 2) { return new CFFCharset( true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, - ExpertSubsetCharset, + ExpertSubsetCharset ); } const bytes = this.bytes; @@ -16698,7 +16698,7 @@ class CFFParser { if (i === 0 && first !== 0) { warn( "parseFDSelect: The first range must have a first GID of 0" + - " -- trying to recover.", + " -- trying to recover." ); first = 0; } @@ -17091,7 +17091,7 @@ class CFFCompiler { let compiled = this.compileTopDicts( [cff.topDict], output.length, - cff.isCIDFont, + cff.isCIDFont ); output.add(compiled.output); const topDictTracker = compiled.trackers[0]; @@ -17104,7 +17104,7 @@ class CFFCompiler { topDictTracker.setEntryLocation( "Encoding", [cff.encoding.format], - output, + output ); } else { const encoding = this.compileEncoding(cff.encoding); @@ -17116,7 +17116,7 @@ class CFFCompiler { cff.charset, cff.charStrings.count, cff.strings, - cff.isCIDFont, + cff.isCIDFont ); topDictTracker.setEntryLocation("charset", [output.length], output); output.add(charset); @@ -17147,7 +17147,7 @@ class CFFCompiler { return shadow( this, "EncodeFloatRegExp", - /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/, + /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/ ); } encodeFloat(num) { @@ -17277,7 +17277,7 @@ class CFFCompiler { trackers[i].setEntryLocation( "Private", [privateDictData.length, outputLength], - output, + output ); output.add(privateDictData); if (privateDict.subrsIndex && privateDict.hasName("Subrs")) { @@ -17285,7 +17285,7 @@ class CFFCompiler { privateDictTracker.setEntryLocation( "Subrs", [privateDictData.length], - output, + output ); output.add(subrs); } @@ -17471,14 +17471,14 @@ class CFFCompiler { data.push( (relativeOffset >> 16) & 0xff, (relativeOffset >> 8) & 0xff, - relativeOffset & 0xff, + relativeOffset & 0xff ); } else { data.push( (relativeOffset >>> 24) & 0xff, (relativeOffset >> 16) & 0xff, (relativeOffset >> 8) & 0xff, - relativeOffset & 0xff, + relativeOffset & 0xff ); } if (objects[i]) { @@ -23319,7 +23319,7 @@ const getSupplementalGlyphMapForArialBlack = getLookupTableFactory( t[227] = 322; t[264] = 261; t[291] = 346; - }, + } ); const getSupplementalGlyphMapForCalibri = getLookupTableFactory(function (t) { t[1] = 32; @@ -23703,7 +23703,7 @@ function parseCff(data, start, end, seacAnalysisEnabled) { const parser = new CFFParser( new Stream(data, start, end - start), properties, - seacAnalysisEnabled, + seacAnalysisEnabled ); const cff = parser.parse(); return { @@ -23916,7 +23916,7 @@ function compileGlyf(code, cmds, font) { contour[j].x, contour[j].y, contour[j + 1].x, - contour[j + 1].y, + contour[j + 1].y ); j++; } else { @@ -23924,7 +23924,7 @@ function compileGlyf(code, cmds, font) { contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, - (contour[j].y + contour[j + 1].y) / 2, + (contour[j].y + contour[j + 1].y) / 2 ); } } @@ -24114,24 +24114,24 @@ function compileCharString(charStringCode, cmds, font, glyphId) { cmds.add(FontRenderOps.TRANSLATE, [x, y]); let cmap = lookupCmap( font.cmap, - String.fromCharCode(font.glyphNameMap[StandardEncoding[achar]]), + String.fromCharCode(font.glyphNameMap[StandardEncoding[achar]]) ); compileCharString( font.glyphs[cmap.glyphId], cmds, font, - cmap.glyphId, + cmap.glyphId ); cmds.add(FontRenderOps.RESTORE); cmap = lookupCmap( font.cmap, - String.fromCharCode(font.glyphNameMap[StandardEncoding[bchar]]), + String.fromCharCode(font.glyphNameMap[StandardEncoding[bchar]]) ); compileCharString( font.glyphs[cmap.glyphId], cmds, font, - cmap.glyphId, + cmap.glyphId ); } return; @@ -24289,7 +24289,7 @@ function compileCharString(charStringCode, cmds, font, glyphId) { (code[i + 1] << 16) | (code[i + 2] << 8) | code[i + 3]) / - 65536, + 65536 ); i += 4; } @@ -24309,7 +24309,7 @@ class Commands { if (args) { if (!isNumberArray(args, null)) { warn( - `Commands.add - "${cmd}" has at least one non-number arg: "${args}".`, + `Commands.add - "${cmd}" has at least one non-number arg: "${args}".` ); const newArgs = args.map((arg) => (typeof arg === "number" ? arg : 0)); this.cmds.push(cmd, ...newArgs); @@ -24445,7 +24445,7 @@ class FontRendererFactory { return new TrueTypeCompiled( parseGlyfTable(glyf, loca, indexToLocFormat), cmap, - fontMatrix, + fontMatrix ); } return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap); @@ -27497,12 +27497,12 @@ class GlyfTable { const loca = new DataView( locaTable.buffer, locaTable.byteOffset, - locaTable.byteLength, + locaTable.byteLength ); const glyf = new DataView( glyfTable.buffer, glyfTable.byteOffset, - glyfTable.byteLength, + glyfTable.byteLength ); const offsetSize = isGlyphLocationsLong ? 4 : 2; let prev = isGlyphLocationsLong ? loca.getUint32(0) : 2 * loca.getUint16(0); @@ -27533,7 +27533,7 @@ class GlyfTable { const isLocationLong = totalSize > 0x1fffe; const offsetSize = isLocationLong ? 4 : 2; const locaTable = new DataView( - new ArrayBuffer((this.glyphs.length + 1) * offsetSize), + new ArrayBuffer((this.glyphs.length + 1) * offsetSize) ); if (isLocationLong) { locaTable.setUint32(0, 0); @@ -27693,7 +27693,7 @@ class SimpleGlyph { pos += 2; const instructions = new Uint8Array(glyf).slice( pos, - pos + instructionLength, + pos + instructionLength ); pos += instructionLength; const flags = []; @@ -27759,7 +27759,7 @@ class SimpleGlyph { flags: pointFlags, xCoordinates, yCoordinates, - }), + }) ); yCoordinates = []; pointFlags = []; @@ -27853,7 +27853,7 @@ class SimpleGlyph { if (this.instructions.length) { new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set( this.instructions, - pos, + pos ); pos += this.instructions.length; } @@ -27889,7 +27889,7 @@ class SimpleGlyph { } for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { contour.xCoordinates[i] = Math.round( - x + (contour.xCoordinates[i] - x) * factor, + x + (contour.xCoordinates[i] - x) * factor ); } } @@ -27949,7 +27949,7 @@ class CompositeGlyph { glyf.getUint16(pos), glyf.getUint16(pos + 2), glyf.getUint16(pos + 4), - glyf.getUint16(pos + 6), + glyf.getUint16(pos + 6) ); pos += 8; } @@ -28047,7 +28047,7 @@ class CompositeGlyph { if (this.instructions.length) { new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set( this.instructions, - pos, + pos ); pos += this.instructions.length; } @@ -28358,7 +28358,7 @@ class Type1CharString { flexArgs[11], flexArgs[12], flexArgs[13], - flexArgs[14], + flexArgs[14] ); error = this.executeCommand(13, COMMAND_MAP.flex, true); this.flexing = false; @@ -28414,7 +28414,7 @@ class Type1CharString { (value >> 24) & 0xff, (value >> 16) & 0xff, (value >> 8) & 0xff, - value & 0xff, + value & 0xff ); } } @@ -28511,7 +28511,7 @@ class Type1Parser { stream = new Stream( isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) - : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4), + : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4) ); } this.seacAnalysisEnabled = !!seacAnalysisEnabled; @@ -28695,7 +28695,7 @@ class Type1Parser { const error = charString.convert( encoded, subrs, - this.seacAnalysisEnabled, + this.seacAnalysisEnabled ); let output = charString.output; if (error) { @@ -28817,7 +28817,7 @@ function getHeaderBlock(stream, suggestedLength) { block = findBlock( headerBytes, EEXEC_SIGNATURE, - suggestedLength - 2 * EEXEC_SIGNATURE.length, + suggestedLength - 2 * EEXEC_SIGNATURE.length ); if (block.found && block.length === suggestedLength) { return { @@ -28884,7 +28884,7 @@ class Type1Font { const headerBlockParser = new Type1Parser( headerBlock.stream, false, - SEAC_ANALYSIS_ENABLED, + SEAC_ANALYSIS_ENABLED ); headerBlockParser.extractFontHeader(properties); if (pfbHeaderPresent) { @@ -28899,7 +28899,7 @@ class Type1Font { const eexecBlockParser = new Type1Parser( eexecBlock.stream, true, - SEAC_ANALYSIS_ENABLED, + SEAC_ANALYSIS_ENABLED ); const data = eexecBlockParser.extractFontProgram(properties); for (const key in data.properties) { @@ -28914,7 +28914,7 @@ class Type1Font { type2Charstrings, this.charstrings, subrs, - properties, + properties ); this.seacs = this.getSeacs(data.charstrings); } @@ -29257,7 +29257,7 @@ class fonts_Glyph { vmetric, operatorListId, isSpace, - isInFont, + isInFont ) { this.originalCharCode = originalCharCode; this.fontChar = fontChar; @@ -29672,7 +29672,7 @@ function createOS2Table(properties, charstrings, override) { ulUnicodeRange4 |= 1 << (position - 96); } else { throw new FormatError( - "Unicode ranges Bits > 123 are reserved for internal usage", + "Unicode ranges Bits > 123 are reserved for internal usage" ); } } @@ -29897,7 +29897,7 @@ class Font { if (type !== this.type || subtype !== this.subtype) { info( "Inconsistent font file Type/SubType, expected: " + - `${this.type}/${this.subtype} but found: ${type}/${subtype}.`, + `${this.type}/${this.subtype} but found: ${type}/${subtype}.` ); } let data; @@ -30035,19 +30035,19 @@ class Font { this.toFontChar = buildToFontChar( SymbolSetEncoding, getGlyphsUnicode(), - this.differences, + this.differences ); } else if (/Dingbats/i.test(fontName)) { this.toFontChar = buildToFontChar( ZapfDingbatsEncoding, getDingbatsGlyphsUnicode(), - this.differences, + this.differences ); } else if (isStandardFont) { const map = buildToFontChar( this.defaultEncoding, getGlyphsUnicode(), - this.differences, + this.differences ); if ( type === "CIDFontType2" && @@ -30180,7 +30180,7 @@ class Font { return header; } throw new FormatError( - `Invalid TrueType Collection majorVersion: ${majorVersion}.`, + `Invalid TrueType Collection majorVersion: ${majorVersion}.` ); } function readTrueTypeCollectionData(ttc, fontName) { @@ -30193,7 +30193,7 @@ class Font { const potentialTables = readTables(ttc, potentialHeader.numTables); if (!potentialTables.name) { throw new FormatError( - 'TrueType Collection font must contain a "name" table.', + 'TrueType Collection font must contain a "name" table.' ); } const [nameTable] = readNameTable(potentialTables.name); @@ -30227,7 +30227,7 @@ class Font { if (fallbackData) { warn( `TrueType Collection does not contain "${fontName}" font, ` + - `falling back to "${fallbackData.name}" font instead.`, + `falling back to "${fallbackData.name}" font instead.` ); return { header: fallbackData.header, @@ -30235,7 +30235,7 @@ class Font { }; } throw new FormatError( - `TrueType Collection does not contain "${fontName}" font.`, + `TrueType Collection does not contain "${fontName}" font.` ); } function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) { @@ -30409,7 +30409,7 @@ class Font { segment.offsetIndex = offsetIndex; offsetsCount = Math.max( offsetsCount, - offsetIndex + segment.end - segment.start + 1, + offsetIndex + segment.end - segment.start + 1 ); } const offsets = []; @@ -30495,7 +30495,7 @@ class Font { metrics, headTable, numGlyphs, - dupFirstEntry, + dupFirstEntry ) { if (!header) { if (metrics) { @@ -30528,7 +30528,7 @@ class Font { if (numOfMetrics > numGlyphs) { info( `The numOfMetrics (${numOfMetrics}) should not be ` + - `greater than the numGlyphs (${numGlyphs}).`, + `greater than the numGlyphs (${numGlyphs}).` ); numOfMetrics = numGlyphs; header.data[34] = (numOfMetrics & 0xff00) >> 8; @@ -30553,7 +30553,7 @@ class Font { sourceEnd, dest, destStart, - hintsValid, + hintsValid ) { const glyphProfile = { length: 0, @@ -30643,7 +30643,7 @@ class Font { dest.set([0, 0], destStart + instructionsStart); dest.set( glyf.subarray(instructionsEnd, glyphDataLength), - destStart + instructionsStart + 2, + destStart + instructionsStart + 2 ); glyphDataLength -= instructionsLength; if (glyf.length - glyphDataLength > 3) { @@ -30676,7 +30676,7 @@ class Font { if (indexToLocFormat < 0 || indexToLocFormat > 1) { info( "Attempting to fix invalid indexToLocFormat in head table: " + - indexToLocFormat, + indexToLocFormat ); const numGlyphsPlusOne = numGlyphs + 1; if (locaLength === numGlyphsPlusOne << 1) { @@ -30687,7 +30687,7 @@ class Font { data[51] = 1; } else { throw new FormatError( - "Could not fix indexToLocFormat: " + indexToLocFormat, + "Could not fix indexToLocFormat: " + indexToLocFormat ); } } @@ -30699,7 +30699,7 @@ class Font { isGlyphLocationsLong, hintsValid, dupFirstEntry, - maxSizeOfInstructions, + maxSizeOfInstructions ) { let itemSize, itemDecode, itemEncode; if (isGlyphLocationsLong) { @@ -30780,7 +30780,7 @@ class Font { locaEntries[i].endOffset, newGlyfData, writeOffset, - hintsValid, + hintsValid ); const newLength = glyphProfile.length; if (newLength === 0) { @@ -30812,7 +30812,7 @@ class Font { itemEncode( loca.data, locaData.length - itemSize, - writeOffset + firstEntryLength, + writeOffset + firstEntryLength ); } else { glyf.data = newGlyfData.subarray(0, writeOffset); @@ -31263,7 +31263,7 @@ class Font { const { scaleFactors } = properties; const isGlyphLocationsLong = int16( tables.head.data[50], - tables.head.data[51], + tables.head.data[51] ); const glyphs = new GlyfTable({ glyfTable: tables.glyf.data, @@ -31283,12 +31283,12 @@ class Font { for (let i = 0; i < numGlyphs; i++) { const j = 4 * i; const advanceWidth = Math.round( - scaleFactors[i] * int16(metrics[j], metrics[j + 1]), + scaleFactors[i] * int16(metrics[j], metrics[j + 1]) ); metrics[j] = (advanceWidth >> 8) & 0xff; metrics[j + 1] = advanceWidth & 0xff; const lsb = Math.round( - scaleFactors[i] * signedInt16(metrics[j + 2], metrics[j + 3]), + scaleFactors[i] * signedInt16(metrics[j + 2], metrics[j + 3]) ); writeSignedInt16(metrics, j + 2, lsb); } @@ -31320,7 +31320,7 @@ class Font { tables.fpgm, tables.prep, tables["cvt "], - maxFunctionDefs, + maxFunctionDefs ); if (!hintsValid) { delete tables.fpgm; @@ -31333,7 +31333,7 @@ class Font { tables.hmtx, tables.head, numGlyphsOut, - dupFirstEntry, + dupFirstEntry ); if (!tables.head) { throw new FormatError('Required "head" table is not found'); @@ -31343,7 +31343,7 @@ class Font { if (isTrueType) { const isGlyphLocationsLong = int16( tables.head.data[50], - tables.head.data[51], + tables.head.data[51] ); const glyphsInfo = sanitizeGlyphLocations( tables.loca, @@ -31352,7 +31352,7 @@ class Font { isGlyphLocationsLong, hintsValid, dupFirstEntry, - maxSizeOfInstructions, + maxSizeOfInstructions ); missingGlyphs = glyphsInfo.missingGlyphs; if (version >= 0x00010000 && tables.maxp.length >= 32) { @@ -31420,7 +31420,7 @@ class Font { tables.cmap, font, this.isSymbolicFont, - properties.hasEncoding, + properties.hasEncoding ); const cmapPlatformId = cmapTable.platformId; const cmapEncodingId = cmapTable.encodingId; @@ -31455,7 +31455,7 @@ class Font { } const standardGlyphName = recoverGlyphName( glyphName, - glyphsUnicodeMap, + glyphsUnicodeMap ); let unicodeOrCharCode; if (cmapPlatformId === 3 && cmapEncodingId === 1) { @@ -31535,7 +31535,7 @@ class Font { charCodeToGlyphId, hasGlyph, glyphZeroId, - this.toUnicode, + this.toUnicode ); this.toFontChar = newMapping.toFontChar; tables.cmap = { @@ -31543,7 +31543,7 @@ class Font { data: createCmapTable( newMapping.charCodeToGlyphId, newMapping.toUnicodeExtraMap, - numGlyphsOut, + numGlyphsOut ), }; if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) { @@ -31552,7 +31552,7 @@ class Font { data: createOS2Table( properties, newMapping.charCodeToGlyphId, - metricsOverride, + metricsOverride ), }; } @@ -31563,7 +31563,7 @@ class Font { const parser = new CFFParser( cffFile, properties, - SEAC_ANALYSIS_ENABLED, + SEAC_ANALYSIS_ENABLED ); cff = parser.parse(); cff.duplicateFirstGlyph(); @@ -31610,7 +31610,7 @@ class Font { mapping, font.hasGlyphId.bind(font), glyphZeroId, - this.toUnicode, + this.toUnicode ); this.toFontChar = newMapping.toFontChar; newCharCodeToGlyphId = newMapping.charCodeToGlyphId; @@ -31663,11 +31663,11 @@ class Font { const charCodeToGlyphId = newMapping.charCodeToGlyphId; const baseFontCharCode = createCharCode( charCodeToGlyphId, - baseGlyphId, + baseGlyphId ); const accentFontCharCode = createCharCode( charCodeToGlyphId, - accentGlyphId, + accentGlyphId ); seacMap[charCode] = { baseFontCharCode, @@ -31686,7 +31686,7 @@ class Font { builder.addTable("OS/2", createOS2Table(properties, newCharCodeToGlyphId)); builder.addTable( "cmap", - createCmapTable(newCharCodeToGlyphId, toUnicodeExtraMap, numGlyphs), + createCmapTable(newCharCodeToGlyphId, toUnicodeExtraMap, numGlyphs) ); builder.addTable( "head", @@ -31706,7 +31706,7 @@ class Font { "\x00\x11" + "\x00\x00" + "\x00\x00" + - "\x00\x00", + "\x00\x00" ); builder.addTable( "hhea", @@ -31726,7 +31726,7 @@ class Font { "\x00\x00" + "\x00\x00" + "\x00\x00" + - string16(numGlyphs), + string16(numGlyphs) ); builder.addTable( "hmtx", @@ -31745,7 +31745,7 @@ class Font { hmtx += string16(width) + string16(0); } return hmtx; - })(), + })() ); builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs)); builder.addTable("name", createNameTable(fontName)); @@ -31817,7 +31817,7 @@ class Font { vmetric, operatorListId, isSpace, - isInFont, + isInFont ); return (this._glyphCache[charcode] = glyph); } @@ -31837,7 +31837,7 @@ class Font { i += length; const glyph = this._charToGlyph( charcode, - length === 1 && chars.charCodeAt(i - 1) === 0x20, + length === 1 && chars.charCodeAt(i - 1) === 0x20 ); glyphs.push(glyph); } @@ -31947,7 +31947,7 @@ class Pattern { xref, res, pdfFunctionFactory, - localColorSpaceCache, + localColorSpaceCache ) { const dict = shading instanceof BaseStream ? shading.dict : shading; const type = dict.get("ShadingType"); @@ -31960,7 +31960,7 @@ class Pattern { xref, res, pdfFunctionFactory, - localColorSpaceCache, + localColorSpaceCache ); case ShadingType.FREE_FORM_MESH: case ShadingType.LATTICE_FORM_MESH: @@ -31971,7 +31971,7 @@ class Pattern { xref, res, pdfFunctionFactory, - localColorSpaceCache, + localColorSpaceCache ); default: throw new FormatError("Unsupported ShadingType: " + type); @@ -32252,7 +32252,7 @@ function buildB(count) { const t = i / count, t_ = 1 - t; lut.push( - new Float32Array([t_ ** 3, 3 * t * t_ ** 2, 3 * t ** 2 * t_, t ** 3]), + new Float32Array([t_ ** 3, 3 * t * t_ ** 2, 3 * t ** 2 * t_, t ** 3]) ); } return lut; @@ -32272,7 +32272,7 @@ class MeshShading extends BaseShading { xref, resources, pdfFunctionFactory, - localColorSpaceCache, + localColorSpaceCache ) { super(); if (!(stream instanceof BaseStream)) { @@ -32703,41 +32703,41 @@ class MeshShading extends BaseShading { coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], - coords[pi[15]][0], + coords[pi[15]][0] ); const figureMinY = Math.min( coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], - coords[pi[15]][1], + coords[pi[15]][1] ); const figureMaxX = Math.max( coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], - coords[pi[15]][0], + coords[pi[15]][0] ); const figureMaxY = Math.max( coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], - coords[pi[15]][1], + coords[pi[15]][1] ); let splitXBy = Math.ceil( ((figureMaxX - figureMinX) * MeshShading.TRIANGLE_DENSITY) / - (this.bounds[2] - this.bounds[0]), + (this.bounds[2] - this.bounds[0]) ); splitXBy = Math.max( MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, - Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy), + Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy) ); let splitYBy = Math.ceil( ((figureMaxY - figureMinY) * MeshShading.TRIANGLE_DENSITY) / - (this.bounds[3] - this.bounds[1]), + (this.bounds[3] - this.bounds[1]) ); splitYBy = Math.max( MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, - Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy), + Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy) ); const verticesPerRow = splitXBy + 1; const figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow); @@ -34676,7 +34676,7 @@ class PostScriptParser { return true; } throw new FormatError( - `Unexpected symbol: found ${this.token.type} expected ${type}.`, + `Unexpected symbol: found ${this.token.type} expected ${type}.` ); } parse() { @@ -34742,35 +34742,35 @@ class PostScriptToken { static getOperator(op) { return (PostScriptToken.opCache[op] ||= new PostScriptToken( PostScriptTokenTypes.OPERATOR, - op, + op )); } static get LBRACE() { return shadow( this, "LBRACE", - new PostScriptToken(PostScriptTokenTypes.LBRACE, "{"), + new PostScriptToken(PostScriptTokenTypes.LBRACE, "{") ); } static get RBRACE() { return shadow( this, "RBRACE", - new PostScriptToken(PostScriptTokenTypes.RBRACE, "}"), + new PostScriptToken(PostScriptTokenTypes.RBRACE, "}") ); } static get IF() { return shadow( this, "IF", - new PostScriptToken(PostScriptTokenTypes.IF, "IF"), + new PostScriptToken(PostScriptTokenTypes.IF, "IF") ); } static get IFELSE() { return shadow( this, "IFELSE", - new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE"), + new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE") ); } } @@ -34817,7 +34817,7 @@ class PostScriptLexer { case 0x2e: return new PostScriptToken( PostScriptTokenTypes.NUMBER, - this.getNumber(), + this.getNumber() ); case 0x7b: this.nextChar(); @@ -34917,7 +34917,7 @@ class LocalColorSpaceCache extends BaseLocalCache { set(name = null, ref = null, data) { if (typeof name !== "string" && !ref) { throw new Error( - 'LocalColorSpaceCache.set - expected "name" and/or "ref" argument.', + 'LocalColorSpaceCache.set - expected "name" and/or "ref" argument.' ); } if (ref) { @@ -35077,7 +35077,7 @@ class GlobalImageCache { setData(ref, data) { if (!this._refCache.has(ref)) { throw new Error( - 'GlobalImageCache.setData - expected "shouldCache" to have been called.', + 'GlobalImageCache.setData - expected "shouldCache" to have been called.' ); } if (this._imageCache.has(ref)) { @@ -35149,7 +35149,7 @@ class PDFFunctionFactory { _cache(cacheKey, parsedFunction) { if (!parsedFunction) { throw new Error( - 'PDFFunctionFactory._cache - expected "parsedFunction" argument.', + 'PDFFunctionFactory._cache - expected "parsedFunction" argument.' ); } let fnRef; @@ -35253,7 +35253,7 @@ class PDFFunction { xref, isEvalSupported, fn: xref.fetchIfRef(fn), - }), + }) ); } return function (src, srcOffset, dest, destOffset) { @@ -35317,14 +35317,14 @@ class PDFFunction { const domain_2i_1 = domain[i][1]; const xi = Math.min( Math.max(src[srcOffset + i], domain_2i), - domain_2i_1, + domain_2i_1 ); let e = interpolate( xi, domain_2i, domain_2i_1, encode[i][0], - encode[i][1], + encode[i][1] ); const size_i = size[i]; e = Math.min(Math.max(e, 0), size_i - 1); @@ -35387,7 +35387,7 @@ class PDFFunction { xref, isEvalSupported, fn: xref.fetchIfRef(fn), - }), + }) ); } const bounds = toNumberArray(dict.getArray("Bounds")); @@ -35872,7 +35872,7 @@ class ExpressionBuilderVisitor { arg.max, ", src[srcOffset + ", arg.index, - "]))", + "]))" ); } visitVariable(variable) { @@ -35919,7 +35919,7 @@ function buildAddOperation(num1, num2) { num1, num2, num1.min + num2.min, - num1.max + num2.max, + num1.max + num2.max ); } function buildMulOperation(num1, num2) { @@ -35943,13 +35943,13 @@ function buildMulOperation(num1, num2) { num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, - num1.max * num2.max, + num1.max * num2.max ); const max = Math.max( num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, - num1.max * num2.max, + num1.max * num2.max ); return new AstBinaryOperation("*", num1, num2, min, max); } @@ -35976,7 +35976,7 @@ function buildSubOperation(num1, num2) { num1, num2, num1.min - num2.max, - num1.max - num2.min, + num1.max - num2.min ); } function buildMinOperation(num1, max) { @@ -37268,7 +37268,7 @@ function generateFont( localFontPath, useFallback = true, usePath = true, - append = "", + append = "" ) { const result = { style: null, @@ -37291,8 +37291,8 @@ function generateFont( localFontPath, useFallback && !fallback, usePath && !path, - aliasAppend, - ), + aliasAppend + ) ); } if (style) { @@ -37309,7 +37309,7 @@ function generateFont( localFontPath, useFallback, usePath && !path, - append, + append ); result.ultimate ||= fallbackUltimate; } @@ -37324,7 +37324,7 @@ function getFontSubstitution( localFontPath, baseFontName, standardFontName, - type, + type ) { if (baseFontName.startsWith("InvalidPDFjsFont_")) { return null; @@ -37426,7 +37426,7 @@ class ImageResizer { if (this._areGoodDims(width, height)) { this._goodSquareLength = Math.max( this._goodSquareLength, - Math.floor(Math.sqrt(width * height)), + Math.floor(Math.sqrt(width * height)) ); return false; } @@ -37434,7 +37434,7 @@ class ImageResizer { this._goodSquareLength, MAX_DIM, MAX_ERROR, - 0, + 0 ); const maxArea = (this.MAX_AREA = this._goodSquareLength ** 2); return area > maxArea; @@ -37443,7 +37443,7 @@ class ImageResizer { return shadow( this, "MAX_DIM", - this._guessMax(MIN_IMAGE_DIM, MAX_IMAGE_DIM, 0, 1), + this._guessMax(MIN_IMAGE_DIM, MAX_IMAGE_DIM, 0, 1) ); } static get MAX_AREA() { @@ -37455,8 +37455,8 @@ class ImageResizer { ImageResizer._goodSquareLength, this.MAX_DIM, MAX_ERROR, - 0, - ) ** 2, + 0 + ) ** 2 ); } static set MAX_AREA(area) { @@ -37509,7 +37509,7 @@ class ImageResizer { const minFactor = Math.max( width / MAX_DIM, height / MAX_DIM, - Math.sqrt((width * height) / MAX_AREA), + Math.sqrt((width * height) / MAX_AREA) ); const firstFactor = Math.max(minFactor, 2); const factor = Math.round(10 * (minFactor + 1.25)) / 10 / firstFactor; @@ -37536,7 +37536,7 @@ class ImageResizer { 0, 0, newWidth, - newHeight, + newHeight ); bitmap = canvas.transferToImageBitmap(); } @@ -37559,7 +37559,7 @@ class ImageResizer { colorTable = new Uint8Array( this._isMask ? [255, 255, 255, 255, 0, 0, 0, 0] - : [0, 0, 0, 0, 255, 255, 255, 255], + : [0, 0, 0, 0, 255, 255, 255, 255] ); const rowLen = (width + 7) >> 3; const rowSize = (rowLen + 3) & -4; @@ -37814,7 +37814,7 @@ addState( const iFirstPIIXO = curr - 1; const count = Math.min( Math.floor((i - iFirstSave) / 4), - MAX_IMAGES_IN_INLINE_IMAGES_BLOCK, + MAX_IMAGES_IN_INLINE_IMAGES_BLOCK ); if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) { return i - ((i - iFirstSave) % 4); @@ -37882,10 +37882,10 @@ addState( new ImageData( new Uint8ClampedArray(imgData.buffer), imgWidth, - imgHeight, + imgHeight ), 0, - 0, + 0 ); img.bitmap = canvas.transferToImageBitmap(); img.data = null; @@ -37896,7 +37896,7 @@ addState( fnArray.splice(iFirstSave, count * 4, OPS.paintInlineImageXObjectGroup); argsArray.splice(iFirstSave, count * 4, [img, map]); return iFirstSave + 1; - }, + } ); addState( InitialState, @@ -37998,7 +37998,7 @@ addState( argsArray.splice(iFirstSave, count * 4, [images]); } return iFirstSave + 1; - }, + } ); addState( InitialState, @@ -38063,7 +38063,7 @@ addState( const firstTransformArg3 = argsArray[iFirstTransform][3]; const count = Math.min( Math.floor((i - iFirstSave) / 4), - MAX_IMAGES_IN_BLOCK, + MAX_IMAGES_IN_BLOCK ); if (count < MIN_IMAGES_IN_BLOCK) { return i - ((i - iFirstSave) % 4); @@ -38084,7 +38084,7 @@ addState( fnArray.splice(iFirstSave, count * 4, OPS.paintImageXObjectRepeat); argsArray.splice(iFirstSave, count * 4, args); return iFirstSave + 1; - }, + } ); addState( InitialState, @@ -38136,7 +38136,7 @@ addState( const firstSetFontArg1 = argsArray[iFirstSetFont][1]; let count = Math.min( Math.floor((i - iFirstBeginText) / 5), - MAX_CHARS_IN_BLOCK, + MAX_CHARS_IN_BLOCK ); if (count < MIN_CHARS_IN_BLOCK) { return i - ((i - iFirstBeginText) % 5); @@ -38161,7 +38161,7 @@ addState( iEndText += 2; } return iEndText + 1; - }, + } ); class NullOptimizer { constructor(queue) { @@ -38363,7 +38363,7 @@ class OperatorList { length, }, 1, - this._transfers, + this._transfers ); this.dependencies.clear(); this.fnArray.length = 0; @@ -38468,14 +38468,14 @@ class PDFImage { ) { warn( "PDFImage - using the Width/Height of the image data, " + - "rather than the image dictionary.", + "rather than the image dictionary." ); width = image.width; height = image.height; } if (width < 1 || height < 1) { throw new FormatError( - `Invalid image width: ${width} or height: ${height}`, + `Invalid image width: ${width} or height: ${height}` ); } this.width = width; @@ -38491,7 +38491,7 @@ class PDFImage { bitsPerComponent = 1; } else { throw new FormatError( - `Bits per component missing in image: ${this.imageMask}`, + `Bits per component missing in image: ${this.imageMask}` ); } } @@ -38516,7 +38516,7 @@ class PDFImage { break; default: throw new Error( - `Images with ${image.numComps} color components not supported.`, + `Images with ${image.numComps} color components not supported.` ); } } @@ -38734,7 +38734,7 @@ class PDFImage { return Math.max( this.height, this.smask?.height || 0, - this.mask?.height || 0, + this.mask?.height || 0 ); } decodeBuffer(buffer) { @@ -38757,7 +38757,7 @@ class PDFImage { buffer[index], decodeAddends[j], decodeCoefficients[j], - max, + max ); index++; } @@ -38939,7 +38939,7 @@ class PDFImage { imgData.kind = ImageKind.RGBA_32BPP; const imgArray = (imgData.data = await this.getImageBytes( originalHeight * originalWidth * 4, - {}, + {} )); if (isOffscreenCanvasSupported) { if (!mustBeResized) { @@ -38947,7 +38947,7 @@ class PDFImage { ImageKind.RGBA_32BPP, drawWidth, drawHeight, - imgArray, + imgArray ); } return ImageResizer.createImage(imgData, false); @@ -38983,7 +38983,7 @@ class PDFImage { height: drawHeight, interpolate: this.interpolate, }, - this.needsDecode, + this.needsDecode ); } return this.createBitmap(kind, originalWidth, originalHeight, data); @@ -38993,7 +38993,7 @@ class PDFImage { if (this.needsDecode) { assert( kind === ImageKind.GRAYSCALE_1BPP, - "PDFImage.createImageData: The image must be grayscale.", + "PDFImage.createImageData: The image must be grayscale." ); const buffer = imgData.data; for (let i = 0, ii = buffer.length; i < ii; i++) { @@ -39034,7 +39034,7 @@ class PDFImage { ImageKind.RGBA_32BPP, drawWidth, drawHeight, - rgba, + rgba ); } } else { @@ -39103,7 +39103,7 @@ class PDFImage { actualHeight, bpc, comps, - alpha01, + alpha01 ); if (maybeUndoPreblend) { this.undoPreblend(data, drawWidth, actualHeight); @@ -39129,7 +39129,7 @@ class PDFImage { const numComps = this.numComps; if (numComps !== 1) { throw new FormatError( - `Reading gray scale from a color image: ${numComps}`, + `Reading gray scale from a color image: ${numComps}` ); } const width = this.width; @@ -39198,7 +39198,7 @@ class PDFImage { forceRGBA = false, forceRGB = false, internal = false, - }, + } ) { this.image.reset(); this.image.drawWidth = drawWidth || this.width; @@ -39207,14 +39207,14 @@ class PDFImage { this.image.forceRGB = !!forceRGB; const imageBytes = await this.image.getImageData( length, - this.jpxDecoderOptions, + this.jpxDecoderOptions ); if (internal || this.image instanceof DecodeStream) { return imageBytes; } assert( imageBytes instanceof Uint8Array, - 'PDFImage.getImageBytes: Unsupported "imageBytes" type.', + 'PDFImage.getImageBytes: Unsupported "imageBytes" type.' ); return new Uint8Array(imageBytes); } @@ -39366,7 +39366,7 @@ class PartialEvaluator { newEvaluator.options = Object.assign( Object.create(null), this.options, - newOptions, + newOptions ); return newEvaluator; } @@ -39474,7 +39474,7 @@ class PartialEvaluator { const response = await fetch(url); if (!response.ok) { throw new Error( - `fetchBuiltInCMap: failed to fetch file "${url}" with "${response.statusText}".`, + `fetchBuiltInCMap: failed to fetch file "${url}" with "${response.statusText}".` ); } data = { @@ -39511,7 +39511,7 @@ class PartialEvaluator { const response = await fetch(url); if (!response.ok) { warn( - `fetchStandardFontData: failed to fetch file "${url}" with "${response.statusText}".`, + `fetchStandardFontData: failed to fetch file "${url}" with "${response.statusText}".` ); } else { data = new Uint8Array(await response.arrayBuffer()); @@ -39523,7 +39523,7 @@ class PartialEvaluator { }); } catch (e) { warn( - `fetchStandardFontData: failed to fetch file "${filename}" with "${e}".`, + `fetchStandardFontData: failed to fetch file "${filename}" with "${e}".` ); } } @@ -39540,7 +39540,7 @@ class PartialEvaluator { operatorList, task, initialState, - localColorSpaceCache, + localColorSpaceCache ) { const dict = xobj.dict; const matrix = lookupMatrix(dict.getArray("Matrix"), null); @@ -39549,7 +39549,7 @@ class PartialEvaluator { if (dict.has("OC")) { optionalContent = await this.parseMarkedContentProps( dict.get("OC"), - resources, + resources ); } if (optionalContent !== undefined) { @@ -39574,7 +39574,7 @@ class PartialEvaluator { const cachedColorSpace = ColorSpace.getCached( cs, this.xref, - localColorSpaceCache, + localColorSpaceCache ); if (cachedColorSpace) { colorSpace = cachedColorSpace; @@ -39616,13 +39616,13 @@ class PartialEvaluator { return this.handler.send( "commonobj", [objId, "Image", imgData], - transfers, + transfers ); } return this.handler.send( "obj", [objId, this.pageIndex, "Image", imgData], - transfers, + transfers ); } async buildPaintImageXObject({ @@ -39655,7 +39655,7 @@ class PartialEvaluator { if (dict.has("OC")) { optionalContent = await this.parseMarkedContentProps( dict.get("OC"), - resources, + resources ); } const imageMask = dict.get("IM", "ImageMask") || false; @@ -39679,7 +39679,7 @@ class PartialEvaluator { operatorList.addImageOps( OPS.paintImageMaskXObject, args, - optionalContent, + optionalContent ); if (cacheKey) { const cacheData = { @@ -39707,7 +39707,7 @@ class PartialEvaluator { operatorList.addImageOps( OPS.paintSolidColorImageMask, [], - optionalContent, + optionalContent ); if (cacheKey) { const cacheData = { @@ -39740,7 +39740,7 @@ class PartialEvaluator { operatorList.addImageOps( OPS.paintImageMaskXObject, args, - optionalContent, + optionalContent ); if (cacheKey) { const cacheData = { @@ -39778,7 +39778,7 @@ class PartialEvaluator { operatorList.addImageOps( OPS.paintInlineImageXObject, [imgData], - optionalContent, + optionalContent ); } catch (reason) { const msg = `Unable to decode inline image: "${reason}".`; @@ -39796,7 +39796,7 @@ class PartialEvaluator { } else if (cacheKey && imageRef) { cacheGlobally = this.globalImageCache.shouldCache( imageRef, - this.pageIndex, + this.pageIndex ); if (cacheGlobally) { assert(!isInline, "Cannot cache an inline image globally."); @@ -39850,7 +39850,7 @@ class PartialEvaluator { .then(async (imageObj) => { imgData = await imageObj.createImageData( false, - this.options.isOffscreenCanvasSupported, + this.options.isOffscreenCanvasSupported ); imgData.dataLen = imgData.bitmap ? imgData.width * imgData.height * 4 @@ -39896,7 +39896,7 @@ class PartialEvaluator { operatorList, task, stateManager, - localColorSpaceCache, + localColorSpaceCache ) { const smaskContent = smask.get("G"); const smaskOptions = { @@ -39922,7 +39922,7 @@ class PartialEvaluator { operatorList, task, stateManager.state.clone(), - localColorSpaceCache, + localColorSpaceCache ); } handleTransferFunction(tr) { @@ -39973,7 +39973,7 @@ class PartialEvaluator { patternDict, operatorList, task, - localTilingPatternCache, + localTilingPatternCache ) { const tilingOpList = new OperatorList(); const patternResources = Dict.merge({ @@ -39991,7 +39991,7 @@ class PartialEvaluator { const tilingPatternIR = getTilingPatternIR( operatorListIR, patternDict, - color, + color ); operatorList.addDependencies(tilingOpList.dependencies); operatorList.addOp(fn, tilingPatternIR); @@ -40021,7 +40021,7 @@ class PartialEvaluator { task, state, fallbackFontDict = null, - cssFontInfo = null, + cssFontInfo = null ) { const fontName = fontArgs?.[0] instanceof Name ? fontArgs[0].name : null; let translated = await this.loadFont( @@ -40029,7 +40029,7 @@ class PartialEvaluator { fontRef, resources, fallbackFontDict, - cssFontInfo, + cssFontInfo ); if (translated.font.isType3Font) { try { @@ -40065,7 +40065,7 @@ class PartialEvaluator { font, glyphs, this.handler, - this.options, + this.options ); } } @@ -40076,7 +40076,7 @@ class PartialEvaluator { return; } const reason = new FormatError( - "Missing setFont (Tf) operator before text rendering operator.", + "Missing setFont (Tf) operator before text rendering operator." ); if (this.options.ignoreErrors) { warn(`ensureStateFont: "${reason}".`); @@ -40123,11 +40123,11 @@ class PartialEvaluator { value[0], operatorList, task, - stateManager.state, + stateManager.state ).then(function (loadedName) { operatorList.addDependency(loadedName); gStateObj.push([key, [loadedName, value[1]]]); - }), + }) ); break; case "BM": @@ -40147,8 +40147,8 @@ class PartialEvaluator { operatorList, task, stateManager, - localColorSpaceCache, - ), + localColorSpaceCache + ) ); gStateObj.push([key, true]); } else { @@ -40192,7 +40192,7 @@ class PartialEvaluator { font, resources, fallbackFontDict = null, - cssFontInfo = null, + cssFontInfo = null ) { const errorFont = async () => { return new TranslatedFont({ @@ -40232,7 +40232,7 @@ class PartialEvaluator { return errorFont(); } warn( - `Font "${fontName}" is not available -- attempting to fallback to a default font.`, + `Font "${fontName}" is not available -- attempting to fallback to a default font.` ); font = fallbackFontDict || PartialEvaluator.fallbackFontDict; } @@ -40273,7 +40273,7 @@ class PartialEvaluator { } assert( fontID?.startsWith("f"), - 'The "fontID" must be (correctly) defined.', + 'The "fontID" must be (correctly) defined.' ); if (fontRefIsRef) { this.fontCache.put(fontRef, promise); @@ -40290,7 +40290,7 @@ class PartialEvaluator { font: translatedFont, dict: font, evaluatorOptions: this.options, - }), + }) ); }) .catch((reason) => { @@ -40299,11 +40299,11 @@ class PartialEvaluator { new TranslatedFont({ loadedName: font.loadedName, font: new ErrorFont( - reason instanceof Error ? reason.message : reason, + reason instanceof Error ? reason.message : reason ), dict: font, evaluatorOptions: this.options, - }), + }) ); }); return promise; @@ -40404,7 +40404,7 @@ class PartialEvaluator { this.xref, resources, this._pdfFunctionFactory, - localColorSpaceCache, + localColorSpaceCache ); patternIR = shadingFill.getIR(); } catch (reason) { @@ -40440,7 +40440,7 @@ class PartialEvaluator { task, localColorSpaceCache, localTilingPatternCache, - localShadingPatternCache, + localShadingPatternCache ) { const patternName = args.pop(); if (patternName instanceof Name) { @@ -40454,7 +40454,7 @@ class PartialEvaluator { const tilingPatternIR = getTilingPatternIR( localTilingPattern.operatorListIR, localTilingPattern.dict, - color, + color ); operatorList.addOp(fn, tilingPatternIR); return undefined; @@ -40474,7 +40474,7 @@ class PartialEvaluator { dict, operatorList, task, - localTilingPatternCache, + localTilingPatternCache ); } else if (typeNum === PatternType.SHADING) { const shading = dict.get("Shading"); @@ -40669,14 +40669,14 @@ class PartialEvaluator { } const globalImage = self.globalImageCache.getData( xobj, - self.pageIndex, + self.pageIndex ); if (globalImage) { operatorList.addDependency(globalImage.objId); operatorList.addImageOps( globalImage.fn, globalImage.args, - globalImage.optionalContent, + globalImage.optionalContent ); resolveXObject(); return; @@ -40700,7 +40700,7 @@ class PartialEvaluator { operatorList, task, stateManager.state.clone(), - localColorSpaceCache, + localColorSpaceCache ) .then(function () { stateManager.restore(); @@ -40723,7 +40723,7 @@ class PartialEvaluator { info("Ignored XObject subtype PS"); } else { throw new FormatError( - `Unhandled XObject subtype ${type.name}`, + `Unhandled XObject subtype ${type.name}` ); } resolveXObject(); @@ -40736,7 +40736,7 @@ class PartialEvaluator { return; } throw reason; - }), + }) ); return; case OPS.setFont: @@ -40750,12 +40750,12 @@ class PartialEvaluator { operatorList, task, stateManager.state, - fallbackFontDict, + fallbackFontDict ) .then(function (loadedName) { operatorList.addDependency(loadedName); operatorList.addOp(OPS.setFont, [loadedName, fontSize]); - }), + }) ); return; case OPS.beginText: @@ -40783,7 +40783,7 @@ class PartialEvaluator { cacheKey, localImageCache, localColorSpaceCache, - }), + }) ); return; case OPS.showText: @@ -40837,7 +40837,7 @@ class PartialEvaluator { const cachedColorSpace = ColorSpace.getCached( args[0], xref, - localColorSpaceCache, + localColorSpaceCache ); if (cachedColorSpace) { stateManager.state.fillColorSpace = cachedColorSpace; @@ -40854,7 +40854,7 @@ class PartialEvaluator { if (colorSpace) { stateManager.state.fillColorSpace = colorSpace; } - }), + }) ); return; } @@ -40862,7 +40862,7 @@ class PartialEvaluator { const cachedColorSpace = ColorSpace.getCached( args[0], xref, - localColorSpaceCache, + localColorSpaceCache ); if (cachedColorSpace) { stateManager.state.strokeColorSpace = cachedColorSpace; @@ -40879,7 +40879,7 @@ class PartialEvaluator { if (colorSpace) { stateManager.state.strokeColorSpace = colorSpace; } - }), + }) ); return; } @@ -40935,8 +40935,8 @@ class PartialEvaluator { task, localColorSpaceCache, localTilingPatternCache, - localShadingPatternCache, - ), + localShadingPatternCache + ) ); return; } @@ -40957,8 +40957,8 @@ class PartialEvaluator { task, localColorSpaceCache, localTilingPatternCache, - localShadingPatternCache, - ), + localShadingPatternCache + ) ); return; } @@ -41033,7 +41033,7 @@ class PartialEvaluator { return; } throw reason; - }), + }) ); return; case OPS.moveTo: @@ -41072,7 +41072,7 @@ class PartialEvaluator { } if (self.options.ignoreErrors) { warn( - `getOperatorList - ignoring beginMarkedContentProps: "${reason}".`, + `getOperatorList - ignoring beginMarkedContentProps: "${reason}".` ); operatorList.addOp(OPS.beginMarkedContentProps, [ "OC", @@ -41081,7 +41081,7 @@ class PartialEvaluator { return; } throw reason; - }), + }) ); return; } @@ -41120,7 +41120,7 @@ class PartialEvaluator { if (this.options.ignoreErrors) { warn( `getOperatorList - ignoring errors during "${task.name}" ` + - `task: "${reason}".`, + `task: "${reason}".` ); closePendingRestoreOPS(); return; @@ -41246,7 +41246,7 @@ class PartialEvaluator { } return Util.transform( textState.ctm, - Util.transform(textState.textMatrix, tsm), + Util.transform(textState.textMatrix, tsm) ); } function ensureTextContentItem() { @@ -41274,20 +41274,20 @@ class PartialEvaluator { textContentItem.width = textContentItem.totalWidth = 0; textContentItem.height = textContentItem.totalHeight = Math.hypot( trm[2], - trm[3], + trm[3] ); textContentItem.vertical = false; } else { textContentItem.width = textContentItem.totalWidth = Math.hypot( trm[0], - trm[1], + trm[1] ); textContentItem.height = textContentItem.totalHeight = 0; textContentItem.vertical = true; } const scaleLineX = Math.hypot( textState.textLineMatrix[0], - textState.textLineMatrix[1], + textState.textLineMatrix[1] ); const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]); textContentItem.textAdvanceScale = scaleCtmX * scaleLineX; @@ -41307,7 +41307,7 @@ class PartialEvaluator { } const scaleLineX = Math.hypot( textState.textLineMatrix[0], - textState.textLineMatrix[1], + textState.textLineMatrix[1] ); const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]); const scaleFactor = scaleCtmX * scaleLineX; @@ -41426,7 +41426,7 @@ class PartialEvaluator { [lastPosX, lastPosY] = applyInverseRotation( lastPosX, lastPosY, - textContentItem.prevTransform, + textContentItem.prevTransform ); } if (textState.font.vertical) { @@ -41463,7 +41463,7 @@ class PartialEvaluator { !addFakeSpaces( advanceY, textContentItem.prevTransform, - textOrientation, + textOrientation ) ) { if (textContentItem.str.length === 0) { @@ -41534,7 +41534,7 @@ class PartialEvaluator { if (!font.vertical) { textState.translateTextMatrix( charSpacing * textState.textHScale, - 0, + 0 ); } else { textState.translateTextMatrix(0, -charSpacing); @@ -41565,7 +41565,7 @@ class PartialEvaluator { charSpacing += scaledDim + textState.wordSpacing; textState.translateTextMatrix( charSpacing * textState.textHScale, - 0, + 0 ); } else { charSpacing += -scaledDim + textState.wordSpacing; @@ -41610,7 +41610,7 @@ class PartialEvaluator { if (!font.vertical) { textState.translateTextMatrix( charSpacing * textState.textHScale, - 0, + 0 ); } else { textState.translateTextMatrix(0, -charSpacing); @@ -41760,7 +41760,7 @@ class PartialEvaluator { args[2], args[3], args[4], - args[5], + args[5] ); textState.setTextLineMatrix( args[0], @@ -41768,7 +41768,7 @@ class PartialEvaluator { args[2], args[3], args[4], - args[5], + args[5] ); updateAdvanceScale(); break; @@ -41869,7 +41869,7 @@ class PartialEvaluator { } const globalImage = self.globalImageCache.getData( xobj, - self.pageIndex, + self.pageIndex ); if (globalImage) { resolveXObject(); @@ -41939,7 +41939,7 @@ class PartialEvaluator { return; } throw reason; - }), + }) ); return; case OPS.setGState: @@ -41972,7 +41972,7 @@ class PartialEvaluator { textState.fontSize = gStateFont[1]; handleSetFont(null, gStateFont[0]).then( resolveGState, - rejectGState, + rejectGState ); }).catch(function (reason) { if (reason instanceof AbortException) { @@ -41983,7 +41983,7 @@ class PartialEvaluator { return; } throw reason; - }), + }) ); return; case OPS.beginMarkedContent: @@ -42055,7 +42055,7 @@ class PartialEvaluator { if (this.options.ignoreErrors) { warn( `getTextContent - ignoring errors during "${task.name}" ` + - `task: "${reason}".`, + `task: "${reason}".` ); flushTextContentItem(); enqueueChunk(); @@ -42109,7 +42109,7 @@ class PartialEvaluator { differences[index++] = data.name; } else { throw new FormatError( - `Invalid entry in 'Differences' array: ${data}`, + `Invalid entry in 'Differences' array: ${data}` ); } } @@ -42169,7 +42169,7 @@ class PartialEvaluator { if (cidToGidBytes) { properties.cidToGidMap = this.readCidToGidMap( cidToGidBytes, - builtToUnicode, + builtToUnicode ); } return properties; @@ -42245,7 +42245,7 @@ class PartialEvaluator { const baseEncoding = getEncoding(baseEncodingName); if (baseEncoding && (glyphName = baseEncoding[charcode])) { toUnicode[charcode] = String.fromCharCode( - glyphsUnicodeMap[glyphName], + glyphsUnicodeMap[glyphName] ); continue; } @@ -42617,7 +42617,7 @@ class PartialEvaluator { : new Uint8Array( stream.bytes.buffer, stream.start, - stream.end - stream.start, + stream.end - stream.start ); hash.update(uint8array); } else if (toUnicode instanceof Name) { @@ -42739,12 +42739,12 @@ class PartialEvaluator { this.options.standardFontDataUrl, baseFontName, standardFontName, - type, + type ); } const newProperties = await this.extractDataStructures( dict, - properties, + properties ); if (Array.isArray(widths)) { const glyphWidths = []; @@ -42760,7 +42760,7 @@ class PartialEvaluator { } else { newProperties.widths = this.buildCharCodeToWidth( metrics.widths, - newProperties, + newProperties ); } return new Font(baseFontName, file, newProperties); @@ -42779,7 +42779,7 @@ class PartialEvaluator { if (!isType3Font && fontNameStr !== baseFontStr) { info( `The FontDescriptor's FontName is "${fontNameStr}" but ` + - `should be the same as the Font's BaseFont "${baseFontStr}".`, + `should be the same as the Font's BaseFont "${baseFontStr}".` ); if ( fontNameStr && @@ -42841,17 +42841,17 @@ class PartialEvaluator { this.options.standardFontDataUrl, fontName.name, standardFontName, - type, + type ); } } const fontMatrix = lookupMatrix( dict.getArray("FontMatrix"), - FONT_IDENTITY_MATRIX, + FONT_IDENTITY_MATRIX ); const bbox = lookupNormalRect( descriptor.getArray("FontBBox") || dict.getArray("FontBBox"), - undefined, + undefined ); let ascent = descriptor.get("Ascent"); if (typeof ascent !== "number") { @@ -42989,7 +42989,7 @@ class TranslatedFont { this.font, this.font.glyphCacheValues, handler, - this._evaluatorOptions, + this._evaluatorOptions ); } loadType3Data(evaluator, resources, task) { @@ -43592,7 +43592,7 @@ class EvaluatorPreprocessor { nu: null, nul: null, null: null, - }), + }) ); } static MAX_INVALID_PATH_OPS = 10; @@ -43662,7 +43662,7 @@ class EvaluatorPreprocessor { } else if (argsLength > numArgs) { info( `Command ${cmd}: expected [0, ${numArgs}] args, ` + - `but received ${argsLength} args.`, + `but received ${argsLength} args.` ); } this.preprocessCommand(fn, args); @@ -43887,7 +43887,7 @@ class FakeUnicodeFont { FakeUnicodeFont._fontNameId = 1; } this.fontName = Name.get( - `InvalidPDFjsFont_${fontFamily}_${FakeUnicodeFont._fontNameId++}`, + `InvalidPDFjsFont_${fontFamily}_${FakeUnicodeFont._fontNameId++}` ); } get fontDescriptorRef() { @@ -44269,7 +44269,7 @@ class FileSpec { content = fileObj.getBytes(); } else { warn( - "Embedded file specification points to non-existing/invalid content", + "Embedded file specification points to non-existing/invalid content" ); } } else { @@ -44490,7 +44490,7 @@ class XMLParserBase { q = s.indexOf("]>", j + 8); if (q < 0) { this.onError( - XMLParserErrorCode.UnterminatedDoctypeDeclaration, + XMLParserErrorCode.UnterminatedDoctypeDeclaration ); return; } @@ -44498,7 +44498,7 @@ class XMLParserBase { } const doctypeContent = s.substring( j + 8, - q + (complexDoctype ? 1 : 0), + q + (complexDoctype ? 1 : 0) ); this.onDoctype(doctypeContent); j = q + (complexDoctype ? 2 : 1); @@ -44652,7 +44652,7 @@ class SimpleDOMNode { if (this.attributes) { for (const attribute of this.attributes) { buffer.push( - ` ${attribute.name}="${encodeToXmlString(attribute.value)}"`, + ` ${attribute.name}="${encodeToXmlString(attribute.value)}"` ); } } @@ -44786,7 +44786,7 @@ class MetadataParser { charBuf.push(String.fromCharCode(code)); } else { charBuf.push( - "&#x" + (0x10000 + code).toString(16).substring(1) + ";", + "&#x" + (0x10000 + code).toString(16).substring(1) + ";" ); } } @@ -44808,7 +44808,7 @@ class MetadataParser { const sequence = this._getSequence(seqNode) || []; this._metadataMap.set( entry.nodeName, - sequence.map((node) => node.textContent.trim()), + sequence.map((node) => node.textContent.trim()) ); } _parse(xmlDocument) { @@ -46146,7 +46146,7 @@ class CipherTransform { length, function cipherTransformDecryptStream(data, finalize) { return cipher.decryptBlock(data, finalize); - }, + } ); } decryptString(s) { @@ -46199,7 +46199,7 @@ class CipherTransformFactory { userKeySalt, ownerEncryption, userEncryption, - perms, + perms ) { if (password) { const passwordLength = Math.min(127, password.length); @@ -46218,14 +46218,14 @@ class CipherTransformFactory { password, ownerValidationSalt, uBytes, - ownerPassword, + ownerPassword ) ) { return pdfAlgorithm.getOwnerKey( password, ownerKeySalt, uBytes, - ownerEncryption, + ownerEncryption ); } return null; @@ -46238,7 +46238,7 @@ class CipherTransformFactory { flags, revision, keyLength, - encryptMetadata, + encryptMetadata ) { const hashDataSize = 40 + ownerPassword.length + fileId.length; const hashData = new Uint8Array(hashDataSize); @@ -46306,7 +46306,7 @@ class CipherTransformFactory { } else { cipher = new ARCFourCipher(encryptionKey); checkData = cipher.encryptBlock( - CipherTransformFactory.#defaultPasswordBytes, + CipherTransformFactory.#defaultPasswordBytes ); for (j = 0, n = checkData.length; j < n; ++j) { if (userPassword[j] !== checkData[j]) { @@ -46454,7 +46454,7 @@ class CipherTransformFactory { password = utf8StringToString(password); } catch { warn( - "CipherTransformFactory: Unable to convert UTF8 encoded password.", + "CipherTransformFactory: Unable to convert UTF8 encoded password." ); } } @@ -46470,7 +46470,7 @@ class CipherTransformFactory { flags, revision, keyLength, - encryptMetadata, + encryptMetadata ); } else { const ownerValidationSalt = ownerBytes.subarray(32, 40); @@ -46493,20 +46493,20 @@ class CipherTransformFactory { userKeySalt, ownerEncryption, userEncryption, - perms, + perms ); } if (!encryptionKey && !password) { throw new PasswordException( "No password given", - PasswordResponses.NEED_PASSWORD, + PasswordResponses.NEED_PASSWORD ); } else if (!encryptionKey && password) { const decodedPassword = this.#decodeUserPassword( passwordBytes, ownerPassword, revision, - keyLength, + keyLength ); encryptionKey = this.#prepareKeyData( fileIdBytes, @@ -46516,13 +46516,13 @@ class CipherTransformFactory { flags, revision, keyLength, - encryptMetadata, + encryptMetadata ); } if (!encryptionKey) { throw new PasswordException( "Incorrect Password", - PasswordResponses.INCORRECT_PASSWORD, + PasswordResponses.INCORRECT_PASSWORD ); } this.encryptionKey = encryptionKey; @@ -46545,15 +46545,15 @@ class CipherTransformFactory { this.strf, num, gen, - this.encryptionKey, + this.encryptionKey ), this.#buildCipherConstructor( this.cf, this.stmf, num, gen, - this.encryptionKey, - ), + this.encryptionKey + ) ); } const key = this.#buildObjectKey(num, gen, this.encryptionKey, false); @@ -46774,7 +46774,7 @@ function updateXFA({ xfaData, xfaDatasetsRef, newRefs, xref }) { if (encrypt) { const transform = encrypt.createCipherTransform( xfaDatasetsRef.num, - xfaDatasetsRef.gen, + xfaDatasetsRef.gen ); xfaData = transform.encryptString(xfaData); } @@ -46795,20 +46795,20 @@ async function getXRefTable(xrefInfo, baseOffset, newRefs, newXref, buffer) { for (const { ref, data } of newRefs) { if (ref.num === indexes[indexesPosition]) { buffer.push( - `${indexes[indexesPosition]} ${indexes[indexesPosition + 1]}\n`, + `${indexes[indexesPosition]} ${indexes[indexesPosition + 1]}\n` ); indexesPosition += 2; } if (data !== null) { buffer.push( - `${baseOffset.toString().padStart(10, "0")} ${Math.min(ref.gen, 0xffff).toString().padStart(5, "0")} n\r\n`, + `${baseOffset.toString().padStart(10, "0")} ${Math.min(ref.gen, 0xffff).toString().padStart(5, "0")} n\r\n` ); baseOffset += data.length; } else { buffer.push( `0000000000 ${Math.min(ref.gen + 1, 0xffff) .toString() - .padStart(5, "0")} f\r\n`, + .padStart(5, "0")} f\r\n` ); } } @@ -46833,7 +46833,7 @@ async function getXRefStreamTable( baseOffset, newRefs, newXref, - buffer, + buffer ) { const xrefTableData = []; let maxOffset = 0; @@ -46952,7 +46952,7 @@ async function incrementalUpdate({ : getXRefTable(xrefInfo, baseOffset, newRefs, newXref, buffer)); const totalLength = buffer.reduce( (a, str) => a + str.length, - originalData.length, + originalData.length ); const array = new Uint8Array(totalLength); array.set(originalData); @@ -47373,7 +47373,7 @@ class StructTreeRoot { cachedParentKids.splice( index >= 0 ? index + 1 : cachedParentKids.length, 0, - newTagRef, + newTagRef ); } } @@ -47752,7 +47752,7 @@ class Catalog { return shadow( this, "lang", - lang && typeof lang === "string" ? stringToPDFString(lang) : null, + lang && typeof lang === "string" ? stringToPDFString(lang) : null ); } get needsRendering() { @@ -47760,7 +47760,7 @@ class Catalog { return shadow( this, "needsRendering", - typeof needsRendering === "boolean" ? needsRendering : false, + typeof needsRendering === "boolean" ? needsRendering : false ); } get collection() { @@ -47806,7 +47806,7 @@ class Catalog { try { const stream = this.xref.fetch( streamRef, - !this.xref.encrypt?.encryptMetadata, + !this.xref.encrypt?.encryptMetadata ); if (stream instanceof BaseStream && stream.dict instanceof Dict) { const type = stream.dict.get("Type"); @@ -48208,7 +48208,7 @@ class Catalog { const obj = this.toplevelPagesDict.get("Count"); if (!Number.isInteger(obj)) { throw new FormatError( - "Page count in top-level pages dictionary is not an integer.", + "Page count in top-level pages dictionary is not an integer." ); } return shadow(this, "_pagesCount", obj); @@ -48345,14 +48345,14 @@ class Catalog { const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE; const letterIndex = currentIndex - 1; const character = String.fromCharCode( - baseCharCode + (letterIndex % LIMIT), + baseCharCode + (letterIndex % LIMIT) ); currentLabel = character.repeat(Math.floor(letterIndex / LIMIT) + 1); break; default: if (style) { throw new FormatError( - `Invalid style "${style}" in PageLabel dictionary.`, + `Invalid style "${style}" in PageLabel dictionary.` ); } currentLabel = ""; @@ -48491,7 +48491,7 @@ class Catalog { Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && - page <= this.numPages, + page <= this.numPages ); if (isValid) { prefValue = value; @@ -48544,7 +48544,7 @@ class Catalog { return shadow( this, "openAction", - objectSize(openAction) > 0 ? openAction : null, + objectSize(openAction) > 0 ? openAction : null ); } get attachments() { @@ -48614,7 +48614,7 @@ class Catalog { let actions = collectActions( this.xref, this._catDict, - DocumentActionEventType, + DocumentActionEventType ); if (javaScript) { actions ||= Object.create(null); @@ -48700,7 +48700,7 @@ class Catalog { } if (!(currentNode instanceof Dict)) { throw new FormatError( - "Page dictionary kid reference points to wrong type of object.", + "Page dictionary kid reference points to wrong type of object." ); } const { objId } = currentNode; @@ -48788,7 +48788,7 @@ class Catalog { } if (!Array.isArray(kids)) { addPageError( - new FormatError("Page dictionary kids object is not an array."), + new FormatError("Page dictionary kids object is not an array.") ); break; } @@ -48801,7 +48801,7 @@ class Catalog { if (kidObj instanceof Ref) { if (visitedNodes.has(kidObj)) { addPageError( - new FormatError("Pages tree contains circular reference."), + new FormatError("Pages tree contains circular reference.") ); break; } @@ -48818,8 +48818,8 @@ class Catalog { if (!(obj instanceof Dict)) { addPageError( new FormatError( - "Page dictionary kid reference points to wrong type of object.", - ), + "Page dictionary kid reference points to wrong type of object." + ) ); break; } @@ -48862,7 +48862,7 @@ class Catalog { !(node instanceof Dict && !node.has("Type") && node.has("Contents")) ) { throw new FormatError( - "The reference does not point to a /Page dictionary.", + "The reference does not point to a /Page dictionary." ); } if (!node) { @@ -48907,7 +48907,7 @@ class Catalog { } else { total++; } - }), + }) ); } if (!found) { @@ -49794,7 +49794,7 @@ class FontSelector { defaultXfaFont, defaultParaMargin, defaultLineHeight, - fontFinder, + fontFinder ) { this.fontFinder = fontFinder; this.stack = [ @@ -49802,7 +49802,7 @@ class FontSelector { defaultXfaFont, defaultParaMargin, defaultLineHeight, - fontFinder, + fontFinder ), ]; } @@ -49828,7 +49828,7 @@ class FontSelector { xfaFont, margin, lineHeight || lastFont.lineHeight, - this.fontFinder, + this.fontFinder ); if (!fontInfo.pdfFont) { fontInfo.pdfFont = lastFont.pdfFont; @@ -49849,7 +49849,7 @@ class TextMeasure { defaultXfaFont, defaultParaMargin, defaultLineHeight, - fonts, + fonts ); this.extraHeight = 0; } @@ -50061,7 +50061,7 @@ function parseExpression(expr, dotDotAllowed, noExpr = true) { case "[": if (noExpr) { warn( - "XFA - SOM expression contains a FormCalc subexpression which is not supported for now.", + "XFA - SOM expression contains a FormCalc subexpression which is not supported for now." ); return null; } @@ -50070,7 +50070,7 @@ function parseExpression(expr, dotDotAllowed, noExpr = true) { case "(": if (noExpr) { warn( - "XFA - SOM expression contains a JavaScript subexpression which is not supported for now.", + "XFA - SOM expression contains a JavaScript subexpression which is not supported for now." ); return null; } @@ -50102,7 +50102,7 @@ function searchNode( container, expr, dotDotAllowed = true, - useCache = true, + useCache = true ) { const parsed = parseExpression(expr, dotDotAllowed); if (!parsed) { @@ -50492,7 +50492,7 @@ class XFAObject { if (!this[$extra].generator) { this[$extra].generator = this[_filteredChildrenGenerator]( filter, - include, + include ); } else { const availableSpace = this[$getAvailableSpace](); @@ -50528,7 +50528,7 @@ class XFAObject { const allAttr = this[_attributeNames]; const setAttr = this[_setAttributes]; return [...protoAttributes].filter( - (x) => allAttr.has(x) && !setAttr.has(x), + (x) => allAttr.has(x) && !setAttr.has(x) ); } [$resolvePrototypes](ids, ancestors = new Set()) { @@ -50584,7 +50584,7 @@ class XFAObject { } if (proto[$nodeName] !== this[$nodeName]) { warn( - `XFA - Incompatible prototype: ${proto[$nodeName]} !== ${this[$nodeName]}.`, + `XFA - Incompatible prototype: ${proto[$nodeName]} !== ${this[$nodeName]}.` ); return null; } @@ -50612,7 +50612,7 @@ class XFAObject { const newAncestors = new Set(ancestors); newAncestors.add(proto); for (const unsetAttrName of this[_getUnsetAttributes]( - proto[_setAttributes], + proto[_setAttributes] )) { this[unsetAttrName] = proto[unsetAttrName]; if (this[_setAttributes]) { @@ -50756,7 +50756,7 @@ class XFAObjectArray { return true; } warn( - `XFA - node "${child[$nodeName]}" accepts no more than ${this[_max]} children`, + `XFA - node "${child[$nodeName]}" accepts no more than ${this[_max]} children` ); return false; } @@ -50948,7 +50948,7 @@ class XmlObject extends XFAObject { yield* child[$getRealChildrenByNameIt]( name, allTransparent, - skipConsumed, + skipConsumed ); } } @@ -51262,7 +51262,7 @@ function layoutNode(node, availableSpace) { margin, lineHeight, fontFinder, - maxWidth, + maxWidth ); width = res.width; height = res.height; @@ -51276,7 +51276,7 @@ function layoutNode(node, availableSpace) { margin, lineHeight, fontFinder, - maxWidth, + maxWidth ); width = res.width; height = res.height; @@ -52172,7 +52172,7 @@ class Arc extends XFAObject { style.fill = "transparent"; } style.strokeWidth = measureToString( - edge.presence === "visible" ? edge.thickness : 0, + edge.presence === "visible" ? edge.thickness : 0 ); style.stroke = edgeStyle.color; let arc; @@ -52492,7 +52492,7 @@ class Barcode extends XFAObject { "upcean2", "upcean5", "upsmaxicode", - ], + ] ); this.upsMode = getStringOption(attributes.upsMode, [ "usCarrier", @@ -52917,7 +52917,7 @@ class Certificates extends XFAObject { super(TEMPLATE_NS_ID, "certificates", true); this.credentialServerPolicy = getStringOption( attributes.credentialServerPolicy, - ["optional", "required"], + ["optional", "required"] ); this.id = attributes.id || ""; this.url = attributes.url || ""; @@ -53341,7 +53341,7 @@ class Decimal extends ContentObject { } [$toHTML](availableSpace) { return valueToHtml( - this[$content] !== null ? this[$content].toString() : "", + this[$content] !== null ? this[$content].toString() : "" ); } } @@ -53503,7 +53503,7 @@ class Draw extends XFAObject { "rotate", "anchorType", "border", - "margin", + "margin" ); setMinMaxDimensions(this, style); if (style.margin) { @@ -54005,7 +54005,7 @@ class ExclGroup extends XFAObject { "presence", "border", "margin", - "hAlign", + "hAlign" ); const classNames = ["xfaExclgroup"]; const cl = layoutClass(this); @@ -54302,14 +54302,14 @@ class Field extends XFAObject { width += marginH; this.w = Math.min( this.maxW <= 0 ? Infinity : this.maxW, - this.minW + 1 < width ? width : this.minW, + this.minW + 1 < width ? width : this.minW ); } if (height && this.h === "") { height += marginV; this.h = Math.min( this.maxH <= 0 ? Infinity : this.maxH, - this.minH + 1 < height ? height : this.minH, + this.minH + 1 < height ? height : this.minH ); } } @@ -54332,7 +54332,7 @@ class Field extends XFAObject { "anchorType", "presence", "margin", - "hAlign", + "hAlign" ); setMinMaxDimensions(this, style); const classNames = ["xfaField"]; @@ -54586,7 +54586,7 @@ class Float extends ContentObject { } [$toHTML](availableSpace) { return valueToHtml( - this[$content] !== null ? this[$content].toString() : "", + this[$content] !== null ? this[$content].toString() : "" ); } } @@ -54876,7 +54876,7 @@ class Integer extends ContentObject { } [$toHTML](availableSpace) { return valueToHtml( - this[$content] !== null ? this[$content].toString() : "", + this[$content] !== null ? this[$content].toString() : "" ); } } @@ -54948,12 +54948,12 @@ class KeyUsage extends XFAObject { this.crlSign = getStringOption(attributes.crlSign, options); this.dataEncipherment = getStringOption( attributes.dataEncipherment, - options, + options ); this.decipherOnly = getStringOption(attributes.decipherOnly, options); this.digitalSignature = getStringOption( attributes.digitalSignature, - options, + options ); this.encipherOnly = getStringOption(attributes.encipherOnly, options); this.id = attributes.id || ""; @@ -55512,19 +55512,19 @@ class PageSet extends XFAObject { const parity = pageNumber % 2 === 0 ? "even" : "odd"; const position = pageNumber === 0 ? "first" : "rest"; let page = this.pageArea.children.find( - (p) => p.oddOrEven === parity && p.pagePosition === position, + (p) => p.oddOrEven === parity && p.pagePosition === position ); if (page) { return page; } page = this.pageArea.children.find( - (p) => p.oddOrEven === "any" && p.pagePosition === position, + (p) => p.oddOrEven === "any" && p.pagePosition === position ); if (page) { return page; } page = this.pageArea.children.find( - (p) => p.oddOrEven === "any" && p.pagePosition === "any", + (p) => p.oddOrEven === "any" && p.pagePosition === "any" ); if (page) { return page; @@ -55866,7 +55866,7 @@ class Rectangle extends XFAObject { style.fill = "transparent"; } style.strokeWidth = measureToString( - edge.presence === "visible" ? edge.thickness : 0, + edge.presence === "visible" ? edge.thickness : 0 ); style.stroke = edgeStyle.color; const corner = this.corner.children.length @@ -56040,7 +56040,7 @@ class Stipple extends XFAObject { return Util.makeHexColor( Math.round(bgColor.value.r * (1 - alpha) + this.value.r * alpha), Math.round(bgColor.value.g * (1 - alpha) + this.value.g * alpha), - Math.round(bgColor.value.b * (1 - alpha) + this.value.b * alpha), + Math.round(bgColor.value.b * (1 - alpha) + this.value.b * alpha) ); } } @@ -56251,7 +56251,7 @@ class Subform extends XFAObject { this.breakAfter.children.length > 1 ) { warn( - "XFA - Several breakBefore or breakAfter in subforms: please file a bug.", + "XFA - Several breakBefore or breakAfter in subforms: please file a bug." ); } if (this.breakBefore.children.length >= 1) { @@ -56320,7 +56320,7 @@ class Subform extends XFAObject { "presence", "border", "margin", - "hAlign", + "hAlign" ); const classNames = ["xfaSubform"]; const cl = layoutClass(this); @@ -56480,7 +56480,7 @@ class SubjectDN extends ContentObject { kv = kv.split("=", 2); kv[0] = kv[0].trim(); return kv; - }), + }) ); } } @@ -56619,7 +56619,7 @@ class Template extends XFAObject { if (breakBefore) { const target = this[$searchNode]( breakBeforeTarget, - breakBefore[$getParent](), + breakBefore[$getParent]() ); if (target instanceof PageArea) { pageArea = target; @@ -56670,7 +56670,7 @@ class Template extends XFAObject { } const contentAreas = pageArea.contentArea.children; const htmlContentAreas = page.children.filter((node) => - node.attributes.class.includes("xfaContentarea"), + node.attributes.class.includes("xfaContentarea") ); hasSomething = false; this[$extra].firstUnsplittable = null; @@ -56842,10 +56842,10 @@ class Text extends ContentObject { }, { name: "br", - }, + } ); return acc; - }, []), + }, []) ) .forEach((lines) => { html.children.push({ @@ -56864,7 +56864,7 @@ class Text extends ContentObject { }, { name: "br", - }, + } ); }); } @@ -57675,7 +57675,7 @@ class Binder { targetParent instanceof SetProperty ) { warn( - `XFA - Invalid target: cannot be a setProperty or one of its properties.`, + `XFA - Invalid target: cannot be a setProperty or one of its properties.` ); continue; } @@ -57684,7 +57684,7 @@ class Binder { targetParent instanceof BindItems ) { warn( - `XFA - Invalid target: cannot be a bindItems or one of its properties.`, + `XFA - Invalid target: cannot be a bindItems or one of its properties.` ); continue; } @@ -57695,7 +57695,7 @@ class Binder { attrs[name] = content; const obj = Reflect.construct( Object.getPrototypeOf(targetParent).constructor, - [attrs], + [attrs] ); targetParent[name] = obj[name]; continue; @@ -57816,7 +57816,7 @@ class Binder { let currentNumber; if (formNode.name) { currentNumber = parent[name].children.filter( - (e) => e.name === formNode.name, + (e) => e.name === formNode.name ).length; } else { currentNumber = parent[name].children.length; @@ -57868,7 +57868,7 @@ class Binder { : dataNode[$namespaceId]; const dataChild = (child[$data] = new XmlObject( nsId, - child.name || "root", + child.name || "root" )); dataNode[$appendChild](dataChild); this._bindElement(child, dataChild); @@ -57945,7 +57945,7 @@ class Binder { child.name, child[$hasSettableValue](), dataNode, - global, + global ); if (!found) { break; @@ -57958,7 +57958,7 @@ class Binder { match = dataNode[$getRealChildrenByNameIt]( child.name, false, - this.emptyMerge, + this.emptyMerge ).next().value; if (!match) { if (min === 0) { @@ -58169,7 +58169,7 @@ class BehaviorOverride extends ContentObject { .trim() .split(/\s+/) .filter((x) => x.includes(":")) - .map((x) => x.split(":", 2)), + .map((x) => x.split(":", 2)) ); } } @@ -58427,7 +58427,7 @@ class Exclude extends ContentObject { "initialize", "ready", "validate", - ].includes(x), + ].includes(x) ); } } @@ -58639,7 +58639,7 @@ class Packets extends StringObject { .trim() .split(/\s+/) .filter((x) => - ["config", "datasets", "template", "xfdf", "xslt"].includes(x), + ["config", "datasets", "template", "xfdf", "xslt"].includes(x) ); } } @@ -60281,7 +60281,7 @@ function mapStyle(styleStr, node, richText) { }, node, node[$globalData].fontFinder, - style, + style ); } if ( @@ -60297,7 +60297,7 @@ function mapStyle(styleStr, node, richText) { style.verticalAlign = measureToString( Math.sign(getMeasurement(style.verticalAlign)) * fontSize * - VERTICAL_FACTOR, + VERTICAL_FACTOR ); } if (richText && style.fontSize) { @@ -60715,7 +60715,7 @@ class Builder { this._namespacePrefixes = new Map(); this._namespaces = new Map(); this._nextNsId = Math.max( - ...Object.values(NamespaceIds).map(({ id }) => id), + ...Object.values(NamespaceIds).map(({ id }) => id) ); this._currentNamespace = rootNameSpace || new UnknownNamespace(++this._nextNsId); @@ -60910,11 +60910,11 @@ class XFAParser extends XMLParserBase { onBeginElement(tagName, attributes, isEmpty) { const [namespace, prefixes, attributesObj] = this._mkAttributes( attributes, - tagName, + tagName ); const [name, nsPrefix] = this._getNameAndPrefix( tagName, - this._builder.isNsAgnostic(), + this._builder.isNsAgnostic() ); const node = this._builder.build({ nsPrefix, @@ -61067,7 +61067,7 @@ class XFAFactory { if (attributes) { if (attributes.class) { attributes.class = attributes.class.filter( - (attr) => !attr.startsWith("xfa"), + (attr) => !attr.startsWith("xfa") ); } attributes.dir = "auto"; @@ -61105,7 +61105,7 @@ class AnnotationFactory { (reason) => { warn(`createGlobals: "${reason}".`); return null; - }, + } ); } static async create( @@ -61114,7 +61114,7 @@ class AnnotationFactory { annotationGlobals, idFactory, collectFields, - pageRef, + pageRef ) { const pageIndex = collectFields ? await this._getPageIndex(xref, ref, annotationGlobals.pdfManager) @@ -61136,7 +61136,7 @@ class AnnotationFactory { idFactory, collectFields = false, pageIndex = null, - pageRef = null, + pageRef = null ) { const dict = xref.fetchIfRef(ref); if (!(dict instanceof Dict)) { @@ -61184,7 +61184,7 @@ class AnnotationFactory { } warn( `Unimplemented widget field type "${fieldType}", ` + - "falling back to base field type.", + "falling back to base field type." ); return new WidgetAnnotation(parameters); case "Popup": @@ -61224,7 +61224,7 @@ class AnnotationFactory { } else { warn( `Unimplemented annotation type "${subtype}", ` + - "falling back to base annotation.", + "falling back to base annotation." ); } } @@ -61269,7 +61269,7 @@ class AnnotationFactory { static generateImages(annotations, xref, isOffscreenCanvasSupported) { if (!isOffscreenCanvasSupported) { warn( - "generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images.", + "generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images." ); return null; } @@ -61318,8 +61318,8 @@ class AnnotationFactory { evaluator, task, baseFontRef, - }, - ), + } + ) ); break; case AnnotationEditorType.HIGHLIGHT: @@ -61328,18 +61328,18 @@ class AnnotationFactory { HighlightAnnotation.createNewAnnotation( xref, annotation, - dependencies, - ), + dependencies + ) ); } else { promises.push( - InkAnnotation.createNewAnnotation(xref, annotation, dependencies), + InkAnnotation.createNewAnnotation(xref, annotation, dependencies) ); } break; case AnnotationEditorType.INK: promises.push( - InkAnnotation.createNewAnnotation(xref, annotation, dependencies), + InkAnnotation.createNewAnnotation(xref, annotation, dependencies) ); break; case AnnotationEditorType.STAMP: @@ -61375,8 +61375,8 @@ class AnnotationFactory { dependencies, { image, - }, - ), + } + ) ); break; } @@ -61391,7 +61391,7 @@ class AnnotationFactory { evaluator, task, annotations, - imagePromises, + imagePromises ) { if (!annotations) { return null; @@ -61413,8 +61413,8 @@ class AnnotationFactory { evaluator, task, evaluatorOptions: options, - }, - ), + } + ) ); break; case AnnotationEditorType.HIGHLIGHT: @@ -61426,8 +61426,8 @@ class AnnotationFactory { annotation, { evaluatorOptions: options, - }, - ), + } + ) ); } else { promises.push( @@ -61437,8 +61437,8 @@ class AnnotationFactory { annotation, { evaluatorOptions: options, - }, - ), + } + ) ); } break; @@ -61450,8 +61450,8 @@ class AnnotationFactory { annotation, { evaluatorOptions: options, - }, - ), + } + ) ); break; case AnnotationEditorType.STAMP: @@ -61475,8 +61475,8 @@ class AnnotationFactory { { image, evaluatorOptions: options, - }, - ), + } + ) ); break; } @@ -61537,7 +61537,7 @@ function getQuadPoints(dict, rect) { function getTransformMatrix(rect, bbox, matrix) { const [minX, minY, maxX, maxY] = Util.getAxialAlignedBoundingBox( bbox, - matrix, + matrix ); if (minX === maxX || minY === maxY) { return [1, 0, 0, 1, rect[0], rect[1]]; @@ -61581,7 +61581,7 @@ class Annotation { Number.isInteger(structParent) && structParent >= 0 ? structParent : -1; annotationGlobals.structTreeRoot.addAnnotationIdToPage( params.pageRef, - structParent, + structParent ); } this.data = { @@ -61689,7 +61689,7 @@ class Annotation { this._defaultAppearance = typeof defaultAppearance === "string" ? defaultAppearance : ""; this.data.defaultAppearanceData = parseDefaultAppearance( - this._defaultAppearance, + this._defaultAppearance ); } setTitle(title) { @@ -61844,7 +61844,7 @@ class Annotation { task, intent, renderForms, - annotationStorage, + annotationStorage ) { const { hasOwnCanvas, id, rect } = this.data; let appearance = this.appearance; @@ -61873,12 +61873,12 @@ class Annotation { const appearanceDict = appearance.dict; const resources = await this.loadResources( ["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"], - appearance, + appearance ); const bbox = lookupRect(appearanceDict.getArray("BBox"), [0, 0, 1, 1]); const matrix = lookupMatrix( appearanceDict.getArray("Matrix"), - IDENTITY_MATRIX, + IDENTITY_MATRIX ); const transform = getTransformMatrix(rect, bbox, matrix); const opList = new OperatorList(); @@ -61926,7 +61926,7 @@ class Annotation { } const resources = await this.loadResources( ["ExtGState", "Font", "Properties", "XObject"], - this.appearance, + this.appearance ); const text = []; const buffer = []; @@ -61968,7 +61968,7 @@ class Annotation { this.data.textPosition = this._transformPoint( firstPosition, bbox, - matrix, + matrix ); this.data.textContent = text; } @@ -62222,7 +62222,7 @@ class MarkupAnnotation extends Annotation { for (let i = 0, ii = pointsArray.length; i < ii; i += 8) { const [mX, MX, mY, MY] = pointsCallback( buffer, - pointsArray.subarray(i, i + 8), + pointsArray.subarray(i, i + 8) ); minX = Math.min(minX, mX); maxX = Math.max(maxX, MX); @@ -62291,7 +62291,7 @@ class MarkupAnnotation extends Annotation { annotationGlobals, xref, annotation, - params, + params ) { const ap = await this.createNewAppearanceStream(annotation, xref, params); const annotationDict = this.createNewDict(annotation, xref, { @@ -62453,7 +62453,7 @@ class WidgetAnnotation extends Annotation { task, intent, renderForms, - annotationStorage, + annotationStorage ) { if ( renderForms && @@ -62473,14 +62473,14 @@ class WidgetAnnotation extends Annotation { task, intent, renderForms, - annotationStorage, + annotationStorage ); } const content = await this._getAppearance( evaluator, task, intent, - annotationStorage, + annotationStorage ); if (this.appearance && content === null) { return super.getOperatorList( @@ -62488,7 +62488,7 @@ class WidgetAnnotation extends Annotation { task, intent, renderForms, - annotationStorage, + annotationStorage ); } const opList = new OperatorList(); @@ -62584,7 +62584,7 @@ class WidgetAnnotation extends Annotation { evaluator, task, RenderingIntentFlag.SAVE, - annotationStorage, + annotationStorage ); if (appearance === null) { return null; @@ -62696,7 +62696,7 @@ class WidgetAnnotation extends Annotation { value = value.trim(); if (this.data.combo) { const option = this.data.options.find( - ({ exportValue }) => value === exportValue, + ({ exportValue }) => value === exportValue ); value = option?.displayValue || value; } @@ -62723,14 +62723,14 @@ class WidgetAnnotation extends Annotation { } if (!this._defaultAppearance) { this.data.defaultAppearanceData = parseDefaultAppearance( - (this._defaultAppearance = "/Helvetica 0 Tf 0 g"), + (this._defaultAppearance = "/Helvetica 0 Tf 0 g") ); } let font = await WidgetAnnotation._getFontData( evaluator, task, this.data.defaultAppearanceData, - this._fieldResources.mergedResources, + this._fieldResources.mergedResources ); let defaultAppearance, fontSize, lineHeight; const encodedLines = []; @@ -62768,14 +62768,14 @@ class WidgetAnnotation extends Annotation { fontName, fontSize: 0, }, - resources, + resources ); for (let i = 0, ii = encodedLines.length; i < ii; i++) { encodedLines[i] = stringToUTF16String(lines[i]); } const savedDefaultAppearance = Object.assign( Object.create(null), - this.data.defaultAppearanceData, + this.data.defaultAppearanceData ); this.data.defaultAppearanceData.fontSize = 0; this.data.defaultAppearanceData.fontName = fontName; @@ -62784,13 +62784,13 @@ class WidgetAnnotation extends Annotation { totalWidth - 2 * defaultHPadding, value, font, - lineCount, + lineCount ); this.data.defaultAppearanceData = savedDefaultAppearance; } else { if (!this._isOffscreenCanvasSupported) { warn( - "_getAppearance: OffscreenCanvas is not supported, annotation may not render correctly.", + "_getAppearance: OffscreenCanvas is not supported, annotation may not render correctly." ); } [defaultAppearance, fontSize, lineHeight] = this._computeFontSize( @@ -62798,7 +62798,7 @@ class WidgetAnnotation extends Annotation { totalWidth - 2 * defaultHPadding, value, font, - lineCount, + lineCount ); } let descent = font.descent; @@ -62807,12 +62807,12 @@ class WidgetAnnotation extends Annotation { } else { descent = Math.max( BASELINE_FACTOR * lineHeight, - Math.abs(descent) * fontSize, + Math.abs(descent) * fontSize ); } const defaultVPadding = Math.min( Math.floor((totalHeight - fontSize) / 2), - defaultPadding, + defaultPadding ); const alignment = this.data.textAlignment; if (this.data.multiLine) { @@ -62828,7 +62828,7 @@ class WidgetAnnotation extends Annotation { defaultVPadding, descent, lineHeight, - annotationStorage, + annotationStorage ); } if (this.data.comb) { @@ -62843,7 +62843,7 @@ class WidgetAnnotation extends Annotation { defaultVPadding, descent, lineHeight, - annotationStorage, + annotationStorage ); } const bottomPadding = defaultVPadding + descent; @@ -62866,7 +62866,7 @@ class WidgetAnnotation extends Annotation { alignment, prevInfo, defaultHPadding, - bottomPadding, + bottomPadding ); return ( `/Tx BMC q ${colors}BT ` + @@ -62891,7 +62891,7 @@ class WidgetAnnotation extends Annotation { operatorList, task, initialState, - null, + null ); return initialState.font; } @@ -62913,8 +62913,8 @@ class WidgetAnnotation extends Annotation { fontSize = roundWithTwoDigits( Math.min( height / LINE_FACTOR, - textWidth > width ? width / textWidth : Infinity, - ), + textWidth > width ? width / textWidth : Infinity + ) ); numberOfLines = 1; } else { @@ -62969,7 +62969,7 @@ class WidgetAnnotation extends Annotation { alignment, prevInfo, hPadding, - vPadding, + vPadding ) { let shift; if (alignment === 1) { @@ -63074,7 +63074,7 @@ class TextWidgetAnnotation extends WidgetAnnotation { vPadding, descent, lineHeight, - annotationStorage, + annotationStorage ) { const combWidth = width / this.data.maxLen; const colors = this.getBorderAndBackgroundAppearances(annotationStorage); @@ -63103,7 +63103,7 @@ class TextWidgetAnnotation extends WidgetAnnotation { vPadding, descent, lineHeight, - annotationStorage, + annotationStorage ) { const buf = []; const totalWidth = width - 2 * hPadding; @@ -63126,8 +63126,8 @@ class TextWidgetAnnotation extends WidgetAnnotation { alignment, prevInfo, hPadding, - vShift, - ), + vShift + ) ); } } @@ -63244,7 +63244,7 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { task, intent, renderForms, - annotationStorage, + annotationStorage ) { if (this.data.pushButton) { return super.getOperatorList( @@ -63252,7 +63252,7 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { task, intent, false, - annotationStorage, + annotationStorage ); } let value = null; @@ -63268,7 +63268,7 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { task, intent, renderForms, - annotationStorage, + annotationStorage ); } if (value === null || value === undefined) { @@ -63283,12 +63283,12 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { const savedAppearance = this.appearance; const savedMatrix = lookupMatrix( appearance.dict.getArray("Matrix"), - IDENTITY_MATRIX, + IDENTITY_MATRIX ); if (rotation) { appearance.dict.set( "Matrix", - this.getRotationMatrix(annotationStorage), + this.getRotationMatrix(annotationStorage) ); } this.appearance = appearance; @@ -63297,7 +63297,7 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { task, intent, renderForms, - annotationStorage, + annotationStorage ); this.appearance = savedAppearance; appearance.dict.set("Matrix", savedMatrix); @@ -63641,10 +63641,10 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation { const isOptionArray = Array.isArray(option); this.data.options[i] = { exportValue: this._decodeFormValue( - isOptionArray ? xref.fetchIfRef(option[0]) : option, + isOptionArray ? xref.fetchIfRef(option[0]) : option ), displayValue: this._decodeFormValue( - isOptionArray ? xref.fetchIfRef(option[1]) : option, + isOptionArray ? xref.fetchIfRef(option[1]) : option ), }; } @@ -63748,14 +63748,14 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation { } if (!this._defaultAppearance) { this.data.defaultAppearanceData = parseDefaultAppearance( - (this._defaultAppearance = "/Helvetica 0 Tf 0 g"), + (this._defaultAppearance = "/Helvetica 0 Tf 0 g") ); } const font = await WidgetAnnotation._getFontData( evaluator, task, this.data.defaultAppearanceData, - this._fieldResources.mergedResources, + this._fieldResources.mergedResources ); let defaultAppearance; let { fontSize } = this.data.defaultAppearanceData; @@ -63775,7 +63775,7 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation { totalWidth - 2 * defaultHPadding, value, font, - -1, + -1 ); } else { defaultAppearance = this._defaultAppearance; @@ -63799,7 +63799,7 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation { for (const index of valueIndices) { if (firstIndex <= index && index < end) { buf.push( - `1 ${totalHeight - (index - firstIndex + 1) * lineHeight} ${totalWidth} ${lineHeight} re f`, + `1 ${totalHeight - (index - firstIndex + 1) * lineHeight} ${totalWidth} ${lineHeight} re f` ); } } @@ -63820,8 +63820,8 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation { 0, prevInfo, defaultHPadding, - -lineHeight + vpadding, - ), + -lineHeight + vpadding + ) ); } buf.push("ET Q EMC"); @@ -63951,7 +63951,7 @@ class FreeTextAnnotation extends MarkupAnnotation { const { fontColor, fontSize } = parseAppearanceStream( this.appearance, evaluatorOptions, - xref, + xref ); this.data.defaultAppearanceData.fontColor = fontColor; this.data.defaultAppearanceData.fontSize = fontSize || 10; @@ -63965,7 +63965,7 @@ class FreeTextAnnotation extends MarkupAnnotation { const { coords, bbox, matrix } = FakeUnicodeFont.getFirstPositionInfo( this.rectangle, this.rotation, - fontSize, + fontSize ); this.data.textPosition = this._transformPoint(coords, bbox, matrix); } @@ -63978,12 +63978,12 @@ class FreeTextAnnotation extends MarkupAnnotation { this.rotation, fontSize, fontColor, - strokeAlpha, + strokeAlpha ); this._streams.push(this.appearance); } else { warn( - "FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.", + "FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly." ); } } @@ -64002,7 +64002,7 @@ class FreeTextAnnotation extends MarkupAnnotation { freetext.set("DA", da); freetext.set( "Contents", - isAscii(value) ? value : stringToUTF16String(value, true), + isAscii(value) ? value : stringToUTF16String(value, true) ); freetext.set("F", 4); freetext.set("Border", [0, 0, 0]); @@ -64044,7 +64044,7 @@ class FreeTextAnnotation extends MarkupAnnotation { fontName: "Helv", fontSize, }, - resources, + resources ); const [x1, y1, x2, y2] = rect; let w = x2 - x1; @@ -64115,7 +64115,7 @@ class FreeTextAnnotation extends MarkupAnnotation { `0 Tc /Helv ${numberToString(newFontSize)} Tf`, ]; buffer.push( - `${firstPoint.join(" ")} Td (${escapeString(encodedLines[0])}) Tj`, + `${firstPoint.join(" ")} Td (${escapeString(encodedLines[0])}) Tj` ); const vShift = numberToString(lineHeight); for (let i = 1, ii = encodedLines.length; i < ii; i++) { @@ -64175,7 +64175,7 @@ class LineAnnotation extends MarkupAnnotation { buffer.push( `${lineCoordinates[0]} ${lineCoordinates[1]} m`, `${lineCoordinates[2]} ${lineCoordinates[3]} l`, - "S", + "S" ); return [ points[0] - borderWidth, @@ -64265,7 +64265,7 @@ class CircleAnnotation extends MarkupAnnotation { `${x1} ${yMid - yOffset} ${xMid + xOffset} ${y0} ${xMid} ${y0} c`, `${xMid - xOffset} ${y0} ${x0} ${yMid - yOffset} ${x0} ${yMid} c`, `${x0} ${yMid + yOffset} ${xMid - xOffset} ${y1} ${xMid} ${y1} c`, - "h", + "h" ); if (fillColor) { buffer.push("B"); @@ -64318,7 +64318,7 @@ class PolylineAnnotation extends MarkupAnnotation { pointsCallback: (buffer, points) => { for (let i = 0, ii = vertices.length; i < ii; i += 2) { buffer.push( - `${vertices[i]} ${vertices[i + 1]} ${i === 0 ? "m" : "l"}`, + `${vertices[i]} ${vertices[i + 1]} ${i === 0 ? "m" : "l"}` ); } buffer.push("S"); @@ -64393,7 +64393,7 @@ class InkAnnotation extends MarkupAnnotation { for (const inkList of this.data.inkLists) { for (let i = 0, ii = inkList.length; i < ii; i += 2) { buffer.push( - `${inkList[i]} ${inkList[i + 1]} ${i === 0 ? "m" : "l"}`, + `${inkList[i]} ${inkList[i + 1]} ${i === 0 ? "m" : "l"}` ); } buffer.push("S"); @@ -64422,7 +64422,7 @@ class InkAnnotation extends MarkupAnnotation { bs.set("W", thickness); ink.set( "C", - Array.from(color, (c) => c / 255), + Array.from(color, (c) => c / 255) ); ink.set("CA", opacity); const n = new Dict(xref); @@ -64439,7 +64439,7 @@ class InkAnnotation extends MarkupAnnotation { return this.createNewAppearanceStreamForHighlight( annotation, xref, - params, + params ); } const { color, rect, paths, thickness, opacity } = annotation; @@ -64454,11 +64454,11 @@ class InkAnnotation extends MarkupAnnotation { for (const { bezier } of paths) { buffer.length = 0; buffer.push( - `${numberToString(bezier[0])} ${numberToString(bezier[1])} m`, + `${numberToString(bezier[0])} ${numberToString(bezier[1])} m` ); if (bezier.length === 2) { buffer.push( - `${numberToString(bezier[0])} ${numberToString(bezier[1])} l S`, + `${numberToString(bezier[0])} ${numberToString(bezier[1])} l S` ); } else { for (let i = 2, ii = bezier.length; i < ii; i += 6) { @@ -64502,12 +64502,12 @@ class InkAnnotation extends MarkupAnnotation { } = annotation; const appearanceBuffer = [`${getPdfColor(color, true)}`, "/R0 gs"]; appearanceBuffer.push( - `${numberToString(outline[4])} ${numberToString(outline[5])} m`, + `${numberToString(outline[4])} ${numberToString(outline[5])} m` ); for (let i = 6, ii = outline.length; i < ii; i += 6) { if (isNaN(outline[i]) || outline[i] === null) { appearanceBuffer.push( - `${numberToString(outline[i + 4])} ${numberToString(outline[i + 5])} l`, + `${numberToString(outline[i + 4])} ${numberToString(outline[i + 5])} l` ); } else { const curve = outline @@ -64566,7 +64566,7 @@ class HighlightAnnotation extends MarkupAnnotation { `${points[2]} ${points[3]} l`, `${points[6]} ${points[7]} l`, `${points[4]} ${points[5]} l`, - "f", + "f" ); return [points[0], points[2], points[7], points[3]]; }, @@ -64589,13 +64589,13 @@ class HighlightAnnotation extends MarkupAnnotation { highlight.set("QuadPoints", quadPoints); highlight.set( "C", - Array.from(color, (c) => c / 255), + Array.from(color, (c) => c / 255) ); highlight.set("CA", opacity); if (user) { highlight.set( "T", - isAscii(user) ? user : stringToUTF16String(user, true), + isAscii(user) ? user : stringToUTF16String(user, true) ); } if (apRef || ap) { @@ -64612,11 +64612,11 @@ class HighlightAnnotation extends MarkupAnnotation { for (const outline of outlines) { buffer.length = 0; buffer.push( - `${numberToString(outline[0])} ${numberToString(outline[1])} m`, + `${numberToString(outline[0])} ${numberToString(outline[1])} m` ); for (let i = 2, ii = outline.length; i < ii; i += 2) { buffer.push( - `${numberToString(outline[i])} ${numberToString(outline[i + 1])} l`, + `${numberToString(outline[i])} ${numberToString(outline[i + 1])} l` ); } buffer.push("h"); @@ -64667,7 +64667,7 @@ class UnderlineAnnotation extends MarkupAnnotation { buffer.push( `${points[4]} ${points[5] + 1.3} m`, `${points[6]} ${points[7] + 1.3} l`, - "S", + "S" ); return [points[0], points[2], points[7], points[3]]; }, @@ -64740,7 +64740,7 @@ class StrikeOutAnnotation extends MarkupAnnotation { `${(points[1] + points[5]) / 2} m`, `${(points[2] + points[6]) / 2} ` + `${(points[3] + points[7]) / 2} l`, - "S", + "S" ); return [points[0], points[2], points[7], points[3]]; }, @@ -64770,7 +64770,7 @@ class StampAnnotation extends MarkupAnnotation { const hasAlpha = buf32.some( FeatureTest.isLittleEndian ? (x) => x >>> 24 !== 0xff - : (x) => (x & 0xff) !== 0xff, + : (x) => (x & 0xff) !== 0xff ); if (hasAlpha) { ctx.fillStyle = "white"; @@ -65019,7 +65019,7 @@ class XRef { this.encrypt = new CipherTransformFactory( encrypt, fileId, - this.pdfManager.password, + this.pdfManager.password ); } let root; @@ -65062,7 +65062,7 @@ class XRef { const obj = this.readXRefTable(parser); if (!isCmd(obj, "trailer")) { throw new FormatError( - "Invalid XRef table: could not find trailer dictionary", + "Invalid XRef table: could not find trailer dictionary" ); } let dict = parser.getObj(); @@ -65071,7 +65071,7 @@ class XRef { } if (!(dict instanceof Dict)) { throw new FormatError( - "Invalid XRef table: could not parse trailer dictionary", + "Invalid XRef table: could not parse trailer dictionary" ); } delete this.tableState; @@ -65096,7 +65096,7 @@ class XRef { const count = tableState.entryCount; if (!Number.isInteger(first) || !Number.isInteger(count)) { throw new FormatError( - "Invalid XRef table: wrong types in subsection header", + "Invalid XRef table: wrong types in subsection header" ); } for (let i = tableState.entryNum; i < count; i++) { @@ -65124,7 +65124,7 @@ class XRef { !(entry.free || entry.uncompressed) ) { throw new FormatError( - `Invalid entry in XRef subsection: ${first}, ${count}`, + `Invalid entry in XRef subsection: ${first}, ${count}` ); } if (i === 0 && entry.free && first === 1) { @@ -65182,7 +65182,7 @@ class XRef { !Number.isInteger(generationFieldWidth) ) { throw new FormatError( - `Invalid XRef entry fields length: ${first}, ${n}`, + `Invalid XRef entry fields length: ${first}, ${n}` ); } for (let i = streamState.entryNum; i < n; ++i) { @@ -65356,7 +65356,7 @@ class XRef { if (match[1] !== "endobj") { warn( `indexObjects: Found "${match[1]}" inside of another "obj", ` + - 'caused by missing "endobj" -- trying to recover.', + 'caused by missing "endobj" -- trying to recover.' ); contentLength -= match[1].length + 1; } @@ -65385,7 +65385,7 @@ class XRef { if (match[1] !== "startxref") { warn( `indexObjects: Found "${match[1]}" after "trailer", ` + - 'caused by missing "startxref" -- trying to recover.', + 'caused by missing "startxref" -- trying to recover.' ); contentLength -= match[1].length + 1; } @@ -65607,13 +65607,13 @@ class XRef { return this.fetchUncompressed( Ref.get(num, xrefEntry.gen), xrefEntry, - suppressEncryption, + suppressEncryption ); } throw new XRefEntryException(msg); } const stream = this.stream.makeSubStream( - xrefEntry.offset + this.stream.start, + xrefEntry.offset + this.stream.start ); const parser = new Parser({ lexer: new Lexer(stream), @@ -65666,13 +65666,13 @@ class XRef { const num = parser.getObj(); if (!Number.isInteger(num)) { throw new FormatError( - `invalid object number in the ObjStm stream: ${num}`, + `invalid object number in the ObjStm stream: ${num}` ); } const offset = parser.getObj(); if (!Number.isInteger(offset)) { throw new FormatError( - `invalid object offset in the ObjStm stream: ${offset}`, + `invalid object offset in the ObjStm stream: ${offset}` ); } nums[i] = num; @@ -65687,7 +65687,7 @@ class XRef { } parser = new Parser({ lexer: new Lexer( - stream.makeSubStream(start + offsets[i], length, stream.dict), + stream.makeSubStream(start + offsets[i], length, stream.dict) ), xref: this, allowStreams: true, @@ -65801,7 +65801,7 @@ class Page { return shadow( this, "resources", - resources instanceof Dict ? resources : Dict.empty, + resources instanceof Dict ? resources : Dict.empty ); } _getBoundingBox(name) { @@ -65810,7 +65810,7 @@ class Page { } const box = lookupNormalRect( this._getInheritableProperty(name, true), - null, + null ); if (box) { if (box[2] - box[0] > 0 && box[3] - box[1] > 0) { @@ -65824,14 +65824,14 @@ class Page { return shadow( this, "mediaBox", - this._getBoundingBox("MediaBox") || LETTER_SIZE_MEDIABOX, + this._getBoundingBox("MediaBox") || LETTER_SIZE_MEDIABOX ); } get cropBox() { return shadow( this, "cropBox", - this._getBoundingBox("CropBox") || this.mediaBox, + this._getBoundingBox("CropBox") || this.mediaBox ); } get userUnit() { @@ -65878,7 +65878,7 @@ class Page { if (Array.isArray(content)) { return new StreamsSequenceStream( content, - this._onSubStreamError.bind(this), + this._onSubStreamError.bind(this) ); } return new NullStream(); @@ -65892,7 +65892,7 @@ class Page { ? { bbox: this.xfaFactory.getBoundingBox(this.pageIndex), } - : null, + : null ); } #replaceIdByRef(annotations, deletedAnnotations, existingAnnotations) { @@ -65934,13 +65934,13 @@ class Page { this.#replaceIdByRef(annotations, deletedAnnotations, existingAnnotations); const pageDict = this.pageDict; const annotationsArray = this.annotations.filter( - (a) => !(a instanceof Ref && deletedAnnotations.has(a)), + (a) => !(a instanceof Ref && deletedAnnotations.has(a)) ); const newData = await AnnotationFactory.saveNewAnnotations( partialEvaluator, task, annotations, - imagePromises, + imagePromises ); for (const { ref } of newData.annotations) { if (ref instanceof Ref && !existingAnnotations.has(ref)) { @@ -65960,7 +65960,7 @@ class Page { ref: this.ref, data: buffer.join(""), }, - ...newData.annotations, + ...newData.annotations ); for (const deletedRef of deletedAnnotations) { objects.push({ @@ -65995,10 +65995,10 @@ class Page { .catch(function (reason) { warn( "save - ignoring annotation data during " + - `"${task.name}" task: "${reason}".`, + `"${task.name}" task: "${reason}".` ); return null; - }), + }) ); } return Promise.all(newRefsPromises).then(function (newRefs) { @@ -66073,13 +66073,13 @@ class Page { imagePromises = AnnotationFactory.generateImages( annotationWithBitmaps, this.xref, - isOffscreenCanvasSupported, + isOffscreenCanvasSupported ); } else { imagePromises = AnnotationFactory.generateImages( newAnnots, this.xref, - isOffscreenCanvasSupported, + isOffscreenCanvasSupported ); } deletedAnnotations = new RefSet(); @@ -66094,9 +66094,9 @@ class Page { partialEvaluator, task, newAnnots, - imagePromises, + imagePromises ); - }, + } ); } const pageListPromise = Promise.all([ @@ -66107,7 +66107,7 @@ class Page { handler.send("StartRenderPage", { transparency: partialEvaluator.hasBlendModes( this.resources, - this.nonBlendModesSet, + this.nonBlendModesSet ), pageIndex: this.pageIndex, cacheKey, @@ -66130,13 +66130,13 @@ class Page { ]).then(function ([pageOpList, annotations, newAnnotations]) { if (newAnnotations) { annotations = annotations.filter( - (a) => !(a.ref && deletedAnnotations.has(a.ref)), + (a) => !(a.ref && deletedAnnotations.has(a.ref)) ); for (let i = 0, ii = newAnnotations.length; i < ii; i++) { const newAnnotation = newAnnotations[i]; if (newAnnotation.refToReplace) { const j = annotations.findIndex( - (a) => a.ref && isRefsEqual(a.ref, newAnnotation.refToReplace), + (a) => a.ref && isRefsEqual(a.ref, newAnnotation.refToReplace) ); if (j >= 0) { annotations.splice(j, 1, newAnnotation); @@ -66175,19 +66175,19 @@ class Page { task, intent, renderForms, - annotationStorage, + annotationStorage ) .catch(function (reason) { warn( "getOperatorList - ignoring annotation data during " + - `"${task.name}" task: "${reason}".`, + `"${task.name}" task: "${reason}".` ); return { opList: null, separateForm: false, separateCanvas: false, }; - }), + }) ); } } @@ -66308,9 +66308,9 @@ class Page { ]) .catch(function (reason) { warn( - `getAnnotationsData - ignoring textContent during "${task.name}" task: "${reason}".`, + `getAnnotationsData - ignoring textContent during "${task.name}" task: "${reason}".` ); - }), + }) ); } } @@ -66342,11 +66342,11 @@ class Page { annotationGlobals, this._localIdFactory, false, - this.ref, + this.ref ).catch(function (reason) { warn(`_parsedAnnotations: "${reason}".`); return null; - }), + }) ); } const sortedAnnotations = []; @@ -66379,7 +66379,7 @@ class Page { const actions = collectActions( this.xref, this.pageDict, - PageActionEventType, + PageActionEventType ); return shadow(this, "jsActions", actions); } @@ -66436,7 +66436,7 @@ class PDFDocument { constructor(pdfManager, stream) { if (stream.length <= 0) { throw new InvalidPDFException( - "The PDF file is empty, i.e. its size is zero bytes.", + "The PDF file is empty, i.e. its size is zero bytes." ); } this.pdfManager = pdfManager; @@ -66576,7 +66576,7 @@ class PDFDocument { } return this._hasOnlyDocumentSignatures( field.get("Kids"), - recursionDepth, + recursionDepth ); } const isSignature = isName(field.get("FT"), "Sig"); @@ -66723,7 +66723,7 @@ class PDFDocument { } const options = Object.assign( Object.create(null), - this.pdfManager.evaluatorOptions, + this.pdfManager.evaluatorOptions ); options.useSystemFonts = false; const partialEvaluator = new PartialEvaluator({ @@ -66781,12 +66781,12 @@ class PDFDocument { task, initialState, null, - cssFontInfo, + cssFontInfo ) .catch(function (reason) { warn(`loadXfaFonts: "${reason}".`); return null; - }), + }) ); } await Promise.all(promises); @@ -66848,12 +66848,12 @@ class PDFDocument { fontFamily: missing, fontWeight: fontInfo.fontWeight, italicAngle: fontInfo.italicAngle, - }, + } ) .catch(function (reason) { warn(`loadXfaFonts: "${reason}".`); return null; - }), + }) ); } } @@ -67005,7 +67005,7 @@ class PDFDocument { hashOriginal = calculateMD5( this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, - FINGERPRINT_FIRST_BYTES, + FINGERPRINT_FIRST_BYTES ); } return shadow(this, "fingerprints", [ @@ -67037,7 +67037,7 @@ class PDFDocument { } } throw new FormatError( - "The Linearization dictionary doesn't point to a valid Page dictionary.", + "The Linearization dictionary doesn't point to a valid Page dictionary." ); } catch (reason) { warn(`_getLinearizationPage: "${reason.message}".`); @@ -67153,7 +67153,7 @@ class PDFDocument { systemFontCache: catalog.systemFontCache, nonBlendModesSet: catalog.nonBlendModesSet, xfaFactory: null, - }), + }) ); } this._pagePromises.set(pageIndex, promise); @@ -67174,7 +67174,7 @@ class PDFDocument { fieldRef, promises, annotationGlobals, - visitedRefs, + visitedRefs ) { const { xref } = this; if (!(fieldRef instanceof Ref) || visitedRefs.has(fieldRef)) { @@ -67218,13 +67218,13 @@ class PDFDocument { annotationGlobals, null, true, - null, + null ) .then((annotation) => annotation?.getFieldObject()) .catch(function (reason) { warn(`#collectFieldObjects: "${reason}".`); return null; - }), + }) ); if (!field.has("Kids")) { return; @@ -67237,7 +67237,7 @@ class PDFDocument { kid, promises, annotationGlobals, - visitedRefs, + visitedRefs ); } } @@ -67262,7 +67262,7 @@ class PDFDocument { fieldRef, fieldPromises, annotationGlobals, - visitedRefs, + visitedRefs ); } const allPromises = []; @@ -67273,7 +67273,7 @@ class PDFDocument { if (fields.length > 0) { allFields[name] = fields; } - }), + }) ); } await Promise.all(allPromises); @@ -67295,7 +67295,7 @@ class PDFDocument { } if (fieldObjects) { return Object.values(fieldObjects).some((fieldObject) => - fieldObject.some((object) => object.actions !== null), + fieldObject.some((object) => object.actions !== null) ); } return false; @@ -67324,7 +67324,7 @@ class PDFDocument { return shadow( this, "annotationGlobals", - AnnotationFactory.createGlobals(this.pdfManager), + AnnotationFactory.createGlobals(this.pdfManager) ); } } // CONCATENATED MODULE: ./src/core/pdf_manager.js @@ -67498,7 +67498,7 @@ function wrapReason(reason) { ) ) { unreachable( - 'wrapReason: Expected "reason" to be a (possibly cloned) Error.', + 'wrapReason: Expected "reason" to be a (possibly cloned) Error.' ); } switch (reason.name) { @@ -67579,7 +67579,7 @@ class MessageHandler { callbackId: data.callbackId, reason: wrapReason(reason), }); - }, + } ); return; } @@ -67606,7 +67606,7 @@ class MessageHandler { action: actionName, data, }, - transfers, + transfers ); } sendWithPromise(actionName, data, transfers) { @@ -67622,7 +67622,7 @@ class MessageHandler { callbackId, data, }, - transfers, + transfers ); } catch (ex) { capability.reject(ex); @@ -67654,7 +67654,7 @@ class MessageHandler { data, desiredSize: controller.desiredSize, }, - transfers, + transfers ); return startCapability.promise; }, @@ -67685,7 +67685,7 @@ class MessageHandler { return cancelCapability.promise; }, }, - queueingStrategy, + queueingStrategy ); } #createStreamSink(data) { @@ -67714,7 +67714,7 @@ class MessageHandler { streamId, chunk, }, - transfers, + transfers ); }, close() { @@ -67774,7 +67774,7 @@ class MessageHandler { streamId, reason: wrapReason(reason), }); - }, + } ); } #processStreamMessage(data) { @@ -67834,7 +67834,7 @@ class MessageHandler { streamId, reason: wrapReason(reason), }); - }, + } ); break; case StreamKind.ENQUEUE: @@ -67890,7 +67890,7 @@ class MessageHandler { streamId, reason: wrapReason(reason), }); - }, + } ); streamSink.sinkCapability.reject(wrapReason(data.reason)); streamSink.isCancelled = true; @@ -67923,7 +67923,7 @@ class PDFWorkerStream { getFullReader() { assert( !this._fullRequestReader, - "PDFWorkerStream.getFullReader can only be called once.", + "PDFWorkerStream.getFullReader can only be called once." ); this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler); return this._fullRequestReader; @@ -68066,7 +68066,7 @@ class WorkerMessageHandler { if (apiVersion !== workerVersion) { throw new Error( `The API version "${apiVersion}" does not match ` + - `the Worker version "${workerVersion}".`, + `the Worker version "${workerVersion}".` ); } const enumerableProperties = []; @@ -68077,7 +68077,7 @@ class WorkerMessageHandler { throw new Error( "The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + - "; thus breaking e.g. `for...in` iteration of `Array`s.", + "; thus breaking e.g. `for...in` iteration of `Array`s." ); } const workerHandlerName = docId + "_worker"; @@ -68274,7 +68274,7 @@ class WorkerMessageHandler { } else { handler.send( "DocException", - new UnknownErrorException(ex.message, ex.toString()), + new UnknownErrorException(ex.message, ex.toString()) ); } } @@ -68297,7 +68297,7 @@ class WorkerMessageHandler { .then(function (newPdfManager) { if (terminated) { newPdfManager.terminate( - new AbortException("Worker was terminated."), + new AbortException("Worker was terminated.") ); throw new Error("Worker was terminated"); } @@ -68399,7 +68399,7 @@ class WorkerMessageHandler { (reason) => { finishWorkerTask(task); throw reason; - }, + } ); }); }); @@ -68462,7 +68462,7 @@ class WorkerMessageHandler { const imagePromises = AnnotationFactory.generateImages( annotationStorage.values(), xref, - pdfManager.evaluatorOptions.isOffscreenCanvasSupported, + pdfManager.evaluatorOptions.isOffscreenCanvasSupported ); const newAnnotationPromises = structTreeRoot === undefined ? promises : []; @@ -68475,7 +68475,7 @@ class WorkerMessageHandler { .finally(function () { finishWorkerTask(task); }); - }), + }) ); } if (structTreeRoot === null) { @@ -68489,7 +68489,7 @@ class WorkerMessageHandler { newRefs, }); return newRefs; - }), + }) ); } else if (structTreeRoot) { promises.push( @@ -68500,7 +68500,7 @@ class WorkerMessageHandler { newRefs, }); return newRefs; - }), + }) ); } } @@ -68516,7 +68516,7 @@ class WorkerMessageHandler { .finally(function () { finishWorkerTask(task); }); - }), + }) ); } } @@ -68594,7 +68594,7 @@ class WorkerMessageHandler { }).finally(() => { xref.resetNewTemporaryRef(); }); - }, + } ); handler.on("GetOperatorList", function (data, sink) { const pageIndex = data.pageIndex; @@ -68617,7 +68617,7 @@ class WorkerMessageHandler { if (start) { info( `page=${pageIndex + 1} - getOperatorList: time=` + - `${Date.now() - start}ms, len=${operatorListInfo.length}`, + `${Date.now() - start}ms, len=${operatorListInfo.length}` ); } sink.close(); @@ -68628,7 +68628,7 @@ class WorkerMessageHandler { return; } sink.error(reason); - }, + } ); }); }); @@ -68652,7 +68652,7 @@ class WorkerMessageHandler { if (start) { info( `page=${pageIndex + 1} - getTextContent: time=` + - `${Date.now() - start}ms`, + `${Date.now() - start}ms` ); } sink.close(); @@ -68663,7 +68663,7 @@ class WorkerMessageHandler { return; } sink.error(reason); - }, + } ); }); }); diff --git a/frontend/src/app/(app)/projects/[projectId]/processes/new/custom-steps/Extraction.tsx b/frontend/src/app/(app)/projects/[projectId]/processes/new/custom-steps/Extraction.tsx index 703d0c5..6851cfb 100644 --- a/frontend/src/app/(app)/projects/[projectId]/processes/new/custom-steps/Extraction.tsx +++ b/frontend/src/app/(app)/projects/[projectId]/processes/new/custom-steps/Extraction.tsx @@ -36,10 +36,10 @@ export const ExtractionStep: React.FC = ({ useState(null); const [currentFileIndex, setCurrentFileIndex] = useState(0); const [fields, setFields] = useState( - templateData ?? [{ key: "", description: "", type: "text" }], + templateData ?? [{ key: "", description: "", type: "text" }] ); const [extractionFields, setExtractionFields] = useState( - [], + [] ); const [extractionResult, setExtractionResult] = useState(null); @@ -59,7 +59,7 @@ export const ExtractionStep: React.FC = ({ const { data } = await Extract( project.id, assets[currentFileIndex].id, - fields, + fields ); if (Array.isArray(data.data)) { setExtractionResult(data.data[0]); @@ -72,7 +72,7 @@ export const ExtractionStep: React.FC = ({ const handleProcessStart = async ( fields: ExtractionField[], - multiFields: boolean, + multiFields: boolean ) => { try { const { data } = await StartProcess({ diff --git a/frontend/src/app/(app)/projects/[projectId]/processes/new/custom-steps/ExtractiveSummary.tsx b/frontend/src/app/(app)/projects/[projectId]/processes/new/custom-steps/ExtractiveSummary.tsx index 7f83f35..7cab0f3 100644 --- a/frontend/src/app/(app)/projects/[projectId]/processes/new/custom-steps/ExtractiveSummary.tsx +++ b/frontend/src/app/(app)/projects/[projectId]/processes/new/custom-steps/ExtractiveSummary.tsx @@ -107,7 +107,7 @@ export const ExtractiveSummary: React.FC = ({ }, [assets, project, currentFileIndex]); const handleInputChange = ( - e: React.ChangeEvent, + e: React.ChangeEvent ) => { const { name, value } = e.target; setFormData((prev) => ({ @@ -134,7 +134,7 @@ export const ExtractiveSummary: React.FC = ({ const handleTopicKeyDown = ( e: KeyboardEvent, - type: "positive" | "negative", + type: "positive" | "negative" ) => { if (e.key === "Enter" && e.currentTarget.value.trim() !== "") { e.preventDefault(); diff --git a/frontend/src/app/(app)/projects/[projectId]/processes/new/page.tsx b/frontend/src/app/(app)/projects/[projectId]/processes/new/page.tsx index c72c942..35fdc38 100644 --- a/frontend/src/app/(app)/projects/[projectId]/processes/new/page.tsx +++ b/frontend/src/app/(app)/projects/[projectId]/processes/new/page.tsx @@ -43,7 +43,7 @@ export default function NewProcess() { if (templateProcess) { setSelectedProcess(templateType || templateProcess.type); setSelectedOutput( - templateOutput || templateProcess.output_format || "csv", + templateOutput || templateProcess.output_format || "csv" ); } }, [templateProcess, templateType, templateOutput]); diff --git a/frontend/src/app/(app)/projects/page.tsx b/frontend/src/app/(app)/projects/page.tsx index a750ccb..56a301e 100644 --- a/frontend/src/app/(app)/projects/page.tsx +++ b/frontend/src/app/(app)/projects/page.tsx @@ -38,7 +38,7 @@ export default function Projects() { const [page, setPage] = useState(1); const [pageSize] = useState(20); const [deletedProject, setDeletedProject] = useState( - null, + null ); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const { mutateAsync: deleteProject, isPending: deleteLoading } = @@ -121,14 +121,14 @@ export default function Projects() { onSuccess() { setIsDeleteModalOpen(false); toast.success( - `Project "${deletedProject.name}" has been deleted successfully.`, + `Project "${deletedProject.name}" has been deleted successfully.` ); }, onError(error) { console.log(error); toast.error("Failed to delete the project. Please try again."); }, - }, + } ); } }; diff --git a/frontend/src/app/(app)/settings/page.tsx b/frontend/src/app/(app)/settings/page.tsx index 4618a30..adebd5e 100644 --- a/frontend/src/app/(app)/settings/page.tsx +++ b/frontend/src/app/(app)/settings/page.tsx @@ -35,7 +35,7 @@ const ApiKeysSettings: React.FC = () => { onError(error) { console.log(error); }, - }, + } ); }; diff --git a/frontend/src/app/(editor)/projects/[projectId]/processes/[processId]/csv/page.tsx b/frontend/src/app/(editor)/projects/[projectId]/processes/[processId]/csv/page.tsx index 7269dd2..a7fb055 100644 --- a/frontend/src/app/(editor)/projects/[projectId]/processes/[processId]/csv/page.tsx +++ b/frontend/src/app/(editor)/projects/[projectId]/processes/[processId]/csv/page.tsx @@ -34,7 +34,7 @@ const ProcessPage = () => { setIsLoading(true); try { const response = await fetch( - `${BASE_API_URL}/${processApiUrl}/${processId}/get-csv`, + `${BASE_API_URL}/${processApiUrl}/${processId}/get-csv` ); const { data: { csv }, @@ -64,7 +64,7 @@ const ProcessPage = () => { const handleDownloadCsv = useCallback(async () => { try { const response = await fetch( - `${BASE_API_URL}/${processApiUrl}/${processId}/download-csv`, + `${BASE_API_URL}/${processApiUrl}/${processId}/download-csv` ); const blob = await response.blob(); const url = window.URL.createObjectURL(blob); diff --git a/frontend/src/components/AddFieldsAIDrawer.tsx b/frontend/src/components/AddFieldsAIDrawer.tsx index 51294f2..f53a98b 100644 --- a/frontend/src/components/AddFieldsAIDrawer.tsx +++ b/frontend/src/components/AddFieldsAIDrawer.tsx @@ -32,14 +32,14 @@ const AddFieldsAIDrawer = ({ setError(null); const standardizedFieldsList = fieldsList.map((field) => - field.replace(/\s+/g, "_"), + field.replace(/\s+/g, "_") ); if (standardizedFieldsList.length > 0) { try { const { data } = await GetAIFieldDescriptions( project_id, - standardizedFieldsList, + standardizedFieldsList ); setIsLoading(false); onSubmit(data.data); diff --git a/frontend/src/components/AppModal.tsx b/frontend/src/components/AppModal.tsx index 43fde5f..b39a8d6 100644 --- a/frontend/src/components/AppModal.tsx +++ b/frontend/src/components/AppModal.tsx @@ -75,7 +75,7 @@ export const AppModal = ({ )} , - document.body, + document.body )} ); diff --git a/frontend/src/components/AssetUploadModal.tsx b/frontend/src/components/AssetUploadModal.tsx index dd300ed..6c01044 100644 --- a/frontend/src/components/AssetUploadModal.tsx +++ b/frontend/src/components/AssetUploadModal.tsx @@ -13,7 +13,7 @@ interface IProps { onCancel: () => void; onSubmit: ( type: string, - data: string[] | FileList | null, + data: string[] | FileList | null ) => Promise; isOpen: boolean; } diff --git a/frontend/src/components/ChatBox.tsx b/frontend/src/components/ChatBox.tsx index 9e54ffb..4b44544 100644 --- a/frontend/src/components/ChatBox.tsx +++ b/frontend/src/components/ChatBox.tsx @@ -8,6 +8,7 @@ import ChatLoader from "./ChatLoader"; import { useQuery } from "@tanstack/react-query"; import { motion } from "framer-motion"; import ChatBubble from "@/components/ui/ChatBubble"; +import { ChatReferences } from "@/interfaces/chat"; export const NoChatPlaceholder = ({ isLoading }: { isLoading: boolean }) => { return ( @@ -31,6 +32,7 @@ export const NoChatPlaceholder = ({ isLoading }: { isLoading: boolean }) => { interface ChatMessage { sender: string; text: string; + references?: Array; timestamp: Date; } @@ -81,6 +83,7 @@ const ChatBox = ({ const bot_response = { sender: "bot", text: response.response, + references: response.response_references || [], timestamp: new Date(), }; setLoading(false); @@ -121,6 +124,7 @@ const ChatBox = ({ diff --git a/frontend/src/components/ChatReferenceDrawer.tsx b/frontend/src/components/ChatReferenceDrawer.tsx new file mode 100644 index 0000000..b7f48d3 --- /dev/null +++ b/frontend/src/components/ChatReferenceDrawer.tsx @@ -0,0 +1,40 @@ +"use client"; +import React from "react"; +import Drawer from "./ui/Drawer"; +import HighlightPdfViewer from "../ee/components/HighlightPdfViewer"; +import { FlattenedSource, Source } from "@/interfaces/processSteps"; +import { BASE_STORAGE_URL } from "@/constants"; + +interface IProps { + filename: string; + project_id: number; + sources: FlattenedSource[]; + isOpen?: boolean; + onCancel: () => void; +} + +const ChatReferenceDrawer = ({ + isOpen = true, + project_id, + sources, + filename, + onCancel, +}: IProps) => { + const file_url = + project_id && filename + ? `${BASE_STORAGE_URL}/${project_id}/${filename}` + : null; + if (!filename) { + console.error("Filename is required to display the reference"); + } + + return ( + + {file_url && ( + + )} + + ); +}; + +export default ChatReferenceDrawer; diff --git a/frontend/src/components/DataTable.tsx b/frontend/src/components/DataTable.tsx index edd0bb3..48d4d7a 100644 --- a/frontend/src/components/DataTable.tsx +++ b/frontend/src/components/DataTable.tsx @@ -7,7 +7,7 @@ import ExtractReferenceDrawer from "./ExtractReferenceDrawer"; function calculateColumnWidth( title: string, - data: Record[], + data: Record[] ): number { const minWidth = 100; const maxWidth = 250; @@ -43,12 +43,13 @@ const DataTable: React.FC = ({ data }) => { Column, unknown>[] >([]); const [selectedRows, setSelectedRows] = useState>( - new Set(), + new Set() ); const [selectRowColumn, setSelectRowColumn] = useState(null); const [displayDrawer, setDisplayDrawer] = useState(false); + const [hoveredCell, setHoveredCell] = useState(null); const gridRef = useRef(null); @@ -63,15 +64,23 @@ const DataTable: React.FC = ({ data }) => { hasProcessId && cellContent !== "" && cellContent !== null && - cellContent !== undefined; + cellContent !== undefined && + props.column.key !== "Filename"; + const cellId = `${props.row.id}-${props.column.key}`; return ( -
+
{ + setTimeout(() => setHoveredCell(cellId), 200); + }} + onMouseLeave={() => setHoveredCell(null)} + > {cellContent} - {showInfoIcon && ( -
+ {showInfoIcon && hoveredCell === cellId && ( +
{ e.stopPropagation(); @@ -89,7 +98,7 @@ const DataTable: React.FC = ({ data }) => {
); }, - [], + [hoveredCell] ); useEffect(() => { diff --git a/frontend/src/components/DragAndDrop.tsx b/frontend/src/components/DragAndDrop.tsx index bc2af05..13cc8ea 100644 --- a/frontend/src/components/DragAndDrop.tsx +++ b/frontend/src/components/DragAndDrop.tsx @@ -27,7 +27,7 @@ const DragAndDrop: React.FC = ({ onFileSelect, accept }) => { setFiles(selectedFiles); onFileSelect(selectedFiles); }, - [onFileSelect], + [onFileSelect] ); const handleDragEnter = useCallback((e: DragEvent) => { @@ -57,15 +57,15 @@ const DragAndDrop: React.FC = ({ onFileSelect, accept }) => { const validFiles = Array.from(files).filter( (file) => file.size <= MAX_FILE_SIZE && - acceptedTypes.some((type) => file.type.match(type)), + acceptedTypes.some((type) => file.type.match(type)) ); const invalidFileFormat = Array.from(files).filter( - (file) => !acceptedTypes.some((type) => file.type.match(type)), + (file) => !acceptedTypes.some((type) => file.type.match(type)) ); const invalidFileSize = Array.from(files).filter( - (file) => file.size > MAX_FILE_SIZE, + (file) => file.size > MAX_FILE_SIZE ); if (invalidFileSize.length > 0) { @@ -73,7 +73,7 @@ const DragAndDrop: React.FC = ({ onFileSelect, accept }) => { .map((file) => file.name) .join("\n"); toast.error( - `Max file size is 20 MB, unable to upload files: \n${invalidFileNames}`, + `Max file size is 20 MB, unable to upload files: \n${invalidFileNames}` ); } @@ -82,7 +82,7 @@ const DragAndDrop: React.FC = ({ onFileSelect, accept }) => { .map((file) => file.name) .join("\n"); toast.error( - `Invalid file format, unable to upload files: \n${invalidFileNames}`, + `Invalid file format, unable to upload files: \n${invalidFileNames}` ); } @@ -100,7 +100,7 @@ const DragAndDrop: React.FC = ({ onFileSelect, accept }) => { handleFiles(e.dataTransfer.files); } }, - [accept, onFilesChange], + [accept, onFilesChange] ); const removeFiles = useCallback( @@ -109,7 +109,7 @@ const DragAndDrop: React.FC = ({ onFileSelect, accept }) => { setFiles(null); onFileSelect(null); }, - [onFileSelect], + [onFileSelect] ); const handleClick = useCallback(() => { @@ -122,7 +122,7 @@ const DragAndDrop: React.FC = ({ onFileSelect, accept }) => { handleFiles(e.target.files); } }, - [onFilesChange], + [onFilesChange] ); return ( diff --git a/frontend/src/components/DragOverlay.tsx b/frontend/src/components/DragOverlay.tsx index 32f0375..05a7725 100644 --- a/frontend/src/components/DragOverlay.tsx +++ b/frontend/src/components/DragOverlay.tsx @@ -39,7 +39,7 @@ const DragOverlay: React.FC = ({ onFileDrop, accept }) => { onFileDrop(droppedFiles); } }, - [onFileDrop], + [onFileDrop] ); useEffect(() => { diff --git a/frontend/src/components/ExtractReferenceDrawer.tsx b/frontend/src/components/ExtractReferenceDrawer.tsx index c9c647d..63b64c8 100644 --- a/frontend/src/components/ExtractReferenceDrawer.tsx +++ b/frontend/src/components/ExtractReferenceDrawer.tsx @@ -3,10 +3,6 @@ import React from "react"; import Drawer from "./ui/Drawer"; import { GetProcessStepReferences } from "@/services/processSteps"; import { useQuery } from "@tanstack/react-query"; -import ReactMarkdown from "react-markdown"; -import remarkGfm from "remark-gfm"; -import rehypeRaw from "rehype-raw"; -import { markify_text } from "@/lib/utils"; import HighlightPdfViewer from "../ee/components/HighlightPdfViewer"; import { FlattenedSource, Source } from "@/interfaces/processSteps"; import { BASE_STORAGE_URL } from "@/constants"; @@ -38,7 +34,7 @@ const ExtractReferenceDrawer = ({ const output = data?.output_reference?.[index]?.[column_name] ?? null; const filtered_output = data?.output_reference?.[index].filter( - (item: Source) => item.name == column_name, + (item: Source) => item.name == column_name ); const filteredSourceDetails: FlattenedSource[] = []; @@ -58,18 +54,16 @@ const ExtractReferenceDrawer = ({ } }); - let file_url = null; - if (data?.project_id) { - file_url = `${BASE_STORAGE_URL}/${data?.project_id}/${filename}`; + const file_url = + data?.project_id && filename + ? `${BASE_STORAGE_URL}/${data?.project_id}/${filename}` + : null; + if (!filename) { + console.error("Filename is required to display the reference"); } return ( -
- - {output && markify_text(output)} - -
{file_url && ( >( - { 0: true }, + { 0: true } ); const [isLoading, setIsLoading] = useState(false); const [displayPsModel, setDisplayPsModel] = useState(false); @@ -93,7 +93,7 @@ export default function ExtractionForm({ const updateField = ( index: number, key: keyof Field, - value: FieldType | string, + value: FieldType | string ) => { const newFields = [...fields]; if (key === "key") { diff --git a/frontend/src/components/ProcessSelectionDrawer.tsx b/frontend/src/components/ProcessSelectionDrawer.tsx index 55daa6f..44bd61e 100644 --- a/frontend/src/components/ProcessSelectionDrawer.tsx +++ b/frontend/src/components/ProcessSelectionDrawer.tsx @@ -44,7 +44,7 @@ export const ProcessSelectionDrawer = ({ onSubmit, }: IProps) => { const [selectedTemplate, setSelectedTemplate] = useState( - null, + null ); const [error, setError] = useState(null); @@ -157,7 +157,7 @@ export const ProcessSelectionDrawer = ({
- ), + ) )}
)} diff --git a/frontend/src/components/ProcessesList.tsx b/frontend/src/components/ProcessesList.tsx index 51d80f8..6da19b7 100644 --- a/frontend/src/components/ProcessesList.tsx +++ b/frontend/src/components/ProcessesList.tsx @@ -82,7 +82,7 @@ const ProcessesList: React.FC = ({ projectId }) => { const [currentFile, setCurrentFile] = useState(null); const [isEditing, setIsEditing] = useState(true); const [selectedTemplate, setSelectedTemplate] = useState( - null, + null ); const [openProjectSelection, setOpenProjectSelection] = useState(false); @@ -120,7 +120,7 @@ const ProcessesList: React.FC = ({ projectId }) => { if (processDetails) { const setSummary = async () => { const parsedSummary = await marked.parse( - processDetails.data.output.summary || "", + processDetails.data.output.summary || "" ); setEditedSummary(parsedSummary); }; diff --git a/frontend/src/components/ProjectSelectionDrawer.tsx b/frontend/src/components/ProjectSelectionDrawer.tsx index 5a91dee..8735beb 100644 --- a/frontend/src/components/ProjectSelectionDrawer.tsx +++ b/frontend/src/components/ProjectSelectionDrawer.tsx @@ -19,7 +19,7 @@ export const ProcessSelectionDrawer: React.FC = ({ onSubmit, }) => { const [selectedProject, setSelectedProject] = useState( - null, + null ); const { data: projects, isLoading } = useQuery({ diff --git a/frontend/src/components/ReactQueryClientProvider.tsx b/frontend/src/components/ReactQueryClientProvider.tsx index 39bca83..b2402d5 100644 --- a/frontend/src/components/ReactQueryClientProvider.tsx +++ b/frontend/src/components/ReactQueryClientProvider.tsx @@ -15,7 +15,7 @@ export const ReactQueryClientProvider = ({ staleTime: 60 * 1000, }, }, - }), + }) ); return ( {children} diff --git a/frontend/src/components/RecentTransformations.tsx b/frontend/src/components/RecentTransformations.tsx index 800cdf2..2fdd93b 100644 --- a/frontend/src/components/RecentTransformations.tsx +++ b/frontend/src/components/RecentTransformations.tsx @@ -23,7 +23,7 @@ const RecentTransformations = ({ projectId }: { projectId?: string }) => { const completedProcesses = processes?.filter( - (process: ProcessData) => process.status === ProcessStatus.COMPLETED, + (process: ProcessData) => process.status === ProcessStatus.COMPLETED ) || []; if (completedProcesses.length === 0) { diff --git a/frontend/src/components/ui/ChatBubble.tsx b/frontend/src/components/ui/ChatBubble.tsx index 873f6de..ef16fec 100644 --- a/frontend/src/components/ui/ChatBubble.tsx +++ b/frontend/src/components/ui/ChatBubble.tsx @@ -1,13 +1,19 @@ -import React from "react"; +import React, { useEffect, useState, useCallback } from "react"; import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; -import rehypeRaw from "rehype-raw"; +import rehypeSanitize from "rehype-sanitize"; import { markify_text } from "@/lib/utils"; +import { ChatReference, ChatReferences } from "@/interfaces/chat"; +import ChatReferenceDrawer from "../ChatReferenceDrawer"; +import { FileIcon, BookOpen, ChevronDown, ExternalLink } from "lucide-react"; +import { motion, AnimatePresence } from "framer-motion"; +import MessageWithReferences from "./MessageWithReferences"; interface ChatBubbleProps { message: string; timestamp: Date; sender: "user" | "bot"; + references?: ChatReferences[]; } export const ChatBubbleWrapper: React.FC<{ @@ -28,17 +34,171 @@ export const ChatBubbleWrapper: React.FC<{ const ChatBubble: React.FC = ({ message, timestamp, + references, sender, }) => { + const [selectedReference, setSelectedReference] = useState< + ChatReference | undefined + >(); + const [openDrawer, setOpenDrawer] = useState(false); + const [indexMap, setIndexMap] = useState<{ [key: string]: number }>({}); + const [flatChatReferences, setFlatChatReferences] = useState( + [] + ); + const [isReferencesExpanded, setIsReferencesExpanded] = useState(false); + + const handleReferenceClick = useCallback((reference: ChatReference) => { + setSelectedReference(reference); + setOpenDrawer(true); + }, []); + + useEffect(() => { + if (references) { + const newIndexMap: { [key: string]: number } = {}; + const newFlatChatReferences: ChatReference[] = []; + let counter = 1; + + references.forEach((referenceData) => { + referenceData.references.forEach((reference) => { + const identifier = `${reference.asset_id}_${reference.page_number}`; + if (!(identifier in newIndexMap)) { + newIndexMap[identifier] = counter++; + } + + const existingRefIndex = newFlatChatReferences.findIndex( + (ref) => + ref.asset_id === reference.asset_id && + ref.page_number === reference.page_number + ); + + if (existingRefIndex === -1) { + newFlatChatReferences.push(reference); + } else { + const existingRef = newFlatChatReferences[existingRefIndex]; + if (!existingRef.source.includes(reference.source[0])) { + existingRef.source.push(reference.source[0]); + } + } + }); + }); + + setIndexMap(newIndexMap); + setFlatChatReferences(newFlatChatReferences); + } + }, [references]); + + const renderReferenceItem = useCallback( + (item: ChatReference, index: number) => ( + +
+ {indexMap[`${item.asset_id}_${item.page_number}`]} +
+
handleReferenceClick(item)} + > + + + {item.filename} + + + Page {item.page_number} + +
+ +
+ ), + [indexMap, handleReferenceClick] + ); + return ( - - - {markify_text(message)} - -
- {timestamp.toLocaleTimeString()} -
-
+
+ + {references && references.length > 0 ? ( + + ) : ( + + {markify_text(message)} + + )} +
+ {timestamp.toLocaleTimeString()} +
+
+ + {references && references.length > 0 && ( +
+ setIsReferencesExpanded(!isReferencesExpanded)} + whileHover={{ scale: 1.02 }} + whileTap={{ scale: 0.98 }} + > + + + References ({flatChatReferences.length}) + + + + + + + {isReferencesExpanded && ( + + {flatChatReferences.map(renderReferenceItem)} + + )} + +
+ )} + + ({ + source: item, + page_number: Number(selectedReference.page_number), + filename: selectedReference.filename, + })) || [] + } + filename={selectedReference?.filename || ""} + project_id={ + selectedReference?.project_id + ? Number(selectedReference.project_id) + : 0 + } + onCancel={() => setOpenDrawer(false)} + /> +
); }; + export default ChatBubble; diff --git a/frontend/src/components/ui/ContextMenu.tsx b/frontend/src/components/ui/ContextMenu.tsx index 4964b65..d1923f5 100644 --- a/frontend/src/components/ui/ContextMenu.tsx +++ b/frontend/src/components/ui/ContextMenu.tsx @@ -29,7 +29,7 @@ const ContextMenuSubTrigger = React.forwardRef< className={cn( "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground", inset && "pl-8", - className, + className )} {...props} > @@ -47,7 +47,7 @@ const ContextMenuSubContent = React.forwardRef< ref={ref} className={cn( "z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", - className, + className )} {...props} /> @@ -63,7 +63,7 @@ const ContextMenuContent = React.forwardRef< ref={ref} className={cn( "z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", - className, + className )} {...props} /> @@ -82,7 +82,7 @@ const ContextMenuItem = React.forwardRef< className={cn( "relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none hover:bg-gray-100 text-black", inset && "pl-8", - className, + className )} {...props} /> @@ -97,7 +97,7 @@ const ContextMenuCheckboxItem = React.forwardRef< ref={ref} className={cn( "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none", - className, + className )} checked={checked} {...props} @@ -121,7 +121,7 @@ const ContextMenuRadioItem = React.forwardRef< ref={ref} className={cn( "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none", - className, + className )} {...props} > @@ -146,7 +146,7 @@ const ContextMenuLabel = React.forwardRef< className={cn( "px-2 py-1.5 text-sm font-semibold text-foreground", inset && "pl-8", - className, + className )} {...props} /> @@ -173,7 +173,7 @@ const ContextMenuShortcut = ({ diff --git a/frontend/src/components/ui/Drawer.tsx b/frontend/src/components/ui/Drawer.tsx index 823b62e..ed63790 100644 --- a/frontend/src/components/ui/Drawer.tsx +++ b/frontend/src/components/ui/Drawer.tsx @@ -57,7 +57,7 @@ const Drawer: React.FC = ({ onClick={onClose} />
{ export const Input = forwardRef( ( { label, id, error, noMargin, containerStyle, autofocus, ...props }, - ref, + ref ) => { return (
( {error &&

{error}

}
); - }, + } ); Input.displayName = "Input"; diff --git a/frontend/src/components/ui/MessageWithReferences.tsx b/frontend/src/components/ui/MessageWithReferences.tsx new file mode 100644 index 0000000..85af4ed --- /dev/null +++ b/frontend/src/components/ui/MessageWithReferences.tsx @@ -0,0 +1,83 @@ +import React from "react"; +import ReactMarkdown from "react-markdown"; +import remarkGfm from "remark-gfm"; +import rehypeSanitize from "rehype-sanitize"; +import { ChatReference, ChatReferences } from "@/interfaces/chat"; +import TooltipWrapper from "./Tooltip"; + +interface MessageWithReferencesProps { + message: string; + references: ChatReferences[]; + indexMap: { [key: string]: number }; + onReferenceClick: (reference: ChatReference) => void; +} + +const MessageWithReferences: React.FC = ({ + message, + references, + indexMap, + onReferenceClick, +}) => { + const renderMessageParts = () => { + const parts: React.ReactNode[] = []; + let lastEnd = 0; + + references.forEach((item: ChatReferences, index: number) => { + const beforeText = message.slice(lastEnd, item.end); + parts.push( + + {children}, + }} + > + {beforeText} + + + ); + + item.references.forEach((reference: ChatReference, refIndex: number) => { + const tooltipContent = `${reference.filename}, page ${reference.page_number}`; + parts.push( + + + onReferenceClick(reference)} + > + {indexMap[`${reference.asset_id}_${reference.page_number}`]} + + + + ); + }); + + lastEnd = item.end; + }); + + if (lastEnd < message.length) { + const remainingText = message.slice(lastEnd); + parts.push( + + {children}, + }} + > + {remainingText} + + + ); + } + + return parts; + }; + + return
{renderMessageParts()}
; +}; + +export default MessageWithReferences; diff --git a/frontend/src/components/ui/RadioGroup.tsx b/frontend/src/components/ui/RadioGroup.tsx index 3e77623..fdd99af 100644 --- a/frontend/src/components/ui/RadioGroup.tsx +++ b/frontend/src/components/ui/RadioGroup.tsx @@ -32,7 +32,7 @@ const RadioGroupItem = React.forwardRef< ref={ref} className={cn( "peer relative h-5 w-5 rounded-full border-2 border-gray-300 text-indigo-500 transition-all duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", - className, + className )} {...props} > diff --git a/frontend/src/components/ui/TabList.tsx b/frontend/src/components/ui/TabList.tsx index a52449c..7c24600 100644 --- a/frontend/src/components/ui/TabList.tsx +++ b/frontend/src/components/ui/TabList.tsx @@ -21,7 +21,7 @@ const TabList: React.FC = ({ actions, }) => { const [activeTab, setActiveTab] = useState( - defaultActiveTab || tabs[0].id, + defaultActiveTab || tabs[0].id ); const handleTabClick = (tabId: string) => { diff --git a/frontend/src/components/ui/Table.tsx b/frontend/src/components/ui/Table.tsx index ab3899e..4edffae 100644 --- a/frontend/src/components/ui/Table.tsx +++ b/frontend/src/components/ui/Table.tsx @@ -44,11 +44,11 @@ export function Table({ actions = [], }: TableProps) { const [highlightedRowIndex, setHighlightedRowIndex] = useState( - null, + null ); const getUploadedFileElements = ( uploadedFiles: [string, Date][], - fileName: string, + fileName: string ): [string, Date][] => { return uploadedFiles.filter(([name, _timestamp]) => name === fileName); }; @@ -87,7 +87,7 @@ export function Table({ return truncateTextFromCenter(child); } return child; - }, + } ), }); } else { @@ -198,7 +198,7 @@ export function Table({ : item.icon} - ), + ) )}
)} @@ -263,7 +263,7 @@ export function Table({ ))} - ), + ) )} diff --git a/frontend/src/components/ui/Tooltip.tsx b/frontend/src/components/ui/Tooltip.tsx index ce76083..960dc80 100644 --- a/frontend/src/components/ui/Tooltip.tsx +++ b/frontend/src/components/ui/Tooltip.tsx @@ -19,7 +19,7 @@ const TooltipWrapper: React.FC = ({ return ( -
{children}
+
{children}
); }; diff --git a/frontend/src/ee/components/HighlightPdfViewer.module.css b/frontend/src/ee/components/HighlightPdfViewer.module.css new file mode 100644 index 0000000..0a3d1bd --- /dev/null +++ b/frontend/src/ee/components/HighlightPdfViewer.module.css @@ -0,0 +1,98 @@ +.pdfViewer { + width: 100%; + height: 100%; + position: relative; +} + +.pdfViewer :global(.react-pdf__Document) { + line-height: initial; +} + +.pdfViewer :global(.react-pdf__message) { + display: none !important; +} + +.pageContainer { + margin: 0; + padding: 0; + page-break-inside: avoid; + min-height: 100vh; + position: relative; +} + +.pdfPage { + margin: 0; + padding: 0; +} + +.pdfPage :global(.react-pdf__Page__textContent) { + display: block !important; + opacity: 0.2; + color: transparent; + user-select: text; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; +} + +.pdfPage :global(.react-pdf__Page__annotations) { + display: none; +} + +.highlightLayer { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + pointer-events: none; +} + +.highlightDiv { + position: absolute; + background-color: rgba(255, 255, 0, 0.3); + pointer-events: none; +} + +.hidden { + display: none !important; +} + +/* Hide all possible loading messages */ +.pdfViewer :global(.react-pdf__message), +.pdfViewer :global(.react-pdf__Page__loading), +.pdfViewer :global(.react-pdf__Document__loading) { + display: none !important; +} + +/* Loader styles */ +.loaderContainer { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + display: flex; + justify-content: center; + align-items: center; + background-color: rgba(255, 255, 255, 0.8); + z-index: 1000; + width: 100px; + height: 100px; + border-radius: 10px; +} + +.loader { + width: 40px; + height: 40px; + color: #3498db; + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} diff --git a/frontend/src/ee/components/HighlightPdfViewer.tsx b/frontend/src/ee/components/HighlightPdfViewer.tsx index 9dea952..80dc045 100644 --- a/frontend/src/ee/components/HighlightPdfViewer.tsx +++ b/frontend/src/ee/components/HighlightPdfViewer.tsx @@ -1,8 +1,11 @@ import { FlattenedSource } from "@/interfaces/processSteps"; +import { removePunctuation } from "@/lib/utils"; import React, { useRef, useState, useEffect } from "react"; import { Document, Page, pdfjs } from "react-pdf"; import "react-pdf/dist/esm/Page/AnnotationLayer.css"; import "react-pdf/dist/esm/Page/TextLayer.css"; +import styles from "./HighlightPdfViewer.module.css"; +import { Loader2 } from "lucide-react"; // Define types for the highlight source interface HighlightCoordinate { @@ -23,6 +26,8 @@ const HighlightPdfViewer: React.FC = ({ }) => { const [numPages, setNumPages] = useState(null); const [onScrolled, setOnScrolled] = useState(false); + const [visiblePages, setVisiblePages] = useState([]); + const [isLoading, setIsLoading] = useState(true); const viewerRef = useRef(null); const activePage = @@ -38,6 +43,8 @@ const HighlightPdfViewer: React.FC = ({ const onDocumentLoadSuccess = ({ numPages }: { numPages: number }) => { setNumPages(numPages); + setVisiblePages([activePage]); + setIsLoading(false); }; const scrollToPage = (pageNumber: number) => { @@ -50,23 +57,34 @@ const HighlightPdfViewer: React.FC = ({ // Highlighting logic for both custom coordinates and text const highlightText = ( pageNumber: number, - sources: HighlightCoordinate[], + sources: HighlightCoordinate[] ) => { - const pageCanvas = document.querySelector( - `#page_${pageNumber} canvas`, + const pageContainer = document.querySelector( + `#page_${pageNumber}` ); - if (!pageCanvas) { - console.log("No page canvas found"); - return; - } - const context = pageCanvas.getContext("2d"); - if (!context) { - console.log("No context found"); + + if (!pageContainer) { return; } - context.fillStyle = "rgba(255, 255, 0, 0.3)"; + + const highlightLayer = document.createElement("div"); + highlightLayer.className = styles.highlightLayer; + pageContainer.appendChild(highlightLayer); + sources.forEach((source) => { - context.fillRect(source.x, source.y, source.width, source.height); + const highlightDiv = document.createElement("div"); + + // Set the position and size of the highlight + highlightDiv.style.position = "absolute"; + highlightDiv.style.left = `${source.x / 2}px`; + highlightDiv.style.top = `${source.y / 2}px`; + highlightDiv.style.width = `${source.width / 2}px`; + highlightDiv.style.height = `${source.height / 2}px`; + highlightDiv.style.backgroundColor = "rgba(255, 255, 0, 0.3)"; // Yellow highlight + highlightDiv.style.pointerEvents = "none"; // Allow interactions with underlying text + highlightDiv.classList.add(styles.highlightDiv); + + highlightLayer.appendChild(highlightDiv); }); }; @@ -79,6 +97,7 @@ const HighlightPdfViewer: React.FC = ({ overlap: "No overlap found", position: null, }; + let maxLength = 0; // Loop over each possible starting point in sentence1 @@ -123,7 +142,7 @@ const HighlightPdfViewer: React.FC = ({ const constructCoordinates = ( item: any, viewHeight: number, - viewWidth: number, + viewWidth: number ) => { const { transform, width, height } = item; const x = 2 * transform[4]; @@ -138,13 +157,15 @@ const HighlightPdfViewer: React.FC = ({ // Function to search for text and highlight it const highlightTextInPdf = async (pageNumber: number, text: string) => { + console.log(`Searching for text on page ${pageNumber}:`, text); // Add this line + const loadingTask = pdfjs.getDocument(file); const pdfDocument = await loadingTask.promise; const page = await pdfDocument.getPage(pageNumber); const textContent = await page.getTextContent(); const pageCanvas = document.querySelector( - `#page_${pageNumber} canvas`, + `#page_${pageNumber} canvas` ); if (!pageCanvas) return; @@ -157,14 +178,14 @@ const HighlightPdfViewer: React.FC = ({ return; } - let copyText = text.toLowerCase(); + let copyText = removePunctuation(text.toLowerCase()); let highlightCoordinates: HighlightCoordinate[] = []; let found = false; textContent.items.forEach((item) => { if ("str" in item && typeof item.str === "string") { - const pdfText = item.str.toLowerCase().trim(); + const pdfText = removePunctuation(item.str.toLowerCase().trim()); if (pdfText.length == 0 || copyText.length == 0) return; @@ -179,6 +200,7 @@ const HighlightPdfViewer: React.FC = ({ if (copyText.length == 0) { return; } + const isOverlapAtStart = copyText.startsWith(overlap.overlap); const isOverlapEqualToPdf = overlap.overlap.length === pdfText.length; const isOverlapEqualToCopy = overlap.overlap.length === copyText.length; @@ -187,7 +209,7 @@ const HighlightPdfViewer: React.FC = ({ const highlightCoord = constructCoordinates( item, viewHeight, - viewWidth, + viewWidth ); highlightCoordinates.push(highlightCoord); copyText = copyText.replace(overlap.overlap, "").trim(); @@ -199,7 +221,7 @@ const HighlightPdfViewer: React.FC = ({ const highlightCoord = constructCoordinates( item, viewHeight, - viewWidth, + viewWidth ); highlightCoordinates.push(highlightCoord); copyText = copyText.replace(overlap.overlap, "").trim(); @@ -212,7 +234,7 @@ const HighlightPdfViewer: React.FC = ({ const highlightCoord = constructCoordinates( item, viewHeight, - viewWidth, + viewWidth ); highlightCoordinates.push(highlightCoord); copyText = copyText.replace(overlap.overlap, "").trim(); @@ -225,13 +247,13 @@ const HighlightPdfViewer: React.FC = ({ const highlightCoord = constructCoordinates( item, viewHeight, - viewWidth, + viewWidth ); highlightCoordinates.push(highlightCoord); copyText = copyText.replace(overlap.overlap, "").trim(); } else if (found && copyText.length > 1 && !isOverlapEqualToCopy) { highlightCoordinates = []; - copyText = text.toLowerCase(); + copyText = removePunctuation(text.toLowerCase()); found = false; } } @@ -252,29 +274,69 @@ const HighlightPdfViewer: React.FC = ({ }, [numPages]); useEffect(() => { - const highlightTextTimer = setTimeout(() => { - highlightSources.forEach(async (highlightSource) => { + const highlightAllSources = async () => { + for (const highlightSource of highlightSources) { await highlightTextInPdf( highlightSource.page_number, - highlightSource.source, + highlightSource.source ); - }); - }, 6000); - - return () => clearTimeout(highlightTextTimer); + } + }; + highlightAllSources(); }, [onScrolled]); + const handleIntersection = (entries: IntersectionObserverEntry[]) => { + entries.forEach((entry) => { + const pageNumber = parseInt(entry.target.id.split("_")[1]); + if (entry.isIntersecting) { + setVisiblePages((prev) => + prev.includes(pageNumber) ? prev : [...prev, pageNumber] + ); + } + }); + }; + + useEffect(() => { + const observer = new IntersectionObserver(handleIntersection, { + root: null, + rootMargin: "0px", + threshold: 0.1, + }); + + document.querySelectorAll('[id^="page_"]').forEach((el) => { + observer.observe(el); + }); + + return () => observer.disconnect(); + }, [numPages]); + return ( -
- +
+ {isLoading && ( +
+ +
+ )} +
} + > {Array.from(new Array(numPages || 0), (el, index) => { + const pageNumber = index + 1; return (
- + {visiblePages.includes(pageNumber) && ( +
} + className={styles.pdfPage} + /> + )}
); })} diff --git a/frontend/src/interfaces/chat.ts b/frontend/src/interfaces/chat.ts index 4fcc338..aa7fca6 100644 --- a/frontend/src/interfaces/chat.ts +++ b/frontend/src/interfaces/chat.ts @@ -11,3 +11,19 @@ export interface ChatResponse { export interface ChatStatusResponse { status: boolean; } + +export interface ChatReference { + asset_id: number; + project_id: number; + filename: string; + start: number; + end: number; + page_number: number; + source: string[]; +} + +export interface ChatReferences { + references: ChatReference[]; + start: number; + end: number; +} diff --git a/frontend/src/interfaces/processSteps.ts b/frontend/src/interfaces/processSteps.ts index dd2385b..b87aaf0 100644 --- a/frontend/src/interfaces/processSteps.ts +++ b/frontend/src/interfaces/processSteps.ts @@ -37,4 +37,5 @@ export interface Source { export interface FlattenedSource { source: string; page_number: number; + filename?: string; } diff --git a/frontend/src/lib/requests.ts b/frontend/src/lib/requests.ts index f9bba6a..c5a78ae 100644 --- a/frontend/src/lib/requests.ts +++ b/frontend/src/lib/requests.ts @@ -11,7 +11,7 @@ export const axiosInstance = axios.create({ export async function GetRequest( url: string, - options?: AxiosRequestConfig, + options?: AxiosRequestConfig ): Promise { try { const response = await axiosInstance.get(url, options); @@ -25,7 +25,7 @@ export async function PostRequest( url: string, requestData: object | null, headers = {}, - timeout?: number, + timeout?: number ): Promise { try { const isFormData = requestData instanceof FormData; @@ -45,7 +45,7 @@ export async function PostRequest( export async function PutRequest( url: string, - data: object, + data: object ): Promise> { try { const response = await axiosInstance.put(url, data); @@ -56,7 +56,7 @@ export async function PutRequest( } export async function DeleteRequest( - url: string, + url: string ): Promise> { try { const response = await axiosInstance.delete(url); diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts index 2205a12..21122c0 100644 --- a/frontend/src/lib/utils.ts +++ b/frontend/src/lib/utils.ts @@ -26,7 +26,7 @@ export const isValidURL = (url: string): boolean => { export const truncateTextFromCenter = ( text?: string, - maxLength: number = 50, + maxLength: number = 50 ): string | undefined => { if (!text || typeof text !== "string") { return text; @@ -45,3 +45,7 @@ export const truncateTextFromCenter = ( export const markify_text = (text: string) => { return text.replace(/\n/g, "
"); }; + +export const removePunctuation = (str: string): string => { + return str.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()"“”'\s]/g, " "); +}; diff --git a/frontend/src/services/chat.tsx b/frontend/src/services/chat.tsx index 57cc077..672272b 100644 --- a/frontend/src/services/chat.tsx +++ b/frontend/src/services/chat.tsx @@ -14,7 +14,7 @@ export const chat = async (projectId: string, data: ChatRequest) => { `${chatApiUrl}/project/${projectId}`, { ...data }, {}, - 300000, + 300000 ); return response.data.data; } catch (error) { @@ -26,7 +26,8 @@ export const chat = async (projectId: string, data: ChatRequest) => { } else { return { conversation_id: data.conversation_id, - response: "Failed to chat data. Please try again!", + response: + "My apologies, I encountered an unexpected issue. Could you please rephrase your question?", }; } } @@ -35,7 +36,7 @@ export const chat = async (projectId: string, data: ChatRequest) => { export const chatStatus = async (projectId: string) => { try { const response = await GetRequest( - `${chatApiUrl}/project/${projectId}/status`, + `${chatApiUrl}/project/${projectId}/status` ); return response.data.data; } catch (error) { diff --git a/frontend/src/services/extract.tsx b/frontend/src/services/extract.tsx index 2c8b6bb..d974f6f 100644 --- a/frontend/src/services/extract.tsx +++ b/frontend/src/services/extract.tsx @@ -7,14 +7,14 @@ const extractApiUrl = "/extract"; export const Extract = async ( projectId: string, assetId: string, - fields: ExtractionField[], + fields: ExtractionField[] ) => { try { const response = await PostRequest( `${extractApiUrl}/${projectId}`, { fields, assetId }, {}, - 300000, + 300000 ); return response; } catch (error) { @@ -28,14 +28,14 @@ export const Extract = async ( export const GetAIFieldDescriptions = async ( projectId: string, - fields: string[], + fields: string[] ) => { try { const response = await PostRequest( `${extractApiUrl}/${projectId}/field-descriptions`, { fields }, {}, - 300000, + 300000 ); return response; } catch (error) { diff --git a/frontend/src/services/processSteps.ts b/frontend/src/services/processSteps.ts index 6257c51..8a37839 100644 --- a/frontend/src/services/processSteps.ts +++ b/frontend/src/services/processSteps.ts @@ -8,11 +8,11 @@ import { GetRequest } from "@/lib/requests"; export const processStepApiUrl = "/process_steps"; export const GetProcessStep = async ( - processStepId: number, + processStepId: number ): Promise => { try { const response = await GetRequest<{ data: ProcessStepData }>( - `${processStepApiUrl}/${processStepId}`, + `${processStepApiUrl}/${processStepId}` ); return response.data; } catch (error) { @@ -21,11 +21,11 @@ export const GetProcessStep = async ( }; export const GetProcessStepReferences = async ( - processStepId: number | string, + processStepId: number | string ): Promise => { try { const response = await GetRequest<{ data: ProcessStepOutputRef }>( - `${processStepApiUrl}/${processStepId}/references`, + `${processStepApiUrl}/${processStepId}/references` ); return response.data.data; } catch (error) { diff --git a/frontend/src/services/processes.tsx b/frontend/src/services/processes.tsx index 3664648..e1a5e09 100644 --- a/frontend/src/services/processes.tsx +++ b/frontend/src/services/processes.tsx @@ -12,7 +12,7 @@ export const processApiUrl = "/processes"; export const GetProcess = async (processId: string) => { try { const response = await GetRequest<{ data: ProcessData }>( - `${processApiUrl}/${processId}`, + `${processApiUrl}/${processId}` ); return response; } catch (error) { @@ -33,7 +33,7 @@ export const StartProcess = async (data: ProcessRequest) => { try { const response = await PostRequest<{ data: ProcessExecutionData }>( `${processApiUrl}/start`, - data, + data ); return response; } catch (error) { @@ -45,7 +45,7 @@ export const StopProcess = async (process_id: number | string) => { try { const response = await PostRequest<{ data: ProcessResumeData }>( `${processApiUrl}/${process_id}/stop`, - null, + null ); return response; } catch (error) { @@ -57,7 +57,7 @@ export const ResumeProcess = async (process_id: number | string) => { try { const response = await PostRequest<{ data: ProcessResumeData }>( `${processApiUrl}/${process_id}/resume`, - null, + null ); return response; } catch (error) { @@ -68,7 +68,7 @@ export const ResumeProcess = async (process_id: number | string) => { export const GetProcessSteps = async (processId: string) => { try { const response = await GetRequest( - `${processApiUrl}/${processId}/get-steps`, + `${processApiUrl}/${processId}/get-steps` ); return response; } catch (error) { @@ -77,12 +77,12 @@ export const GetProcessSteps = async (processId: string) => { }; export const GetProcessSuggestion = async ( - processData: ProcessSuggestionRequest, + processData: ProcessSuggestionRequest ) => { try { const response = await PostRequest<{ data: ProcessData[] }>( `${processApiUrl}/suggestion`, - processData, + processData ); return response; } catch (error) { diff --git a/frontend/src/services/projects.tsx b/frontend/src/services/projects.tsx index 3ab39e9..6b0ed62 100644 --- a/frontend/src/services/projects.tsx +++ b/frontend/src/services/projects.tsx @@ -15,7 +15,7 @@ const projectsApiUrl = "/projects"; export const GetProject = async (projectId: string) => { try { const response = await GetRequest<{ data: ProjectData }>( - `${projectsApiUrl}/${projectId}`, + `${projectsApiUrl}/${projectId}` ); return response; } catch (error) { @@ -25,7 +25,7 @@ export const GetProject = async (projectId: string) => { export const GetProjects = async ( page: number | null = null, - pageSize: number | null = null, + pageSize: number | null = null ) => { try { const url = @@ -47,7 +47,7 @@ export const CreateProject = async (data: { try { const response = await PostRequest<{ data: ProjectData }>( projectsApiUrl, - data, + data ); return response; } catch (error) { @@ -58,7 +58,7 @@ export const CreateProject = async (data: { export const GetProjectAssets = async ( projectId: string, page: number | null = null, - pageSize: number | null = null, + pageSize: number | null = null ) => { try { const uri = @@ -74,21 +74,21 @@ export const GetProjectAssets = async ( export const GetProjectAssetURL = ( projectId: string, - assetId: string | null, + assetId: string | null ) => { return `${BASE_API_URL}/${projectsApiUrl}/${projectId}/assets/${assetId}`; }; export const FetchAssetFile = async ( projectId: string, - assetId: string, + assetId: string ): Promise => { try { const response: AxiosResponse = await GetRequest( `${projectsApiUrl}/${projectId}/assets/${assetId}`, { responseType: "blob", - }, + } ); return response.data; } catch (error) { @@ -105,7 +105,7 @@ export const AddProjectAsset = async (projectId: string, file: File) => { `${projectsApiUrl}/${projectId}/assets`, formData, {}, - 300000, // Longer time for uploading big files + 300000 // Longer time for uploading big files ); return response; } catch (error) { @@ -119,7 +119,7 @@ export const AddProjectURLAsset = async (projectId: string, urls: string[]) => { `${projectsApiUrl}/${projectId}/assets/url`, { url: urls }, {}, - 300000, // Longer time for uploading big files + 300000 // Longer time for uploading big files ); return response; } catch (error) { @@ -130,7 +130,7 @@ export const AddProjectURLAsset = async (projectId: string, urls: string[]) => { export const GetProjectProcesses = async (projectId: string) => { try { const response = await GetRequest<{ data: ProcessData[] }>( - `${projectsApiUrl}/${projectId}/processes`, + `${projectsApiUrl}/${projectId}/processes` ); return response; } catch (error) { @@ -150,7 +150,7 @@ export const DeleteProject = async (projectId: string) => { export const DeleteAssets = async (projectId: string, assetId: string) => { try { const response = await DeleteRequest( - `${projectsApiUrl}/${projectId}/assets/${assetId}`, + `${projectsApiUrl}/${projectId}/assets/${assetId}` ); return response; } catch (error) { @@ -161,7 +161,7 @@ export const DeleteAssets = async (projectId: string, assetId: string) => { // Add this new function to update a project export const UpdateProject = async ( projectId: string, - data: { name: string; description: string }, + data: { name: string; description: string } ) => { try { const response = await PutRequest(`${projectsApiUrl}/${projectId}`, data); diff --git a/frontend/src/services/user.tsx b/frontend/src/services/user.tsx index 870eaac..70996cb 100644 --- a/frontend/src/services/user.tsx +++ b/frontend/src/services/user.tsx @@ -9,7 +9,7 @@ export const APIKeyRequest = async (data: { email: string }) => { try { const response = await PostRequest<{ data: null }>( `${userApiUrl}/request-api-key`, - data, + data ); return response; } catch (error) { @@ -21,7 +21,7 @@ export const SaveAPIKey = async (data: { api_key: string }) => { try { const response = await PostRequest<{ data: null }>( `${userApiUrl}/save-api-key`, - data, + data ); localStorage.setItem("api_key", data.api_key); return response; @@ -38,7 +38,7 @@ export const GetAPIKey = async () => { try { const response = await GetRequest<{ data: APIKeyData }>( - `${userApiUrl}/get-api-key`, + `${userApiUrl}/get-api-key` ); return { data: { api_key: response.data.data.key } }; } catch (error) { diff --git a/frontend/yarn.lock b/frontend/yarn.lock index fae3dfc..d4b567c 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -194,6 +194,46 @@ resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz" integrity sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg== +"@next/swc-darwin-x64@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz#46dedb29ec5503bf171a72a3ecb8aac6e738e9d6" + integrity sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg== + +"@next/swc-linux-arm64-gnu@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz#c9697ab9eb422bd1d7ffd0eb0779cc2aefa9d4a1" + integrity sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ== + +"@next/swc-linux-arm64-musl@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz#cbbceb2008571c743b5a310a488d2e166d200a75" + integrity sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A== + +"@next/swc-linux-x64-gnu@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.4.tgz#d79184223f857bacffb92f643cb2943a43632568" + integrity sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q== + +"@next/swc-linux-x64-musl@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.4.tgz#6b6c3e5ac02ca5e63394d280ec8ee607491902df" + integrity sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ== + +"@next/swc-win32-arm64-msvc@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz#dbad3906e870dba84c5883d9d4c4838472e0697f" + integrity sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A== + +"@next/swc-win32-ia32-msvc@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz#6074529b91ba49132922ce89a2e16d25d2ec235d" + integrity sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag== + +"@next/swc-win32-x64-msvc@14.2.4": + version "14.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.4.tgz#e65a1c6539a671f97bb86d5183d6e3a1733c29c7" + integrity sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -202,7 +242,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -660,13 +700,6 @@ resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== -"@swc/helpers@^0.5.0", "@swc/helpers@^0.5.12": - version "0.5.13" - resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz" - integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== - dependencies: - tslib "^2.4.0" - "@swc/helpers@0.5.5": version "0.5.5" resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz" @@ -675,6 +708,13 @@ "@swc/counter" "^0.1.3" tslib "^2.4.0" +"@swc/helpers@^0.5.0", "@swc/helpers@^0.5.12": + version "0.5.13" + resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz" + integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== + dependencies: + tslib "^2.4.0" + "@tanstack/query-core@5.56.2": version "5.56.2" resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.56.2.tgz" @@ -802,14 +842,14 @@ dependencies: parchment "^1.1.2" -"@types/react-dom@*", "@types/react-dom@^18": +"@types/react-dom@^18": version "18.3.0" resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz" integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react@^16.9.0 || ^17.0.0 || ^18.0.0", "@types/react@^18", "@types/react@>=18": +"@types/react@*", "@types/react@^18": version "18.3.7" resolved "https://registry.npmjs.org/@types/react/-/react-18.3.7.tgz" integrity sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ== @@ -900,7 +940,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0: +acorn@^8.9.0: version "8.12.1" resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz" integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== @@ -946,14 +986,7 @@ ansi-regex@^6.0.1: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -1426,7 +1459,7 @@ cssesc@^3.0.0: resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csstype@^3.0.10, csstype@^3.0.2: +csstype@^3.0.2: version "3.1.3" resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== @@ -1468,6 +1501,13 @@ date-fns@^3.6.0: resolved "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz" integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww== +debug@4, debug@^4.0.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@~4.3.6: + version "4.3.7" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + debug@^3.2.7: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" @@ -1475,13 +1515,6 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@~4.3.6, debug@4: - version "4.3.7" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - decode-named-character-reference@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz" @@ -1651,11 +1684,6 @@ enhanced-resolve@^5.15.0: graceful-fs "^4.2.4" tapable "^2.2.0" -entities@^4.4.0: - version "4.5.0" - resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - environment@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz" @@ -1847,7 +1875,7 @@ eslint-module-utils@^2.8.1, eslint-module-utils@^2.9.0: dependencies: debug "^3.2.7" -eslint-plugin-import@*, eslint-plugin-import@^2.28.1: +eslint-plugin-import@^2.28.1: version "2.30.0" resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz" integrity sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw== @@ -1935,7 +1963,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.23.0 || ^8.0.0", eslint@^8, eslint@^8.56.0: +eslint@^8: version "8.57.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz" integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== @@ -2303,7 +2331,7 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^10.3.10, glob@10.3.10: +glob@10.3.10, glob@^10.3.10: version "10.3.10" resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -2421,45 +2449,14 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" -hast-util-from-parse5@^8.0.0: - version "8.0.1" - resolved "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz" - integrity sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - hastscript "^8.0.0" - property-information "^6.0.0" - vfile "^6.0.0" - vfile-location "^5.0.0" - web-namespaces "^2.0.0" - -hast-util-parse-selector@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz" - integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-raw@^9.0.0: - version "9.0.4" - resolved "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz" - integrity sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA== +hast-util-sanitize@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-5.0.1.tgz#8e90068cd68e651c569960b77a1b25076579b4cf" + integrity sha512-IGrgWLuip4O2nq5CugXy4GI2V8kx4sFVy5Hd4vF7AR2gxS0N9s7nEAVUyeMtZKZvzrxVsHt73XdTsno1tClIkQ== dependencies: "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - "@ungap/structured-clone" "^1.0.0" - hast-util-from-parse5 "^8.0.0" - hast-util-to-parse5 "^8.0.0" - html-void-elements "^3.0.0" - mdast-util-to-hast "^13.0.0" - parse5 "^7.0.0" + "@ungap/structured-clone" "^1.2.0" unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" hast-util-to-jsx-runtime@^2.0.0: version "2.3.0" @@ -2482,19 +2479,6 @@ hast-util-to-jsx-runtime@^2.0.0: unist-util-position "^5.0.0" vfile-message "^4.0.0" -hast-util-to-parse5@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz" - integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - hast-util-whitespace@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz" @@ -2502,17 +2486,6 @@ hast-util-whitespace@^3.0.0: dependencies: "@types/hast" "^3.0.0" -hastscript@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz" - integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - hast-util-parse-selector "^4.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - hsl-to-hex@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz" @@ -2530,11 +2503,6 @@ html-url-attributes@^3.0.0: resolved "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.0.tgz" integrity sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow== -html-void-elements@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz" - integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== - https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" @@ -2591,7 +2559,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.3, inherits@~2.0.3, inherits@2: +inherits@2, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3609,6 +3577,13 @@ mimic-response@^2.0.0: resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" @@ -3623,13 +3598,6 @@ minimatch@^9.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" @@ -3642,16 +3610,16 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - minipass@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.1.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + minizlib@^2.1.1: version "2.1.2" resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" @@ -3948,13 +3916,6 @@ parse-svg-path@^0.1.2: resolved "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz" integrity sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ== -parse5@^7.0.0: - version "7.1.2" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -4080,15 +4041,6 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0: resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8, postcss@^8.0.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@>=8.0.9: - version "8.4.47" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz" - integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== - dependencies: - nanoid "^3.3.7" - picocolors "^1.1.0" - source-map-js "^1.2.1" - postcss@8.4.31: version "8.4.31" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" @@ -4098,6 +4050,15 @@ postcss@8.4.31: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8, postcss@^8.4.23: + version "8.4.47" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz" + integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== + dependencies: + nanoid "^3.3.7" + picocolors "^1.1.0" + source-map-js "^1.2.1" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -4179,7 +4140,7 @@ react-data-grid@^7.0.0-beta.47: dependencies: clsx "^2.0.0" -"react-dom@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^16 || ^17 || ^18", "react-dom@^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", react-dom@^18, "react-dom@^18.0 || ^19.0", react-dom@^18.0.0, react-dom@^18.2.0, react-dom@>=16, react-dom@>=16.8, react-dom@>=16.8.0: +react-dom@^18: version "18.3.1" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== @@ -4276,7 +4237,7 @@ react-style-singleton@^2.2.1: invariant "^2.2.4" tslib "^2.0.0" -react@*, "react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16 || ^17 || ^18", "react@^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", react@^18, "react@^18 || ^19", "react@^18.0 || ^19.0", react@^18.0.0, react@^18.2.0, react@^18.3.1, "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", react@>=16, react@>=16.8, react@>=16.8.0, react@>=18: +react@^18: version "18.3.1" resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== @@ -4334,14 +4295,13 @@ regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" -rehype-raw@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz" - integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== +rehype-sanitize@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/rehype-sanitize/-/rehype-sanitize-6.0.0.tgz#16e95f4a67a69cbf0f79e113c8e0df48203db73c" + integrity sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg== dependencies: "@types/hast" "^3.0.0" - hast-util-raw "^9.0.0" - vfile "^6.0.0" + hast-util-sanitize "^5.0.0" remark-gfm@^4.0.0: version "4.0.0" @@ -4499,17 +4459,7 @@ semver@^6.0.0, semver@^6.3.1: resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5: - version "7.6.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -semver@^7.5.4: - version "7.6.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -semver@^7.6.3: +semver@^7.3.5, semver@^7.5.4, semver@^7.6.3: version "7.6.3" resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -4637,28 +4587,12 @@ streamsearch@^1.1.0: resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string-argv@~0.3.2: version "0.3.2" resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz" integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4747,6 +4681,13 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + stringify-entities@^4.0.0: version "4.0.4" resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz" @@ -4755,21 +4696,7 @@ stringify-entities@^4.0.0: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -5036,7 +4963,7 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typescript@^5, typescript@>=3.3.1, typescript@>=4.2.0: +typescript@^5: version "5.6.2" resolved "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz" integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== @@ -5155,14 +5082,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2: resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -vfile-location@^5.0.0: - version "5.0.3" - resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz" - integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== - dependencies: - "@types/unist" "^3.0.0" - vfile "^6.0.0" - vfile-message@^4.0.0: version "4.0.2" resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz" @@ -5195,11 +5114,6 @@ warning@^4.0.0: dependencies: loose-envify "^1.0.0" -web-namespaces@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz" - integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== - web-streams-polyfill@4.0.0-beta.3: version "4.0.0-beta.3" resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz" diff --git a/settings.json b/settings.json new file mode 100644 index 0000000..a2650a8 --- /dev/null +++ b/settings.json @@ -0,0 +1,20 @@ +{ + "editor.formatOnSave": true, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "prettier.configPath": "frontend/.prettierrc", + "prettier.ignorePath": "frontend/.prettierignore", + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff" + }, + "ruff.organizeImports": true, + "ruff.fixAll": true, + "ruff.path": ["backend"] +}