From 53c94deade1fd44c0327a1916d9c407428365475 Mon Sep 17 00:00:00 2001 From: Martin Ziegler Date: Fri, 28 Nov 2025 12:41:28 +0100 Subject: [PATCH] Added project page viewer and editor --- README.md | 10 + backend/app/api/routes/archives.py | 86 + backend/app/schemas/archive.py | 49 + backend/app/services/archive.py | 200 + frontend/package-lock.json | 838 +- frontend/package.json | 8 + .../public/img/android-chrome-192x192.png | Bin 0 -> 18626 bytes .../public/img/android-chrome-512x512.png | Bin 0 -> 61757 bytes frontend/public/img/apple-touch-icon.png | Bin 0 -> 16925 bytes frontend/public/img/favicon-16x16.png | Bin 0 -> 995 bytes frontend/public/img/favicon-32x32.png | Bin 0 -> 1969 bytes frontend/public/img/favicon.png | Bin 0 -> 61757 bytes frontend/src/api/client.ts | 39 + frontend/src/components/ProjectPageModal.tsx | 475 + frontend/src/components/RichTextEditor.tsx | 191 + frontend/src/pages/ArchivesPage.tsx | 17 + static/assets/index-BrIMpS3z.js | 8450 ---------------- static/assets/index-CjLW6Pu8.js | 8589 +++++++++++++++++ static/assets/index-DyMfP52F.css | 1 + static/assets/index-h3ik9UJ6.css | 1 - static/index.html | 4 +- 21 files changed, 10499 insertions(+), 8459 deletions(-) create mode 100644 frontend/public/img/android-chrome-192x192.png create mode 100644 frontend/public/img/android-chrome-512x512.png create mode 100644 frontend/public/img/apple-touch-icon.png create mode 100644 frontend/public/img/favicon-16x16.png create mode 100644 frontend/public/img/favicon-32x32.png create mode 100644 frontend/public/img/favicon.png create mode 100644 frontend/src/components/ProjectPageModal.tsx create mode 100644 frontend/src/components/RichTextEditor.tsx delete mode 100644 static/assets/index-BrIMpS3z.js create mode 100644 static/assets/index-CjLW6Pu8.js create mode 100644 static/assets/index-DyMfP52F.css delete mode 100644 static/assets/index-h3ik9UJ6.css diff --git a/README.md b/README.md index b34e29706..76a3feb2e 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ - **Filament Cost Tracking** - Track costs per print with customizable filament database - **Photo Attachments** - Attach photos to archived prints for documentation - **Failure Analysis** - Document failed prints with notes and photos +- **Project Page Editor** - View and edit embedded MakerWorld project pages with images, descriptions, and designer info - **Cloud Profiles Sync** - Access your Bambu Cloud slicer presets - **File Manager** - Browse and manage files on your printer's SD card - **Re-print** - Send archived prints back to any connected printer @@ -309,6 +310,15 @@ Prints are automatically archived when they complete. You can also: - Re-print any archived 3MF to a connected printer - Export archives for backup +### Project Page + +3MF files downloaded from MakerWorld contain embedded project pages with model information. To view: +1. Right-click any archive in the Archives page +2. Select "Project Page" from the context menu +3. View title, description, designer info, license, and images +4. Click "Edit" to modify the project page metadata +5. Changes are saved directly to the 3MF file + ## Tech Stack - **Backend**: Python / FastAPI diff --git a/backend/app/api/routes/archives.py b/backend/app/api/routes/archives.py index a264767bb..bba693a3d 100644 --- a/backend/app/api/routes/archives.py +++ b/backend/app/api/routes/archives.py @@ -888,3 +888,89 @@ async def reprint_archive( "archive_id": archive_id, "filename": archive.filename, } + + +# ============================================================================= +# Project Page API +# ============================================================================= + +@router.get("/{archive_id}/project-page") +async def get_project_page(archive_id: int, db: AsyncSession = Depends(get_db)): + """Get the project page data from the 3MF file.""" + from backend.app.services.archive import ProjectPageParser + from backend.app.schemas.archive import ProjectPageResponse + + service = ArchiveService(db) + archive = await service.get_archive(archive_id) + if not archive: + raise HTTPException(404, "Archive not found") + + file_path = settings.base_dir / archive.file_path + if not file_path.exists(): + raise HTTPException(404, "Archive file not found") + + parser = ProjectPageParser(file_path) + data = parser.parse(archive_id) + + return ProjectPageResponse(**data) + + +@router.patch("/{archive_id}/project-page") +async def update_project_page( + archive_id: int, + update_data: dict, + db: AsyncSession = Depends(get_db), +): + """Update project page metadata in the 3MF file.""" + from backend.app.services.archive import ProjectPageParser + + service = ArchiveService(db) + archive = await service.get_archive(archive_id) + if not archive: + raise HTTPException(404, "Archive not found") + + file_path = settings.base_dir / archive.file_path + if not file_path.exists(): + raise HTTPException(404, "Archive file not found") + + parser = ProjectPageParser(file_path) + success = parser.update_metadata(update_data) + + if not success: + raise HTTPException(500, "Failed to update project page") + + # Return updated data + data = parser.parse(archive_id) + return data + + +@router.get("/{archive_id}/project-image/{image_path:path}") +async def get_project_image( + archive_id: int, + image_path: str, + db: AsyncSession = Depends(get_db), +): + """Get an image from the 3MF project page.""" + from backend.app.services.archive import ProjectPageParser + + service = ArchiveService(db) + archive = await service.get_archive(archive_id) + if not archive: + raise HTTPException(404, "Archive not found") + + file_path = settings.base_dir / archive.file_path + if not file_path.exists(): + raise HTTPException(404, "Archive file not found") + + parser = ProjectPageParser(file_path) + result = parser.get_image(image_path) + + if not result: + raise HTTPException(404, "Image not found in 3MF file") + + image_data, content_type = result + return Response( + content=image_data, + media_type=content_type, + headers={"Cache-Control": "max-age=3600"}, + ) diff --git a/backend/app/schemas/archive.py b/backend/app/schemas/archive.py index e78608d82..1d4df01e7 100644 --- a/backend/app/schemas/archive.py +++ b/backend/app/schemas/archive.py @@ -65,3 +65,52 @@ class ArchiveStats(BaseModel): total_cost: float prints_by_filament_type: dict prints_by_printer: dict + + +class ProjectPageImage(BaseModel): + """Image embedded in 3MF project page.""" + name: str + path: str # Path within 3MF + url: str # API URL to fetch image + + +class ProjectPageResponse(BaseModel): + """Project page data extracted from 3MF file.""" + # Model info + title: str | None = None + description: str | None = None # HTML content + designer: str | None = None + designer_user_id: str | None = None + license: str | None = None + copyright: str | None = None + creation_date: str | None = None + modification_date: str | None = None + origin: str | None = None # "original" or "remix" + + # Profile info + profile_title: str | None = None + profile_description: str | None = None + profile_cover: str | None = None + profile_user_id: str | None = None + profile_user_name: str | None = None + + # MakerWorld info + design_model_id: str | None = None + design_profile_id: str | None = None + design_region: str | None = None + + # Images + model_pictures: list[ProjectPageImage] = [] + profile_pictures: list[ProjectPageImage] = [] + thumbnails: list[ProjectPageImage] = [] + + +class ProjectPageUpdate(BaseModel): + """Update project page data in 3MF file.""" + title: str | None = None + description: str | None = None + designer: str | None = None + license: str | None = None + copyright: str | None = None + profile_title: str | None = None + profile_description: str | None = None diff --git a/backend/app/services/archive.py b/backend/app/services/archive.py index 782188f0a..7972276b1 100644 --- a/backend/app/services/archive.py +++ b/backend/app/services/archive.py @@ -264,6 +264,206 @@ class ThreeMFParser: break +class ProjectPageParser: + """Parser for extracting project page data from Bambu Lab 3MF files.""" + + def __init__(self, file_path: Path): + self.file_path = file_path + + def parse(self, archive_id: int) -> dict: + """Extract project page metadata and images from 3MF file.""" + import html + import re + + result = { + "title": None, + "description": None, + "designer": None, + "designer_user_id": None, + "license": None, + "copyright": None, + "creation_date": None, + "modification_date": None, + "origin": None, + "profile_title": None, + "profile_description": None, + "profile_cover": None, + "profile_user_id": None, + "profile_user_name": None, + "design_model_id": None, + "design_profile_id": None, + "design_region": None, + "model_pictures": [], + "profile_pictures": [], + "thumbnails": [], + } + + try: + with zipfile.ZipFile(self.file_path, "r") as zf: + # Parse 3D/3dmodel.model for metadata + model_path = "3D/3dmodel.model" + if model_path in zf.namelist(): + content = zf.read(model_path).decode("utf-8", errors="ignore") + + # Extract metadata elements using regex + # Format: Value or + metadata_pattern = r']*>([^<]*)' + matches = re.findall(metadata_pattern, content) + + field_mapping = { + "Title": "title", + "Description": "description", + "Designer": "designer", + "DesignerUserId": "designer_user_id", + "License": "license", + "Copyright": "copyright", + "CreationDate": "creation_date", + "ModificationDate": "modification_date", + "Origin": "origin", + "ProfileTitle": "profile_title", + "ProfileDescription": "profile_description", + "ProfileCover": "profile_cover", + "ProfileUserId": "profile_user_id", + "ProfileUserName": "profile_user_name", + "DesignModelId": "design_model_id", + "DesignProfileId": "design_profile_id", + "DesignRegion": "design_region", + } + + for name, value in matches: + if name in field_mapping: + # Decode HTML entities multiple times (content is often triple-encoded) + decoded = value.strip() + prev = None + while prev != decoded: + prev = decoded + decoded = html.unescape(decoded) + # Normalize non-breaking spaces to regular spaces + decoded = decoded.replace('\xa0', ' ') + result[field_mapping[name]] = decoded if decoded else None + + # List images in Auxiliaries folder + from urllib.parse import quote + for name in zf.namelist(): + if name.startswith("Auxiliaries/Model Pictures/"): + filename = name.split("/")[-1] + if filename: + result["model_pictures"].append({ + "name": filename, + "path": name, + "url": f"/api/v1/archives/{archive_id}/project-image/{quote(name, safe='')}", + }) + elif name.startswith("Auxiliaries/Profile Pictures/"): + filename = name.split("/")[-1] + if filename: + result["profile_pictures"].append({ + "name": filename, + "path": name, + "url": f"/api/v1/archives/{archive_id}/project-image/{quote(name, safe='')}", + }) + elif name.startswith("Auxiliaries/.thumbnails/"): + filename = name.split("/")[-1] + if filename: + result["thumbnails"].append({ + "name": filename, + "path": name, + "url": f"/api/v1/archives/{archive_id}/project-image/{quote(name, safe='')}", + }) + + except Exception as e: + result["_error"] = str(e) + + return result + + def get_image(self, image_path: str) -> tuple[bytes, str] | None: + """Extract an image from the 3MF file. + + Returns tuple of (image_data, content_type) or None if not found. + """ + try: + with zipfile.ZipFile(self.file_path, "r") as zf: + if image_path in zf.namelist(): + data = zf.read(image_path) + # Determine content type from extension + ext = image_path.lower().split(".")[-1] + content_types = { + "png": "image/png", + "jpg": "image/jpeg", + "jpeg": "image/jpeg", + "webp": "image/webp", + "gif": "image/gif", + } + content_type = content_types.get(ext, "application/octet-stream") + return (data, content_type) + except Exception: + pass + return None + + def update_metadata(self, updates: dict) -> bool: + """Update project page metadata in the 3MF file. + + Args: + updates: Dict with fields to update (title, description, designer, etc.) + + Returns: + True if successful, False otherwise. + """ + import html + import re + import tempfile + + try: + # Read the 3MF file + with zipfile.ZipFile(self.file_path, "r") as zf_read: + # Find and read the 3dmodel.model file + model_path = "3D/3dmodel.model" + if model_path not in zf_read.namelist(): + return False + + content = zf_read.read(model_path).decode("utf-8") + + # Update metadata fields + field_mapping = { + "title": "Title", + "description": "Description", + "designer": "Designer", + "license": "License", + "copyright": "Copyright", + "profile_title": "ProfileTitle", + "profile_description": "ProfileDescription", + } + + for field, xml_name in field_mapping.items(): + if field in updates and updates[field] is not None: + new_value = html.escape(updates[field]) + # Replace existing metadata or we'd need to add it + pattern = rf'(]*>)[^<]*()' + replacement = rf'\g<1>{new_value}\g<2>' + content = re.sub(pattern, replacement, content) + + # Write to a temporary file first + with tempfile.NamedTemporaryFile(delete=False, suffix=".3mf") as tmp: + tmp_path = Path(tmp.name) + + # Create new zip with updated content + with zipfile.ZipFile(tmp_path, "w", zipfile.ZIP_DEFLATED) as zf_write: + for item in zf_read.namelist(): + if item == model_path: + zf_write.writestr(item, content.encode("utf-8")) + else: + zf_write.writestr(item, zf_read.read(item)) + + # Replace original file with updated one + shutil.move(tmp_path, self.file_path) + return True + + except Exception: + # Clean up temp file if it exists + if "tmp_path" in locals() and tmp_path.exists(): + tmp_path.unlink() + return False + + class ArchiveService: """Service for archiving print jobs.""" diff --git a/frontend/package-lock.json b/frontend/package-lock.json index bbeb58e8f..383cbdd22 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -12,6 +12,14 @@ "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@tanstack/react-query": "^5.90.11", + "@tiptap/extension-color": "^3.11.1", + "@tiptap/extension-image": "^3.11.1", + "@tiptap/extension-link": "^3.11.1", + "@tiptap/extension-text-align": "^3.11.1", + "@tiptap/extension-text-style": "^3.11.1", + "@tiptap/extension-underline": "^3.11.1", + "@tiptap/react": "^3.11.1", + "@tiptap/starter-kit": "^3.11.1", "@types/three": "^0.181.0", "gcode-preview": "^2.18.0", "jszip": "^3.10.1", @@ -996,6 +1004,23 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT", + "optional": true + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -1134,6 +1159,12 @@ "url": "https://opencollective.com/immer" } }, + "node_modules/@remirror/core-constants": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz", + "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==", + "license": "MIT" + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.47", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", @@ -1758,6 +1789,497 @@ "react": "^18 || ^19" } }, + "node_modules/@tiptap/core": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.11.1.tgz", + "integrity": "sha512-q7uzYrCq40JOIi6lceWe2HuA8tSr97iPwP/xtJd0bZjyL1rWhUyqxMb7y+aq4RcELrx/aNRa2JIvLtRRdy02Dg==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.11.1.tgz", + "integrity": "sha512-c3DN5c/9kl8w1wCcylH9XqW0OyCegqE3EL4rDlVYkyBD0GwCnUS30pN+jdxCUq/tl94lkkRk7XMyEUwzQmG+5g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.11.1.tgz", + "integrity": "sha512-ee/OoAPViUAgJb8dxF7D2YSSYUWcw8RXqhNSDx15w58rxpYbJbvOv3WDMrGNvl4M9nuwXYfXc3iPl/eYtwHx2w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.11.1.tgz", + "integrity": "sha512-rLgU2drvoSTpdXEmoo61ZSmtRR44vMeS36OoDpUA1dNzo/vWAiOzQeLnm8gC9cD2TmvJ+WIe7tOkpAEfw4kmiQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1", + "@tiptap/pm": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.11.1.tgz", + "integrity": "sha512-6fj0b0Ynam8FMsP3NiCZ4a2uP7lCBHDFBXfcRwFDOqAgBIPvIK+r6CuHEGothGaF7EeQ9MTyj9fwlGjyHsPQcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.11.1.tgz", + "integrity": "sha512-R3HtNPAuaKqbDwK1uWO/6QFHXbbKcxbV27XVCVtTQ4gCAzIZbJElp9REEqAOp/zI6bqt774UrAekeV+5i8NQYw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.11.1.tgz", + "integrity": "sha512-Bk7mmA+m510zzLG5AMFmywrL50NlBA5p7bR0cKfdp4ckXr8FohxH3QS0Woy1MRnFUGRtIzJkSYQTJ3O/G1lBqQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1", + "@tiptap/pm": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-color": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-color/-/extension-color-3.11.1.tgz", + "integrity": "sha512-ZKK0ZbqlpmYgtRBJcSxDPtMgmPQBoQv7I7xTMF1+E4DbwSgU7HPUkGLDOcc/ezmWfZLyMKXgKmvy+54nuut4vg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-text-style": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.11.1.tgz", + "integrity": "sha512-Px8T7Kv8EEiFpM/h13Rro8HoynrlK8zA3u3ekHq/FBSTXnPtqPAUYNx/DUhIrLs3eWWJ8+P0Onm+sVLZmaLMug==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.11.1.tgz", + "integrity": "sha512-+tmWD/4tg7Mt1TArrvc1Gna1FiSyru2rE6sapEerXCH3RFfaqGBeMqeRaOeZrCiqB+vIsXfthHDC/7xz5rFp/g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-floating-menu": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.11.1.tgz", + "integrity": "sha512-HGF04KhDn1oAD+2/zStSWeGIgR41l/raf64h/Rwkvde5Sf2g3BPRW4M1ESS6e2Rjw74Kwa4/xNO6CzZNid6yRg==", + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@floating-ui/dom": "^1.0.0", + "@tiptap/core": "^3.11.1", + "@tiptap/pm": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.11.1.tgz", + "integrity": "sha512-rZ4eIFOPrLPM0bAMW560v/i9WeAz6D6PPtmFJ/Rwh7F5QFbg+jSXAyGvg7V9ZwzA5OaXqsToyJBR7qtGXBXAhQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.11.1.tgz", + "integrity": "sha512-JMp6CizdB7LoY2jmaZub2D+Aj6RJTkSu0EhIcN/bmBrm4MjYa/ir6nRoo4/gYGIHzHwgwGR/1KmlqTJZW/xl4g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.11.1.tgz", + "integrity": "sha512-b9ShCSQhWXNzdbdn9a3j33cq646nS0EpVyNBQr0BMOpIcMI4Ot8LGEvPo0BNqPPvpjMJaP2N6xp+EIdk6tunfQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.11.1.tgz", + "integrity": "sha512-9zr6dItcJvzZtFlC+dyFb5VfWGzKzldPAOuln1d/GwKrBZds53O2vBmu4Jxfy22N9LuwiGB+2PYerq0UkLnxnA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1", + "@tiptap/pm": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-image": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.11.1.tgz", + "integrity": "sha512-lI+FyyHavUXHmDKxvSAdqGAvaYtVesAxHckeA60ZjZu9fBkUnVWHD8uR0TStX7EdOIRBWpzYrG7dDT4EkFVjTA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.11.1.tgz", + "integrity": "sha512-SrjsU+gvhjoPKelc4YSeC2AQ0lhwLiDWMO7fW83CVitCF8iWXpBSeVCI5SxtPeZNKTZ1ZCc3lIQCeEHOC/gP0g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-link": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.11.1.tgz", + "integrity": "sha512-ds5auQnWGcHwC2/c1iEvvybdLPcSDlxsii7FPaZg4LaSGdNojRB0qDRZw5dzYQZbfIf5vgYGcIVCVjNPZs1UwQ==", + "license": "MIT", + "dependencies": { + "linkifyjs": "^4.3.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1", + "@tiptap/pm": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-list": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.11.1.tgz", + "integrity": "sha512-XJRN9pOPMi3SsaKv4qM8WBEi3YDrjXYtYlAlZutQe1JpdKykSjLwwYq7k3V8UHqR3YKxyOV8HTYOYoOaZ9TMTQ==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1", + "@tiptap/pm": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.11.1.tgz", + "integrity": "sha512-KFw3TAwN6hQ+oDeE3lRqwzCRKhxU1NWf9q5SAwiUxlp/LcEjuhXcYJYX8SHPOLOlTo0P42v1i0KBeLUPKnO58g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-list-keymap": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.11.1.tgz", + "integrity": "sha512-MpeuVi+bOHulbN65bOjaeoNJstNuAAEPdLwNjW25c9y2a8b5iZFY8vdVNENDiqq+dI+F5EaFGaEq0FN0uslfiA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.11.1.tgz", + "integrity": "sha512-Aphq0kfk6J/hNQennJ+bntvDzqRPT7RVpnow1s4U4dLBsR6PP7X4zEBg96uAv2OW0RjDHFK9NFqpJPbZtQTmFw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.11.1.tgz", + "integrity": "sha512-a3lm1WvYewAP2IESq+qnbOtLSJ9yULY2Bj/6DvBq9fzWpb2gSlUdElYh6JLunxB1HEPECTuuRsNPdTrMsSpV4g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.11.1.tgz", + "integrity": "sha512-1LfkHNkrGR509cPRgcMr95+nWcAHE0JDm9LkuzdexunhCfJ2tl/h1rA14x3sic8GxQFqEnMefvBUpUbQwPydYw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.11.1.tgz", + "integrity": "sha512-5E94ggkFAZ7OSFSwnofAsmxqmSStRoeCB8AnRuWrR+nnXi43Rq7yptdejQaLi13Z9fSVdnF6h+pB3ua2Exg6WQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-text-align": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-3.11.1.tgz", + "integrity": "sha512-lZvM8HF4qlHuXX1u0ngj1Si1zVzWhS+RiF5kczScul+F1lEQgK+ugL6iF87MSc1yxw5eZQDpA0byx1N+ZqZWZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-text-style": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-3.11.1.tgz", + "integrity": "sha512-KLLrABvf609/Z4dPChRowvpqeefYiq5csEj4Ogfp4EFd3KqDvPZIoFepau1+BW4gOAlm8UK+ig+fOLgnUzH7ww==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extension-underline": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.11.1.tgz", + "integrity": "sha512-Y3EJxfE1g4XSGbUZN+74o38mp3O+BQXtlqxAQvedzXiGGrdK2kWhp2b4nj3IkxHdRdoSijf+oZzgyBrRDdgC/w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1" + } + }, + "node_modules/@tiptap/extensions": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.11.1.tgz", + "integrity": "sha512-/xXJdV+EVvSQv2slvAUChb5iGVv5K0EqBqxPGAAuBHdIc4Y7Id1aaKKSiyDmqon+kjSnnQIIda9oUt+o/Z66uA==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1", + "@tiptap/pm": "^3.11.1" + } + }, + "node_modules/@tiptap/pm": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.11.1.tgz", + "integrity": "sha512-8RIUhlEoCFGsbdNb+EUdQctG1Wnd7rl4wlMLS6giO7UcZT5dVfg625eMZVrl0/kA7JBJdKLIuqNmzzQ0MxsJEw==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-changeset": "^2.3.0", + "prosemirror-collab": "^1.3.1", + "prosemirror-commands": "^1.6.2", + "prosemirror-dropcursor": "^1.8.1", + "prosemirror-gapcursor": "^1.3.2", + "prosemirror-history": "^1.4.1", + "prosemirror-inputrules": "^1.4.0", + "prosemirror-keymap": "^1.2.2", + "prosemirror-markdown": "^1.13.1", + "prosemirror-menu": "^1.2.4", + "prosemirror-model": "^1.24.1", + "prosemirror-schema-basic": "^1.2.3", + "prosemirror-schema-list": "^1.5.0", + "prosemirror-state": "^1.4.3", + "prosemirror-tables": "^1.6.4", + "prosemirror-trailing-node": "^3.0.0", + "prosemirror-transform": "^1.10.2", + "prosemirror-view": "^1.38.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/react": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.11.1.tgz", + "integrity": "sha512-aPInZbpSWYzJvCFXaY6EhxD+H5ITURElUmUXBoRvlAB6QrR6NIWBt68hNe8i+aDGmuvLS18g60HWK5S6K2RjWQ==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "fast-deep-equal": "^3.1.3", + "use-sync-external-store": "^1.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "optionalDependencies": { + "@tiptap/extension-bubble-menu": "^3.11.1", + "@tiptap/extension-floating-menu": "^3.11.1" + }, + "peerDependencies": { + "@tiptap/core": "^3.11.1", + "@tiptap/pm": "^3.11.1", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tiptap/starter-kit": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.11.1.tgz", + "integrity": "sha512-weRrhp0p5J6cMNcybYobhbOVrgym7KYIwBblJ/1M1snykg+avZawVk2M5Y7j9gM1p2zo112MCw8z8nOa9Yrwow==", + "license": "MIT", + "dependencies": { + "@tiptap/core": "^3.11.1", + "@tiptap/extension-blockquote": "^3.11.1", + "@tiptap/extension-bold": "^3.11.1", + "@tiptap/extension-bullet-list": "^3.11.1", + "@tiptap/extension-code": "^3.11.1", + "@tiptap/extension-code-block": "^3.11.1", + "@tiptap/extension-document": "^3.11.1", + "@tiptap/extension-dropcursor": "^3.11.1", + "@tiptap/extension-gapcursor": "^3.11.1", + "@tiptap/extension-hard-break": "^3.11.1", + "@tiptap/extension-heading": "^3.11.1", + "@tiptap/extension-horizontal-rule": "^3.11.1", + "@tiptap/extension-italic": "^3.11.1", + "@tiptap/extension-link": "^3.11.1", + "@tiptap/extension-list": "^3.11.1", + "@tiptap/extension-list-item": "^3.11.1", + "@tiptap/extension-list-keymap": "^3.11.1", + "@tiptap/extension-ordered-list": "^3.11.1", + "@tiptap/extension-paragraph": "^3.11.1", + "@tiptap/extension-strike": "^3.11.1", + "@tiptap/extension-text": "^3.11.1", + "@tiptap/extension-underline": "^3.11.1", + "@tiptap/extensions": "^3.11.1", + "@tiptap/pm": "^3.11.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, "node_modules/@tweenjs/tween.js": { "version": "23.1.3", "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", @@ -1886,6 +2408,28 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "24.10.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", @@ -1901,7 +2445,6 @@ "version": "19.2.7", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", - "devOptional": true, "license": "MIT", "peer": true, "dependencies": { @@ -1912,8 +2455,8 @@ "version": "19.2.3", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", - "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -2310,7 +2853,6 @@ "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/autoprefixer": { @@ -2524,6 +3066,12 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "license": "MIT" }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2543,7 +3091,6 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "devOptional": true, "license": "MIT" }, "node_modules/d3-array": { @@ -2729,6 +3276,18 @@ "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/es-toolkit": { "version": "1.42.0", "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.42.0.tgz", @@ -2795,7 +3354,6 @@ "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" @@ -2999,7 +3557,6 @@ "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==", - "dev": true, "license": "MIT" }, "node_modules/fast-json-stable-stringify": { @@ -3706,6 +4263,21 @@ "integrity": "sha512-nU8j4ND702ouGfQZoaTN4dfXxacvGOAVK0DtmZBVcUYUAeYQXLQAjAN50igMHiba3T5jZyKEjXZU+Ntm1Qs6ZQ==", "license": "MIT" }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/linkifyjs": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz", + "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==", + "license": "MIT" + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3758,6 +4330,29 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, "node_modules/meshoptimizer": { "version": "0.22.0", "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.22.0.tgz", @@ -3845,6 +4440,12 @@ "node": ">= 0.8.0" } }, + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", + "license": "MIT" + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -3990,6 +4591,204 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "license": "MIT" }, + "node_modules/prosemirror-changeset": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz", + "integrity": "sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==", + "license": "MIT", + "dependencies": { + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-collab": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", + "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-commands": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz", + "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.10.2" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz", + "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.0.tgz", + "integrity": "sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz", + "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-inputrules": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz", + "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz", + "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-markdown": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz", + "integrity": "sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==", + "license": "MIT", + "dependencies": { + "@types/markdown-it": "^14.0.0", + "markdown-it": "^14.0.0", + "prosemirror-model": "^1.25.0" + } + }, + "node_modules/prosemirror-menu": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.5.tgz", + "integrity": "sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==", + "license": "MIT", + "dependencies": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.25.4", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz", + "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==", + "license": "MIT", + "peer": true, + "dependencies": { + "orderedmap": "^2.0.0" + } + }, + "node_modules/prosemirror-schema-basic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz", + "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.25.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", + "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.7.3" + } + }, + "node_modules/prosemirror-state": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.4.tgz", + "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.1.tgz", + "integrity": "sha512-DAgDoUYHCcc6tOGpLVPSU1k84kCUWTWnfWX3UDy2Delv4ryH0KqTD6RBI6k4yi9j9I8gl3j8MkPpRD/vWPZbug==", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.2.2", + "prosemirror-model": "^1.25.0", + "prosemirror-state": "^1.4.3", + "prosemirror-transform": "^1.10.3", + "prosemirror-view": "^1.39.1" + } + }, + "node_modules/prosemirror-trailing-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz", + "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==", + "license": "MIT", + "dependencies": { + "@remirror/core-constants": "3.0.0", + "escape-string-regexp": "^4.0.0" + }, + "peerDependencies": { + "prosemirror-model": "^1.22.1", + "prosemirror-state": "^1.4.2", + "prosemirror-view": "^1.33.8" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.5.tgz", + "integrity": "sha512-RPDQCxIDhIBb1o36xxwsaeAvivO8VLJcgBtzmOwQ64bMtsVFh5SSuJ6dWSxO1UsHTiTXPCgQm3PDJt7p6IOLbw==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.21.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.41.3", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.3.tgz", + "integrity": "sha512-SqMiYMUQNNBP9kfPhLO8WXEk/fon47vc52FQsUiJzTBuyjKgEcoAwMyF04eQ4WZ2ArMn7+ReypYL60aKngbACQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "prosemirror-model": "^1.20.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -4000,6 +4799,15 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/react": { "version": "19.2.0", "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", @@ -4221,6 +5029,12 @@ "fsevents": "~2.3.2" } }, + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4444,6 +5258,12 @@ "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", @@ -4605,6 +5425,12 @@ } } }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index f66791dfa..e61669b6a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,6 +14,14 @@ "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@tanstack/react-query": "^5.90.11", + "@tiptap/extension-color": "^3.11.1", + "@tiptap/extension-image": "^3.11.1", + "@tiptap/extension-link": "^3.11.1", + "@tiptap/extension-text-align": "^3.11.1", + "@tiptap/extension-text-style": "^3.11.1", + "@tiptap/extension-underline": "^3.11.1", + "@tiptap/react": "^3.11.1", + "@tiptap/starter-kit": "^3.11.1", "@types/three": "^0.181.0", "gcode-preview": "^2.18.0", "jszip": "^3.10.1", diff --git a/frontend/public/img/android-chrome-192x192.png b/frontend/public/img/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..a394aed35bceb7d819e002ba5ccb926ea8da89c4 GIT binary patch literal 18626 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 Hu0mjf@kWNs literal 0 HcmV?d00001 diff --git a/frontend/public/img/android-chrome-512x512.png b/frontend/public/img/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..1f3509f6d090267d7f90b058ad3cac31e82febb0 GIT binary patch literal 61757 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 C>eIyl literal 0 HcmV?d00001 diff --git a/frontend/public/img/apple-touch-icon.png b/frontend/public/img/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..69e136c424af8acf697268b0d2f0b528c5c5cded GIT binary patch literal 16925 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 V)fBcBH#-0T002ovPDHLkV1hHwN^AfC literal 0 HcmV?d00001 diff --git a/frontend/public/img/favicon-16x16.png b/frontend/public/img/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..df56b474095b3e9262df1d344519d143d914a1a4 GIT binary patch literal 995 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 literal 0 HcmV?d00001 diff --git a/frontend/public/img/favicon.png b/frontend/public/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1f3509f6d090267d7f90b058ad3cac31e82febb0 GIT binary patch literal 61757 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 C>eIyl literal 0 HcmV?d00001 diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index 4b7a0e0bd..788893b20 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -286,6 +286,45 @@ export const api = { has_gcode: boolean; build_volume: { x: number; y: number; z: number }; }>(`/archives/${id}/capabilities`), + // Project Page + getArchiveProjectPage: (id: number) => + request<{ + title: string | null; + description: string | null; + designer: string | null; + designer_user_id: string | null; + license: string | null; + copyright: string | null; + creation_date: string | null; + modification_date: string | null; + origin: string | null; + profile_title: string | null; + profile_description: string | null; + profile_cover: string | null; + profile_user_id: string | null; + profile_user_name: string | null; + design_model_id: string | null; + design_profile_id: string | null; + design_region: string | null; + model_pictures: Array<{ name: string; path: string; url: string }>; + profile_pictures: Array<{ name: string; path: string; url: string }>; + thumbnails: Array<{ name: string; path: string; url: string }>; + }>(`/archives/${id}/project-page`), + updateArchiveProjectPage: (id: number, data: { + title?: string; + description?: string; + designer?: string; + license?: string; + copyright?: string; + profile_title?: string; + profile_description?: string; + }) => + request(`/archives/${id}/project-page`, { + method: 'PATCH', + body: JSON.stringify(data), + }), + getArchiveProjectImageUrl: (archiveId: number, imagePath: string) => + `${API_BASE}/archives/${archiveId}/project-image/${encodeURIComponent(imagePath)}`, getArchiveForSlicer: (id: number, filename: string) => `${API_BASE}/archives/${id}/file/${encodeURIComponent(filename.endsWith('.3mf') ? filename : filename + '.3mf')}`, reprintArchive: (archiveId: number, printerId: number) => diff --git a/frontend/src/components/ProjectPageModal.tsx b/frontend/src/components/ProjectPageModal.tsx new file mode 100644 index 000000000..27b6c8bd9 --- /dev/null +++ b/frontend/src/components/ProjectPageModal.tsx @@ -0,0 +1,475 @@ +import { useState, useEffect } from 'react'; +import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; +import { + X, + User, + Calendar, + FileText, + Image, + Edit3, + Save, + ExternalLink, + ChevronLeft, + ChevronRight, +} from 'lucide-react'; +import { api } from '../api/client'; +import { Button } from './Button'; +import { RichTextEditor } from './RichTextEditor'; + +interface ProjectPageModalProps { + archiveId: number; + archiveName?: string; + onClose: () => void; +} + +export function ProjectPageModal({ archiveId, archiveName, onClose }: ProjectPageModalProps) { + const queryClient = useQueryClient(); + const [isEditing, setIsEditing] = useState(false); + const [selectedImageIndex, setSelectedImageIndex] = useState(null); + const [editData, setEditData] = useState<{ + title?: string; + description?: string; + designer?: string; + license?: string; + profile_title?: string; + profile_description?: string; + }>({}); + + const { data: projectPage, isLoading, error } = useQuery({ + queryKey: ['archive-project-page', archiveId], + queryFn: () => api.getArchiveProjectPage(archiveId), + }); + + const updateMutation = useMutation({ + mutationFn: (data: typeof editData) => api.updateArchiveProjectPage(archiveId, data), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['archive-project-page', archiveId] }); + setIsEditing(false); + setEditData({}); + }, + }); + + // Handle escape key to close modal + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === 'Escape') { + if (selectedImageIndex !== null) { + setSelectedImageIndex(null); + } else if (isEditing) { + handleCancelEdit(); + } else { + onClose(); + } + } + }; + document.addEventListener('keydown', handleKeyDown); + return () => document.removeEventListener('keydown', handleKeyDown); + }, [selectedImageIndex, isEditing, onClose]); + + // Combine all images for gallery + const allImages = [ + ...(projectPage?.model_pictures || []), + ...(projectPage?.profile_pictures || []), + ]; + + const handleStartEdit = () => { + setEditData({ + title: projectPage?.title || '', + description: projectPage?.description || '', + designer: projectPage?.designer || '', + license: projectPage?.license || '', + profile_title: projectPage?.profile_title || '', + profile_description: projectPage?.profile_description || '', + }); + setIsEditing(true); + }; + + const handleSave = () => { + updateMutation.mutate(editData); + }; + + const handleCancelEdit = () => { + setIsEditing(false); + setEditData({}); + }; + + // Sanitize HTML content (basic XSS prevention) + const sanitizeHtml = (html: string) => { + // Allow basic formatting tags only + const allowed = ['p', 'br', 'b', 'strong', 'i', 'em', 'u', 'a', 'ul', 'ol', 'li', 'figure', 'img']; + const doc = new DOMParser().parseFromString(html, 'text/html'); + + const clean = (node: Node): string => { + if (node.nodeType === Node.TEXT_NODE) { + return node.textContent || ''; + } + if (node.nodeType === Node.ELEMENT_NODE) { + const el = node as Element; + const tag = el.tagName.toLowerCase(); + + if (!allowed.includes(tag)) { + // Return children content without the tag + return Array.from(el.childNodes).map(clean).join(''); + } + + // Build allowed attributes + let attrs = ''; + if (tag === 'a' && el.getAttribute('href')) { + const href = el.getAttribute('href'); + if (href?.toLowerCase().startsWith('http')) { + attrs = ` href="${href}" target="_blank" rel="noopener noreferrer"`; + } + } + if (tag === 'img') { + const src = el.getAttribute('src'); + // Only render img if it has a valid http(s) URL, otherwise skip entirely + if (!src?.toLowerCase().startsWith('http')) { + return ''; // Skip images without valid URLs + } + attrs = ` src="${src}" style="max-width: 100%; height: auto;"`; + } + + const children = Array.from(el.childNodes).map(clean).join(''); + + if (['br', 'img'].includes(tag)) { + return `<${tag}${attrs} />`; + } + return `<${tag}${attrs}>${children}`; + } + return ''; + }; + + return Array.from(doc.body.childNodes).map(clean).join(''); + }; + + const hasContent = projectPage && ( + projectPage.title || + projectPage.description || + projectPage.designer || + projectPage.profile_title || + allImages.length > 0 + ); + + // Handle backdrop click to close modal + const handleBackdropClick = (e: React.MouseEvent) => { + if (e.target === e.currentTarget) { + onClose(); + } + }; + + return ( +

+
+ {/* Header */} +
+
+ +

+ Project Page + {archiveName && - {archiveName}} +

+
+
+ {!isEditing && hasContent && ( + + )} + {isEditing && ( + <> + + + + )} + +
+
+ + {/* Content */} +
+ {isLoading && ( +
+
+
+ )} + + {error && ( +
+ Failed to load project page data +
+ )} + + {projectPage && !hasContent && ( +
+ +

No project page data found in this 3MF file.

+

+ Project pages are typically included in files downloaded from MakerWorld. +

+
+ )} + + {projectPage && hasContent && ( +
+ {/* Title & Designer */} +
+ {isEditing ? ( + setEditData({ ...editData, title: e.target.value })} + placeholder="Title" + className="w-full bg-bambu-dark border border-bambu-dark-tertiary rounded-lg px-4 py-2 text-white text-xl font-semibold" + /> + ) : ( + projectPage.title && ( +

{projectPage.title}

+ ) + )} + +
+ {isEditing ? ( +
+ + setEditData({ ...editData, designer: e.target.value })} + placeholder="Designer" + className="bg-bambu-dark border border-bambu-dark-tertiary rounded px-2 py-1 text-white" + /> +
+ ) : ( + projectPage.designer && ( +
+ + {projectPage.designer} + {projectPage.designer_user_id && ( + + + + )} +
+ ) + )} + + {projectPage.creation_date && ( +
+ + {projectPage.creation_date} +
+ )} + + {isEditing ? ( +
+ + setEditData({ ...editData, license: e.target.value })} + placeholder="License" + className="bg-bambu-dark border border-bambu-dark-tertiary rounded px-2 py-1 text-white" + /> +
+ ) : ( + projectPage.license && ( +
+ + {projectPage.license} +
+ ) + )} + + {projectPage.origin && ( + + {projectPage.origin} + + )} +
+
+ + {/* Description */} + {(projectPage.description || isEditing) && ( +
+

+ Description +

+ {isEditing ? ( + setEditData({ ...editData, description: html })} + placeholder="Enter description..." + /> + ) : ( +
+ )} +
+ )} + + {/* Profile Info */} + {(projectPage.profile_title || projectPage.profile_description || isEditing) && ( +
+

+ Print Profile +

+ {isEditing ? ( +
+ setEditData({ ...editData, profile_title: e.target.value })} + placeholder="Profile Title" + className="w-full bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded px-3 py-2 text-white" + /> + setEditData({ ...editData, profile_description: html })} + placeholder="Profile description..." + /> +
+ ) : ( + <> + {projectPage.profile_title && ( +

{projectPage.profile_title}

+ )} + {projectPage.profile_description && ( +
+ )} + {projectPage.profile_user_name && ( +

+ by {projectPage.profile_user_name} +

+ )} + + )} +
+ )} + + {/* Image Gallery */} + {allImages.length > 0 && ( +
+

+ + Images ({allImages.length}) +

+
+ {allImages.map((img, index) => ( + + ))} +
+
+ )} + + {/* MakerWorld Link */} + {projectPage.design_model_id && ( + + )} +
+ )} +
+
+ + {/* Image Lightbox */} + {selectedImageIndex !== null && allImages[selectedImageIndex] && ( +
setSelectedImageIndex(null)} + > + + + {allImages[selectedImageIndex].name} e.stopPropagation()} + /> + + + + + +
+ {selectedImageIndex + 1} / {allImages.length} +
+
+ )} +
+ ); +} diff --git a/frontend/src/components/RichTextEditor.tsx b/frontend/src/components/RichTextEditor.tsx new file mode 100644 index 000000000..5e0369ce5 --- /dev/null +++ b/frontend/src/components/RichTextEditor.tsx @@ -0,0 +1,191 @@ +import { useEditor, EditorContent } from '@tiptap/react'; +import StarterKit from '@tiptap/starter-kit'; +import Link from '@tiptap/extension-link'; +import Underline from '@tiptap/extension-underline'; +import TextAlign from '@tiptap/extension-text-align'; +import { TextStyle } from '@tiptap/extension-text-style'; +import Color from '@tiptap/extension-color'; +import Image from '@tiptap/extension-image'; +import { + Bold, + Italic, + Underline as UnderlineIcon, + List, + ListOrdered, + AlignLeft, + AlignCenter, + AlignRight, + Link as LinkIcon, + Unlink, +} from 'lucide-react'; + +interface RichTextEditorProps { + content: string; + onChange: (html: string) => void; + placeholder?: string; +} + +export function RichTextEditor({ content, onChange, placeholder }: RichTextEditorProps) { + const editor = useEditor({ + extensions: [ + StarterKit.configure({ + heading: false, + codeBlock: false, + code: false, + }), + Underline, + Link.configure({ + openOnClick: false, + HTMLAttributes: { + target: '_blank', + rel: 'noopener noreferrer', + }, + }), + TextAlign.configure({ + types: ['paragraph'], + }), + TextStyle, + Color, + Image.configure({ + HTMLAttributes: { + style: 'max-width: 100%; height: auto;', + }, + }), + ], + content, + onUpdate: ({ editor }) => { + onChange(editor.getHTML()); + }, + editorProps: { + attributes: { + class: 'prose prose-invert prose-sm max-w-none focus:outline-none min-h-[120px] px-3 py-2', + placeholder: placeholder || '', + }, + }, + }); + + if (!editor) { + return null; + } + + const ToolbarButton = ({ + onClick, + isActive = false, + children, + title, + }: { + onClick: () => void; + isActive?: boolean; + children: React.ReactNode; + title: string; + }) => ( + + ); + + const setLink = () => { + const url = window.prompt('Enter URL:'); + if (url) { + editor.chain().focus().setLink({ href: url }).run(); + } + }; + + return ( +
+ {/* Toolbar */} +
+ editor.chain().focus().toggleBold().run()} + isActive={editor.isActive('bold')} + title="Bold" + > + + + editor.chain().focus().toggleItalic().run()} + isActive={editor.isActive('italic')} + title="Italic" + > + + + editor.chain().focus().toggleUnderline().run()} + isActive={editor.isActive('underline')} + title="Underline" + > + + + +
+ + editor.chain().focus().toggleBulletList().run()} + isActive={editor.isActive('bulletList')} + title="Bullet List" + > + + + editor.chain().focus().toggleOrderedList().run()} + isActive={editor.isActive('orderedList')} + title="Numbered List" + > + + + +
+ + editor.chain().focus().setTextAlign('left').run()} + isActive={editor.isActive({ textAlign: 'left' })} + title="Align Left" + > + + + editor.chain().focus().setTextAlign('center').run()} + isActive={editor.isActive({ textAlign: 'center' })} + title="Align Center" + > + + + editor.chain().focus().setTextAlign('right').run()} + isActive={editor.isActive({ textAlign: 'right' })} + title="Align Right" + > + + + +
+ + + + + {editor.isActive('link') && ( + editor.chain().focus().unsetLink().run()} + title="Remove Link" + > + + + )} +
+ + {/* Editor */} + +
+ ); +} diff --git a/frontend/src/pages/ArchivesPage.tsx b/frontend/src/pages/ArchivesPage.tsx index 0b887f26e..cf88b4e44 100644 --- a/frontend/src/pages/ArchivesPage.tsx +++ b/frontend/src/pages/ArchivesPage.tsx @@ -33,6 +33,7 @@ import { ScanSearch, QrCode, Camera, + FileText, } from 'lucide-react'; import { api } from '../api/client'; import type { Archive } from '../api/client'; @@ -48,6 +49,7 @@ import { BatchTagModal } from '../components/BatchTagModal'; import { CalendarView } from '../components/CalendarView'; import { QRCodeModal } from '../components/QRCodeModal'; import { PhotoGalleryModal } from '../components/PhotoGalleryModal'; +import { ProjectPageModal } from '../components/ProjectPageModal'; import { useToast } from '../contexts/ToastContext'; function formatFileSize(bytes: number): string { @@ -95,6 +97,7 @@ function ArchiveCard({ const [showTimelapse, setShowTimelapse] = useState(false); const [showQRCode, setShowQRCode] = useState(false); const [showPhotos, setShowPhotos] = useState(false); + const [showProjectPage, setShowProjectPage] = useState(false); const [contextMenu, setContextMenu] = useState<{ x: number; y: number } | null>(null); const timelapseScanMutation = useMutation({ @@ -210,6 +213,11 @@ function ArchiveCard({ onClick: () => setShowPhotos(true), disabled: !archive.photos?.length, }, + { + label: 'Project Page', + icon: , + onClick: () => setShowProjectPage(true), + }, { label: '', divider: true, onClick: () => {} }, { label: archive.is_favorite ? 'Remove from Favorites' : 'Add to Favorites', @@ -598,6 +606,15 @@ function ArchiveCard({ }} /> )} + + {/* Project Page Modal */} + {showProjectPage && ( + setShowProjectPage(false)} + /> + )} ); } diff --git a/static/assets/index-BrIMpS3z.js b/static/assets/index-BrIMpS3z.js deleted file mode 100644 index a1bb96b28..000000000 --- a/static/assets/index-BrIMpS3z.js +++ /dev/null @@ -1,8450 +0,0 @@ -function F9(t,e){for(var n=0;ni[r]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const a of r)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&i(s)}).observe(document,{childList:!0,subtree:!0});function n(r){const a={};return r.integrity&&(a.integrity=r.integrity),r.referrerPolicy&&(a.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?a.credentials="include":r.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function i(r){if(r.ep)return;r.ep=!0;const a=n(r);fetch(r.href,a)}})();var s0=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Xs(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var bS={exports:{}},Xh={};var LD;function z9(){if(LD)return Xh;LD=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(i,r,a){var s=null;if(a!==void 0&&(s=""+a),r.key!==void 0&&(s=""+r.key),"key"in r){a={};for(var l in r)l!=="key"&&(a[l]=r[l])}else a=r;return r=a.ref,{$$typeof:t,type:i,key:s,ref:r!==void 0?r:null,props:a}}return Xh.Fragment=e,Xh.jsx=n,Xh.jsxs=n,Xh}var ID;function B9(){return ID||(ID=1,bS.exports=z9()),bS.exports}var E=B9(),_S={exports:{}},Ft={};var UD;function j9(){if(UD)return Ft;UD=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),a=Symbol.for("react.consumer"),s=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),h=Symbol.for("react.activity"),g=Symbol.iterator;function m(H){return H===null||typeof H!="object"?null:(H=g&&H[g]||H["@@iterator"],typeof H=="function"?H:null)}var b={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},y=Object.assign,x={};function v(H,q,re){this.props=H,this.context=q,this.refs=x,this.updater=re||b}v.prototype.isReactComponent={},v.prototype.setState=function(H,q){if(typeof H!="object"&&typeof H!="function"&&H!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,H,q,"setState")},v.prototype.forceUpdate=function(H){this.updater.enqueueForceUpdate(this,H,"forceUpdate")};function w(){}w.prototype=v.prototype;function S(H,q,re){this.props=H,this.context=q,this.refs=x,this.updater=re||b}var A=S.prototype=new w;A.constructor=S,y(A,v.prototype),A.isPureReactComponent=!0;var R=Array.isArray;function N(){}var C={H:null,A:null,T:null,S:null},F=Object.prototype.hasOwnProperty;function P(H,q,re){var ce=re.ref;return{$$typeof:t,type:H,key:q,ref:ce!==void 0?ce:null,props:re}}function L(H,q){return P(H.type,q,H.props)}function B(H){return typeof H=="object"&&H!==null&&H.$$typeof===t}function U(H){var q={"=":"=0",":":"=2"};return"$"+H.replace(/[=:]/g,function(re){return q[re]})}var $=/\/+/g;function I(H,q){return typeof H=="object"&&H!==null&&H.key!=null?U(""+H.key):q.toString(36)}function W(H){switch(H.status){case"fulfilled":return H.value;case"rejected":throw H.reason;default:switch(typeof H.status=="string"?H.then(N,N):(H.status="pending",H.then(function(q){H.status==="pending"&&(H.status="fulfilled",H.value=q)},function(q){H.status==="pending"&&(H.status="rejected",H.reason=q)})),H.status){case"fulfilled":return H.value;case"rejected":throw H.reason}}throw H}function X(H,q,re,ce,ye){var me=typeof H;(me==="undefined"||me==="boolean")&&(H=null);var be=!1;if(H===null)be=!0;else switch(me){case"bigint":case"string":case"number":be=!0;break;case"object":switch(H.$$typeof){case t:case e:be=!0;break;case f:return be=H._init,X(be(H._payload),q,re,ce,ye)}}if(be)return ye=ye(H),be=ce===""?"."+I(H,0):ce,R(ye)?(re="",be!=null&&(re=be.replace($,"$&/")+"/"),X(ye,q,re,"",function(Ae){return Ae})):ye!=null&&(B(ye)&&(ye=L(ye,re+(ye.key==null||H&&H.key===ye.key?"":(""+ye.key).replace($,"$&/")+"/")+be)),q.push(ye)),1;be=0;var Ne=ce===""?".":ce+":";if(R(H))for(var he=0;he>>1,se=X[J];if(0>>1;Jr(re,Y))cer(ye,re)?(X[J]=ye,X[ce]=Y,J=ce):(X[J]=re,X[q]=Y,J=q);else if(cer(ye,Y))X[J]=ye,X[ce]=Y,J=ce;else break e}}return V}function r(X,V){var Y=X.sortIndex-V.sortIndex;return Y!==0?Y:X.id-V.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],d=[],f=1,h=null,g=3,m=!1,b=!1,y=!1,x=!1,v=typeof setTimeout=="function"?setTimeout:null,w=typeof clearTimeout=="function"?clearTimeout:null,S=typeof setImmediate<"u"?setImmediate:null;function A(X){for(var V=n(d);V!==null;){if(V.callback===null)i(d);else if(V.startTime<=X)i(d),V.sortIndex=V.expirationTime,e(c,V);else break;V=n(d)}}function R(X){if(y=!1,A(X),!b)if(n(c)!==null)b=!0,N||(N=!0,U());else{var V=n(d);V!==null&&W(R,V.startTime-X)}}var N=!1,C=-1,F=5,P=-1;function L(){return x?!0:!(t.unstable_now()-PX&&L());){var J=h.callback;if(typeof J=="function"){h.callback=null,g=h.priorityLevel;var se=J(h.expirationTime<=X);if(X=t.unstable_now(),typeof se=="function"){h.callback=se,A(X),V=!0;break t}h===n(c)&&i(c),A(X)}else i(c);h=n(c)}if(h!==null)V=!0;else{var H=n(d);H!==null&&W(R,H.startTime-X),V=!1}}break e}finally{h=null,g=Y,m=!1}V=void 0}}finally{V?U():N=!1}}}var U;if(typeof S=="function")U=function(){S(B)};else if(typeof MessageChannel<"u"){var $=new MessageChannel,I=$.port2;$.port1.onmessage=B,U=function(){I.postMessage(null)}}else U=function(){v(B,0)};function W(X,V){C=v(function(){X(t.unstable_now())},V)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(X){X.callback=null},t.unstable_forceFrameRate=function(X){0>X||125J?(X.sortIndex=Y,e(d,X),n(c)===null&&X===n(d)&&(y?(w(C),C=-1):y=!0,W(R,Y-J))):(X.sortIndex=se,e(c,X),b||m||(b=!0,N||(N=!0,U()))),X},t.unstable_shouldYield=L,t.unstable_wrapCallback=function(X){var V=g;return function(){var Y=g;g=V;try{return X.apply(this,arguments)}finally{g=Y}}}})(ES)),ES}var zD;function V9(){return zD||(zD=1,wS.exports=G9()),wS.exports}var MS={exports:{}},gr={};var BD;function $9(){if(BD)return gr;BD=1;var t=If();function e(c){var d="https://react.dev/errors/"+c;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),MS.exports=$9(),MS.exports}var HD;function W9(){if(HD)return qh;HD=1;var t=V9(),e=If(),n=Q4();function i(o){var u="https://react.dev/errors/"+o;if(1se||(o.current=J[se],J[se]=null,se--)}function re(o,u){se++,J[se]=o.current,o.current=u}var ce=H(null),ye=H(null),me=H(null),be=H(null);function Ne(o,u){switch(re(me,u),re(ye,o),re(ce,null),u.nodeType){case 9:case 11:o=(o=u.documentElement)&&(o=o.namespaceURI)?iD(o):0;break;default:if(o=u.tagName,u=u.namespaceURI)u=iD(u),o=rD(u,o);else switch(o){case"svg":o=1;break;case"math":o=2;break;default:o=0}}q(ce),re(ce,o)}function he(){q(ce),q(ye),q(me)}function Ae(o){o.memoizedState!==null&&re(be,o);var u=ce.current,p=rD(u,o.type);u!==p&&(re(ye,o),re(ce,p))}function Be(o){ye.current===o&&(q(ce),q(ye)),be.current===o&&(q(be),Gh._currentValue=Y)}var le,lt;function z(o){if(le===void 0)try{throw Error()}catch(p){var u=p.stack.trim().match(/\n( *(at )?)/);le=u&&u[1]||"",lt=-1)":-1M||Se[_]!==ze[M]){var Qe=` -`+Se[_].replace(" at new "," at ");return o.displayName&&Qe.includes("")&&(Qe=Qe.replace("",o.displayName)),Qe}while(1<=_&&0<=M);break}}}finally{G=!1,Error.prepareStackTrace=p}return(p=o?o.displayName||o.name:"")?z(p):""}function Q(o,u){switch(o.tag){case 26:case 27:case 5:return z(o.type);case 16:return z("Lazy");case 13:return o.child!==u&&u!==null?z("Suspense Fallback"):z("Suspense");case 19:return z("SuspenseList");case 0:case 15:return ne(o.type,!1);case 11:return ne(o.type.render,!1);case 1:return ne(o.type,!0);case 31:return z("Activity");default:return""}}function ee(o){try{var u="",p=null;do u+=Q(o,p),p=o,o=o.return;while(o);return u}catch(_){return` -Error generating stack: `+_.message+` -`+_.stack}}var ae=Object.prototype.hasOwnProperty,ie=t.unstable_scheduleCallback,we=t.unstable_cancelCallback,ve=t.unstable_shouldYield,k=t.unstable_requestPaint,O=t.unstable_now,K=t.unstable_getCurrentPriorityLevel,pe=t.unstable_ImmediatePriority,xe=t.unstable_UserBlockingPriority,fe=t.unstable_NormalPriority,Ke=t.unstable_LowPriority,Ie=t.unstable_IdlePriority,$e=t.log,rt=t.unstable_setDisableYieldValue,ke=null,De=null;function ct(o){if(typeof $e=="function"&&rt(o),De&&typeof De.setStrictMode=="function")try{De.setStrictMode(ke,o)}catch{}}var et=Math.clz32?Math.clz32:ue,Je=Math.log,st=Math.LN2;function ue(o){return o>>>=0,o===0?32:31-(Je(o)/st|0)|0}var tt=256,de=262144,Le=4194304;function Me(o){var u=o&42;if(u!==0)return u;switch(o&-o){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return o&261888;case 262144:case 524288:case 1048576:case 2097152:return o&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return o&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return o}}function ge(o,u,p){var _=o.pendingLanes;if(_===0)return 0;var M=0,D=o.suspendedLanes,j=o.pingedLanes;o=o.warmLanes;var te=_&134217727;return te!==0?(_=te&~D,_!==0?M=Me(_):(j&=te,j!==0?M=Me(j):p||(p=te&~o,p!==0&&(M=Me(p))))):(te=_&~D,te!==0?M=Me(te):j!==0?M=Me(j):p||(p=_&~o,p!==0&&(M=Me(p)))),M===0?0:u!==0&&u!==M&&(u&D)===0&&(D=M&-M,p=u&-u,D>=p||D===32&&(p&4194048)!==0)?u:M}function je(o,u){return(o.pendingLanes&~(o.suspendedLanes&~o.pingedLanes)&u)===0}function at(o,u){switch(o){case 1:case 2:case 4:case 8:case 64:return u+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return u+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function mt(){var o=Le;return Le<<=1,(Le&62914560)===0&&(Le=4194304),o}function wt(o){for(var u=[],p=0;31>p;p++)u.push(o);return u}function Wt(o,u){o.pendingLanes|=u,u!==268435456&&(o.suspendedLanes=0,o.pingedLanes=0,o.warmLanes=0)}function Ct(o,u,p,_,M,D){var j=o.pendingLanes;o.pendingLanes=p,o.suspendedLanes=0,o.pingedLanes=0,o.warmLanes=0,o.expiredLanes&=p,o.entangledLanes&=p,o.errorRecoveryDisabledLanes&=p,o.shellSuspendCounter=0;var te=o.entanglements,Se=o.expirationTimes,ze=o.hiddenUpdates;for(p=j&~p;0"u")return null;try{return o.activeElement||o.body}catch{return o.body}}var ti=/[\n"\\]/g;function pn(o){return o.replace(ti,function(u){return"\\"+u.charCodeAt(0).toString(16)+" "})}function es(o,u,p,_,M,D,j,te){o.name="",j!=null&&typeof j!="function"&&typeof j!="symbol"&&typeof j!="boolean"?o.type=j:o.removeAttribute("type"),u!=null?j==="number"?(u===0&&o.value===""||o.value!=u)&&(o.value=""+qt(u)):o.value!==""+qt(u)&&(o.value=""+qt(u)):j!=="submit"&&j!=="reset"||o.removeAttribute("value"),u!=null?ji(o,j,qt(u)):p!=null?ji(o,j,qt(p)):_!=null&&o.removeAttribute("value"),M==null&&D!=null&&(o.defaultChecked=!!D),M!=null&&(o.checked=M&&typeof M!="function"&&typeof M!="symbol"),te!=null&&typeof te!="function"&&typeof te!="symbol"&&typeof te!="boolean"?o.name=""+qt(te):o.removeAttribute("name")}function gn(o,u,p,_,M,D,j,te){if(D!=null&&typeof D!="function"&&typeof D!="symbol"&&typeof D!="boolean"&&(o.type=D),u!=null||p!=null){if(!(D!=="submit"&&D!=="reset"||u!=null)){kt(o);return}p=p!=null?""+qt(p):"",u=u!=null?""+qt(u):p,te||u===o.value||(o.value=u),o.defaultValue=u}_=_??M,_=typeof _!="function"&&typeof _!="symbol"&&!!_,o.checked=te?o.checked:!!_,o.defaultChecked=!!_,j!=null&&typeof j!="function"&&typeof j!="symbol"&&typeof j!="boolean"&&(o.name=j),kt(o)}function ji(o,u,p){u==="number"&&Kn(o.ownerDocument)===o||o.defaultValue===""+p||(o.defaultValue=""+p)}function Ei(o,u,p,_){if(o=o.options,u){u={};for(var M=0;M"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),bb=!1;if(Js)try{var oh={};Object.defineProperty(oh,"passive",{get:function(){bb=!0}}),window.addEventListener("test",oh,oh),window.removeEventListener("test",oh,oh)}catch{bb=!1}var ll=null,_b=null,Qm=null;function r3(){if(Qm)return Qm;var o,u=_b,p=u.length,_,M="value"in ll?ll.value:ll.textContent,D=M.length;for(o=0;o=uh),u3=" ",d3=!1;function f3(o,u){switch(o){case"keyup":return sV.indexOf(u.keyCode)!==-1;case"keydown":return u.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function h3(o){return o=o.detail,typeof o=="object"&&"data"in o?o.data:null}var ju=!1;function lV(o,u){switch(o){case"compositionend":return h3(u);case"keypress":return u.which!==32?null:(d3=!0,u3);case"textInput":return o=u.data,o===u3&&d3?null:o;default:return null}}function cV(o,u){if(ju)return o==="compositionend"||!Ab&&f3(o,u)?(o=r3(),Qm=_b=ll=null,ju=!1,o):null;switch(o){case"paste":return null;case"keypress":if(!(u.ctrlKey||u.altKey||u.metaKey)||u.ctrlKey&&u.altKey){if(u.char&&1=u)return{node:p,offset:u-o};o=_}e:{for(;p;){if(p.nextSibling){p=p.nextSibling;break e}p=p.parentNode}p=void 0}p=_3(p)}}function w3(o,u){return o&&u?o===u?!0:o&&o.nodeType===3?!1:u&&u.nodeType===3?w3(o,u.parentNode):"contains"in o?o.contains(u):o.compareDocumentPosition?!!(o.compareDocumentPosition(u)&16):!1:!1}function E3(o){o=o!=null&&o.ownerDocument!=null&&o.ownerDocument.defaultView!=null?o.ownerDocument.defaultView:window;for(var u=Kn(o.document);u instanceof o.HTMLIFrameElement;){try{var p=typeof u.contentWindow.location.href=="string"}catch{p=!1}if(p)o=u.contentWindow;else break;u=Kn(o.document)}return u}function Rb(o){var u=o&&o.nodeName&&o.nodeName.toLowerCase();return u&&(u==="input"&&(o.type==="text"||o.type==="search"||o.type==="tel"||o.type==="url"||o.type==="password")||u==="textarea"||o.contentEditable==="true")}var vV=Js&&"documentMode"in document&&11>=document.documentMode,Hu=null,Pb=null,ph=null,Db=!1;function M3(o,u,p){var _=p.window===p?p.document:p.nodeType===9?p:p.ownerDocument;Db||Hu==null||Hu!==Kn(_)||(_=Hu,"selectionStart"in _&&Rb(_)?_={start:_.selectionStart,end:_.selectionEnd}:(_=(_.ownerDocument&&_.ownerDocument.defaultView||window).getSelection(),_={anchorNode:_.anchorNode,anchorOffset:_.anchorOffset,focusNode:_.focusNode,focusOffset:_.focusOffset}),ph&&hh(ph,_)||(ph=_,_=$g(Pb,"onSelect"),0<_.length&&(u=new tg("onSelect","select",null,u,p),o.push({event:u,listeners:_}),u.target=Hu)))}function bc(o,u){var p={};return p[o.toLowerCase()]=u.toLowerCase(),p["Webkit"+o]="webkit"+u,p["Moz"+o]="moz"+u,p}var Gu={animationend:bc("Animation","AnimationEnd"),animationiteration:bc("Animation","AnimationIteration"),animationstart:bc("Animation","AnimationStart"),transitionrun:bc("Transition","TransitionRun"),transitionstart:bc("Transition","TransitionStart"),transitioncancel:bc("Transition","TransitionCancel"),transitionend:bc("Transition","TransitionEnd")},Nb={},A3={};Js&&(A3=document.createElement("div").style,"AnimationEvent"in window||(delete Gu.animationend.animation,delete Gu.animationiteration.animation,delete Gu.animationstart.animation),"TransitionEvent"in window||delete Gu.transitionend.transition);function _c(o){if(Nb[o])return Nb[o];if(!Gu[o])return o;var u=Gu[o],p;for(p in u)if(u.hasOwnProperty(p)&&p in A3)return Nb[o]=u[p];return o}var T3=_c("animationend"),C3=_c("animationiteration"),R3=_c("animationstart"),xV=_c("transitionrun"),yV=_c("transitionstart"),bV=_c("transitioncancel"),P3=_c("transitionend"),D3=new Map,Ob="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");Ob.push("scrollEnd");function ts(o,u){D3.set(o,u),ot(u,[o])}var rg=typeof reportError=="function"?reportError:function(o){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var u=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof o=="object"&&o!==null&&typeof o.message=="string"?String(o.message):String(o),error:o});if(!window.dispatchEvent(u))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",o);return}console.error(o)},Ea=[],Vu=0,Lb=0;function ag(){for(var o=Vu,u=Lb=Vu=0;u>=j,M-=j,Ms=1<<32-et(u)+M|p<jt?(tn=Tt,Tt=null):tn=Tt.sibling;var ln=Ge(Oe,Tt,Fe[jt],nt);if(ln===null){Tt===null&&(Tt=tn);break}o&&Tt&&ln.alternate===null&&u(Oe,Tt),Te=D(ln,Te,jt),on===null?Dt=ln:on.sibling=ln,on=ln,Tt=tn}if(jt===Fe.length)return p(Oe,Tt),rn&&to(Oe,jt),Dt;if(Tt===null){for(;jtjt?(tn=Tt,Tt=null):tn=Tt.sibling;var Pl=Ge(Oe,Tt,ln.value,nt);if(Pl===null){Tt===null&&(Tt=tn);break}o&&Tt&&Pl.alternate===null&&u(Oe,Tt),Te=D(Pl,Te,jt),on===null?Dt=Pl:on.sibling=Pl,on=Pl,Tt=tn}if(ln.done)return p(Oe,Tt),rn&&to(Oe,jt),Dt;if(Tt===null){for(;!ln.done;jt++,ln=Fe.next())ln=it(Oe,ln.value,nt),ln!==null&&(Te=D(ln,Te,jt),on===null?Dt=ln:on.sibling=ln,on=ln);return rn&&to(Oe,jt),Dt}for(Tt=_(Tt);!ln.done;jt++,ln=Fe.next())ln=Ye(Tt,Oe,jt,ln.value,nt),ln!==null&&(o&&ln.alternate!==null&&Tt.delete(ln.key===null?jt:ln.key),Te=D(ln,Te,jt),on===null?Dt=ln:on.sibling=ln,on=ln);return o&&Tt.forEach(function(k9){return u(Oe,k9)}),rn&&to(Oe,jt),Dt}function Sn(Oe,Te,Fe,nt){if(typeof Fe=="object"&&Fe!==null&&Fe.type===y&&Fe.key===null&&(Fe=Fe.props.children),typeof Fe=="object"&&Fe!==null){switch(Fe.$$typeof){case m:e:{for(var Dt=Fe.key;Te!==null;){if(Te.key===Dt){if(Dt=Fe.type,Dt===y){if(Te.tag===7){p(Oe,Te.sibling),nt=M(Te,Fe.props.children),nt.return=Oe,Oe=nt;break e}}else if(Te.elementType===Dt||typeof Dt=="object"&&Dt!==null&&Dt.$$typeof===F&&Cc(Dt)===Te.type){p(Oe,Te.sibling),nt=M(Te,Fe.props),bh(nt,Fe),nt.return=Oe,Oe=nt;break e}p(Oe,Te);break}else u(Oe,Te);Te=Te.sibling}Fe.type===y?(nt=wc(Fe.props.children,Oe.mode,nt,Fe.key),nt.return=Oe,Oe=nt):(nt=lg(Fe.type,Fe.key,Fe.props,null,Oe.mode,nt),bh(nt,Fe),nt.return=Oe,Oe=nt)}return j(Oe);case b:e:{for(Dt=Fe.key;Te!==null;){if(Te.key===Dt)if(Te.tag===4&&Te.stateNode.containerInfo===Fe.containerInfo&&Te.stateNode.implementation===Fe.implementation){p(Oe,Te.sibling),nt=M(Te,Fe.children||[]),nt.return=Oe,Oe=nt;break e}else{p(Oe,Te);break}else u(Oe,Te);Te=Te.sibling}nt=Fb(Fe,Oe.mode,nt),nt.return=Oe,Oe=nt}return j(Oe);case F:return Fe=Cc(Fe),Sn(Oe,Te,Fe,nt)}if(W(Fe))return St(Oe,Te,Fe,nt);if(U(Fe)){if(Dt=U(Fe),typeof Dt!="function")throw Error(i(150));return Fe=Dt.call(Fe),Ot(Oe,Te,Fe,nt)}if(typeof Fe.then=="function")return Sn(Oe,Te,mg(Fe),nt);if(Fe.$$typeof===S)return Sn(Oe,Te,dg(Oe,Fe),nt);gg(Oe,Fe)}return typeof Fe=="string"&&Fe!==""||typeof Fe=="number"||typeof Fe=="bigint"?(Fe=""+Fe,Te!==null&&Te.tag===6?(p(Oe,Te.sibling),nt=M(Te,Fe),nt.return=Oe,Oe=nt):(p(Oe,Te),nt=kb(Fe,Oe.mode,nt),nt.return=Oe,Oe=nt),j(Oe)):p(Oe,Te)}return function(Oe,Te,Fe,nt){try{yh=0;var Dt=Sn(Oe,Te,Fe,nt);return Ju=null,Dt}catch(Tt){if(Tt===Qu||Tt===hg)throw Tt;var on=ra(29,Tt,null,Oe.mode);return on.lanes=nt,on.return=Oe,on}finally{}}}var Pc=q3(!0),Y3=q3(!1),hl=!1;function Kb(o){o.updateQueue={baseState:o.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Zb(o,u){o=o.updateQueue,u.updateQueue===o&&(u.updateQueue={baseState:o.baseState,firstBaseUpdate:o.firstBaseUpdate,lastBaseUpdate:o.lastBaseUpdate,shared:o.shared,callbacks:null})}function pl(o){return{lane:o,tag:0,payload:null,callback:null,next:null}}function ml(o,u,p){var _=o.updateQueue;if(_===null)return null;if(_=_.shared,(hn&2)!==0){var M=_.pending;return M===null?u.next=u:(u.next=M.next,M.next=u),_.pending=u,u=og(o),N3(o,null,p),u}return sg(o,_,u,p),og(o)}function _h(o,u,p){if(u=u.updateQueue,u!==null&&(u=u.shared,(p&4194048)!==0)){var _=u.lanes;_&=o.pendingLanes,p|=_,u.lanes=p,Rn(o,p)}}function Qb(o,u){var p=o.updateQueue,_=o.alternate;if(_!==null&&(_=_.updateQueue,p===_)){var M=null,D=null;if(p=p.firstBaseUpdate,p!==null){do{var j={lane:p.lane,tag:p.tag,payload:p.payload,callback:null,next:null};D===null?M=D=j:D=D.next=j,p=p.next}while(p!==null);D===null?M=D=u:D=D.next=u}else M=D=u;p={baseState:_.baseState,firstBaseUpdate:M,lastBaseUpdate:D,shared:_.shared,callbacks:_.callbacks},o.updateQueue=p;return}o=p.lastBaseUpdate,o===null?p.firstBaseUpdate=u:o.next=u,p.lastBaseUpdate=u}var Jb=!1;function Sh(){if(Jb){var o=Zu;if(o!==null)throw o}}function wh(o,u,p,_){Jb=!1;var M=o.updateQueue;hl=!1;var D=M.firstBaseUpdate,j=M.lastBaseUpdate,te=M.shared.pending;if(te!==null){M.shared.pending=null;var Se=te,ze=Se.next;Se.next=null,j===null?D=ze:j.next=ze,j=Se;var Qe=o.alternate;Qe!==null&&(Qe=Qe.updateQueue,te=Qe.lastBaseUpdate,te!==j&&(te===null?Qe.firstBaseUpdate=ze:te.next=ze,Qe.lastBaseUpdate=Se))}if(D!==null){var it=M.baseState;j=0,Qe=ze=Se=null,te=D;do{var Ge=te.lane&-536870913,Ye=Ge!==te.lane;if(Ye?(en&Ge)===Ge:(_&Ge)===Ge){Ge!==0&&Ge===Ku&&(Jb=!0),Qe!==null&&(Qe=Qe.next={lane:0,tag:te.tag,payload:te.payload,callback:null,next:null});e:{var St=o,Ot=te;Ge=u;var Sn=p;switch(Ot.tag){case 1:if(St=Ot.payload,typeof St=="function"){it=St.call(Sn,it,Ge);break e}it=St;break e;case 3:St.flags=St.flags&-65537|128;case 0:if(St=Ot.payload,Ge=typeof St=="function"?St.call(Sn,it,Ge):St,Ge==null)break e;it=h({},it,Ge);break e;case 2:hl=!0}}Ge=te.callback,Ge!==null&&(o.flags|=64,Ye&&(o.flags|=8192),Ye=M.callbacks,Ye===null?M.callbacks=[Ge]:Ye.push(Ge))}else Ye={lane:Ge,tag:te.tag,payload:te.payload,callback:te.callback,next:null},Qe===null?(ze=Qe=Ye,Se=it):Qe=Qe.next=Ye,j|=Ge;if(te=te.next,te===null){if(te=M.shared.pending,te===null)break;Ye=te,te=Ye.next,Ye.next=null,M.lastBaseUpdate=Ye,M.shared.pending=null}}while(!0);Qe===null&&(Se=it),M.baseState=Se,M.firstBaseUpdate=ze,M.lastBaseUpdate=Qe,D===null&&(M.shared.lanes=0),bl|=j,o.lanes=j,o.memoizedState=it}}function K3(o,u){if(typeof o!="function")throw Error(i(191,o));o.call(u)}function Z3(o,u){var p=o.callbacks;if(p!==null)for(o.callbacks=null,o=0;oD?D:8;var j=X.T,te={};X.T=te,x_(o,!1,u,p);try{var Se=M(),ze=X.S;if(ze!==null&&ze(te,Se),Se!==null&&typeof Se=="object"&&typeof Se.then=="function"){var Qe=AV(Se,_);Ah(o,u,Qe,ca(o))}else Ah(o,u,_,ca(o))}catch(it){Ah(o,u,{then:function(){},status:"rejected",reason:it},ca())}finally{V.p=D,j!==null&&te.types!==null&&(j.types=te.types),X.T=j}}function NV(){}function g_(o,u,p,_){if(o.tag!==5)throw Error(i(476));var M=RR(o).queue;CR(o,M,u,Y,p===null?NV:function(){return PR(o),p(_)})}function RR(o){var u=o.memoizedState;if(u!==null)return u;u={memoizedState:Y,baseState:Y,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ao,lastRenderedState:Y},next:null};var p={};return u.next={memoizedState:p,baseState:p,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ao,lastRenderedState:p},next:null},o.memoizedState=u,o=o.alternate,o!==null&&(o.memoizedState=u),u}function PR(o){var u=RR(o);u.next===null&&(u=o.alternate.memoizedState),Ah(o,u.next.queue,{},ca())}function v_(){return rr(Gh)}function DR(){return ii().memoizedState}function NR(){return ii().memoizedState}function OV(o){for(var u=o.return;u!==null;){switch(u.tag){case 24:case 3:var p=ca();o=pl(p);var _=ml(u,o,p);_!==null&&(Vr(_,u,p),_h(_,u,p)),u={cache:Wb()},o.payload=u;return}u=u.return}}function LV(o,u,p){var _=ca();p={lane:_,revertLane:0,gesture:null,action:p,hasEagerState:!1,eagerState:null,next:null},Ag(o)?LR(u,p):(p=Ib(o,u,p,_),p!==null&&(Vr(p,o,_),IR(p,u,_)))}function OR(o,u,p){var _=ca();Ah(o,u,p,_)}function Ah(o,u,p,_){var M={lane:_,revertLane:0,gesture:null,action:p,hasEagerState:!1,eagerState:null,next:null};if(Ag(o))LR(u,M);else{var D=o.alternate;if(o.lanes===0&&(D===null||D.lanes===0)&&(D=u.lastRenderedReducer,D!==null))try{var j=u.lastRenderedState,te=D(j,p);if(M.hasEagerState=!0,M.eagerState=te,ia(te,j))return sg(o,u,M,0),Pn===null&&ag(),!1}catch{}finally{}if(p=Ib(o,u,M,_),p!==null)return Vr(p,o,_),IR(p,u,_),!0}return!1}function x_(o,u,p,_){if(_={lane:2,revertLane:K_(),gesture:null,action:_,hasEagerState:!1,eagerState:null,next:null},Ag(o)){if(u)throw Error(i(479))}else u=Ib(o,p,_,2),u!==null&&Vr(u,o,2)}function Ag(o){var u=o.alternate;return o===Bt||u!==null&&u===Bt}function LR(o,u){td=yg=!0;var p=o.pending;p===null?u.next=u:(u.next=p.next,p.next=u),o.pending=u}function IR(o,u,p){if((p&4194048)!==0){var _=u.lanes;_&=o.pendingLanes,p|=_,u.lanes=p,Rn(o,p)}}var Th={readContext:rr,use:Sg,useCallback:Zn,useContext:Zn,useEffect:Zn,useImperativeHandle:Zn,useLayoutEffect:Zn,useInsertionEffect:Zn,useMemo:Zn,useReducer:Zn,useRef:Zn,useState:Zn,useDebugValue:Zn,useDeferredValue:Zn,useTransition:Zn,useSyncExternalStore:Zn,useId:Zn,useHostTransitionStatus:Zn,useFormState:Zn,useActionState:Zn,useOptimistic:Zn,useMemoCache:Zn,useCacheRefresh:Zn};Th.useEffectEvent=Zn;var UR={readContext:rr,use:Sg,useCallback:function(o,u){return Tr().memoizedState=[o,u===void 0?null:u],o},useContext:rr,useEffect:yR,useImperativeHandle:function(o,u,p){p=p!=null?p.concat([o]):null,Eg(4194308,4,wR.bind(null,u,o),p)},useLayoutEffect:function(o,u){return Eg(4194308,4,o,u)},useInsertionEffect:function(o,u){Eg(4,2,o,u)},useMemo:function(o,u){var p=Tr();u=u===void 0?null:u;var _=o();if(Dc){ct(!0);try{o()}finally{ct(!1)}}return p.memoizedState=[_,u],_},useReducer:function(o,u,p){var _=Tr();if(p!==void 0){var M=p(u);if(Dc){ct(!0);try{p(u)}finally{ct(!1)}}}else M=u;return _.memoizedState=_.baseState=M,o={pending:null,lanes:0,dispatch:null,lastRenderedReducer:o,lastRenderedState:M},_.queue=o,o=o.dispatch=LV.bind(null,Bt,o),[_.memoizedState,o]},useRef:function(o){var u=Tr();return o={current:o},u.memoizedState=o},useState:function(o){o=d_(o);var u=o.queue,p=OR.bind(null,Bt,u);return u.dispatch=p,[o.memoizedState,p]},useDebugValue:p_,useDeferredValue:function(o,u){var p=Tr();return m_(p,o,u)},useTransition:function(){var o=d_(!1);return o=CR.bind(null,Bt,o.queue,!0,!1),Tr().memoizedState=o,[!1,o]},useSyncExternalStore:function(o,u,p){var _=Bt,M=Tr();if(rn){if(p===void 0)throw Error(i(407));p=p()}else{if(p=u(),Pn===null)throw Error(i(349));(en&127)!==0||iR(_,u,p)}M.memoizedState=p;var D={value:p,getSnapshot:u};return M.queue=D,yR(aR.bind(null,_,D,o),[o]),_.flags|=2048,id(9,{destroy:void 0},rR.bind(null,_,D,p,u),null),p},useId:function(){var o=Tr(),u=Pn.identifierPrefix;if(rn){var p=As,_=Ms;p=(_&~(1<<32-et(_)-1)).toString(32)+p,u="_"+u+"R_"+p,p=bg++,0<\/script>",D=D.removeChild(D.firstChild);break;case"select":D=typeof _.is=="string"?j.createElement("select",{is:_.is}):j.createElement("select"),_.multiple?D.multiple=!0:_.size&&(D.size=_.size);break;default:D=typeof _.is=="string"?j.createElement(M,{is:_.is}):j.createElement(M)}}D[Wn]=u,D[ei]=_;e:for(j=u.child;j!==null;){if(j.tag===5||j.tag===6)D.appendChild(j.stateNode);else if(j.tag!==4&&j.tag!==27&&j.child!==null){j.child.return=j,j=j.child;continue}if(j===u)break e;for(;j.sibling===null;){if(j.return===null||j.return===u)break e;j=j.return}j.sibling.return=j.return,j=j.sibling}u.stateNode=D;e:switch(sr(D,M,_),M){case"button":case"input":case"select":case"textarea":_=!!_.autoFocus;break e;case"img":_=!0;break e;default:_=!1}_&&oo(u)}}return kn(u),N_(u,u.type,o===null?null:o.memoizedProps,u.pendingProps,p),null;case 6:if(o&&u.stateNode!=null)o.memoizedProps!==_&&oo(u);else{if(typeof _!="string"&&u.stateNode===null)throw Error(i(166));if(o=me.current,qu(u)){if(o=u.stateNode,p=u.memoizedProps,_=null,M=ir,M!==null)switch(M.tag){case 27:case 5:_=M.memoizedProps}o[Wn]=u,o=!!(o.nodeValue===p||_!==null&&_.suppressHydrationWarning===!0||tD(o.nodeValue,p)),o||dl(u,!0)}else o=Wg(o).createTextNode(_),o[Wn]=u,u.stateNode=o}return kn(u),null;case 31:if(p=u.memoizedState,o===null||o.memoizedState!==null){if(_=qu(u),p!==null){if(o===null){if(!_)throw Error(i(318));if(o=u.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(i(557));o[Wn]=u}else Ec(),(u.flags&128)===0&&(u.memoizedState=null),u.flags|=4;kn(u),o=!1}else p=Hb(),o!==null&&o.memoizedState!==null&&(o.memoizedState.hydrationErrors=p),o=!0;if(!o)return u.flags&256?(sa(u),u):(sa(u),null);if((u.flags&128)!==0)throw Error(i(558))}return kn(u),null;case 13:if(_=u.memoizedState,o===null||o.memoizedState!==null&&o.memoizedState.dehydrated!==null){if(M=qu(u),_!==null&&_.dehydrated!==null){if(o===null){if(!M)throw Error(i(318));if(M=u.memoizedState,M=M!==null?M.dehydrated:null,!M)throw Error(i(317));M[Wn]=u}else Ec(),(u.flags&128)===0&&(u.memoizedState=null),u.flags|=4;kn(u),M=!1}else M=Hb(),o!==null&&o.memoizedState!==null&&(o.memoizedState.hydrationErrors=M),M=!0;if(!M)return u.flags&256?(sa(u),u):(sa(u),null)}return sa(u),(u.flags&128)!==0?(u.lanes=p,u):(p=_!==null,o=o!==null&&o.memoizedState!==null,p&&(_=u.child,M=null,_.alternate!==null&&_.alternate.memoizedState!==null&&_.alternate.memoizedState.cachePool!==null&&(M=_.alternate.memoizedState.cachePool.pool),D=null,_.memoizedState!==null&&_.memoizedState.cachePool!==null&&(D=_.memoizedState.cachePool.pool),D!==M&&(_.flags|=2048)),p!==o&&p&&(u.child.flags|=8192),Dg(u,u.updateQueue),kn(u),null);case 4:return he(),o===null&&eS(u.stateNode.containerInfo),kn(u),null;case 10:return io(u.type),kn(u),null;case 19:if(q(ni),_=u.memoizedState,_===null)return kn(u),null;if(M=(u.flags&128)!==0,D=_.rendering,D===null)if(M)Rh(_,!1);else{if(Qn!==0||o!==null&&(o.flags&128)!==0)for(o=u.child;o!==null;){if(D=xg(o),D!==null){for(u.flags|=128,Rh(_,!1),o=D.updateQueue,u.updateQueue=o,Dg(u,o),u.subtreeFlags=0,o=p,p=u.child;p!==null;)O3(p,o),p=p.sibling;return re(ni,ni.current&1|2),rn&&to(u,_.treeForkCount),u.child}o=o.sibling}_.tail!==null&&O()>Ug&&(u.flags|=128,M=!0,Rh(_,!1),u.lanes=4194304)}else{if(!M)if(o=xg(D),o!==null){if(u.flags|=128,M=!0,o=o.updateQueue,u.updateQueue=o,Dg(u,o),Rh(_,!0),_.tail===null&&_.tailMode==="hidden"&&!D.alternate&&!rn)return kn(u),null}else 2*O()-_.renderingStartTime>Ug&&p!==536870912&&(u.flags|=128,M=!0,Rh(_,!1),u.lanes=4194304);_.isBackwards?(D.sibling=u.child,u.child=D):(o=_.last,o!==null?o.sibling=D:u.child=D,_.last=D)}return _.tail!==null?(o=_.tail,_.rendering=o,_.tail=o.sibling,_.renderingStartTime=O(),o.sibling=null,p=ni.current,re(ni,M?p&1|2:p&1),rn&&to(u,_.treeForkCount),o):(kn(u),null);case 22:case 23:return sa(u),t_(),_=u.memoizedState!==null,o!==null?o.memoizedState!==null!==_&&(u.flags|=8192):_&&(u.flags|=8192),_?(p&536870912)!==0&&(u.flags&128)===0&&(kn(u),u.subtreeFlags&6&&(u.flags|=8192)):kn(u),p=u.updateQueue,p!==null&&Dg(u,p.retryQueue),p=null,o!==null&&o.memoizedState!==null&&o.memoizedState.cachePool!==null&&(p=o.memoizedState.cachePool.pool),_=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(_=u.memoizedState.cachePool.pool),_!==p&&(u.flags|=2048),o!==null&&q(Tc),null;case 24:return p=null,o!==null&&(p=o.memoizedState.cache),u.memoizedState.cache!==p&&(u.flags|=2048),io(ci),kn(u),null;case 25:return null;case 30:return null}throw Error(i(156,u.tag))}function zV(o,u){switch(Bb(u),u.tag){case 1:return o=u.flags,o&65536?(u.flags=o&-65537|128,u):null;case 3:return io(ci),he(),o=u.flags,(o&65536)!==0&&(o&128)===0?(u.flags=o&-65537|128,u):null;case 26:case 27:case 5:return Be(u),null;case 31:if(u.memoizedState!==null){if(sa(u),u.alternate===null)throw Error(i(340));Ec()}return o=u.flags,o&65536?(u.flags=o&-65537|128,u):null;case 13:if(sa(u),o=u.memoizedState,o!==null&&o.dehydrated!==null){if(u.alternate===null)throw Error(i(340));Ec()}return o=u.flags,o&65536?(u.flags=o&-65537|128,u):null;case 19:return q(ni),null;case 4:return he(),null;case 10:return io(u.type),null;case 22:case 23:return sa(u),t_(),o!==null&&q(Tc),o=u.flags,o&65536?(u.flags=o&-65537|128,u):null;case 24:return io(ci),null;case 25:return null;default:return null}}function sP(o,u){switch(Bb(u),u.tag){case 3:io(ci),he();break;case 26:case 27:case 5:Be(u);break;case 4:he();break;case 31:u.memoizedState!==null&&sa(u);break;case 13:sa(u);break;case 19:q(ni);break;case 10:io(u.type);break;case 22:case 23:sa(u),t_(),o!==null&&q(Tc);break;case 24:io(ci)}}function Ph(o,u){try{var p=u.updateQueue,_=p!==null?p.lastEffect:null;if(_!==null){var M=_.next;p=M;do{if((p.tag&o)===o){_=void 0;var D=p.create,j=p.inst;_=D(),j.destroy=_}p=p.next}while(p!==M)}}catch(te){xn(u,u.return,te)}}function xl(o,u,p){try{var _=u.updateQueue,M=_!==null?_.lastEffect:null;if(M!==null){var D=M.next;_=D;do{if((_.tag&o)===o){var j=_.inst,te=j.destroy;if(te!==void 0){j.destroy=void 0,M=u;var Se=p,ze=te;try{ze()}catch(Qe){xn(M,Se,Qe)}}}_=_.next}while(_!==D)}}catch(Qe){xn(u,u.return,Qe)}}function oP(o){var u=o.updateQueue;if(u!==null){var p=o.stateNode;try{Z3(u,p)}catch(_){xn(o,o.return,_)}}}function lP(o,u,p){p.props=Nc(o.type,o.memoizedProps),p.state=o.memoizedState;try{p.componentWillUnmount()}catch(_){xn(o,u,_)}}function Dh(o,u){try{var p=o.ref;if(p!==null){switch(o.tag){case 26:case 27:case 5:var _=o.stateNode;break;case 30:_=o.stateNode;break;default:_=o.stateNode}typeof p=="function"?o.refCleanup=p(_):p.current=_}}catch(M){xn(o,u,M)}}function Ts(o,u){var p=o.ref,_=o.refCleanup;if(p!==null)if(typeof _=="function")try{_()}catch(M){xn(o,u,M)}finally{o.refCleanup=null,o=o.alternate,o!=null&&(o.refCleanup=null)}else if(typeof p=="function")try{p(null)}catch(M){xn(o,u,M)}else p.current=null}function cP(o){var u=o.type,p=o.memoizedProps,_=o.stateNode;try{e:switch(u){case"button":case"input":case"select":case"textarea":p.autoFocus&&_.focus();break e;case"img":p.src?_.src=p.src:p.srcSet&&(_.srcset=p.srcSet)}}catch(M){xn(o,o.return,M)}}function O_(o,u,p){try{var _=o.stateNode;o9(_,o.type,p,u),_[ei]=u}catch(M){xn(o,o.return,M)}}function uP(o){return o.tag===5||o.tag===3||o.tag===26||o.tag===27&&Ml(o.type)||o.tag===4}function L_(o){e:for(;;){for(;o.sibling===null;){if(o.return===null||uP(o.return))return null;o=o.return}for(o.sibling.return=o.return,o=o.sibling;o.tag!==5&&o.tag!==6&&o.tag!==18;){if(o.tag===27&&Ml(o.type)||o.flags&2||o.child===null||o.tag===4)continue e;o.child.return=o,o=o.child}if(!(o.flags&2))return o.stateNode}}function I_(o,u,p){var _=o.tag;if(_===5||_===6)o=o.stateNode,u?(p.nodeType===9?p.body:p.nodeName==="HTML"?p.ownerDocument.body:p).insertBefore(o,u):(u=p.nodeType===9?p.body:p.nodeName==="HTML"?p.ownerDocument.body:p,u.appendChild(o),p=p._reactRootContainer,p!=null||u.onclick!==null||(u.onclick=Qs));else if(_!==4&&(_===27&&Ml(o.type)&&(p=o.stateNode,u=null),o=o.child,o!==null))for(I_(o,u,p),o=o.sibling;o!==null;)I_(o,u,p),o=o.sibling}function Ng(o,u,p){var _=o.tag;if(_===5||_===6)o=o.stateNode,u?p.insertBefore(o,u):p.appendChild(o);else if(_!==4&&(_===27&&Ml(o.type)&&(p=o.stateNode),o=o.child,o!==null))for(Ng(o,u,p),o=o.sibling;o!==null;)Ng(o,u,p),o=o.sibling}function dP(o){var u=o.stateNode,p=o.memoizedProps;try{for(var _=o.type,M=u.attributes;M.length;)u.removeAttributeNode(M[0]);sr(u,_,p),u[Wn]=o,u[ei]=p}catch(D){xn(o,o.return,D)}}var lo=!1,fi=!1,U_=!1,fP=typeof WeakSet=="function"?WeakSet:Set,Gi=null;function BV(o,u){if(o=o.containerInfo,iS=Jg,o=E3(o),Rb(o)){if("selectionStart"in o)var p={start:o.selectionStart,end:o.selectionEnd};else e:{p=(p=o.ownerDocument)&&p.defaultView||window;var _=p.getSelection&&p.getSelection();if(_&&_.rangeCount!==0){p=_.anchorNode;var M=_.anchorOffset,D=_.focusNode;_=_.focusOffset;try{p.nodeType,D.nodeType}catch{p=null;break e}var j=0,te=-1,Se=-1,ze=0,Qe=0,it=o,Ge=null;t:for(;;){for(var Ye;it!==p||M!==0&&it.nodeType!==3||(te=j+M),it!==D||_!==0&&it.nodeType!==3||(Se=j+_),it.nodeType===3&&(j+=it.nodeValue.length),(Ye=it.firstChild)!==null;)Ge=it,it=Ye;for(;;){if(it===o)break t;if(Ge===p&&++ze===M&&(te=j),Ge===D&&++Qe===_&&(Se=j),(Ye=it.nextSibling)!==null)break;it=Ge,Ge=it.parentNode}it=Ye}p=te===-1||Se===-1?null:{start:te,end:Se}}else p=null}p=p||{start:0,end:0}}else p=null;for(rS={focusedElem:o,selectionRange:p},Jg=!1,Gi=u;Gi!==null;)if(u=Gi,o=u.child,(u.subtreeFlags&1028)!==0&&o!==null)o.return=u,Gi=o;else for(;Gi!==null;){switch(u=Gi,D=u.alternate,o=u.flags,u.tag){case 0:if((o&4)!==0&&(o=u.updateQueue,o=o!==null?o.events:null,o!==null))for(p=0;p title"))),sr(D,_,p),D[Wn]=o,Re(D),_=D;break e;case"link":var j=xD("link","href",M).get(_+(p.href||""));if(j){for(var te=0;teSn&&(j=Sn,Sn=Ot,Ot=j);var Oe=S3(te,Ot),Te=S3(te,Sn);if(Oe&&Te&&(Ye.rangeCount!==1||Ye.anchorNode!==Oe.node||Ye.anchorOffset!==Oe.offset||Ye.focusNode!==Te.node||Ye.focusOffset!==Te.offset)){var Fe=it.createRange();Fe.setStart(Oe.node,Oe.offset),Ye.removeAllRanges(),Ot>Sn?(Ye.addRange(Fe),Ye.extend(Te.node,Te.offset)):(Fe.setEnd(Te.node,Te.offset),Ye.addRange(Fe))}}}}for(it=[],Ye=te;Ye=Ye.parentNode;)Ye.nodeType===1&&it.push({element:Ye,left:Ye.scrollLeft,top:Ye.scrollTop});for(typeof te.focus=="function"&&te.focus(),te=0;tep?32:p,X.T=null,p=G_,G_=null;var D=Sl,j=po;if(Mi=0,ld=Sl=null,po=0,(hn&6)!==0)throw Error(i(331));var te=hn;if(hn|=4,wP(D.current),bP(D,D.current,j,p),hn=te,kh(0,!1),De&&typeof De.onPostCommitFiberRoot=="function")try{De.onPostCommitFiberRoot(ke,D)}catch{}return!0}finally{V.p=M,X.T=_,jP(o,u)}}function GP(o,u,p){u=Ma(p,u),u=S_(o.stateNode,u,2),o=ml(o,u,2),o!==null&&(Wt(o,2),Cs(o))}function xn(o,u,p){if(o.tag===3)GP(o,o,p);else for(;u!==null;){if(u.tag===3){GP(u,o,p);break}else if(u.tag===1){var _=u.stateNode;if(typeof u.type.getDerivedStateFromError=="function"||typeof _.componentDidCatch=="function"&&(_l===null||!_l.has(_))){o=Ma(p,o),p=VR(2),_=ml(u,p,2),_!==null&&($R(p,_,u,o),Wt(_,2),Cs(_));break}}u=u.return}}function X_(o,u,p){var _=o.pingCache;if(_===null){_=o.pingCache=new GV;var M=new Set;_.set(u,M)}else M=_.get(u),M===void 0&&(M=new Set,_.set(u,M));M.has(p)||(z_=!0,M.add(p),o=qV.bind(null,o,u,p),u.then(o,o))}function qV(o,u,p){var _=o.pingCache;_!==null&&_.delete(u),o.pingedLanes|=o.suspendedLanes&p,o.warmLanes&=~p,Pn===o&&(en&p)===p&&(Qn===4||Qn===3&&(en&62914560)===en&&300>O()-Ig?(hn&2)===0&&cd(o,0):B_|=p,od===en&&(od=0)),Cs(o)}function VP(o,u){u===0&&(u=mt()),o=Sc(o,u),o!==null&&(Wt(o,u),Cs(o))}function YV(o){var u=o.memoizedState,p=0;u!==null&&(p=u.retryLane),VP(o,p)}function KV(o,u){var p=0;switch(o.tag){case 31:case 13:var _=o.stateNode,M=o.memoizedState;M!==null&&(p=M.retryLane);break;case 19:_=o.stateNode;break;case 22:_=o.stateNode._retryCache;break;default:throw Error(i(314))}_!==null&&_.delete(u),VP(o,p)}function ZV(o,u){return ie(o,u)}var Hg=null,dd=null,q_=!1,Gg=!1,Y_=!1,El=0;function Cs(o){o!==dd&&o.next===null&&(dd===null?Hg=dd=o:dd=dd.next=o),Gg=!0,q_||(q_=!0,JV())}function kh(o,u){if(!Y_&&Gg){Y_=!0;do for(var p=!1,_=Hg;_!==null;){if(o!==0){var M=_.pendingLanes;if(M===0)var D=0;else{var j=_.suspendedLanes,te=_.pingedLanes;D=(1<<31-et(42|o)+1)-1,D&=M&~(j&~te),D=D&201326741?D&201326741|1:D?D|2:0}D!==0&&(p=!0,qP(_,D))}else D=en,D=ge(_,_===Pn?D:0,_.cancelPendingCommit!==null||_.timeoutHandle!==-1),(D&3)===0||je(_,D)||(p=!0,qP(_,D));_=_.next}while(p);Y_=!1}}function QV(){$P()}function $P(){Gg=q_=!1;var o=0;El!==0&&c9()&&(o=El);for(var u=O(),p=null,_=Hg;_!==null;){var M=_.next,D=WP(_,u);D===0?(_.next=null,p===null?Hg=M:p.next=M,M===null&&(dd=p)):(p=_,(o!==0||(D&3)!==0)&&(Gg=!0)),_=M}Mi!==0&&Mi!==5||kh(o),El!==0&&(El=0)}function WP(o,u){for(var p=o.suspendedLanes,_=o.pingedLanes,M=o.expirationTimes,D=o.pendingLanes&-62914561;0te)break;var Qe=Se.transferSize,it=Se.initiatorType;Qe&&nD(it)&&(Se=Se.responseEnd,j+=Qe*(Se"u"?null:document;function pD(o,u,p){var _=fd;if(_&&typeof u=="string"&&u){var M=pn(u);M='link[rel="'+o+'"][href="'+M+'"]',typeof p=="string"&&(M+='[crossorigin="'+p+'"]'),hD.has(M)||(hD.add(M),o={rel:o,crossOrigin:p,href:u},_.querySelector(M)===null&&(u=_.createElement("link"),sr(u,"link",o),Re(u),_.head.appendChild(u)))}}function x9(o){mo.D(o),pD("dns-prefetch",o,null)}function y9(o,u){mo.C(o,u),pD("preconnect",o,u)}function b9(o,u,p){mo.L(o,u,p);var _=fd;if(_&&o&&u){var M='link[rel="preload"][as="'+pn(u)+'"]';u==="image"&&p&&p.imageSrcSet?(M+='[imagesrcset="'+pn(p.imageSrcSet)+'"]',typeof p.imageSizes=="string"&&(M+='[imagesizes="'+pn(p.imageSizes)+'"]')):M+='[href="'+pn(o)+'"]';var D=M;switch(u){case"style":D=hd(o);break;case"script":D=pd(o)}Da.has(D)||(o=h({rel:"preload",href:u==="image"&&p&&p.imageSrcSet?void 0:o,as:u},p),Da.set(D,o),_.querySelector(M)!==null||u==="style"&&_.querySelector(jh(D))||u==="script"&&_.querySelector(Hh(D))||(u=_.createElement("link"),sr(u,"link",o),Re(u),_.head.appendChild(u)))}}function _9(o,u){mo.m(o,u);var p=fd;if(p&&o){var _=u&&typeof u.as=="string"?u.as:"script",M='link[rel="modulepreload"][as="'+pn(_)+'"][href="'+pn(o)+'"]',D=M;switch(_){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":D=pd(o)}if(!Da.has(D)&&(o=h({rel:"modulepreload",href:o},u),Da.set(D,o),p.querySelector(M)===null)){switch(_){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(p.querySelector(Hh(D)))return}_=p.createElement("link"),sr(_,"link",o),Re(_),p.head.appendChild(_)}}}function S9(o,u,p){mo.S(o,u,p);var _=fd;if(_&&o){var M=Pe(_).hoistableStyles,D=hd(o);u=u||"default";var j=M.get(D);if(!j){var te={loading:0,preload:null};if(j=_.querySelector(jh(D)))te.loading=5;else{o=h({rel:"stylesheet",href:o,"data-precedence":u},p),(p=Da.get(D))&&dS(o,p);var Se=j=_.createElement("link");Re(Se),sr(Se,"link",o),Se._p=new Promise(function(ze,Qe){Se.onload=ze,Se.onerror=Qe}),Se.addEventListener("load",function(){te.loading|=1}),Se.addEventListener("error",function(){te.loading|=2}),te.loading|=4,qg(j,u,_)}j={type:"stylesheet",instance:j,count:1,state:te},M.set(D,j)}}}function w9(o,u){mo.X(o,u);var p=fd;if(p&&o){var _=Pe(p).hoistableScripts,M=pd(o),D=_.get(M);D||(D=p.querySelector(Hh(M)),D||(o=h({src:o,async:!0},u),(u=Da.get(M))&&fS(o,u),D=p.createElement("script"),Re(D),sr(D,"link",o),p.head.appendChild(D)),D={type:"script",instance:D,count:1,state:null},_.set(M,D))}}function E9(o,u){mo.M(o,u);var p=fd;if(p&&o){var _=Pe(p).hoistableScripts,M=pd(o),D=_.get(M);D||(D=p.querySelector(Hh(M)),D||(o=h({src:o,async:!0,type:"module"},u),(u=Da.get(M))&&fS(o,u),D=p.createElement("script"),Re(D),sr(D,"link",o),p.head.appendChild(D)),D={type:"script",instance:D,count:1,state:null},_.set(M,D))}}function mD(o,u,p,_){var M=(M=me.current)?Xg(M):null;if(!M)throw Error(i(446));switch(o){case"meta":case"title":return null;case"style":return typeof p.precedence=="string"&&typeof p.href=="string"?(u=hd(p.href),p=Pe(M).hoistableStyles,_=p.get(u),_||(_={type:"style",instance:null,count:0,state:null},p.set(u,_)),_):{type:"void",instance:null,count:0,state:null};case"link":if(p.rel==="stylesheet"&&typeof p.href=="string"&&typeof p.precedence=="string"){o=hd(p.href);var D=Pe(M).hoistableStyles,j=D.get(o);if(j||(M=M.ownerDocument||M,j={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},D.set(o,j),(D=M.querySelector(jh(o)))&&!D._p&&(j.instance=D,j.state.loading=5),Da.has(o)||(p={rel:"preload",as:"style",href:p.href,crossOrigin:p.crossOrigin,integrity:p.integrity,media:p.media,hrefLang:p.hrefLang,referrerPolicy:p.referrerPolicy},Da.set(o,p),D||M9(M,o,p,j.state))),u&&_===null)throw Error(i(528,""));return j}if(u&&_!==null)throw Error(i(529,""));return null;case"script":return u=p.async,p=p.src,typeof p=="string"&&u&&typeof u!="function"&&typeof u!="symbol"?(u=pd(p),p=Pe(M).hoistableScripts,_=p.get(u),_||(_={type:"script",instance:null,count:0,state:null},p.set(u,_)),_):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,o))}}function hd(o){return'href="'+pn(o)+'"'}function jh(o){return'link[rel="stylesheet"]['+o+"]"}function gD(o){return h({},o,{"data-precedence":o.precedence,precedence:null})}function M9(o,u,p,_){o.querySelector('link[rel="preload"][as="style"]['+u+"]")?_.loading=1:(u=o.createElement("link"),_.preload=u,u.addEventListener("load",function(){return _.loading|=1}),u.addEventListener("error",function(){return _.loading|=2}),sr(u,"link",p),Re(u),o.head.appendChild(u))}function pd(o){return'[src="'+pn(o)+'"]'}function Hh(o){return"script[async]"+o}function vD(o,u,p){if(u.count++,u.instance===null)switch(u.type){case"style":var _=o.querySelector('style[data-href~="'+pn(p.href)+'"]');if(_)return u.instance=_,Re(_),_;var M=h({},p,{"data-href":p.href,"data-precedence":p.precedence,href:null,precedence:null});return _=(o.ownerDocument||o).createElement("style"),Re(_),sr(_,"style",M),qg(_,p.precedence,o),u.instance=_;case"stylesheet":M=hd(p.href);var D=o.querySelector(jh(M));if(D)return u.state.loading|=4,u.instance=D,Re(D),D;_=gD(p),(M=Da.get(M))&&dS(_,M),D=(o.ownerDocument||o).createElement("link"),Re(D);var j=D;return j._p=new Promise(function(te,Se){j.onload=te,j.onerror=Se}),sr(D,"link",_),u.state.loading|=4,qg(D,p.precedence,o),u.instance=D;case"script":return D=pd(p.src),(M=o.querySelector(Hh(D)))?(u.instance=M,Re(M),M):(_=p,(M=Da.get(D))&&(_=h({},p),fS(_,M)),o=o.ownerDocument||o,M=o.createElement("script"),Re(M),sr(M,"link",_),o.head.appendChild(M),u.instance=M);case"void":return null;default:throw Error(i(443,u.type))}else u.type==="stylesheet"&&(u.state.loading&4)===0&&(_=u.instance,u.state.loading|=4,qg(_,p.precedence,o));return u.instance}function qg(o,u,p){for(var _=p.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),M=_.length?_[_.length-1]:null,D=M,j=0;j<_.length;j++){var te=_[j];if(te.dataset.precedence===u)D=te;else if(D!==M)break}D?D.parentNode.insertBefore(o,D.nextSibling):(u=p.nodeType===9?p.head:p,u.insertBefore(o,u.firstChild))}function dS(o,u){o.crossOrigin==null&&(o.crossOrigin=u.crossOrigin),o.referrerPolicy==null&&(o.referrerPolicy=u.referrerPolicy),o.title==null&&(o.title=u.title)}function fS(o,u){o.crossOrigin==null&&(o.crossOrigin=u.crossOrigin),o.referrerPolicy==null&&(o.referrerPolicy=u.referrerPolicy),o.integrity==null&&(o.integrity=u.integrity)}var Yg=null;function xD(o,u,p){if(Yg===null){var _=new Map,M=Yg=new Map;M.set(p,_)}else M=Yg,_=M.get(p),_||(_=new Map,M.set(p,_));if(_.has(o))return _;for(_.set(o,null),p=p.getElementsByTagName(o),M=0;M title"):null)}function A9(o,u,p){if(p===1||u.itemProp!=null)return!1;switch(o){case"meta":case"title":return!0;case"style":if(typeof u.precedence!="string"||typeof u.href!="string"||u.href==="")break;return!0;case"link":if(typeof u.rel!="string"||typeof u.href!="string"||u.href===""||u.onLoad||u.onError)break;switch(u.rel){case"stylesheet":return o=u.disabled,typeof u.precedence=="string"&&o==null;default:return!0}case"script":if(u.async&&typeof u.async!="function"&&typeof u.async!="symbol"&&!u.onLoad&&!u.onError&&u.src&&typeof u.src=="string")return!0}return!1}function bD(o){return!(o.type==="stylesheet"&&(o.state.loading&3)===0)}function T9(o,u,p,_){if(p.type==="stylesheet"&&(typeof _.media!="string"||matchMedia(_.media).matches!==!1)&&(p.state.loading&4)===0){if(p.instance===null){var M=hd(_.href),D=u.querySelector(jh(M));if(D){u=D._p,u!==null&&typeof u=="object"&&typeof u.then=="function"&&(o.count++,o=Kg.bind(o),u.then(o,o)),p.state.loading|=4,p.instance=D,Re(D);return}D=u.ownerDocument||u,_=gD(_),(M=Da.get(M))&&dS(_,M),D=D.createElement("link"),Re(D);var j=D;j._p=new Promise(function(te,Se){j.onload=te,j.onerror=Se}),sr(D,"link",_),p.instance=D}o.stylesheets===null&&(o.stylesheets=new Map),o.stylesheets.set(p,u),(u=p.state.preload)&&(p.state.loading&3)===0&&(o.count++,p=Kg.bind(o),u.addEventListener("load",p),u.addEventListener("error",p))}}var hS=0;function C9(o,u){return o.stylesheets&&o.count===0&&Qg(o,o.stylesheets),0hS?50:800)+u);return o.unsuspend=p,function(){o.unsuspend=null,clearTimeout(_),clearTimeout(M)}}:null}function Kg(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Qg(this,this.stylesheets);else if(this.unsuspend){var o=this.unsuspend;this.unsuspend=null,o()}}}var Zg=null;function Qg(o,u){o.stylesheets=null,o.unsuspend!==null&&(o.count++,Zg=new Map,u.forEach(R9,o),Zg=null,Kg.call(o))}function R9(o,u){if(!(u.state.loading&4)){var p=Zg.get(o);if(p)var _=p.get(null);else{p=new Map,Zg.set(o,p);for(var M=o.querySelectorAll("link[data-precedence],style[data-precedence]"),D=0;D"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),SS.exports=W9(),SS.exports}var q9=X9();var VD="popstate";function Y9(t={}){function e(i,r){let{pathname:a,search:s,hash:l}=i.location;return LE("",{pathname:a,search:s,hash:l},r.state&&r.state.usr||null,r.state&&r.state.key||"default")}function n(i,r){return typeof r=="string"?r:Lp(r)}return Z9(e,n,null,t)}function Xn(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function ys(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function K9(){return Math.random().toString(36).substring(2,10)}function $D(t,e){return{usr:t.state,key:t.key,idx:e}}function LE(t,e,n=null,i){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof e=="string"?Uf(e):e,state:n,key:e&&e.key||i||K9()}}function Lp({pathname:t="/",search:e="",hash:n=""}){return e&&e!=="?"&&(t+=e.charAt(0)==="?"?e:"?"+e),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Uf(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substring(n),t=t.substring(0,n));let i=t.indexOf("?");i>=0&&(e.search=t.substring(i),t=t.substring(0,i)),t&&(e.pathname=t)}return e}function Z9(t,e,n,i={}){let{window:r=document.defaultView,v5Compat:a=!1}=i,s=r.history,l="POP",c=null,d=f();d==null&&(d=0,s.replaceState({...s.state,idx:d},""));function f(){return(s.state||{idx:null}).idx}function h(){l="POP";let x=f(),v=x==null?null:x-d;d=x,c&&c({action:l,location:y.location,delta:v})}function g(x,v){l="PUSH";let w=LE(y.location,x,v);d=f()+1;let S=$D(w,d),A=y.createHref(w);try{s.pushState(S,"",A)}catch(R){if(R instanceof DOMException&&R.name==="DataCloneError")throw R;r.location.assign(A)}a&&c&&c({action:l,location:y.location,delta:1})}function m(x,v){l="REPLACE";let w=LE(y.location,x,v);d=f();let S=$D(w,d),A=y.createHref(w);s.replaceState(S,"",A),a&&c&&c({action:l,location:y.location,delta:0})}function b(x){return Q9(x)}let y={get action(){return l},get location(){return t(r,s)},listen(x){if(c)throw new Error("A history only accepts one active listener");return r.addEventListener(VD,h),c=x,()=>{r.removeEventListener(VD,h),c=null}},createHref(x){return e(r,x)},createURL:b,encodeLocation(x){let v=b(x);return{pathname:v.pathname,search:v.search,hash:v.hash}},push:g,replace:m,go(x){return s.go(x)}};return y}function Q9(t,e=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),Xn(n,"No window.location.(origin|href) available to create URL");let i=typeof t=="string"?t:Lp(t);return i=i.replace(/ $/,"%20"),!e&&i.startsWith("//")&&(i=n+i),new URL(i,n)}function J4(t,e,n="/"){return J9(t,e,n,!1)}function J9(t,e,n,i){let r=typeof e=="string"?Uf(e):e,a=Vo(r.pathname||"/",n);if(a==null)return null;let s=ez(t);e$(s);let l=null;for(let c=0;l==null&&c{let f={relativePath:d===void 0?s.path||"":d,caseSensitive:s.caseSensitive===!0,childrenIndex:l,route:s};if(f.relativePath.startsWith("/")){if(!f.relativePath.startsWith(i)&&c)return;Xn(f.relativePath.startsWith(i),`Absolute route path "${f.relativePath}" nested under path "${i}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),f.relativePath=f.relativePath.slice(i.length)}let h=Fo([i,f.relativePath]),g=n.concat(f);s.children&&s.children.length>0&&(Xn(s.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${h}".`),ez(s.children,e,g,h,c)),!(s.path==null&&!s.index)&&e.push({path:h,score:o$(h,s.index),routesMeta:g})};return t.forEach((s,l)=>{if(s.path===""||!s.path?.includes("?"))a(s,l);else for(let c of tz(s.path))a(s,l,!0,c)}),e}function tz(t){let e=t.split("/");if(e.length===0)return[];let[n,...i]=e,r=n.endsWith("?"),a=n.replace(/\?$/,"");if(i.length===0)return r?[a,""]:[a];let s=tz(i.join("/")),l=[];return l.push(...s.map(c=>c===""?a:[a,c].join("/"))),r&&l.push(...s),l.map(c=>t.startsWith("/")&&c===""?"/":c)}function e$(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:l$(e.routesMeta.map(i=>i.childrenIndex),n.routesMeta.map(i=>i.childrenIndex)))}var t$=/^:[\w-]+$/,n$=3,i$=2,r$=1,a$=10,s$=-2,WD=t=>t==="*";function o$(t,e){let n=t.split("/"),i=n.length;return n.some(WD)&&(i+=s$),e&&(i+=i$),n.filter(r=>!WD(r)).reduce((r,a)=>r+(t$.test(a)?n$:a===""?r$:a$),i)}function l$(t,e){return t.length===e.length&&t.slice(0,-1).every((i,r)=>i===e[r])?t[t.length-1]-e[e.length-1]:0}function c$(t,e,n=!1){let{routesMeta:i}=t,r={},a="/",s=[];for(let l=0;l{if(f==="*"){let b=l[g]||"";s=a.slice(0,a.length-b.length).replace(/(.)\/+$/,"$1")}const m=l[g];return h&&!m?d[f]=void 0:d[f]=(m||"").replace(/%2F/g,"/"),d},{}),pathname:a,pathnameBase:s,pattern:t}}function u$(t,e=!1,n=!0){ys(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let i=[],r="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,l,c)=>(i.push({paramName:l,isOptional:c!=null}),c?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(i.push({paramName:"*"}),r+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?r+="\\/*$":t!==""&&t!=="/"&&(r+="(?:(?=\\/|$))"),[new RegExp(r,e?void 0:"i"),i]}function d$(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return ys(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${e}).`),t}}function Vo(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,i=t.charAt(n);return i&&i!=="/"?null:t.slice(n)||"/"}var f$=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,h$=t=>f$.test(t);function p$(t,e="/"){let{pathname:n,search:i="",hash:r=""}=typeof t=="string"?Uf(t):t,a;if(n)if(h$(n))a=n;else{if(n.includes("//")){let s=n;n=n.replace(/\/\/+/g,"/"),ys(!1,`Pathnames cannot have embedded double slashes - normalizing ${s} -> ${n}`)}n.startsWith("/")?a=XD(n.substring(1),"/"):a=XD(n,e)}else a=e;return{pathname:a,search:v$(i),hash:x$(r)}}function XD(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(r=>{r===".."?n.length>1&&n.pop():r!=="."&&n.push(r)}),n.length>1?n.join("/"):"/"}function AS(t,e,n,i){return`Cannot include a '${t}' character in a manually specified \`to.${e}\` field [${JSON.stringify(i)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function m$(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function nz(t){let e=m$(t);return e.map((n,i)=>i===e.length-1?n.pathname:n.pathnameBase)}function iz(t,e,n,i=!1){let r;typeof t=="string"?r=Uf(t):(r={...t},Xn(!r.pathname||!r.pathname.includes("?"),AS("?","pathname","search",r)),Xn(!r.pathname||!r.pathname.includes("#"),AS("#","pathname","hash",r)),Xn(!r.search||!r.search.includes("#"),AS("#","search","hash",r)));let a=t===""||r.pathname==="",s=a?"/":r.pathname,l;if(s==null)l=n;else{let h=e.length-1;if(!i&&s.startsWith("..")){let g=s.split("/");for(;g[0]==="..";)g.shift(),h-=1;r.pathname=g.join("/")}l=h>=0?e[h]:"/"}let c=p$(r,l),d=s&&s!=="/"&&s.endsWith("/"),f=(a||s===".")&&n.endsWith("/");return!c.pathname.endsWith("/")&&(d||f)&&(c.pathname+="/"),c}var Fo=t=>t.join("/").replace(/\/\/+/g,"/"),g$=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),v$=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,x$=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function y$(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var rz=["POST","PUT","PATCH","DELETE"];new Set(rz);var b$=["GET",...rz];new Set(b$);var kf=T.createContext(null);kf.displayName="DataRouter";var cy=T.createContext(null);cy.displayName="DataRouterState";T.createContext(!1);var az=T.createContext({isTransitioning:!1});az.displayName="ViewTransition";var _$=T.createContext(new Map);_$.displayName="Fetchers";var S$=T.createContext(null);S$.displayName="Await";var qs=T.createContext(null);qs.displayName="Navigation";var pm=T.createContext(null);pm.displayName="Location";var Ys=T.createContext({outlet:null,matches:[],isDataRoute:!1});Ys.displayName="Route";var nT=T.createContext(null);nT.displayName="RouteError";function w$(t,{relative:e}={}){Xn(mm(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:i}=T.useContext(qs),{hash:r,pathname:a,search:s}=gm(t,{relative:e}),l=a;return n!=="/"&&(l=a==="/"?n:Fo([n,a])),i.createHref({pathname:l,search:s,hash:r})}function mm(){return T.useContext(pm)!=null}function Ou(){return Xn(mm(),"useLocation() may be used only in the context of a component."),T.useContext(pm).location}var sz="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function oz(t){T.useContext(qs).static||T.useLayoutEffect(t)}function lz(){let{isDataRoute:t}=T.useContext(Ys);return t?F$():E$()}function E$(){Xn(mm(),"useNavigate() may be used only in the context of a component.");let t=T.useContext(kf),{basename:e,navigator:n}=T.useContext(qs),{matches:i}=T.useContext(Ys),{pathname:r}=Ou(),a=JSON.stringify(nz(i)),s=T.useRef(!1);return oz(()=>{s.current=!0}),T.useCallback((c,d={})=>{if(ys(s.current,sz),!s.current)return;if(typeof c=="number"){n.go(c);return}let f=iz(c,JSON.parse(a),r,d.relative==="path");t==null&&e!=="/"&&(f.pathname=f.pathname==="/"?e:Fo([e,f.pathname])),(d.replace?n.replace:n.push)(f,d.state,d)},[e,n,a,r,t])}var M$=T.createContext(null);function A$(t){let e=T.useContext(Ys).outlet;return T.useMemo(()=>e&&T.createElement(M$.Provider,{value:t},e),[e,t])}function gm(t,{relative:e}={}){let{matches:n}=T.useContext(Ys),{pathname:i}=Ou(),r=JSON.stringify(nz(n));return T.useMemo(()=>iz(t,JSON.parse(r),i,e==="path"),[t,r,i,e])}function T$(t,e){return cz(t,e)}function cz(t,e,n,i,r){Xn(mm(),"useRoutes() may be used only in the context of a component.");let{navigator:a}=T.useContext(qs),{matches:s}=T.useContext(Ys),l=s[s.length-1],c=l?l.params:{},d=l?l.pathname:"/",f=l?l.pathnameBase:"/",h=l&&l.route;{let w=h&&h.path||"";uz(d,!h||w.endsWith("*")||w.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${d}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. - -Please change the parent to .`)}let g=Ou(),m;if(e){let w=typeof e=="string"?Uf(e):e;Xn(f==="/"||w.pathname?.startsWith(f),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${f}" but pathname "${w.pathname}" was given in the \`location\` prop.`),m=w}else m=g;let b=m.pathname||"/",y=b;if(f!=="/"){let w=f.replace(/^\//,"").split("/");y="/"+b.replace(/^\//,"").split("/").slice(w.length).join("/")}let x=J4(t,{pathname:y});ys(h||x!=null,`No routes matched location "${m.pathname}${m.search}${m.hash}" `),ys(x==null||x[x.length-1].route.element!==void 0||x[x.length-1].route.Component!==void 0||x[x.length-1].route.lazy!==void 0,`Matched leaf route at location "${m.pathname}${m.search}${m.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let v=N$(x&&x.map(w=>Object.assign({},w,{params:Object.assign({},c,w.params),pathname:Fo([f,a.encodeLocation?a.encodeLocation(w.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:w.pathname]),pathnameBase:w.pathnameBase==="/"?f:Fo([f,a.encodeLocation?a.encodeLocation(w.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:w.pathnameBase])})),s,n,i,r);return e&&v?T.createElement(pm.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...m},navigationType:"POP"}},v):v}function C$(){let t=k$(),e=y$(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,i="rgba(200,200,200, 0.5)",r={padding:"0.5rem",backgroundColor:i},a={padding:"2px 4px",backgroundColor:i},s=null;return console.error("Error handled by React Router default ErrorBoundary:",t),s=T.createElement(T.Fragment,null,T.createElement("p",null,"💿 Hey developer 👋"),T.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",T.createElement("code",{style:a},"ErrorBoundary")," or"," ",T.createElement("code",{style:a},"errorElement")," prop on your route.")),T.createElement(T.Fragment,null,T.createElement("h2",null,"Unexpected Application Error!"),T.createElement("h3",{style:{fontStyle:"italic"}},e),n?T.createElement("pre",{style:r},n):null,s)}var R$=T.createElement(C$,null),P$=class extends T.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,e){return e.location!==t.location||e.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:e.error,location:e.location,revalidation:t.revalidation||e.revalidation}}componentDidCatch(t,e){this.props.onError?this.props.onError(t,e):console.error("React Router caught the following error during render",t)}render(){return this.state.error!==void 0?T.createElement(Ys.Provider,{value:this.props.routeContext},T.createElement(nT.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function D$({routeContext:t,match:e,children:n}){let i=T.useContext(kf);return i&&i.static&&i.staticContext&&(e.route.errorElement||e.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=e.route.id),T.createElement(Ys.Provider,{value:t},n)}function N$(t,e=[],n=null,i=null,r=null){if(t==null){if(!n)return null;if(n.errors)t=n.matches;else if(e.length===0&&!n.initialized&&n.matches.length>0)t=n.matches;else return null}let a=t,s=n?.errors;if(s!=null){let f=a.findIndex(h=>h.route.id&&s?.[h.route.id]!==void 0);Xn(f>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(s).join(",")}`),a=a.slice(0,Math.min(a.length,f+1))}let l=!1,c=-1;if(n)for(let f=0;f=0?a=a.slice(0,c+1):a=[a[0]];break}}}let d=n&&i?(f,h)=>{i(f,{location:n.location,params:n.matches?.[0]?.params??{},errorInfo:h})}:void 0;return a.reduceRight((f,h,g)=>{let m,b=!1,y=null,x=null;n&&(m=s&&h.route.id?s[h.route.id]:void 0,y=h.route.errorElement||R$,l&&(c<0&&g===0?(uz("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),b=!0,x=null):c===g&&(b=!0,x=h.route.hydrateFallbackElement||null)));let v=e.concat(a.slice(0,g+1)),w=()=>{let S;return m?S=y:b?S=x:h.route.Component?S=T.createElement(h.route.Component,null):h.route.element?S=h.route.element:S=f,T.createElement(D$,{match:h,routeContext:{outlet:f,matches:v,isDataRoute:n!=null},children:S})};return n&&(h.route.ErrorBoundary||h.route.errorElement||g===0)?T.createElement(P$,{location:n.location,revalidation:n.revalidation,component:y,error:m,children:w(),routeContext:{outlet:null,matches:v,isDataRoute:!0},onError:d}):w()},null)}function iT(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function O$(t){let e=T.useContext(kf);return Xn(e,iT(t)),e}function L$(t){let e=T.useContext(cy);return Xn(e,iT(t)),e}function I$(t){let e=T.useContext(Ys);return Xn(e,iT(t)),e}function rT(t){let e=I$(t),n=e.matches[e.matches.length-1];return Xn(n.route.id,`${t} can only be used on routes that contain a unique "id"`),n.route.id}function U$(){return rT("useRouteId")}function k$(){let t=T.useContext(nT),e=L$("useRouteError"),n=rT("useRouteError");return t!==void 0?t:e.errors?.[n]}function F$(){let{router:t}=O$("useNavigate"),e=rT("useNavigate"),n=T.useRef(!1);return oz(()=>{n.current=!0}),T.useCallback(async(r,a={})=>{ys(n.current,sz),n.current&&(typeof r=="number"?t.navigate(r):await t.navigate(r,{fromRouteId:e,...a}))},[t,e])}var qD={};function uz(t,e,n){!e&&!qD[t]&&(qD[t]=!0,ys(!1,n))}T.memo(z$);function z$({routes:t,future:e,state:n,unstable_onError:i}){return cz(t,void 0,n,i,e)}function B$(t){return A$(t.context)}function Wc(t){Xn(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function j$({basename:t="/",children:e=null,location:n,navigationType:i="POP",navigator:r,static:a=!1}){Xn(!mm(),"You cannot render a inside another . You should never have more than one in your app.");let s=t.replace(/^\/*/,"/"),l=T.useMemo(()=>({basename:s,navigator:r,static:a,future:{}}),[s,r,a]);typeof n=="string"&&(n=Uf(n));let{pathname:c="/",search:d="",hash:f="",state:h=null,key:g="default"}=n,m=T.useMemo(()=>{let b=Vo(c,s);return b==null?null:{location:{pathname:b,search:d,hash:f,state:h,key:g},navigationType:i}},[s,c,d,f,h,g,i]);return ys(m!=null,` is not able to match the URL "${c}${d}${f}" because it does not start with the basename, so the won't render anything.`),m==null?null:T.createElement(qs.Provider,{value:l},T.createElement(pm.Provider,{children:e,value:m}))}function H$({children:t,location:e}){return T$(IE(t),e)}function IE(t,e=[]){let n=[];return T.Children.forEach(t,(i,r)=>{if(!T.isValidElement(i))return;let a=[...e,r];if(i.type===T.Fragment){n.push.apply(n,IE(i.props.children,a));return}Xn(i.type===Wc,`[${typeof i.type=="string"?i.type:i.type.name}] is not a component. All component children of must be a or `),Xn(!i.props.index||!i.props.children,"An index route cannot have child routes.");let s={id:i.props.id||a.join("-"),caseSensitive:i.props.caseSensitive,element:i.props.element,Component:i.props.Component,index:i.props.index,path:i.props.path,middleware:i.props.middleware,loader:i.props.loader,action:i.props.action,hydrateFallbackElement:i.props.hydrateFallbackElement,HydrateFallback:i.props.HydrateFallback,errorElement:i.props.errorElement,ErrorBoundary:i.props.ErrorBoundary,hasErrorBoundary:i.props.hasErrorBoundary===!0||i.props.ErrorBoundary!=null||i.props.errorElement!=null,shouldRevalidate:i.props.shouldRevalidate,handle:i.props.handle,lazy:i.props.lazy};i.props.children&&(s.children=IE(i.props.children,a)),n.push(s)}),n}var Tv="get",Cv="application/x-www-form-urlencoded";function uy(t){return t!=null&&typeof t.tagName=="string"}function G$(t){return uy(t)&&t.tagName.toLowerCase()==="button"}function V$(t){return uy(t)&&t.tagName.toLowerCase()==="form"}function $$(t){return uy(t)&&t.tagName.toLowerCase()==="input"}function W$(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function X$(t,e){return t.button===0&&(!e||e==="_self")&&!W$(t)}var o0=null;function q$(){if(o0===null)try{new FormData(document.createElement("form"),0),o0=!1}catch{o0=!0}return o0}var Y$=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function TS(t){return t!=null&&!Y$.has(t)?(ys(!1,`"${t}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Cv}"`),null):t}function K$(t,e){let n,i,r,a,s;if(V$(t)){let l=t.getAttribute("action");i=l?Vo(l,e):null,n=t.getAttribute("method")||Tv,r=TS(t.getAttribute("enctype"))||Cv,a=new FormData(t)}else if(G$(t)||$$(t)&&(t.type==="submit"||t.type==="image")){let l=t.form;if(l==null)throw new Error('Cannot submit a