From 73bc2320643ff6eecd5348d7af4fbd64d53955b4 Mon Sep 17 00:00:00 2001 From: Badsha Laskar <43995221+Badsha1996@users.noreply.github.com> Date: Mon, 29 Sep 2025 00:14:07 +0530 Subject: [PATCH 1/6] exam paper (#38) Co-authored-by: Badsha1996 --- apps/backend/src/config/config.py | 5 - .../services/ICSE_exam_paper_llm_service.py | 8 - .../interfaces/routes/exam_paper_routes.py | 19 +- .../src/components/common/ConfigContent.tsx | 79 +- .../src/components/common/Sidebar.tsx | 118 +- .../src/components/pages/ConfigPage.tsx | 52 + .../src/components/pages/ExamPaperPage.tsx | 625 ++++ .../src/components/pages/HomePage.tsx | 462 +++ apps/frontend/src/hook/useApi.ts | 23 +- apps/frontend/src/routes/config/index.tsx | 50 +- apps/frontend/src/routes/examPaper/index.tsx | 498 +--- apps/frontend/src/routes/index.tsx | 455 +-- apps/frontend/src/types/api.ts | 125 +- pnpm-lock.yaml | 2520 +++++++++-------- 14 files changed, 2703 insertions(+), 2336 deletions(-) create mode 100644 apps/frontend/src/components/pages/ConfigPage.tsx create mode 100644 apps/frontend/src/components/pages/ExamPaperPage.tsx create mode 100644 apps/frontend/src/components/pages/HomePage.tsx diff --git a/apps/backend/src/config/config.py b/apps/backend/src/config/config.py index 34dc0be..ea36195 100644 --- a/apps/backend/src/config/config.py +++ b/apps/backend/src/config/config.py @@ -23,11 +23,6 @@ class Settings(BaseSettings): META_TOKEN_URL:str META_USER_URL:str - S3_ENDPOINT : str - S3_ACCESS_KEY : str - S3_SECRET_KEY : str - S3_BUCKET : str - EMAIL:str GOOGLE_APP_PASSWORD:str SUPER_ADMIN_EMAIL:str diff --git a/apps/backend/src/core/services/ICSE_exam_paper_llm_service.py b/apps/backend/src/core/services/ICSE_exam_paper_llm_service.py index 10b28bc..4e20a32 100644 --- a/apps/backend/src/core/services/ICSE_exam_paper_llm_service.py +++ b/apps/backend/src/core/services/ICSE_exam_paper_llm_service.py @@ -10,7 +10,6 @@ def __init__(self, subject: str, llm_repo: LLMRepo, exam_paper_repo: ExamPaperRe async def gen_question_paper(self, subject:str, board:str, paper:str, code:str, year:int): try: - # The repo will handle LLM generation internally using fallback chain exam_paper_create = await self.llm_repo.gen_new_exam_paper( subject=subject, board=board, @@ -21,10 +20,3 @@ async def gen_question_paper(self, subject:str, board:str, paper:str, code:str, return exam_paper_create except Exception as e: raise HTTPException(status_code=500, detail=f"Invalid Exam Paper JSON: {e}") - - # saved = await self.exam_paper_repo.create_exam_paper(exam_paper_create) - # if not saved: - # raise HTTPException(status_code=500, detail="Failed to save exam paper") - - # exam_paper = await self.exam_paper_repo.get_exam_paper_json(subject=subject, year=year) - # return exam_paper diff --git a/apps/backend/src/interfaces/routes/exam_paper_routes.py b/apps/backend/src/interfaces/routes/exam_paper_routes.py index 7b193b3..455a325 100644 --- a/apps/backend/src/interfaces/routes/exam_paper_routes.py +++ b/apps/backend/src/interfaces/routes/exam_paper_routes.py @@ -4,7 +4,9 @@ from ..dependencies.dependencies import admin_only, get_current_user from ..schemas.exam_paper_schemas import ExamPaperSchema,GetExamPaperSchema, GetExamPaperYearsSchema from ..schemas.response_schemas import APIResponseSchema + from ...core.services.exam_paper_service import ExamPaperService +from ...core.entities.exam_paper_entities import ExamPaper from ...infrastructure.repo.exam_paper_repo import SQLExamPaperRepo from ...database.database import get_DB @@ -27,7 +29,7 @@ async def save_exam_paper( except Exception as e: raise HTTPException(status_code=500, detail=str(e)) -@exam_paper_router.get("/get",dependencies=[Depends(get_current_user)]) +@exam_paper_router.post("/get",dependencies=[Depends(get_current_user)]) async def get_exam_paper( exam_paper_details : GetExamPaperSchema, db : Session = Depends(get_DB), @@ -82,7 +84,7 @@ async def get_all_boards( except Exception as e: raise HTTPException(status_code=500, detail=str(e)) -@exam_paper_router.get("/get/prev-years",dependencies=[Depends(get_current_user)]) +@exam_paper_router.post("/get/prev-years",dependencies=[Depends(get_current_user)]) async def get_prev_years( exam_paper_details : GetExamPaperYearsSchema, db : Session = Depends(get_DB), @@ -101,7 +103,7 @@ async def get_prev_years( except Exception as e: raise HTTPException(status_code=500, detail=str(e)) -@exam_paper_router.get("/get/prev-exam-paper",dependencies=[Depends(get_current_user)]) +@exam_paper_router.post("/get/prev-exam-paper",dependencies=[Depends(get_current_user)]) async def get_prev_exam_paper( exam_paper_details : GetExamPaperSchema, db : Session = Depends(get_DB), @@ -111,13 +113,22 @@ async def get_prev_exam_paper( exam_paper_service = ExamPaperService(exam_paper_repo=exam_paper_repo) exam_paper = await exam_paper_service.get_prev_year_paper(subject=exam_paper_details.subject, year=exam_paper_details.year) - + if not exam_paper: return APIResponseSchema( success=False, data={"exam_paper":exam_paper}, message=f'Previous paper is not available for {exam_paper_details.subject} {exam_paper_details.year}' ) + + exam_dict = ExamPaper.model_validate(exam_paper).model_dump() + + # reformat exam_paper + exam_paper = { + "exam": {k: v for k, v in exam_dict.items() if k != "sections"}, + "sections": exam_dict.get("sections", []) + } + return APIResponseSchema( success=True, data={"exam_paper":exam_paper}, diff --git a/apps/frontend/src/components/common/ConfigContent.tsx b/apps/frontend/src/components/common/ConfigContent.tsx index eb50b45..5f37821 100644 --- a/apps/frontend/src/components/common/ConfigContent.tsx +++ b/apps/frontend/src/components/common/ConfigContent.tsx @@ -1,5 +1,6 @@ import { motion } from "framer-motion"; import { Button } from "../ui/button"; +import { useNavigate } from "@tanstack/react-router"; interface ConfigContentProps { selectedBoard: string; @@ -22,6 +23,24 @@ function ConfigContent({ const isICSE = boardUpper === "ICSE"; const isCustom = !isCBSE && !isICSE && selectedBoard; + const navigate = useNavigate(); + + const handleGenerateExamPaper = () => { + const payload = { + subject: selectedSubject || "", + board: selectedBoard || "", + paper: "PHYSICS (SCIENCE PAPER 1)", // Consider making this dynamic based on selectedSubject + code: "T26 521", // Consider making this dynamic or configurable + year: new Date().getFullYear(), + prev: false, + }; + + navigate({ + to: "/examPaper", + search: payload, + }); + }; + return (
+ {/************* Default Message **************/} + {(!selectedBoard || !selectedSubject) && ( +

+ Select a board and subject to preview the template. +

+ )} + {/************* CBSE Template **************/} - {isCBSE && ( + {isCBSE && selectedSubject && ( <>

CBSE

ANNUAL EXAMINATION ({year})

- SUBJECT: {selectedSubject || "Subject"} (SET–1) + SUBJECT: {selectedSubject} (SET–1)

@@ -61,13 +87,13 @@ function ConfigContent({ )} {/*************** ICSE Template *******************/} - {isICSE && ( + {isICSE && selectedSubject && ( <>

- {selectedSubject || ""} + {selectedSubject}

- ({selectedSubject || ""} Paper I) + ({selectedSubject})

@@ -75,7 +101,8 @@ function ConfigContent({ Maximum Marks: {selectedMarks || "___"}

- Time allowed: {selectedDuration || "___"} {selectedUnit || ""} + Time allowed: {selectedDuration || "___"}{" "} + {selectedUnit || "hours"}

Answers to this Paper must be written on the paper provided @@ -83,7 +110,7 @@ function ConfigContent({

You will not be allowed to - write during first 15 minutes. + write during the first 15 minutes.

This time is to be spent in reading the question paper. @@ -92,21 +119,32 @@ function ConfigContent({ The time given at the head of this Paper is the time allowed for writing the answers.

+ +

+ Section A is compulsory. Attempt{" "} + any four questions from{" "} + Section B. +

+ +

+ The intended marks for questions or parts of questions are + given in brackets [ ]. +

)} - {/*************** Custom Board Template *****************/} - {isCustom && ( + {/************* Custom Board Template **************/} + {isCustom && selectedSubject && ( <>

{selectedBoard}

-

- ANNUAL EXAMINATION ({year}) +

+ EXAMINATION ({year})

- SUBJECT: {selectedSubject || "Subject"} + SUBJECT: {selectedSubject}

@@ -116,22 +154,14 @@ function ConfigContent({
-
General Instructions
+
Instructions
    -
  • All questions are compulsory.
  • -
  • This paper comprises four sections A, B, C, D.
  • -
  • Internal choices are provided in sections B and C.
  • -
  • Section D comprises multiple choice questions.
  • +
  • Read all questions carefully before answering.
  • +
  • Answer all questions as instructed.
  • +
  • Write clearly and legibly.
)} - - {/************* Default Message **************/} - {!selectedBoard && ( -

- Select a board to preview its template. -

- )}
@@ -144,6 +174,7 @@ function ConfigContent({ !selectedMarks || !selectedDuration } + onClick={handleGenerateExamPaper} > Generate Exam Paper diff --git a/apps/frontend/src/components/common/Sidebar.tsx b/apps/frontend/src/components/common/Sidebar.tsx index 7a99557..4633ff8 100644 --- a/apps/frontend/src/components/common/Sidebar.tsx +++ b/apps/frontend/src/components/common/Sidebar.tsx @@ -1,7 +1,7 @@ import { motion, AnimatePresence } from "framer-motion"; import { X, BookOpen, Menu, ChevronDown } from "lucide-react"; import { useState, useEffect } from "react"; -import { RiFileHistoryLine } from "react-icons/ri"; + import { Input } from "../ui/input"; import type { Dispatch, SetStateAction } from "react"; @@ -13,6 +13,7 @@ import { prevYearsResponseSchema, subjectResponseSchema, } from "@/types/api"; +import { useLocation, useNavigate } from "@tanstack/react-router"; // ************** Props ******************** interface SidebarProps { @@ -29,11 +30,6 @@ interface SidebarProps { } // *************** Dummy Data ********************* -const timeUnit = [ - { value: "", label: "unit" }, - { value: "hrs", label: "hrs" }, - { value: "mins", label: "mins" }, -]; function Sidebar({ selectedBoard, @@ -45,7 +41,6 @@ function Sidebar({ selectedDuration, setSelectedDuration, selectedUnit, - setSelectedUnit, }: SidebarProps) { // ****************** All states ******************** const [isOpen, setIsOpen] = useState(false); @@ -55,10 +50,12 @@ function Sidebar({ //Dropdown const [openYear, setOpenYear] = useState(false); - const [openGenerated, setOpenGenerated] = useState(false); const [isCustom, setIsCustom] = useState(false); + const navigate = useNavigate(); + // ***************** API Hook Calls ***************** + const { data: subjectData, isLoading: isSubjectsLoading, @@ -70,8 +67,6 @@ function Sidebar({ responseSchema: subjectResponseSchema, }); - const subjectOptions = subjectData?.data.exam_subjects ?? []; - const { data: boardData, isLoading: isBoardsLoading, @@ -83,35 +78,58 @@ function Sidebar({ responseSchema: boardResponseSchema, }); - const boardOptions = boardData?.data.exam_boards ?? []; - useEffect(() => { - if (!selectedSubject) return; + const boardOptions = (boardData?.data.exam_boards ?? []).map((b) => ({ + label: b, + value: b, + })); - const fetchYears = async () => { - const { data } = await useApi({ - endpoint: "/exam-paper/get/prev-years", - method: "GET", - queryParams: { subject: selectedSubject }, - responseSchema: prevYearsResponseSchema, - }).refetch(); + const subjectOptions = (subjectData?.data.exam_subjects ?? []).map((s) => ({ + label: s, + value: s, + })); - setAvailableYears(data?.data.prev_years ?? []); - }; + const { refetch: refetchPrevYears } = useApi( + { + endpoint: "/exam-paper/get/prev-years", + method: "POST", + payload: { + subject: selectedSubject, // Use payload for request body + }, + responseSchema: prevYearsResponseSchema, + }, + { + enabled: false, // Disable automatic fetching, we'll control it manually + } + ); + + // Replace the existing useEffect for years with: + useEffect(() => { + if (selectedSubject) { + refetchPrevYears() + .then((response) => { + // The response.data should contain your API response directly + const yearsData = response.data?.data?.prev_years ?? []; + setAvailableYears(yearsData); + }) + .catch(() => { + setAvailableYears([]); + }); + } else { + setAvailableYears([]); + setSelectedYear(null); + } + }, [selectedSubject, refetchPrevYears]); - fetchYears(); + // Also add this effect to reset year when subject changes: + useEffect(() => { + setSelectedYear(null); }, [selectedSubject]); - const { - data: prevPaperData, - isLoading: isLoadingPrevPaper, - isError: isPrevPaperError, - } = useApi( + + useApi( { endpoint: "/exam-paper/get/prev-exam-paper", - method: "GET", - queryParams: { - subject: selectedSubject, - ...(selectedYear !== null ? { year: selectedYear } : {}), - }, + method: "POST", + payload: { subject: selectedSubject, year: selectedYear }, responseSchema: prevExamPaperResponseSchema, }, { @@ -119,8 +137,6 @@ function Sidebar({ } ); - const prevPaper = prevPaperData?.data.exam_paper; - // ******** Functions *************** const checkIsMobile = () => { const mobile = window.innerWidth < 768; @@ -128,6 +144,19 @@ function Sidebar({ if (!mobile) setIsOpen(true); }; + const HandlePrevYearRoute = (year : number) => { + const payload = { + subject: selectedSubject || "", + year: year || "", + prev: true, + }; + + navigate({ + to: "/examPaper", + search: payload, + }); + }; + // *********** Effects *************** useEffect(() => { checkIsMobile(); @@ -243,7 +272,9 @@ function Sidebar({ setSelectedSubject(String(value))} + onChange={(value) => { + setSelectedSubject(String(value)); + }} options={subjectOptions} placeholder="Select Subject" /> @@ -285,14 +316,17 @@ function Sidebar({ placeholder:text-white [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" />
- setSelectedUnit(String(value))} options={timeUnit} placeholder="Unit" disabled - /> + /> */} + + {selectedUnit} +
@@ -328,7 +362,7 @@ function Sidebar({
  • setSelectedYear(year)} + onClick={() => HandlePrevYearRoute(year)} > {year} Question Paper
  • @@ -343,8 +377,8 @@ function Sidebar({
    - {/* Previous Generated Questions */} -
    + {/************** Previous Generated Questions ***************/} + {/*

    setOpenGenerated((prev) => !prev)} @@ -379,7 +413,7 @@ function Sidebar({ )} -

    +
    */} )} diff --git a/apps/frontend/src/components/pages/ConfigPage.tsx b/apps/frontend/src/components/pages/ConfigPage.tsx new file mode 100644 index 0000000..d478dd9 --- /dev/null +++ b/apps/frontend/src/components/pages/ConfigPage.tsx @@ -0,0 +1,52 @@ +import { useState } from "react"; + +import ConfigContent from "@/components/common/ConfigContent"; +import PageHeader from "@/components/common/PageHeader"; +import Sidebar from "@/components/common/Sidebar"; +import GlassLayout from "@/layouts/GlassLayout"; + +function ConfigPage() { + const [selectedBoard, setSelectedBoard] = useState(""); + const [selectedSubject, setSelectedSubject] = useState(""); + const [selectedMarks, setSelectedMarks] = useState("80"); + const [selectedDuration, setSelectedDuration] = useState("2"); + const [selectedUnit, setSelectedUnit] = useState("hrs"); + + return ( +
    + {/*************************** Header ***************************/} + + + {/*************************** Main Layout ***************************/} + +
    + + +
    +
    +
    + ); +} + +export default ConfigPage; diff --git a/apps/frontend/src/components/pages/ExamPaperPage.tsx b/apps/frontend/src/components/pages/ExamPaperPage.tsx new file mode 100644 index 0000000..5e6d37f --- /dev/null +++ b/apps/frontend/src/components/pages/ExamPaperPage.tsx @@ -0,0 +1,625 @@ +import PageHeader from "@/components/common/PageHeader"; +import { useApi } from "@/hook/useApi"; +import { examPaperResponseSchema, type ExamPaper } from "@/types/api"; +import { useLocation } from "@tanstack/react-router"; +import { useMemo, useRef } from "react"; + +const ExamPaperPage = () => { + const location = useLocation(); + + const searchParams = new URLSearchParams(location.search); + const prevShow = searchParams.get("prev") === "true"; + + const apiPayload = useMemo(() => { + if (prevShow) { + return { + subject: searchParams.get("subject") ?? "", + year: Number(searchParams.get("year")) || new Date().getFullYear(), + }; + } else { + return { + subject: searchParams.get("subject") ?? "", + board: searchParams.get("board") ?? "", + paper: searchParams.get("paper") ?? "", + code: searchParams.get("code") ?? "", + year: Number(searchParams.get("year")) || new Date().getFullYear(), + }; + } + }, [location.search, prevShow]); + + const endpoint = prevShow + ? "/exam-paper/get/prev-exam-paper" + : "/llm/gen-question-paper"; + + // Create stable enabled condition based on payload values + const isEnabled = useMemo(() => { + if (prevShow) { + // For prev=true, only need subject + return !!apiPayload.subject; + } else { + // For new generation, need more fields + return !!( + apiPayload.subject || + apiPayload.board || + apiPayload.paper || + apiPayload.code + ); + } + }, [ + prevShow, + apiPayload.subject, + apiPayload.board, + apiPayload.paper, + apiPayload.code, + ]); + + // Track successful API calls + const hasSuccessfullyLoaded = useRef(false); + + // Single API call with conditional endpoint - DISABLE SCHEMA VALIDATION TEMPORARILY + const { + data: examPaperData, + isLoading: isLoadingExamPaper, + isError: isExamPaperError, + error: examPaperError, + isSuccess, + } = useApi( + { + endpoint, + method: "POST", + payload: apiPayload, + // responseSchema: examPaperResponseSchema, // COMMENTED OUT TO BYPASS VALIDATION + }, + { + enabled: isEnabled, + staleTime: Infinity, + retry: false, + refetchOnWindowFocus: false, + } + ); + + // Mark as successfully loaded when we get data + if (isSuccess && examPaperData && !hasSuccessfullyLoaded.current) { + hasSuccessfullyLoaded.current = true; + } + + // Extract data from response - fix the data path + const examPaperResponse = examPaperData?.data?.exam_paper; + const examData = examPaperResponse?.exam; + const sections = examPaperResponse?.sections; + + /* ---------------------------------- */ + /* Helper Functions */ + /* ---------------------------------- */ + + // Helper function to extract question text from any nested structure + const getQuestionText = (questionPart: any): string => { + if (!questionPart) return ""; + + // Check main question field first + if (questionPart.question) return questionPart.question; + + // Check description field + if (questionPart.description) return questionPart.description; + + // Check if there are sub_parts with questions + if (questionPart.sub_parts && questionPart.sub_parts.length > 0) { + const firstSubPart = questionPart.sub_parts[0]; + if (firstSubPart.question) return firstSubPart.question; + } + + return ""; + }; + + // Helper function to render all parts of a question + const renderQuestionParts = (parts: any[], level = 0) => { + return parts.map((part, index) => { + const questionText = getQuestionText(part); + const hasSubParts = part.sub_parts && part.sub_parts.length > 0; + + return ( +
    0 ? 'ml-6' : ''}`}> + {/* Question header with number/letter */} + {(part.number || part.letter) && questionText && ( +
    + + {level === 0 ? `(${part.number})` : part.letter}{" "} + + {questionText} + {part.marks && ( + [{part.marks}] + )} +
    + )} + + {/* Description only (when no direct question but has description) */} + {part.description && !questionText && ( +
    {part.description}
    + )} + + {/* Options for multiple choice */} + {part.options && part.options.length > 0 && ( +
    + {part.options.map((option: any, optIndex: number) => ( +
    + + {option.option_letter} + + {option.text} +
    + ))} +
    + )} + + {/* Constants given */} + {part.constants_given && Object.keys(part.constants_given).length > 0 && ( +
    +
    Given:
    + {Object.entries(part.constants_given).map(([key, value]) => ( +
    + {key} = {String(value)} +
    + ))} +
    + )} + + {/* Equation template */} + {part.equation_template && ( +
    +
    Complete the equation:
    +
    + {part.equation_template} +
    +
    + )} + + {/* Diagram */} + {part.diagram && ( +
    +
    + Diagram: {part.diagram.description} +
    + {part.diagram.labels && part.diagram.labels.length > 0 && ( +
    + Labels: {part.diagram.labels.join(", ")} +
    + )} +
    + )} + + {/* Recursively render sub-parts */} + {hasSubParts && renderQuestionParts(part.sub_parts, level + 1)} +
    + ); + }); + }; + + /* ---------------------------------- */ + /* UI Components */ + /* ---------------------------------- */ + + const SimpleLoader = () => ( +
    +
    +
    +
    +
    +
    +

    + {prevShow ? "Loading Exam Paper..." : "Generating Your Exam Paper"} +

    +

    + {prevShow + ? "Please wait while we fetch your paper..." + : "Please wait while we create your assessment..."} +

    +
    +
    + ); + + const ErrorState = () => { + hasSuccessfullyLoaded.current = false; + return ( +
    +
    +
    +
    + + + +
    +

    + {prevShow + ? "Error Loading Exam Paper" + : "Error Generating Exam Paper"} +

    +

    + {examPaperError?.message || + "An unexpected error occurred. Please try again."} +

    +
    + +
    +
    + ); + }; + + const NoPayloadState = () => ( +
    +
    +
    + + + +
    +

    + No Configuration Found +

    +

    + Please go back and configure your exam parameters. +

    + +
    +
    + ); + + /* ---------------------------------- */ + /* Question Renderers */ + /* ---------------------------------- */ + + const renderMultipleChoiceQuestion = (question: any) => ( +
    +
    + Question {question.number}. + {question.instruction && ( + + {question.instruction} + + )} + [{question.total_marks} marks] +
    + + {renderQuestionParts(question.parts || [])} +
    + ); + + const renderShortAnswerQuestion = (question: any) => ( +
    +
    + Question {question.number}. + {question.instruction && ( + {question.instruction} + )} + [{question.total_marks} marks] +
    + + {/* Main question text if exists */} + {question.question_text && ( +
    {question.question_text}
    + )} + + {renderQuestionParts(question.parts || [])} +
    + ); + + const renderLongAnswerQuestion = (question: any) => ( +
    +
    + Question {question.number}. + {question.instruction && ( + {question.instruction} + )} + [{question.total_marks} marks] +
    + + {/* Main question text if exists */} + {question.question_text && ( +
    {question.question_text}
    + )} + + {renderQuestionParts(question.parts || [])} +
    + ); + + const renderQuestion = (question: any) => { + switch (question.type) { + case "multiple_choice": + return renderMultipleChoiceQuestion(question); + case "short_answer": + case "calculation": + case "diagram_based": + case "complete_equation": + return renderShortAnswerQuestion(question); + case "long_answer": + return renderLongAnswerQuestion(question); + default: + return renderShortAnswerQuestion(question); + } + }; + + /* ---------------------------------- */ + /* Main Render */ + /* ---------------------------------- */ + + // Loading state + if (isLoadingExamPaper) { + return ; + } + + // Error state + if (isExamPaperError) { + return ; + } + + // No payload state + if (!isEnabled) { + return ; + } + + // Debug logging - you can remove this in production + console.log("Exam Data:", examData); + console.log("Sections:", sections); + + // No data state + if (!examData || !sections || sections.length === 0) { + return ( +
    +
    +
    + + + +
    +

    + No Exam Paper Data +

    +

    + No valid exam paper data was found. Please try again. +

    + +
    +
    + ); + } + + // Success state - render ICSE style exam paper + return ( +
    +
    + + + {/* Download buttons */} +
    +
    + + + +
    +
    + + {/* ICSE Style Exam Paper */} +
    + {/* Header Page - ICSE Style */} +
    + {/* Top Border */} +
    + {/* ICSE Header */} +
    +
    + {examData.board || + "COUNCIL FOR THE INDIAN SCHOOL CERTIFICATE EXAMINATIONS"} +
    +
    +
    + {examData.subject || "EXAMINATION PAPER"} +
    +
    +
    + Paper {examData.paper_code || "1"} +
    +
    + ({examData.paper_name || examData.subject}) +
    +
    + + {/* Exam Details Box */} +
    + + + + + + + + + {examData.reading_time && ( + + + + + )} + +
    Maximum Marks: + {examData.maximum_marks} + Time allowed: + {examData.time_allowed} +
    Reading Time: + {examData.reading_time} +
    +
    + + {/* Instructions */} +
    +
    INSTRUCTIONS
    +
    + • This paper consists of {sections.length} section + {sections.length > 1 ? "s" : ""}. +
    + {sections.map((section: any, index: number) => ( +
    + • {section.name}{" "} + {section.is_compulsory + ? "is compulsory" + : section.instruction}{" "} + [{section.marks} marks] +
    + ))} +
    + • The intended marks for questions or parts of questions are + given in brackets [ ]. +
    + {examData.additional_instructions?.map( + (instruction: string, idx: number) => ( +
    • {instruction}
    + ) + )} +
    + + {/* Year */} +
    + {examData.year} +
    +
    +
    + + {/* Question Sections - ICSE Style */} + {sections.map((section: any, sectionIndex: number) => ( +
    +
    + {/* Section Header */} +
    +
    + {section.name} +
    + {section.instruction && + section.instruction !== "Follow the instructions" && ( +
    + ({section.instruction}) +
    + )} +
    + [{section.marks} marks] +
    +
    + + {/* Questions */} +
    + {section.questions?.map((question: any) => + renderQuestion(question) + )} +
    +
    +
    + ))} +
    +
    + + {/* ICSE Print Styles */} + +
    + ); +}; + +export default ExamPaperPage; \ No newline at end of file diff --git a/apps/frontend/src/components/pages/HomePage.tsx b/apps/frontend/src/components/pages/HomePage.tsx new file mode 100644 index 0000000..18cbf9d --- /dev/null +++ b/apps/frontend/src/components/pages/HomePage.tsx @@ -0,0 +1,462 @@ +import { Suspense, useState, useEffect } from "react"; +import { Canvas } from "@react-three/fiber"; +import { Scene } from "@/components/models/PulseModel"; +import { + BookOpen, + Brain, + FileText, + Users, + Award, + ChevronRight, + Star, + Play, +} from "lucide-react"; +import { getUserInfo, setUserInfo } from "@/lib/auth"; +import type { ApiError } from "@/types/api"; +import { Route } from "@/routes"; +import { useNavigate } from "@tanstack/react-router"; + +const productFeatures = [ + { + icon: , + title: "AI Question Generator", + description: + "Generate contextual questions from any topic using advanced AI algorithms", + highlight: "10,000+ Questions Generated Daily", + color: "from-blue-500 to-cyan-500", + }, + { + icon: , + title: "Smart Notes", + description: + "Create organized, searchable notes with automatic formatting and categorization", + highlight: "Auto-categorized & Searchable", + color: "from-purple-500 to-pink-500", + }, + { + icon: , + title: "Study Materials", + description: + "Transform your content into comprehensive study guides and flashcards", + highlight: "Multiple Format Export", + color: "from-green-500 to-teal-500", + }, + { + icon: , + title: "Progress Analytics", + description: + "Track your learning journey with detailed analytics and insights", + highlight: "Real-time Performance Data", + color: "from-orange-500 to-red-500", + }, +]; + +const testimonials = [ + { + name: "Atul Miya", + role: "Medical Student", + text: "Doclin helped me create 500+ practice questions for my finals!", + rating: 5, + avatar: "SC", + }, + { + name: "Tinku Jiya", + role: "Engineering Student", + text: "The AI-generated notes are incredibly accurate and well-structured.", + rating: 5, + avatar: "AK", + }, + { + name: "Ladki BAJIGAR", + role: "Teacher", + text: "Perfect for creating diverse question sets for my students.", + rating: 5, + avatar: "MR", + }, +]; + +const useCases = [ + { + title: "Students", + description: + "Generate practice questions, create study notes, and track your learning progress", + icon: , + benefits: ["Practice Questions", "Study Guides", "Progress Tracking"], + }, + { + title: "Teachers", + description: + "Create comprehensive question banks and study materials for your classes", + icon: , + benefits: ["Question Banks", "Curriculum Materials", "Assessment Tools"], + }, + { + title: "Professionals", + description: + "Prepare for certifications and continuing education with AI-powered tools", + icon: , + benefits: ["Certification Prep", "Skill Assessment", "Knowledge Gaps"], + }, +]; + +const features = [ + "AI-Generated Questions", + "Smart Note Taking", + "Study Material Creation", + "Progress Tracking", +]; + +function HomePage() { + const { oauth } = Route.useSearch(); + const [currentFeature, setCurrentFeature] = useState(0); + const [isVisible, setIsVisible] = useState(false); + const [typewriterText, setTypewriterText] = useState(""); + const [stats, setStats] = useState({ users: 0, questions: 0, notes: 0 }); + + const navigate = useNavigate(); + + useEffect(() => { + setIsVisible(true); + + // Typewriter effect + const text = "Your one stop for QUESTIONS, NOTES and STUDY MATERIAL"; + let index = 0; + const timer = setInterval(() => { + if (index <= text.length) { + setTypewriterText(text.slice(0, index)); + index++; + } else { + clearInterval(timer); + } + }, 50); + + // Feature rotation + const featureTimer = setInterval(() => { + setCurrentFeature((prev) => (prev + 1) % features.length); + }, 3000); + + // Stats animation + const statsTimer = setTimeout(() => { + setStats({ users: 25000, questions: 500000, notes: 150000 }); + }, 1500); + + return () => { + clearInterval(timer); + clearInterval(featureTimer); + clearTimeout(statsTimer); + }; + }, []); + + useEffect(() => { + if (!oauth || getUserInfo()) return; + const fetchUser = async () => { + try { + const url = `${import.meta.env.VITE_API_BASE_URL}/auth/me`; + const response = await fetch(url, { + method: "GET", + headers: { "Content-Type": "application/json" }, + credentials: "include", + }); + + if (!response.ok) { + const error: ApiError = { + message: `Request failed with status ${response.status}`, + status: response.status, + }; + + try { + error.details = await response.json(); + } catch { + console.error("Failed to parse error details"); + } + throw error; + } + + const data = await response.json(); + console.log("OAuth user data:", data); + setUserInfo({ + email: data.data.email, + role: data.data.role, + username: data.data.username, + }); + } catch (err) { + console.error(err); + } + }; + + fetchUser(); + }, [oauth]); + + const AnimatedCounter: React.FC<{ + end: number; + duration?: number; + suffix?: string; + }> = ({ end, duration = 2000, suffix = "" }) => { + const [count, setCount] = useState(0); + + useEffect(() => { + if (end === 0) return; + let startTime: number; + const animate = (timestamp: number) => { + if (!startTime) startTime = timestamp; + const progress = Math.min((timestamp - startTime) / duration, 1); + setCount(Math.floor(progress * end)); + if (progress < 1) requestAnimationFrame(animate); + }; + requestAnimationFrame(animate); + }, [end, duration]); + + return ( + + {count.toLocaleString()} + {suffix} + + ); + }; + + return ( +
    + {/* Animated Background Elements */} +
    +
    +
    +
    +
    + + {/****************************** Foreground: Enhanced Content ******************************/} +
    + {/* Hero Section */} +
    +
    + {/***************************** Background: 3D MODEL ************************* */} +
    + + + + + +
    + + {/* **************************************** TITLE ****************************************** */} + +

    + + DOCLIN NOTE + + GENERATOR +

    + +
    +

    + {typewriterText} + | +

    +
    + +
    +

    + Currently featuring:{" "} + + {features[currentFeature]} + +

    +
    + +
    + + +
    + +
    +
    +
    + +
    +
    Active Users
    +
    +
    +
    + +
    +
    Questions Generated
    +
    +
    +
    + +
    +
    Notes Created
    +
    +
    +
    +
    + + {/* **************************************************Feature***************************************** */} +
    +
    +
    +

    + Powerful Features for{" "} + + Every Learner + +

    +

    + Discover how Doclin transforms the way you study, create, and + learn with cutting-edge AI technology +

    +
    + +
    + {productFeatures.map((feature, index) => ( +
    +
    + {feature.icon} +
    +

    + {feature.title} +

    +

    + {feature.description} +

    +
    + {feature.highlight} +
    +
    + ))} +
    +
    +
    + + {/* **************************************** User base ****************************************** */} +
    +
    +
    +

    + Perfect for{" "} + + Everyone + +

    +

    + Whether you're a student, teacher, or professional, Doclin + adapts to your learning needs +

    +
    + +
    + {useCases.map((useCase, index) => ( +
    +
    {useCase.icon}
    +

    + {useCase.title} +

    +

    {useCase.description}

    +
      + {useCase.benefits.map((benefit, benefitIndex) => ( +
    • +
      + {benefit} +
    • + ))} +
    +
    + ))} +
    +
    +
    + + {/* **************************************** Testimonials *********************************** */} +
    +
    +
    +

    + What Our{" "} + + Users Say + +

    +
    + +
    + {testimonials.map((testimonial, index) => ( +
    +
    +
    + {testimonial.avatar} +
    +
    +
    + {testimonial.name} +
    +
    + {testimonial.role} +
    +
    +
    +
    + {[...Array(testimonial.rating)].map((_, starIndex) => ( + + ))} +
    +

    "{testimonial.text}"

    +
    + ))} +
    +
    +
    +
    +
    + ); +} + +export default HomePage; diff --git a/apps/frontend/src/hook/useApi.ts b/apps/frontend/src/hook/useApi.ts index 3f6842f..820e994 100644 --- a/apps/frontend/src/hook/useApi.ts +++ b/apps/frontend/src/hook/useApi.ts @@ -1,4 +1,10 @@ import type { ApiConfig, ApiError } from "../types/api"; +import { + useQuery, + useMutation, + type UseQueryOptions, + type UseMutationOptions, +} from "@tanstack/react-query"; const API_BASE_URL = import.meta.env.VITE_API_BASE_URL?.replace(/\/$/, ""); @@ -42,7 +48,6 @@ export const fetchApi = async ( ? endpoint : `/${endpoint}`; const url = buildUrl(`${API_BASE_URL}${normalizedEndpoint}`, queryParams); - console.log("url", url); const defaultHeaders = { "Content-Type": "application/json", @@ -72,21 +77,13 @@ export const fetchApi = async ( const data = await response.json(); - // Validate response before returning (if schema provided) if (responseSchema) { return responseSchema.parse(data); } return data; }; -// hooks/useApi.ts -import { - useQuery, - useMutation, - type UseQueryOptions, - type UseMutationOptions, -} from "@tanstack/react-query"; -// For GET +// For GET / Query-based APIs export const useApi = ( config: ApiConfig, options?: Omit, "queryKey" | "queryFn"> @@ -94,9 +91,10 @@ export const useApi = ( const queryKey = [ config.endpoint, config.method, - config.queryParams, - config.payload, + config.queryParams ? JSON.stringify(config.queryParams) : null, + config.payload ? JSON.stringify(config.payload) : null, ]; + return useQuery({ queryKey, queryFn: () => fetchApi(config), @@ -104,7 +102,6 @@ export const useApi = ( }); }; -// For POST/PUT/PATCH/DELETE export const useApiMutation = ( config: Omit, "payload">, options?: UseMutationOptions diff --git a/apps/frontend/src/routes/config/index.tsx b/apps/frontend/src/routes/config/index.tsx index cf905ea..b547a5b 100644 --- a/apps/frontend/src/routes/config/index.tsx +++ b/apps/frontend/src/routes/config/index.tsx @@ -1,11 +1,7 @@ import { createFileRoute, redirect } from "@tanstack/react-router"; -import { useState } from "react"; -import ConfigContent from "@/components/common/ConfigContent"; -import PageHeader from "@/components/common/PageHeader"; -import Sidebar from "@/components/common/Sidebar"; -import GlassLayout from "@/layouts/GlassLayout"; import { getUserInfo } from "@/lib/auth"; +import ConfigPage from "@/components/pages/ConfigPage"; export const Route = createFileRoute("/config/")({ beforeLoad: () => { @@ -13,49 +9,7 @@ export const Route = createFileRoute("/config/")({ throw redirect({ to: "/" }); } }, - component: ConfigComponent, + component: ConfigPage, }); -function ConfigComponent() { - const [selectedBoard, setSelectedBoard] = useState(""); - const [selectedSubject, setSelectedSubject] = useState(""); - const [selectedMarks, setSelectedMarks] = useState("80"); - const [selectedDuration, setSelectedDuration] = useState("2"); - const [selectedUnit, setSelectedUnit] = useState("hrs"); - return ( -
    - {/*************************** Header ***************************/} - - - {/*************************** Main Layout ***************************/} - -
    - - -
    -
    -
    - ); -} diff --git a/apps/frontend/src/routes/examPaper/index.tsx b/apps/frontend/src/routes/examPaper/index.tsx index eb05c1a..16443ce 100644 --- a/apps/frontend/src/routes/examPaper/index.tsx +++ b/apps/frontend/src/routes/examPaper/index.tsx @@ -1,507 +1,15 @@ -import PageHeader from "@/components/common/PageHeader"; +import ExamPaperPage from "@/components/pages/ExamPaperPage"; import { getUserInfo } from "@/lib/auth"; import { createFileRoute, redirect } from "@tanstack/react-router"; -const dummyAPIRes = { - success: true, - data: { - exam_paper: { - id: "57e8a673-596a-4d44-994c-8c499b84a13c", - board: "ICSE", - subject: "Physics", - paper: "Science Paper 1", - code: "521 SCI1", - year: 2026, - max_marks: 80, - time_allowed: "Two hours", - instructions: [ - "Answers to this Paper must be written on the paper provided separately.", - "You will not be allowed to write during first 15 minutes.", - "This time is to be spent in reading the question paper.", - "The time given at the head of this Paper is the time allowed for writing the answers.", - "Section A is compulsory.", - "Attempt any four questions from Section B.", - "The intended marks for questions or parts of questions are given in brackets [ ].", - ], - sections: [ - { - name: "Section A", - marks: 40, - questions: [ - { - number: 1, - type: "MCQ", - marks: 15, - instruction: null, - subparts: [ - { - id: "i", - question: - "A body is acted upon by two equal and opposite forces, that are NOT along the same straight line. The body will:", - options: [ - "remain stationary", - "have only rotational motion", - "have only rectilinear motion", - "have both rectilinear and rotational motion", - ], - }, - { - id: "ii", - question: - "When the speed of a moving object is doubled, then its kinetic energy:", - options: [ - "remains the same", - "decreases", - "is doubled", - "becomes four times", - ], - }, - { - id: "iii", - question: - "A ray of light is incident normally on a face of an equilateral prism. The ray gets totally reflected at the second refracting surface. The total deviation produced is:", - options: ["30°", "60°", "90°", "120°"], - }, - { - id: "iv", - question: - "As the level of water in a tall measuring cylinder rises, the pitch of sound increases. This is because:", - options: [ - "frequency is directly proportional to water column length", - "frequency is inversely proportional to air column length", - "wavelength increases with water column length", - "speed of sound increases in water", - ], - }, - { - id: "v", - question: - "Which of the following materials is preferred for making a calorimeter?", - options: ["Copper", "Glass", "Steel", "Aluminium"], - }, - { - id: "vi", - question: "The S.I. unit of power of a lens is:", - options: ["metre", "centimetre", "dioptre", "watt"], - }, - { - id: "vii", - question: - "For an ideal machine, the mechanical advantage is:", - options: [ - "equal to its velocity ratio", - "greater than its velocity ratio", - "less than its velocity ratio", - "zero", - ], - }, - { - id: "viii", - question: - "Work done by centripetal force on a body moving in a circular path is:", - options: ["positive", "negative", "zero", "depends on speed"], - }, - { - id: "ix", - question: - "Which of the following colours of visible light has the maximum wavelength?", - options: ["Violet", "Green", "Yellow", "Red"], - }, - { - id: "x", - question: - "The characteristic of sound that enables a person to distinguish between two sounds of the same loudness and pitch, but produced by different sources, is:", - options: [ - "Loudness", - "Pitch", - "Quality (Timbre)", - "Intensity", - ], - }, - { - id: "xi", - question: "A good absorber of heat is also a good:", - options: [ - "reflector", - "transmitter", - "radiator", - "insulator", - ], - }, - { - id: "xii", - question: - "The fuse wire is placed in the ______ wire of the main circuit.", - options: ["live", "neutral", "earth", "any of these"], - }, - { - id: "xiii", - question: - "Which of the following radiations has the maximum penetrating power?", - options: [ - "Alpha particles", - "Beta particles", - "Gamma radiations", - "Neutrons", - ], - }, - { - id: "xiv", - question: - "The efficiency of a machine is always less than 100% due to:", - options: [ - "friction", - "weight of moving parts", - "energy loss in various forms", - "all of the above", - ], - }, - { - id: "xv", - question: - "A door lock is opened by turning the lever (handle) of length 0.2 m. If the moment of force produced is 1 Nm, then the minimum force required is:", - options: ["5 N", "10 N", "20 N", "0.2 N"], - }, - ], - }, - { - number: 2, - type: "Fill in the blanks + reasoning", - marks: 10, - instruction: null, - subparts: [ - { - id: "a", - question: - "When a stone tied to a string is rotated in a horizontal plane, the tension provides __________ force. Work done by this force at any instant is __________ [2]", - options: [], - }, - { - id: "b", - question: - "Why are the strings of a Sitar made of different thicknesses? [2]", - options: [], - }, - { - id: "c", - question: - "The critical angle for a material is the angle of __________ in the denser medium for which the angle of __________ in the rarer medium is 90°. [2]", - options: [], - }, - { - id: "d", - question: - "State one safety precaution against fire hazards in household wiring. [2]", - options: [], - }, - { - id: "e", - question: - "Define specific heat capacity. State its S.I. unit. [2]", - options: [], - }, - ], - }, - { - number: 3, - type: "Diagram-based + Numericals", - marks: 15, - instruction: null, - subparts: [ - { - id: "a", - question: - "A crane lifts a mass of 2000 kg to a height of 15 m in 30 seconds. Calculate: (i) The work done by the crane. (ii) The power of the crane. (Take g = 10 N/kg). [5]", - options: [], - }, - { - id: "b", - question: - "A ray of monochromatic light enters a glass prism as shown in the diagram below (imagine a diagram showing a ray entering one face of a prism and emerging from another). Draw the ray diagram to show the path of the ray as it emerges from the prism. Mark the angle of deviation. State two factors on which the angle of deviation depends. [5]", - options: [], - }, - { - id: "c", - question: - "A metal block of mass 100 g is heated to 100°C and then quickly transferred to a calorimeter containing 200 g of water at 20°C. If the final temperature of the mixture is 25°C, calculate the specific heat capacity of the metal. (Specific heat capacity of water = 4.2 J g⁻¹ °C⁻¹). [5]", - options: [], - }, - ], - }, - ], - }, - { - name: "Section B", - marks: 40, - questions: [ - { - number: 8, - type: "Diagram-based + Numericals", - marks: 10, - instruction: null, - subparts: [ - { - id: "a", - question: - "An electric lamp is rated 100 W, 220 V. (i) What is the resistance of the lamp? (ii) What current does it draw when connected to a 220 V supply? (iii) If three such lamps are connected in series to a 220 V supply, what is the total power consumed? [6]", - options: [], - }, - { - id: "b", - question: - "(i) Why is a fuse necessary in a household circuit? (ii) State one difference between AC and DC current. [4]", - options: [], - }, - ], - }, - { - number: 9, - type: "Fill in the blanks + reasoning", - marks: 10, - instruction: null, - subparts: [ - { - id: "a", - question: - "State and explain Fleming's Left-Hand Rule. Draw a labelled diagram to illustrate the direction of force on a current-carrying conductor placed in a magnetic field. [5]", - options: [], - }, - { - id: "b", - question: - "(i) Define radioactivity. (ii) Name three characteristics of alpha particles. (iii) What is the effect of an alpha emission on the mass number and atomic number of the parent nucleus? [5]", - options: [], - }, - ], - }, - { - number: 4, - type: "Diagram-based + Numericals", - marks: 10, - instruction: null, - subparts: [ - { - id: "a", - question: - "Draw a labelled diagram of a block and tackle system with a velocity ratio of 5. In your diagram, indicate the direction of the effort and load. State how the mechanical advantage of this system can be increased. [6]", - options: [], - }, - { - id: "b", - question: - "A force of 80 N is applied to the handle of a nutcracker, which has a length of 15 cm. The nut is placed at a distance of 3 cm from the hinge. Calculate the mechanical advantage and the force exerted on the nut. [4]", - options: [], - }, - ], - }, - { - number: 5, - type: "Diagram-based + Numericals", - marks: 10, - instruction: null, - subparts: [ - { - id: "a", - question: - "(i) Draw the path of a ray of light through a rectangular glass slab, showing lateral displacement. (ii) Explain why a spoon appears bent when partially immersed in water. (iii) What is total internal reflection? State two conditions necessary for it to occur. [6]", - options: [], - }, - { - id: "b", - question: - "An object is placed 15 cm from a convex lens of focal length 10 cm. (i) Find the position and nature of the image. (ii) Draw a ray diagram to show the formation of the image. [4]", - options: [], - }, - ], - }, - { - number: 6, - type: "Fill in the blanks + reasoning", - marks: 10, - instruction: null, - subparts: [ - { - id: "a", - question: - "A boy stands at a distance of 170 m from a high wall and claps his hands. He hears an echo after 1 second. (i) Calculate the speed of sound in air. (ii) If he moves closer to the wall and claps again, how will the time taken to hear the echo change? [4]", - options: [], - }, - { - id: "b", - question: - "Two sound boxes A and B are used. Box A has a wire of length L and box B has a wire of length 2L. Both wires are of the same material and tension. When a tuning fork of frequency 256 Hz is vibrated near box A, resonance occurs. (i) What is resonance? (ii) Will resonance occur if the same tuning fork is vibrated near box B? Justify your answer. (iii) How does increasing the tension in the wire affect the pitch of the sound produced? [6]", - options: [], - }, - ], - }, - { - number: 7, - type: "Fill in the blanks + reasoning", - marks: 10, - instruction: null, - subparts: [ - { - id: "a", - question: - "(i) State the principle of calorimetry. (ii) Why is water used as a coolant in car radiators and as a heat reservoir in hot water bags? [5]", - options: [], - }, - { - id: "b", - question: - "Calculate the amount of heat energy required to melt 500 g of ice at 0°C to water at 0°C. (Specific latent heat of fusion of ice = 336 J g⁻¹). If this water is further heated to 20°C, how much additional heat energy is required? (Specific heat capacity of water = 4.2 J g⁻¹ °C⁻¹). [5]", - options: [], - }, - ], - }, - ], - }, - ], - created_at: "2025-08-27T16:53:46.837240", - updated_at: "2025-08-27T16:53:46.837246", - }, - }, - message: "Exam Paper has been fetched", -}; - -type ExamData = typeof dummyAPIRes.data.exam_paper; - -const ExamPaperComponent = () => { - const examData: ExamData = dummyAPIRes.data.exam_paper; - - const handleDownload = (format: "pdf" | "doc") => { - const filename = `${examData.subject}_${examData.year}_${examData.code}.${format}`; - alert(`Downloading ${filename}...`); - }; - - const renderMCQ = (question: ExamData["sections"][0]["questions"][0]) => ( -
    -

    - Question {question.number} -

    - {question.subparts.map((sub, idx) => ( -
    -

    - ({sub.id}) {sub.question} -

    -
    - {sub.options?.map((opt, i) => ( -
    - ({String.fromCharCode(97 + i)}) {opt} -
    - ))} -
    -
    - ))} -
    [{question.marks}]
    -
    - ); - const renderRegular = (question: ExamData["sections"][0]["questions"][0]) => ( -
    -

    Question {question.number}

    - {question.subparts.map((sub) => ( -
    -

    - ({sub.id}) {sub.question} -

    -
    - ))} -
    [{question.marks}]
    -
    - ); - - return ( -
    - -
    - {/* Printable Pages */} -
    - {/* First Page */} -
    -
    -
    -

    {examData.board}

    -

    EXAMINATION

    -

    {examData.subject}

    -

    {examData.paper}

    -
    -
    -
    -

    - Paper: {examData.code} -

    -

    - Time: {examData.time_allowed} -

    -
    -
    -

    - Marks: {examData.max_marks} -

    -

    - Year: {examData.year} -

    -
    -
    -
    - -

    Instructions:

    -
      - {examData.instructions.map((ins, i) => ( -
    • {ins}
    • - ))} -
    -
    - - {/* Questions by Section (auto page break when needed) */} - {examData.sections.map((section) => ( -
    -
    -

    {section.name}

    -

    [{section.marks} marks]

    -
    - {section.questions.map((q) => - q.type === "MCQ" ? renderMCQ(q) : renderRegular(q) - )} -
    - ))} -
    -
    - {/* - - */} - - {/* Print/PDF Styles */} - -
    - ); -}; export const Route = createFileRoute("/examPaper/")({ beforeLoad: () => { if (!getUserInfo()) { throw redirect({ to: "/" }); } }, - component: ExamPaperComponent, + component: ExamPaperPage, }); -export default ExamPaperComponent; + diff --git a/apps/frontend/src/routes/index.tsx b/apps/frontend/src/routes/index.tsx index 2a93cc6..53fa7ca 100644 --- a/apps/frontend/src/routes/index.tsx +++ b/apps/frontend/src/routes/index.tsx @@ -1,109 +1,6 @@ +import Home from "@/components/pages/HomePage"; import { createFileRoute } from "@tanstack/react-router"; -import { Suspense, useState, useEffect } from "react"; -import { Canvas } from "@react-three/fiber"; -import { Scene } from "@/components/models/PulseModel"; -import { - BookOpen, - Brain, - FileText, - Users, - Award, - ChevronRight, - Star, - Play, -} from "lucide-react"; -import { getUserInfo, setUserInfo } from "@/lib/auth"; -import type { ApiError } from "@/types/api"; -const productFeatures = [ - { - icon: , - title: "AI Question Generator", - description: - "Generate contextual questions from any topic using advanced AI algorithms", - highlight: "10,000+ Questions Generated Daily", - color: "from-blue-500 to-cyan-500", - }, - { - icon: , - title: "Smart Notes", - description: - "Create organized, searchable notes with automatic formatting and categorization", - highlight: "Auto-categorized & Searchable", - color: "from-purple-500 to-pink-500", - }, - { - icon: , - title: "Study Materials", - description: - "Transform your content into comprehensive study guides and flashcards", - highlight: "Multiple Format Export", - color: "from-green-500 to-teal-500", - }, - { - icon: , - title: "Progress Analytics", - description: - "Track your learning journey with detailed analytics and insights", - highlight: "Real-time Performance Data", - color: "from-orange-500 to-red-500", - }, -]; - -const testimonials = [ - { - name: "Atul Miya", - role: "Medical Student", - text: "Doclin helped me create 500+ practice questions for my finals!", - rating: 5, - avatar: "SC", - }, - { - name: "Tinku Jiya", - role: "Engineering Student", - text: "The AI-generated notes are incredibly accurate and well-structured.", - rating: 5, - avatar: "AK", - }, - { - name: "Ladki BAJIGAR", - role: "Teacher", - text: "Perfect for creating diverse question sets for my students.", - rating: 5, - avatar: "MR", - }, -]; - -const useCases = [ - { - title: "Students", - description: - "Generate practice questions, create study notes, and track your learning progress", - icon: , - benefits: ["Practice Questions", "Study Guides", "Progress Tracking"], - }, - { - title: "Teachers", - description: - "Create comprehensive question banks and study materials for your classes", - icon: , - benefits: ["Question Banks", "Curriculum Materials", "Assessment Tools"], - }, - { - title: "Professionals", - description: - "Prepare for certifications and continuing education with AI-powered tools", - icon: , - benefits: ["Certification Prep", "Skill Assessment", "Knowledge Gaps"], - }, -]; - -const features = [ - "AI-Generated Questions", - "Smart Note Taking", - "Study Material Creation", - "Progress Tracking", -]; export const Route = createFileRoute("/")({ validateSearch: (search: Record | null = null) => { if (!search) return {}; @@ -113,353 +10,3 @@ export const Route = createFileRoute("/")({ }, component: Home, }); -function Home() { - const { oauth } = Route.useSearch(); - const [currentFeature, setCurrentFeature] = useState(0); - const [isVisible, setIsVisible] = useState(false); - const [typewriterText, setTypewriterText] = useState(""); - const [stats, setStats] = useState({ users: 0, questions: 0, notes: 0 }); - - useEffect(() => { - setIsVisible(true); - - // Typewriter effect - const text = "Your one stop for QUESTIONS, NOTES and STUDY MATERIAL"; - let index = 0; - const timer = setInterval(() => { - if (index <= text.length) { - setTypewriterText(text.slice(0, index)); - index++; - } else { - clearInterval(timer); - } - }, 50); - - // Feature rotation - const featureTimer = setInterval(() => { - setCurrentFeature((prev) => (prev + 1) % features.length); - }, 3000); - - // Stats animation - const statsTimer = setTimeout(() => { - setStats({ users: 25000, questions: 500000, notes: 150000 }); - }, 1500); - - return () => { - clearInterval(timer); - clearInterval(featureTimer); - clearTimeout(statsTimer); - }; - }, []); - - useEffect(() => { - if (!oauth || getUserInfo()) return; - const fetchUser = async () => { - try { - const url = `${import.meta.env.VITE_API_BASE_URL}/auth/me`; - const response = await fetch(url, { - method: "GET", - headers: { "Content-Type": "application/json" }, - credentials: "include", - }); - - if (!response.ok) { - const error: ApiError = { - message: `Request failed with status ${response.status}`, - status: response.status, - }; - - try { - error.details = await response.json(); - } catch { - console.error("Failed to parse error details"); - } - throw error; - } - - const data = await response.json(); - console.log("OAuth user data:", data); - setUserInfo({ - email: data.data.email, - role: data.data.role, - username: data.data.username, - }); - } catch (err) { - console.error(err); - } - }; - - fetchUser(); - }, [oauth]); - - const AnimatedCounter: React.FC<{ - end: number; - duration?: number; - suffix?: string; - }> = ({ end, duration = 2000, suffix = "" }) => { - const [count, setCount] = useState(0); - - useEffect(() => { - if (end === 0) return; - let startTime: number; - const animate = (timestamp: number) => { - if (!startTime) startTime = timestamp; - const progress = Math.min((timestamp - startTime) / duration, 1); - setCount(Math.floor(progress * end)); - if (progress < 1) requestAnimationFrame(animate); - }; - requestAnimationFrame(animate); - }, [end, duration]); - - return ( - - {count.toLocaleString()} - {suffix} - - ); - }; - - return ( -
    - {/* Animated Background Elements */} -
    -
    -
    -
    -
    - - {/****************************** Foreground: Enhanced Content ******************************/} -
    - {/* Hero Section */} -
    -
    - {/***************************** Background: 3D MODEL ************************* */} -
    - - - - - -
    - - {/* **************************************** TITLE ****************************************** */} - -

    - - DOCLIN NOTE - - GENERATOR -

    - -
    -

    - {typewriterText} - | -

    -
    - -
    -

    - Currently featuring:{" "} - - {features[currentFeature]} - -

    -
    - -
    - - -
    - -
    -
    -
    - -
    -
    Active Users
    -
    -
    -
    - -
    -
    Questions Generated
    -
    -
    -
    - -
    -
    Notes Created
    -
    -
    -
    -
    - - {/* **************************************************Feature***************************************** */} -
    -
    -
    -

    - Powerful Features for{" "} - - Every Learner - -

    -

    - Discover how Doclin transforms the way you study, create, and - learn with cutting-edge AI technology -

    -
    - -
    - {productFeatures.map((feature, index) => ( -
    -
    - {feature.icon} -
    -

    - {feature.title} -

    -

    - {feature.description} -

    -
    - {feature.highlight} -
    -
    - ))} -
    -
    -
    - - {/* **************************************** User base ****************************************** */} -
    -
    -
    -

    - Perfect for{" "} - - Everyone - -

    -

    - Whether you're a student, teacher, or professional, Doclin - adapts to your learning needs -

    -
    - -
    - {useCases.map((useCase, index) => ( -
    -
    {useCase.icon}
    -

    - {useCase.title} -

    -

    {useCase.description}

    -
      - {useCase.benefits.map((benefit, benefitIndex) => ( -
    • -
      - {benefit} -
    • - ))} -
    -
    - ))} -
    -
    -
    - - {/* **************************************** Testimonials *********************************** */} -
    -
    -
    -

    - What Our{" "} - - Users Say - -

    -
    - -
    - {testimonials.map((testimonial, index) => ( -
    -
    -
    - {testimonial.avatar} -
    -
    -
    - {testimonial.name} -
    -
    - {testimonial.role} -
    -
    -
    -
    - {[...Array(testimonial.rating)].map((_, starIndex) => ( - - ))} -
    -

    "{testimonial.text}"

    -
    - ))} -
    -
    -
    -
    -
    - ); -} diff --git a/apps/frontend/src/types/api.ts b/apps/frontend/src/types/api.ts index 808725c..9bf1e68 100644 --- a/apps/frontend/src/types/api.ts +++ b/apps/frontend/src/types/api.ts @@ -70,7 +70,7 @@ export const subjectBoardSchema = z.object({ export const subjectResponseSchema = apiResponseSchema( z.object({ - exam_subjects: z.array(subjectBoardSchema), + exam_subjects: z.array(z.string()), }) ); @@ -78,7 +78,7 @@ export type SubjectResponse = z.infer; export const boardResponseSchema = apiResponseSchema( z.object({ - exam_boards: z.array(subjectBoardSchema), + exam_boards: z.array(z.string()), }) ); @@ -135,6 +135,7 @@ export type VerifyOTPResponse = z.infer; export const verifyUserSchema = z.object({ id: z.uuid(), }); + export const VerifyUserResponseSchema = apiResponseSchema(verifyUserSchema); export type VerifyUserResponse = z.infer; @@ -143,3 +144,123 @@ export type ExamPaperUploadResponse = z.infer; export const logoutSchema = apiResponseSchema(z.null()); export type LogoutResponse = z.infer; + +/* ---------------------------------- */ +/* Shared Reusable Schemas */ +/* ---------------------------------- */ + +export const diagramSchema = z.object({ + type: z.string(), + description: z.string(), + elements: z.array(z.string()).default([]), + labels: z.array(z.string()).default([]), + measurements: z.record(z.any(), z.any()).default({}), // safer than z.any() + angles: z.record(z.any(), z.any()).default({}), + instructions: z.string().nullable(), +}); + +export const optionSchema = z.object({ + option_letter: z.string(), + text: z.string(), +}); + +export const subPartSchema = z.object({ + letter: z.string(), + question_text: z.string(), + marks: z.number().nullable(), + diagram: diagramSchema.nullable(), + formula_given: z.string().nullable(), + constants_given: z.record(z.string(), z.string()).nullable(), + equation_template: z.string().nullable(), + choices_given: z.array(z.string()).nullable(), +}); + +export const partSchema = z.object({ + number: z.string(), + type: z.enum([ + "multiple_choice", + "short_answer", + "calculation", + "diagram_based", + "complete_equation", + ]), + marks: z.number(), + question_text: z.string().nullable(), + description: z.string().nullable(), + + sub_parts: z.array(subPartSchema).default([]), + options: z.array(optionSchema).default([]), + diagram: diagramSchema.nullable(), + + formula_given: z.string().nullable(), + constants_given: z.record(z.string(), z.string()).nullable(), + + column_a: z.array(z.string()).nullable(), + column_b: z.array(z.string()).nullable(), + + items_to_arrange: z.array(z.string()).nullable(), + sequence_type: z.string().nullable(), + + statement_with_blanks: z.string().nullable(), + choices_for_blanks: z.array(z.string()).nullable(), + + equation_template: z.string().nullable(), + missing_parts: z.array(z.string()).nullable(), +}); + +export const questionSchema = z.object({ + number: z.number(), + title: z.string().nullable(), + type: z.enum([ + "multiple_choice", + "short_answer", + "long_answer", + "calculation", + "diagram_based", + "complete_equation", + ]), + total_marks: z.number(), + instruction: z.string().nullable(), + question_text: z.string().nullable(), + + parts: z.array(partSchema).default([]), + options: z.array(optionSchema).default([]), + diagram: diagramSchema.nullable(), +}); + +export const sectionSchema = z.object({ + name: z.string(), + marks: z.number(), + instruction: z.string(), + is_compulsory: z.boolean(), + questions: z.array(questionSchema), +}); + +/* ---------------------------------- */ +/* Main Exam Paper Schema */ +/* ---------------------------------- */ + +// Updated schemas to match API response +export const examPaperSchema = z.object({ + exam: z.object({ + paper_code: z.string(), + subject: z.string(), + paper_name: z.string(), + year: z.number(), + board: z.string(), + maximum_marks: z.number(), + time_allowed: z.string(), + reading_time: z.string(), + additional_instructions: z.array(z.string()).default([]), + }), + sections: z.array(sectionSchema), +}); + +export const examPaperResponseSchema = apiResponseSchema( + z.object({ + exam_paper: examPaperSchema, + }) +); + +export type ExamPaper = z.infer; +export type ExamPaperResponse = z.infer; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 327d52a..8be239c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 3.6.2 turbo: specifier: ^2.5.4 - version: 2.5.4 + version: 2.5.8 apps/backend: {} @@ -21,52 +21,52 @@ importers: dependencies: '@hookform/resolvers': specifier: ^5.2.1 - version: 5.2.1(react-hook-form@7.62.0(react@19.1.0)) + version: 5.2.2(react-hook-form@7.63.0(react@19.1.1)) '@radix-ui/react-avatar': specifier: ^1.1.10 - version: 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-dialog': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-dropdown-menu': specifier: ^2.1.16 - version: 2.1.16(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-label': specifier: ^2.1.7 - version: 2.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-menubar': specifier: ^1.1.16 - version: 1.1.16(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-navigation-menu': specifier: ^1.2.14 - version: 1.2.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.14(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-select': specifier: ^2.2.6 - version: 2.2.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.2.6(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-slot': specifier: ^1.2.3 - version: 1.2.3(@types/react@19.1.8)(react@19.1.0) + version: 1.2.3(@types/react@19.1.14)(react@19.1.1) '@react-three/drei': specifier: ^10.7.4 - version: 10.7.4(@react-three/fiber@9.3.0(@types/react@19.1.8)(immer@10.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.179.1))(@types/react@19.1.8)(@types/three@0.179.0)(immer@10.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.179.1) + version: 10.7.6(@react-three/fiber@9.3.0(@types/react@19.1.14)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(three@0.179.1))(@types/react@19.1.14)(@types/three@0.179.0)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(three@0.179.1) '@react-three/fiber': specifier: ^9.3.0 - version: 9.3.0(@types/react@19.1.8)(immer@10.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.179.1) + version: 9.3.0(@types/react@19.1.14)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(three@0.179.1) '@react-three/postprocessing': specifier: ^3.0.4 - version: 3.0.4(@react-three/fiber@9.3.0(@types/react@19.1.8)(immer@10.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.179.1))(@types/three@0.179.0)(react@19.1.0)(three@0.179.1) + version: 3.0.4(@react-three/fiber@9.3.0(@types/react@19.1.14)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(three@0.179.1))(@types/three@0.179.0)(react@19.1.1)(three@0.179.1) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.4(@types/node@24.0.12)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)) + version: 4.1.13(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6)) '@tanstack/react-query': specifier: ^5.85.3 - version: 5.85.3(react@19.1.0) + version: 5.90.2(react@19.1.1) '@tanstack/react-router': specifier: ^1.125.6 - version: 1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.132.17(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tanstack/react-router-devtools': specifier: ^1.125.6 - version: 1.125.6(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.125.4)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.7)(tiny-invariant@1.3.3) + version: 1.132.17(@tanstack/react-router@1.132.17(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.132.17)(@types/node@24.5.2)(csstype@3.1.3)(jiti@2.6.0)(lightningcss@1.30.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -75,40 +75,40 @@ importers: version: 2.1.1 framer-motion: specifier: ^12.23.12 - version: 12.23.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 12.23.22(react-dom@19.1.1(react@19.1.1))(react@19.1.1) input-otp: specifier: ^1.4.2 - version: 1.4.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.4.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) lucide-react: specifier: ^0.525.0 - version: 0.525.0(react@19.1.0) + version: 0.525.0(react@19.1.1) next-themes: specifier: ^0.4.6 - version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: specifier: ^19.1.0 - version: 19.1.0 + version: 19.1.1 react-dom: specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + version: 19.1.1(react@19.1.1) react-hook-form: specifier: ^7.62.0 - version: 7.62.0(react@19.1.0) + version: 7.63.0(react@19.1.1) react-icons: specifier: ^5.5.0 - version: 5.5.0(react@19.1.0) + version: 5.5.0(react@19.1.1) recharts: specifier: ^3.1.2 - version: 3.1.2(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react-is@19.1.1)(react@19.1.0)(redux@5.0.1) + version: 3.2.1(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1) sonner: specifier: ^2.0.7 - version: 2.0.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.0.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1) tailwind-merge: specifier: ^3.3.1 version: 3.3.1 tailwindcss: specifier: ^4.1.11 - version: 4.1.11 + version: 4.1.13 three: specifier: ^0.179.1 version: 0.179.1 @@ -117,80 +117,76 @@ importers: version: 2.36.0(three@0.179.1) zod: specifier: ^4.0.14 - version: 4.0.14 + version: 4.1.11 devDependencies: '@eslint/js': specifier: ^9.29.0 - version: 9.30.1 + version: 9.36.0 '@tanstack/router-plugin': specifier: ^1.125.6 - version: 1.125.6(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.0.12)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)) + version: 1.132.17(@tanstack/react-router@1.132.17(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6)) '@types/node': specifier: ^24.0.10 - version: 24.0.12 + version: 24.5.2 '@types/react': specifier: ^19.1.8 - version: 19.1.8 + version: 19.1.14 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + version: 19.1.9(@types/react@19.1.14) '@types/three': specifier: ^0.179.0 version: 0.179.0 '@vitejs/plugin-react': specifier: ^4.5.2 - version: 4.6.0(vite@7.0.4(@types/node@24.0.12)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)) + version: 4.7.0(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6)) eslint: specifier: ^9.29.0 - version: 9.30.1(jiti@2.4.2) + version: 9.36.0(jiti@2.6.0) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.30.1(jiti@2.4.2)) + version: 5.2.0(eslint@9.36.0(jiti@2.6.0)) eslint-plugin-react-refresh: specifier: ^0.4.20 - version: 0.4.20(eslint@9.30.1(jiti@2.4.2)) + version: 0.4.22(eslint@9.36.0(jiti@2.6.0)) globals: specifier: ^16.2.0 - version: 16.3.0 + version: 16.4.0 prettier: specifier: ^3.6.2 version: 3.6.2 turbo: specifier: ^2.5.4 - version: 2.5.4 + version: 2.5.8 tw-animate-css: specifier: ^1.3.5 - version: 1.3.5 + version: 1.4.0 typescript: specifier: ~5.8.3 version: 5.8.3 typescript-eslint: specifier: ^8.34.1 - version: 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + version: 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3) vite: specifier: ^7.0.0 - version: 7.0.4(@types/node@24.0.12)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3) + version: 7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6) packages: - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.0': - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.0': - resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.0': - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': @@ -201,8 +197,8 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.27.1': - resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + '@babel/helper-create-class-features-plugin@7.28.3': + resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -219,8 +215,8 @@ packages: resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.27.3': - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -255,12 +251,12 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.6': - resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} hasBin: true @@ -306,183 +302,183 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.28.3': - resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.0': - resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.0': - resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} '@dimforge/rapier3d-compat@0.12.0': resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==} - '@esbuild/aix-ppc64@0.25.6': - resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==} + '@esbuild/aix-ppc64@0.25.10': + resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.6': - resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==} + '@esbuild/android-arm64@0.25.10': + resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.6': - resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==} + '@esbuild/android-arm@0.25.10': + resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.6': - resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==} + '@esbuild/android-x64@0.25.10': + resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.6': - resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==} + '@esbuild/darwin-arm64@0.25.10': + resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.6': - resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==} + '@esbuild/darwin-x64@0.25.10': + resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.6': - resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==} + '@esbuild/freebsd-arm64@0.25.10': + resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.6': - resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==} + '@esbuild/freebsd-x64@0.25.10': + resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.6': - resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==} + '@esbuild/linux-arm64@0.25.10': + resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.6': - resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==} + '@esbuild/linux-arm@0.25.10': + resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.6': - resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==} + '@esbuild/linux-ia32@0.25.10': + resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.6': - resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==} + '@esbuild/linux-loong64@0.25.10': + resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.6': - resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==} + '@esbuild/linux-mips64el@0.25.10': + resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.6': - resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==} + '@esbuild/linux-ppc64@0.25.10': + resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.6': - resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==} + '@esbuild/linux-riscv64@0.25.10': + resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.6': - resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==} + '@esbuild/linux-s390x@0.25.10': + resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.6': - resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==} + '@esbuild/linux-x64@0.25.10': + resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.6': - resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==} + '@esbuild/netbsd-arm64@0.25.10': + resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.6': - resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==} + '@esbuild/netbsd-x64@0.25.10': + resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.6': - resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==} + '@esbuild/openbsd-arm64@0.25.10': + resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.6': - resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==} + '@esbuild/openbsd-x64@0.25.10': + resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.6': - resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==} + '@esbuild/openharmony-arm64@0.25.10': + resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.6': - resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==} + '@esbuild/sunos-x64@0.25.10': + resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.6': - resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==} + '@esbuild/win32-arm64@0.25.10': + resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.6': - resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==} + '@esbuild/win32-ia32@0.25.10': + resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.6': - resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==} + '@esbuild/win32-x64@0.25.10': + resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -495,32 +491,28 @@ packages: resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.3.0': - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.15.1': - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.30.1': - resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} + '@eslint/js@9.36.0': + resolution: {integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.3': - resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@floating-ui/core@1.7.3': @@ -538,8 +530,8 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@hookform/resolvers@5.2.1': - resolution: {integrity: sha512-u0+6X58gkjMcxur1wRWokA7XsiiBJ6aK17aPZxhkoYiK5J+HcTx0Vhu9ovXe6H+dVpO6cjrn2FkJTryXEMlryQ==} + '@hookform/resolvers@5.2.2': + resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==} peerDependencies: react-hook-form: ^7.55.0 @@ -547,18 +539,14 @@ packages: resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.3': resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} @@ -567,18 +555,21 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@mediapipe/tasks-vision@0.10.17': resolution: {integrity: sha512-CZWV/q6TTe8ta61cZXjfnnHsfWIdFhms03M9T7Cnd5y2mdpylJM0rF1qRq+wsQVRMLz1OYPVEBU9ph2Bx8cxrg==} @@ -978,8 +969,8 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@react-three/drei@10.7.4': - resolution: {integrity: sha512-awojw2DAwmQmAXawNNcBmVJnXzIhsuCRm8pELAdETzPVA6jIHj0Mlm4Ce8fjtJpFEIoTgLOaQ8iYROiOA2ZN6g==} + '@react-three/drei@10.7.6': + resolution: {integrity: sha512-ZSFwRlRaa4zjtB7yHO6Q9xQGuyDCzE7whXBhum92JslcMRC3aouivp0rAzszcVymIoJx6PXmibyP+xr+zKdwLg==} peerDependencies: '@react-three/fiber': ^9.0.0 react: ^19 @@ -1032,106 +1023,116 @@ packages: react-redux: optional: true - '@rolldown/pluginutils@1.0.0-beta.19': - resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - '@rollup/rollup-android-arm-eabi@4.44.2': - resolution: {integrity: sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==} + '@rollup/rollup-android-arm-eabi@4.52.3': + resolution: {integrity: sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.44.2': - resolution: {integrity: sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==} + '@rollup/rollup-android-arm64@4.52.3': + resolution: {integrity: sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.44.2': - resolution: {integrity: sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==} + '@rollup/rollup-darwin-arm64@4.52.3': + resolution: {integrity: sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.44.2': - resolution: {integrity: sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==} + '@rollup/rollup-darwin-x64@4.52.3': + resolution: {integrity: sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.44.2': - resolution: {integrity: sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==} + '@rollup/rollup-freebsd-arm64@4.52.3': + resolution: {integrity: sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.44.2': - resolution: {integrity: sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==} + '@rollup/rollup-freebsd-x64@4.52.3': + resolution: {integrity: sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.44.2': - resolution: {integrity: sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.52.3': + resolution: {integrity: sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.44.2': - resolution: {integrity: sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==} + '@rollup/rollup-linux-arm-musleabihf@4.52.3': + resolution: {integrity: sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.44.2': - resolution: {integrity: sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==} + '@rollup/rollup-linux-arm64-gnu@4.52.3': + resolution: {integrity: sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.44.2': - resolution: {integrity: sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==} + '@rollup/rollup-linux-arm64-musl@4.52.3': + resolution: {integrity: sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.44.2': - resolution: {integrity: sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==} + '@rollup/rollup-linux-loong64-gnu@4.52.3': + resolution: {integrity: sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.44.2': - resolution: {integrity: sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==} + '@rollup/rollup-linux-ppc64-gnu@4.52.3': + resolution: {integrity: sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.44.2': - resolution: {integrity: sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==} + '@rollup/rollup-linux-riscv64-gnu@4.52.3': + resolution: {integrity: sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.44.2': - resolution: {integrity: sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==} + '@rollup/rollup-linux-riscv64-musl@4.52.3': + resolution: {integrity: sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.44.2': - resolution: {integrity: sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==} + '@rollup/rollup-linux-s390x-gnu@4.52.3': + resolution: {integrity: sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.44.2': - resolution: {integrity: sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==} + '@rollup/rollup-linux-x64-gnu@4.52.3': + resolution: {integrity: sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.44.2': - resolution: {integrity: sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==} + '@rollup/rollup-linux-x64-musl@4.52.3': + resolution: {integrity: sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.44.2': - resolution: {integrity: sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==} + '@rollup/rollup-openharmony-arm64@4.52.3': + resolution: {integrity: sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.52.3': + resolution: {integrity: sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.44.2': - resolution: {integrity: sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==} + '@rollup/rollup-win32-ia32-msvc@4.52.3': + resolution: {integrity: sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.44.2': - resolution: {integrity: sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==} + '@rollup/rollup-win32-x64-gnu@4.52.3': + resolution: {integrity: sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.52.3': + resolution: {integrity: sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==} cpu: [x64] os: [win32] @@ -1141,65 +1142,65 @@ packages: '@standard-schema/utils@0.3.0': resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - '@tailwindcss/node@4.1.11': - resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} + '@tailwindcss/node@4.1.13': + resolution: {integrity: sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==} - '@tailwindcss/oxide-android-arm64@4.1.11': - resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} + '@tailwindcss/oxide-android-arm64@4.1.13': + resolution: {integrity: sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.11': - resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} + '@tailwindcss/oxide-darwin-arm64@4.1.13': + resolution: {integrity: sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.11': - resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} + '@tailwindcss/oxide-darwin-x64@4.1.13': + resolution: {integrity: sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.11': - resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} + '@tailwindcss/oxide-freebsd-x64@4.1.13': + resolution: {integrity: sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': - resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13': + resolution: {integrity: sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': - resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.13': + resolution: {integrity: sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': - resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.13': + resolution: {integrity: sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': - resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.13': + resolution: {integrity: sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.11': - resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} + '@tailwindcss/oxide-linux-x64-musl@4.1.13': + resolution: {integrity: sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.11': - resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} + '@tailwindcss/oxide-wasm32-wasi@4.1.13': + resolution: {integrity: sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -1210,69 +1211,69 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': - resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.13': + resolution: {integrity: sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': - resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.13': + resolution: {integrity: sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.11': - resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} + '@tailwindcss/oxide@4.1.13': + resolution: {integrity: sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==} engines: {node: '>= 10'} - '@tailwindcss/vite@4.1.11': - resolution: {integrity: sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==} + '@tailwindcss/vite@4.1.13': + resolution: {integrity: sha512-0PmqLQ010N58SbMTJ7BVJ4I2xopiQn/5i6nlb4JmxzQf8zcS5+m2Cv6tqh+sfDwtIdjoEnOvwsGQ1hkUi8QEHQ==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 - '@tanstack/history@1.121.34': - resolution: {integrity: sha512-YL8dGi5ZU+xvtav2boRlw4zrRghkY6hvdcmHhA0RGSJ/CBgzv+cbADW9eYJLx74XMZvIQ1pp6VMbrpXnnM5gHA==} + '@tanstack/history@1.132.0': + resolution: {integrity: sha512-GG2R9I6QSlbNR9fEuX2sQCigY6K28w51h2634TWmkaHXlzQw+rWuIWr4nAGM9doA+kWRi1LFSFMvAiG3cOqjXQ==} engines: {node: '>=12'} - '@tanstack/query-core@5.85.3': - resolution: {integrity: sha512-9Ne4USX83nHmRuEYs78LW+3lFEEO2hBDHu7mrdIgAFx5Zcrs7ker3n/i8p4kf6OgKExmaDN5oR0efRD7i2J0DQ==} + '@tanstack/query-core@5.90.2': + resolution: {integrity: sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ==} - '@tanstack/react-query@5.85.3': - resolution: {integrity: sha512-AqU8TvNh5GVIE8I+TUU0noryBRy7gOY0XhSayVXmOPll4UkZeLWKDwi0rtWOZbwLRCbyxorfJ5DIjDqE7GXpcQ==} + '@tanstack/react-query@5.90.2': + resolution: {integrity: sha512-CLABiR+h5PYfOWr/z+vWFt5VsOA2ekQeRQBFSKlcoW6Ndx/f8rfyVmq4LbgOM4GG2qtxAxjLYLOpCNTYm4uKzw==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.125.6': - resolution: {integrity: sha512-3+Np/HPQ1jpdai58xY6fScnjJz08iIG6aKhCVVy8tfPC76jTyXc+ygqM9wtUt3kJYy9/Lf7j3dAJlbtxF+TIXg==} + '@tanstack/react-router-devtools@1.132.17': + resolution: {integrity: sha512-2WAJ+fzN8eyc75x+YYjSezYmN3WQPiyCGfG63BIa4a9i3adlCunWJED62Xv7EGKJhVEHyuQd6SnhS9icLU3klQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.125.6 + '@tanstack/react-router': ^1.132.17 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.125.6': - resolution: {integrity: sha512-znyUGTq+WRhXwToNTYiluUBLjMdQVxz+ZQ9Ep2PBuS9O+3Qm3kaM7n64hA84ISoCtLqMwTo7Ofw0W4WeLdjpYg==} + '@tanstack/react-router@1.132.17': + resolution: {integrity: sha512-Eowf46tS1io4cjLn6dEweO0ad4yBw5ExN0XfVzuE/nDs0SoJxITSaC+atWrbqUAHjxi3uN6M/ucQoKksZXud7g==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-store@0.7.3': - resolution: {integrity: sha512-3Dnqtbw9P2P0gw8uUM8WP2fFfg8XMDSZCTsywRPZe/XqqYW8PGkXKZTvP0AHkE4mpqP9Y43GpOg9vwO44azu6Q==} + '@tanstack/react-store@0.7.7': + resolution: {integrity: sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.125.4': - resolution: {integrity: sha512-tdgGI0Kwt3Lgs9ceLbG32NPh4I2H1T9t2TKjcS+I78sifm5rjTWV8lfqVRNrvMPk5ek60vXPOL2AHAUg6ohwsA==} + '@tanstack/router-core@1.132.17': + resolution: {integrity: sha512-rD+VIwY/h0TaT3wT6dFJ+SPN9JDgOO4xPtE2KwOn4PplNyOwpPjqBkhydkKJQmHl7x41V3752uMT477H1fmwzg==} engines: {node: '>=12'} - '@tanstack/router-devtools-core@1.125.4': - resolution: {integrity: sha512-5QbCQCcJcN/M0NF2TARKqauJ8QeRuk7kyHQMCqOoSJWWGUVcDHEmcbg1ZCJevfPVZPgnUjV9mqDfCPTYWT8/+w==} + '@tanstack/router-devtools-core@1.132.17': + resolution: {integrity: sha512-wAScd32UAaRRr330vqDoB9VeSpNihSj0mKQB8BCRGSRaW4gHj+Ek566TkGuoGUDwvXj8d6t9noNy2S7eUW6zVw==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.125.4 + '@tanstack/router-core': ^1.132.17 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -1280,18 +1281,18 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.125.4': - resolution: {integrity: sha512-jF71znMvpZxmkQF0MxfjKKyvXtft9NWRCVcLhb+6d/8nrVGNiEw+dsXn/CLpeRQLk7Mg/fsp/WipBql1dd3Qaw==} + '@tanstack/router-generator@1.132.17': + resolution: {integrity: sha512-+fopFRdGXuPPjLTTQ25O8zKMqfELmQzN2fRqTODoHnWxDqCqDTuI5W5yTp2rhyZxxq+8N7ySeYrpMnd4UW4T3g==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.125.6': - resolution: {integrity: sha512-SWfp++tkjb0grVqa/Xdvi9QAs93e9/fZMBZ6q0fvvQruMyciCmjWyE/qV3tS/Qh0WZdzIRP6yl8Gha2Lin4q1w==} + '@tanstack/router-plugin@1.132.17': + resolution: {integrity: sha512-GV2a8gdIG5CqqOph6N7e1sOiAWmsZaTMgamZSoHJK930+toNmQLpLgECIP5RLzVh/DWnG1RPBcNje4sBoRbGJw==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.125.6 - vite: '>=5.0.0 || >=6.0.0' - vite-plugin-solid: ^2.11.2 + '@tanstack/react-router': ^1.132.17 + vite: '>=5.0.0 || >=6.0.0 || >=7.0.0' + vite-plugin-solid: ^2.11.8 webpack: '>=5.92.0' peerDependenciesMeta: '@rsbuild/core': @@ -1305,15 +1306,15 @@ packages: webpack: optional: true - '@tanstack/router-utils@1.121.21': - resolution: {integrity: sha512-u7ubq1xPBtNiU7Fm+EOWlVWdgFLzuKOa1thhqdscVn8R4dNMUd1VoOjZ6AKmLw201VaUhFtlX+u0pjzI6szX7A==} + '@tanstack/router-utils@1.132.0': + resolution: {integrity: sha512-WDnvAi9kO20joLDzlsTvfgXNv+FgQ4G98xAD8r4jKWoTdTTG05DU2sRYimtbdq4Q7E3uVdvyvPdhRy45wan7bw==} engines: {node: '>=12'} - '@tanstack/store@0.7.2': - resolution: {integrity: sha512-RP80Z30BYiPX2Pyo0Nyw4s1SJFH2jyM6f9i3HfX4pA+gm5jsnYryscdq2aIQLnL4TaGuQMO+zXmN9nh1Qck+Pg==} + '@tanstack/store@0.7.7': + resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} - '@tanstack/virtual-file-routes@1.121.21': - resolution: {integrity: sha512-3nuYsTyaq6ZN7jRZ9z6Gj3GXZqBOqOT0yzd/WZ33ZFfv4yVNIvsa5Lw+M1j3sgyEAxKMqGu/FaNi7FCjr3yOdw==} + '@tanstack/virtual-file-routes@1.132.0': + resolution: {integrity: sha512-d3do4ih9IdLPBVY4Gb8x7Ho7z0oFDLpxoao7uNVkfWtYU7nc3B+rnnVejXIgprmI5gt1hNzyNDJFr8G/W926GA==} engines: {node: '>=12'} '@tweenjs/tween.js@23.1.3': @@ -1328,11 +1329,11 @@ packages: '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.7': - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - '@types/d3-array@3.2.1': - resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} '@types/d3-color@3.1.3': resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} @@ -1367,14 +1368,14 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@24.0.12': - resolution: {integrity: sha512-LtOrbvDf5ndC9Xi+4QZjVL0woFymF/xSTKZKPgrrl7H7XoeDvnD+E2IclKVDyaK9UM756W/3BXqSU+JEHopA9g==} + '@types/node@24.5.2': + resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==} '@types/offscreencanvas@2019.7.3': resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==} - '@types/react-dom@19.1.6': - resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} + '@types/react-dom@19.1.9': + resolution: {integrity: sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==} peerDependencies: '@types/react': ^19.0.0 @@ -1383,13 +1384,13 @@ packages: peerDependencies: '@types/react': '*' - '@types/react-reconciler@0.32.0': - resolution: {integrity: sha512-+WHarFkJevhH1s655qeeSEf/yxFST0dVRsmSqUgxG8mMOKqycgYBv2wVpyubBY7MX8KiX5FQ03rNIwrxfm7Bmw==} + '@types/react-reconciler@0.32.1': + resolution: {integrity: sha512-RsqPttsBQ+6af0nATFXJJpemYQH7kL9+xLNm1z+0MjQFDKBZDM2R6SBrjdvRmHu9i9fM6povACj57Ft+pKRNOA==} peerDependencies: '@types/react': '*' - '@types/react@19.1.8': - resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} + '@types/react@19.1.14': + resolution: {integrity: sha512-ukd93VGzaNPMAUPy0gRDSC57UuQbnH9Kussp7HBjM06YFi9uZTFhOvMSO2OKqXm1rSgzOE+pVx1k1PYHGwlc8Q==} '@types/stats.js@0.17.4': resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==} @@ -1400,66 +1401,66 @@ packages: '@types/use-sync-external-store@0.0.6': resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - '@types/webxr@0.5.22': - resolution: {integrity: sha512-Vr6Stjv5jPRqH690f5I5GLjVk8GSsoQSYJ2FVd/3jJF7KaqfwPi3ehfBS96mlQ2kPCwZaX6U0rG2+NGHBKkA/A==} + '@types/webxr@0.5.23': + resolution: {integrity: sha512-GPe4AsfOSpqWd3xA/0gwoKod13ChcfV67trvxaW2krUbgb9gxQjnCx8zGshzMl8LSHZlNH5gQ8LNScsDuc7nGQ==} - '@typescript-eslint/eslint-plugin@8.36.0': - resolution: {integrity: sha512-lZNihHUVB6ZZiPBNgOQGSxUASI7UJWhT8nHyUGCnaQ28XFCw98IfrMCG3rUl1uwUWoAvodJQby2KTs79UTcrAg==} + '@typescript-eslint/eslint-plugin@8.44.1': + resolution: {integrity: sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.36.0 + '@typescript-eslint/parser': ^8.44.1 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.36.0': - resolution: {integrity: sha512-FuYgkHwZLuPbZjQHzJXrtXreJdFMKl16BFYyRrLxDhWr6Qr7Kbcu2s1Yhu8tsiMXw1S0W1pjfFfYEt+R604s+Q==} + '@typescript-eslint/parser@8.44.1': + resolution: {integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.36.0': - resolution: {integrity: sha512-JAhQFIABkWccQYeLMrHadu/fhpzmSQ1F1KXkpzqiVxA/iYI6UnRt2trqXHt1sYEcw1mxLnB9rKMsOxXPxowN/g==} + '@typescript-eslint/project-service@8.44.1': + resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.36.0': - resolution: {integrity: sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==} + '@typescript-eslint/scope-manager@8.44.1': + resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.36.0': - resolution: {integrity: sha512-Nhh3TIEgN18mNbdXpd5Q8mSCBnrZQeY9V7Ca3dqYvNDStNIGRmJA6dmrIPMJ0kow3C7gcQbpsG2rPzy1Ks/AnA==} + '@typescript-eslint/tsconfig-utils@8.44.1': + resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.36.0': - resolution: {integrity: sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==} + '@typescript-eslint/type-utils@8.44.1': + resolution: {integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.36.0': - resolution: {integrity: sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==} + '@typescript-eslint/types@8.44.1': + resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.36.0': - resolution: {integrity: sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==} + '@typescript-eslint/typescript-estree@8.44.1': + resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.36.0': - resolution: {integrity: sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==} + '@typescript-eslint/utils@8.44.1': + resolution: {integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.36.0': - resolution: {integrity: sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==} + '@typescript-eslint/visitor-keys@8.44.1': + resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@use-gesture/core@10.3.1': @@ -1470,14 +1471,14 @@ packages: peerDependencies: react: '>= 16.8.0' - '@vitejs/plugin-react@4.6.0': - resolution: {integrity: sha512-5Kgff+m8e2PB+9j51eGHEpn5kUzRKH2Ry0qGoe8ItJg7pqnkPrYPkDQZGgGmTa0EGarHrkjLvOdU3b1fzI8otQ==} + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@webgpu/types@0.1.64': - resolution: {integrity: sha512-84kRIAGV46LJTlJZWxShiOrNL30A+9KokD7RB3dRCIqODFjodS5tCD5yyiZ8kIReGVZSDfA3XkkwyyOIF6K62A==} + '@webgpu/types@0.1.65': + resolution: {integrity: sha512-cYrHab4d6wuVvDW5tdsfI6/o6vcLMDe6w2Citd1oS51Xxu2ycLCnVo4fqwujfKWijrZMInTJIKcXxteoy21nVA==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1524,6 +1525,10 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.8.8: + resolution: {integrity: sha512-be0PUaPsQX/gPWWgFsdD+GFzaoig5PXaUC1xLkQiYdDnANU8sMnHoQd8JhbJQuvTWrWLyeFN9Imb5Qtfvr4RrQ==} + hasBin: true + bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} @@ -1541,8 +1546,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + browserslist@4.26.2: + resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1559,8 +1564,8 @@ packages: peerDependencies: three: '>=0.126.1' - caniuse-lite@1.0.30001727: - resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} + caniuse-lite@1.0.30001745: + resolution: {integrity: sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1594,8 +1599,8 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-es@1.2.2: - resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie-es@2.0.0: + resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} @@ -1653,8 +1658,8 @@ packages: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1671,8 +1676,8 @@ packages: detect-gpu@5.0.70: resolution: {integrity: sha512-bqerEP1Ese6nt3rFkwPnGbsUF9a4q+gMmpTVVOEzoCyeCc+y7/RvJnQZJx1JwhgQI5Ntg0Kgat8Uu7XpBqnz1w==} - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + detect-libc@2.1.1: + resolution: {integrity: sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==} engines: {node: '>=8'} detect-node-es@1.1.0: @@ -1685,18 +1690,18 @@ packages: draco3d@1.5.7: resolution: {integrity: sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==} - electron-to-chromium@1.5.181: - resolution: {integrity: sha512-+ISMj8OIQ+0qEeDj14Rt8WwcTOiqHyAB+5bnK1K7xNNLjBJ4hRCQfUkw8RWtcLbfBzDwc15ZnKH0c7SNOfwiyA==} + electron-to-chromium@1.5.227: + resolution: {integrity: sha512-ITxuoPfJu3lsNWUi2lBM2PaBPYgH3uqmxut5vmBxgYvyI4AlJ6P3Cai1O76mOrkJCBzq0IxWg/NtqOrpu/0gKA==} - enhanced-resolve@5.18.2: - resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} es-toolkit@1.39.10: resolution: {integrity: sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==} - esbuild@0.25.6: - resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==} + esbuild@0.25.10: + resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} engines: {node: '>=18'} hasBin: true @@ -1714,8 +1719,8 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-refresh@0.4.20: - resolution: {integrity: sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==} + eslint-plugin-react-refresh@0.4.22: + resolution: {integrity: sha512-atkAG6QaJMGoTLc4MDAP+rqZcfwQuTIh2IqHWFLy2TEjxr0MOK+5BSG4RzL2564AAPpZkDRsZXAUz68kjnU6Ug==} peerDependencies: eslint: '>=8.40' @@ -1731,8 +1736,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.30.1: - resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} + eslint@9.36.0: + resolution: {integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1785,8 +1790,9 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -1818,8 +1824,8 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - framer-motion@12.23.12: - resolution: {integrity: sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==} + framer-motion@12.23.22: + resolution: {integrity: sha512-ZgGvdxXCw55ZYvhoZChTlG6pUuehecgvEAJz0BHoC5pQKW1EC5xf1Mul1ej5+ai+pVY0pylyFfdl45qnM1/GsA==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -1860,8 +1866,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@16.3.0: - resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} engines: {node: '>=18'} glsl-noise@0.0.0: @@ -1882,8 +1888,8 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hls.js@1.6.10: - resolution: {integrity: sha512-16XHorwFNh+hYazYxDNXBLEm5aRoU+oxMX6qVnkbGH3hJil4xLav3/M6NH92VkD1qSOGKXeSm+5unuawPXK6OQ==} + hls.js@1.6.13: + resolution: {integrity: sha512-hNEzjZNHf5bFrUNvdS4/1RjIanuJ6szpWNfTaX5I6WfGynWXGT7K/YQLYtemSvFExzeMdgdE4SsyVLJbd5PcZA==} ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -1939,8 +1945,8 @@ packages: is-promise@2.2.2: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - isbot@5.1.28: - resolution: {integrity: sha512-qrOp4g3xj8YNse4biorv6O5ZShwsJM0trsoda4y7j/Su7ZtTTfVXFzbKkpgcSoDrHS8FcTuUwcU04YimZlZOxw==} + isbot@5.1.31: + resolution: {integrity: sha512-DPgQshehErHAqSCKDb3rNW03pa2wS/v5evvUqtxt6TTnHRqAG8FdzcSSJs9656pK6Y+NT7K9R4acEYXLHYfpUQ==} engines: {node: '>=18'} isexe@2.0.0: @@ -1951,8 +1957,8 @@ packages: peerDependencies: react: ^19.0.0 - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + jiti@2.6.0: + resolution: {integrity: sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==} hasBin: true js-tokens@4.0.0: @@ -2082,8 +2088,8 @@ packages: '@types/three': '>=0.144.0' three: '>=0.144.0' - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -2112,17 +2118,12 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@3.0.2: - resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - - motion-dom@12.23.12: - resolution: {integrity: sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==} + motion-dom@12.23.21: + resolution: {integrity: sha512-5xDXx/AbhrfgsQmSE7YESMn4Dpo6x5/DTZ4Iyy4xqDvVHWvFVoV+V2Ri2S/ksx+D40wrZ7gPYiMWshkdoqNgNQ==} motion-utils@12.23.6: resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==} @@ -2150,8 +2151,8 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.21: + resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -2181,6 +2182,9 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2188,18 +2192,18 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - postprocessing@6.37.7: - resolution: {integrity: sha512-3mXzCyhHQvw6cMQKzvHUzQVsy21yC3PZMIeH7KUjx+EVqLWRFPnARh4DEnnFJ+tE08mmIHrrN7UtxVR1Gxbokw==} + postprocessing@6.37.8: + resolution: {integrity: sha512-qTFUKS51z/fuw2U+irz4/TiKJ/0oI70cNtvQG1WxlPKvBdJUfS1CcFswJd5ATY3slotWfvkDDZAsj1X0fU8BOQ==} peerDependencies: - three: '>= 0.157.0 < 0.180.0' + three: '>= 0.157.0 < 0.181.0' potpack@1.0.2: resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==} @@ -2223,13 +2227,13 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + react-dom@19.1.1: + resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} peerDependencies: - react: ^19.1.0 + react: ^19.1.1 - react-hook-form@7.62.0: - resolution: {integrity: sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==} + react-hook-form@7.63.0: + resolution: {integrity: sha512-ZwueDMvUeucovM2VjkCf7zIHcs1aAlDimZu2Hvel5C5907gUzMpm4xCrQXtRzCvsBqFjonB4m3x4LzCFI1ZKWA==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 @@ -2303,8 +2307,8 @@ packages: react-dom: optional: true - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} readdirp@3.6.0: @@ -2315,8 +2319,8 @@ packages: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} - recharts@3.1.2: - resolution: {integrity: sha512-vhNbYwaxNbk/IATK0Ki29k3qvTkGqwvCgyQAQ9MavvvBwjvKnMTswdbklJpcOAoMPN/qxF3Lyqob0zO+ZXkZ4g==} + recharts@3.2.1: + resolution: {integrity: sha512-0JKwHRiFZdmLq/6nmilxEZl3pqb4T+aKkOkOi/ZISRZwfBhVMgInxzlYU9D4KnCH3KINScLy68m/OvMXoYGZUw==} engines: {node: '>=18'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2349,8 +2353,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.44.2: - resolution: {integrity: sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==} + rollup@4.52.3: + resolution: {integrity: sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2372,8 +2376,8 @@ packages: engines: {node: '>=10'} hasBin: true - seroval-plugins@1.3.2: - resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==} + seroval-plugins@1.3.3: + resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 @@ -2390,8 +2394,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - solid-js@1.9.7: - resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==} + solid-js@1.9.9: + resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==} sonner@2.0.7: resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} @@ -2407,9 +2411,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} stats-gl@2.4.2: resolution: {integrity: sha512-g5O9B0hm9CvnM36+v7SFl39T7hmAlv541tU81ME8YeSb3i1CIP5/QdDeSB3A0la0bKNHpxpwxOVRo2wFTYEosQ==} @@ -2436,15 +2440,15 @@ packages: tailwind-merge@3.3.1: resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} - tailwindcss@4.1.11: - resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} + tailwindcss@4.1.13: + resolution: {integrity: sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==} - tapable@2.2.2: - resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} + tapable@2.2.3: + resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==} engines: {node: '>=6'} - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + tar@7.5.1: + resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} engines: {node: '>=18'} three-mesh-bvh@0.8.3: @@ -2466,8 +2470,8 @@ packages: tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} to-regex-range@5.0.1: @@ -2496,72 +2500,72 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.20.3: - resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} + tsx@4.20.6: + resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==} engines: {node: '>=18.0.0'} hasBin: true tunnel-rat@0.1.2: resolution: {integrity: sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==} - turbo-darwin-64@2.5.4: - resolution: {integrity: sha512-ah6YnH2dErojhFooxEzmvsoZQTMImaruZhFPfMKPBq8sb+hALRdvBNLqfc8NWlZq576FkfRZ/MSi4SHvVFT9PQ==} + turbo-darwin-64@2.5.8: + resolution: {integrity: sha512-Dh5bCACiHO8rUXZLpKw+m3FiHtAp2CkanSyJre+SInEvEr5kIxjGvCK/8MFX8SFRjQuhjtvpIvYYZJB4AGCxNQ==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.5.4: - resolution: {integrity: sha512-2+Nx6LAyuXw2MdXb7pxqle3MYignLvS7OwtsP9SgtSBaMlnNlxl9BovzqdYAgkUW3AsYiQMJ/wBRb7d+xemM5A==} + turbo-darwin-arm64@2.5.8: + resolution: {integrity: sha512-f1H/tQC9px7+hmXn6Kx/w8Jd/FneIUnvLlcI/7RGHunxfOkKJKvsoiNzySkoHQ8uq1pJnhJ0xNGTlYM48ZaJOQ==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.5.4: - resolution: {integrity: sha512-5May2kjWbc8w4XxswGAl74GZ5eM4Gr6IiroqdLhXeXyfvWEdm2mFYCSWOzz0/z5cAgqyGidF1jt1qzUR8hTmOA==} + turbo-linux-64@2.5.8: + resolution: {integrity: sha512-hMyvc7w7yadBlZBGl/bnR6O+dJTx3XkTeyTTH4zEjERO6ChEs0SrN8jTFj1lueNXKIHh1SnALmy6VctKMGnWfw==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.5.4: - resolution: {integrity: sha512-/2yqFaS3TbfxV3P5yG2JUI79P7OUQKOUvAnx4MV9Bdz6jqHsHwc9WZPpO4QseQm+NvmgY6ICORnoVPODxGUiJg==} + turbo-linux-arm64@2.5.8: + resolution: {integrity: sha512-LQELGa7bAqV2f+3rTMRPnj5G/OHAe2U+0N9BwsZvfMvHSUbsQ3bBMWdSQaYNicok7wOZcHjz2TkESn1hYK6xIQ==} cpu: [arm64] os: [linux] - turbo-windows-64@2.5.4: - resolution: {integrity: sha512-EQUO4SmaCDhO6zYohxIjJpOKRN3wlfU7jMAj3CgcyTPvQR/UFLEKAYHqJOnJtymbQmiiM/ihX6c6W6Uq0yC7mA==} + turbo-windows-64@2.5.8: + resolution: {integrity: sha512-3YdcaW34TrN1AWwqgYL9gUqmZsMT4T7g8Y5Azz+uwwEJW+4sgcJkIi9pYFyU4ZBSjBvkfuPZkGgfStir5BBDJQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.5.4: - resolution: {integrity: sha512-oQ8RrK1VS8lrxkLriotFq+PiF7iiGgkZtfLKF4DDKsmdbPo0O9R2mQxm7jHLuXraRCuIQDWMIw6dpcr7Iykf4A==} + turbo-windows-arm64@2.5.8: + resolution: {integrity: sha512-eFC5XzLmgXJfnAK3UMTmVECCwuBcORrWdewoiXBnUm934DY6QN8YowC/srhNnROMpaKaqNeRpoB5FxCww3eteQ==} cpu: [arm64] os: [win32] - turbo@2.5.4: - resolution: {integrity: sha512-kc8ZibdRcuWUG1pbYSBFWqmIjynlD8Lp7IB6U3vIzvOv9VG+6Sp8bzyeBWE3Oi8XV5KsQrznyRTBPvrf99E4mA==} + turbo@2.5.8: + resolution: {integrity: sha512-5c9Fdsr9qfpT3hA0EyYSFRZj1dVVsb6KIWubA9JBYZ/9ZEAijgUEae0BBR/Xl/wekt4w65/lYLTFaP3JmwSO8w==} hasBin: true - tw-animate-css@1.3.5: - resolution: {integrity: sha512-t3u+0YNoloIhj1mMXs779P6MO9q3p3mvGn4k1n3nJPqJw/glZcuijG2qTSN4z4mgNRfW5ZC3aXJFLwDtiipZXA==} + tw-animate-css@1.4.0: + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.36.0: - resolution: {integrity: sha512-fTCqxthY+h9QbEgSIBfL9iV6CvKDFuoxg6bHPNpJ9HIUzS+jy2lCEyCmGyZRWEBSaykqcDPf1SJ+BfCI8DRopA==} + typescript-eslint@8.44.1: + resolution: {integrity: sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true - undici-types@7.8.0: - resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + undici-types@7.12.0: + resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} - unplugin@2.3.5: - resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==} + unplugin@2.3.10: + resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==} engines: {node: '>=18.12.0'} update-browserslist-db@1.1.3: @@ -2605,8 +2609,8 @@ packages: victory-vendor@37.3.6: resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} - vite@7.0.4: - resolution: {integrity: sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==} + vite@7.1.7: + resolution: {integrity: sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2677,8 +2681,8 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.0.14: - resolution: {integrity: sha512-nGFJTnJN6cM2v9kXL+SOBq3AtjQby3Mv5ySGFof5UGRHrRioSJ5iG680cYNjE/yWk671nROcpPj4hAS8nyLhSw==} + zod@4.1.11: + resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} zustand@4.5.7: resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==} @@ -2715,68 +2719,63 @@ packages: snapshots: - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.0': {} + '@babel/compat-data@7.28.4': {} - '@babel/core@7.28.0': + '@babel/core@7.28.4': dependencies: - '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 + '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) - '@babel/helpers': 7.27.6 - '@babel/parser': 7.28.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.1 + debug: 4.4.3 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.28.0': + '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.4 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.4 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.1 + browserslist: 4.26.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)': + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.4 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -2785,46 +2784,46 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.4 '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -2834,173 +2833,173 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.27.6': + '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.0 + '@babel/types': 7.28.4 - '@babel/parser@7.28.0': + '@babel/parser@7.28.4': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.4 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.0)': + '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.27.1(@babel/core@7.28.0)': + '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.0) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) transitivePeerDependencies: - supports-color - '@babel/runtime@7.28.3': {} + '@babel/runtime@7.28.4': {} '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 - '@babel/traverse@7.28.0': + '@babel/traverse@7.28.4': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 + '@babel/generator': 7.28.3 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/types': 7.28.0 - debug: 4.4.1 + '@babel/types': 7.28.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.0': + '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@dimforge/rapier3d-compat@0.12.0': {} - '@esbuild/aix-ppc64@0.25.6': + '@esbuild/aix-ppc64@0.25.10': optional: true - '@esbuild/android-arm64@0.25.6': + '@esbuild/android-arm64@0.25.10': optional: true - '@esbuild/android-arm@0.25.6': + '@esbuild/android-arm@0.25.10': optional: true - '@esbuild/android-x64@0.25.6': + '@esbuild/android-x64@0.25.10': optional: true - '@esbuild/darwin-arm64@0.25.6': + '@esbuild/darwin-arm64@0.25.10': optional: true - '@esbuild/darwin-x64@0.25.6': + '@esbuild/darwin-x64@0.25.10': optional: true - '@esbuild/freebsd-arm64@0.25.6': + '@esbuild/freebsd-arm64@0.25.10': optional: true - '@esbuild/freebsd-x64@0.25.6': + '@esbuild/freebsd-x64@0.25.10': optional: true - '@esbuild/linux-arm64@0.25.6': + '@esbuild/linux-arm64@0.25.10': optional: true - '@esbuild/linux-arm@0.25.6': + '@esbuild/linux-arm@0.25.10': optional: true - '@esbuild/linux-ia32@0.25.6': + '@esbuild/linux-ia32@0.25.10': optional: true - '@esbuild/linux-loong64@0.25.6': + '@esbuild/linux-loong64@0.25.10': optional: true - '@esbuild/linux-mips64el@0.25.6': + '@esbuild/linux-mips64el@0.25.10': optional: true - '@esbuild/linux-ppc64@0.25.6': + '@esbuild/linux-ppc64@0.25.10': optional: true - '@esbuild/linux-riscv64@0.25.6': + '@esbuild/linux-riscv64@0.25.10': optional: true - '@esbuild/linux-s390x@0.25.6': + '@esbuild/linux-s390x@0.25.10': optional: true - '@esbuild/linux-x64@0.25.6': + '@esbuild/linux-x64@0.25.10': optional: true - '@esbuild/netbsd-arm64@0.25.6': + '@esbuild/netbsd-arm64@0.25.10': optional: true - '@esbuild/netbsd-x64@0.25.6': + '@esbuild/netbsd-x64@0.25.10': optional: true - '@esbuild/openbsd-arm64@0.25.6': + '@esbuild/openbsd-arm64@0.25.10': optional: true - '@esbuild/openbsd-x64@0.25.6': + '@esbuild/openbsd-x64@0.25.10': optional: true - '@esbuild/openharmony-arm64@0.25.6': + '@esbuild/openharmony-arm64@0.25.10': optional: true - '@esbuild/sunos-x64@0.25.6': + '@esbuild/sunos-x64@0.25.10': optional: true - '@esbuild/win32-arm64@0.25.6': + '@esbuild/win32-arm64@0.25.10': optional: true - '@esbuild/win32-ia32@0.25.6': + '@esbuild/win32-ia32@0.25.10': optional: true - '@esbuild/win32-x64@0.25.6': + '@esbuild/win32-x64@0.25.10': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.6.0))': dependencies: - eslint: 9.30.1(jiti@2.4.2) + eslint: 9.36.0(jiti@2.6.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -3008,25 +3007,21 @@ snapshots: '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.1 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.0': {} - - '@eslint/core@0.14.0': - dependencies: - '@types/json-schema': 7.0.15 + '@eslint/config-helpers@0.3.1': {} - '@eslint/core@0.15.1': + '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.1 + debug: 4.4.3 espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -3037,13 +3032,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.30.1': {} + '@eslint/js@9.36.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.3': + '@eslint/plugin-kit@0.3.5': dependencies: - '@eslint/core': 0.15.1 + '@eslint/core': 0.15.2 levn: 0.4.1 '@floating-ui/core@1.7.3': @@ -3055,49 +3050,52 @@ snapshots: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@floating-ui/react-dom@2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@floating-ui/dom': 1.7.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) '@floating-ui/utils@0.2.10': {} - '@hookform/resolvers@5.2.1(react-hook-form@7.62.0(react@19.1.0))': + '@hookform/resolvers@5.2.2(react-hook-form@7.63.0(react@19.1.1))': dependencies: '@standard-schema/utils': 0.3.0 - react-hook-form: 7.62.0(react@19.1.0) + react-hook-form: 7.63.0(react@19.1.1) '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.6': + '@humanfs/node@0.16.7': dependencies: '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.3': {} '@isaacs/fs-minipass@4.0.1': dependencies: minipass: 7.1.2 - '@jridgewell/gen-mapping@0.3.12': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.4': {} + '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.29': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 '@mediapipe/tasks-vision@0.10.17': {} @@ -3122,446 +3120,446 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) - - '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) + + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.14)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-context@1.1.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-context@1.1.2(@types/react@19.1.14)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.14)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-direction@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-direction@1.1.1(@types/react@19.1.14)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.14)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-id@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-id@1.1.1(@types/react@19.1.14)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.14)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) - - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.14)(react@19.1.1) '@radix-ui/rect': 1.1.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.14)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) - '@radix-ui/react-slot@1.2.3(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-slot@1.2.3(@types/react@19.1.14)(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.14)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.14)(react@19.1.1)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.14)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.14)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.14)(react@19.1.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.14)(react@19.1.1)': dependencies: - react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) + react: 19.1.1 + use-sync-external-store: 1.5.0(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.14)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.14)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.14)(react@19.1.1)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.14)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.14 + '@types/react-dom': 19.1.9(@types/react@19.1.14) '@radix-ui/rect@1.1.1': {} - '@react-three/drei@10.7.4(@react-three/fiber@9.3.0(@types/react@19.1.8)(immer@10.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.179.1))(@types/react@19.1.8)(@types/three@0.179.0)(immer@10.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.179.1)': + '@react-three/drei@10.7.6(@react-three/fiber@9.3.0(@types/react@19.1.14)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(three@0.179.1))(@types/react@19.1.14)(@types/three@0.179.0)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(three@0.179.1)': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.28.4 '@mediapipe/tasks-vision': 0.10.17 '@monogrid/gainmap-js': 3.1.0(three@0.179.1) - '@react-three/fiber': 9.3.0(@types/react@19.1.8)(immer@10.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.179.1) - '@use-gesture/react': 10.3.1(react@19.1.0) + '@react-three/fiber': 9.3.0(@types/react@19.1.14)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(three@0.179.1) + '@use-gesture/react': 10.3.1(react@19.1.1) camera-controls: 3.1.0(three@0.179.1) cross-env: 7.0.3 detect-gpu: 5.0.70 glsl-noise: 0.0.0 - hls.js: 1.6.10 + hls.js: 1.6.13 maath: 0.10.8(@types/three@0.179.0)(three@0.179.1) meshline: 3.3.1(three@0.179.1) - react: 19.1.0 + react: 19.1.1 stats-gl: 2.4.2(@types/three@0.179.0)(three@0.179.1) stats.js: 0.17.0 - suspend-react: 0.1.3(react@19.1.0) + suspend-react: 0.1.3(react@19.1.1) three: 0.179.1 three-mesh-bvh: 0.8.3(three@0.179.1) three-stdlib: 2.36.0(three@0.179.1) troika-three-text: 0.52.4(three@0.179.1) - tunnel-rat: 0.1.2(@types/react@19.1.8)(immer@10.1.3)(react@19.1.0) - use-sync-external-store: 1.5.0(react@19.1.0) + tunnel-rat: 0.1.2(@types/react@19.1.14)(immer@10.1.3)(react@19.1.1) + use-sync-external-store: 1.5.0(react@19.1.1) utility-types: 3.11.0 - zustand: 5.0.8(@types/react@19.1.8)(immer@10.1.3)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)) + zustand: 5.0.8(@types/react@19.1.14)(immer@10.1.3)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) optionalDependencies: - react-dom: 19.1.0(react@19.1.0) + react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: - '@types/react' - '@types/three' - immer - '@react-three/fiber@9.3.0(@types/react@19.1.8)(immer@10.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.179.1)': + '@react-three/fiber@9.3.0(@types/react@19.1.14)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(three@0.179.1)': dependencies: - '@babel/runtime': 7.28.3 - '@types/react-reconciler': 0.32.0(@types/react@19.1.8) - '@types/webxr': 0.5.22 + '@babel/runtime': 7.28.4 + '@types/react-reconciler': 0.32.1(@types/react@19.1.14) + '@types/webxr': 0.5.23 base64-js: 1.5.1 buffer: 6.0.3 - its-fine: 2.0.0(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-reconciler: 0.31.0(react@19.1.0) - react-use-measure: 2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + its-fine: 2.0.0(@types/react@19.1.14)(react@19.1.1) + react: 19.1.1 + react-reconciler: 0.31.0(react@19.1.1) + react-use-measure: 2.1.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1) scheduler: 0.25.0 - suspend-react: 0.1.3(react@19.1.0) + suspend-react: 0.1.3(react@19.1.1) three: 0.179.1 - use-sync-external-store: 1.5.0(react@19.1.0) - zustand: 5.0.8(@types/react@19.1.8)(immer@10.1.3)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)) + use-sync-external-store: 1.5.0(react@19.1.1) + zustand: 5.0.8(@types/react@19.1.14)(immer@10.1.3)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) optionalDependencies: - react-dom: 19.1.0(react@19.1.0) + react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: - '@types/react' - immer - '@react-three/postprocessing@3.0.4(@react-three/fiber@9.3.0(@types/react@19.1.8)(immer@10.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.179.1))(@types/three@0.179.0)(react@19.1.0)(three@0.179.1)': + '@react-three/postprocessing@3.0.4(@react-three/fiber@9.3.0(@types/react@19.1.14)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(three@0.179.1))(@types/three@0.179.0)(react@19.1.1)(three@0.179.1)': dependencies: - '@react-three/fiber': 9.3.0(@types/react@19.1.8)(immer@10.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.179.1) + '@react-three/fiber': 9.3.0(@types/react@19.1.14)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(three@0.179.1) maath: 0.6.0(@types/three@0.179.0)(three@0.179.1) - n8ao: 1.10.1(postprocessing@6.37.7(three@0.179.1))(three@0.179.1) - postprocessing: 6.37.7(three@0.179.1) - react: 19.1.0 + n8ao: 1.10.1(postprocessing@6.37.8(three@0.179.1))(three@0.179.1) + postprocessing: 6.37.8(three@0.179.1) + react: 19.1.1 three: 0.179.1 transitivePeerDependencies: - '@types/three' - '@reduxjs/toolkit@2.9.0(react-redux@9.2.0(@types/react@19.1.8)(react@19.1.0)(redux@5.0.1))(react@19.1.0)': + '@reduxjs/toolkit@2.9.0(react-redux@9.2.0(@types/react@19.1.14)(react@19.1.1)(redux@5.0.1))(react@19.1.1)': dependencies: '@standard-schema/spec': 1.0.0 '@standard-schema/utils': 0.3.0 @@ -3570,279 +3568,312 @@ snapshots: redux-thunk: 3.1.0(redux@5.0.1) reselect: 5.1.1 optionalDependencies: - react: 19.1.0 - react-redux: 9.2.0(@types/react@19.1.8)(react@19.1.0)(redux@5.0.1) + react: 19.1.1 + react-redux: 9.2.0(@types/react@19.1.14)(react@19.1.1)(redux@5.0.1) + + '@rolldown/pluginutils@1.0.0-beta.27': {} + + '@rollup/rollup-android-arm-eabi@4.52.3': + optional: true - '@rolldown/pluginutils@1.0.0-beta.19': {} + '@rollup/rollup-android-arm64@4.52.3': + optional: true - '@rollup/rollup-android-arm-eabi@4.44.2': + '@rollup/rollup-darwin-arm64@4.52.3': optional: true - '@rollup/rollup-android-arm64@4.44.2': + '@rollup/rollup-darwin-x64@4.52.3': optional: true - '@rollup/rollup-darwin-arm64@4.44.2': + '@rollup/rollup-freebsd-arm64@4.52.3': optional: true - '@rollup/rollup-darwin-x64@4.44.2': + '@rollup/rollup-freebsd-x64@4.52.3': optional: true - '@rollup/rollup-freebsd-arm64@4.44.2': + '@rollup/rollup-linux-arm-gnueabihf@4.52.3': optional: true - '@rollup/rollup-freebsd-x64@4.44.2': + '@rollup/rollup-linux-arm-musleabihf@4.52.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.44.2': + '@rollup/rollup-linux-arm64-gnu@4.52.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.44.2': + '@rollup/rollup-linux-arm64-musl@4.52.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.44.2': + '@rollup/rollup-linux-loong64-gnu@4.52.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.44.2': + '@rollup/rollup-linux-ppc64-gnu@4.52.3': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.44.2': + '@rollup/rollup-linux-riscv64-gnu@4.52.3': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.44.2': + '@rollup/rollup-linux-riscv64-musl@4.52.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.44.2': + '@rollup/rollup-linux-s390x-gnu@4.52.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.44.2': + '@rollup/rollup-linux-x64-gnu@4.52.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.44.2': + '@rollup/rollup-linux-x64-musl@4.52.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.44.2': + '@rollup/rollup-openharmony-arm64@4.52.3': optional: true - '@rollup/rollup-linux-x64-musl@4.44.2': + '@rollup/rollup-win32-arm64-msvc@4.52.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.44.2': + '@rollup/rollup-win32-ia32-msvc@4.52.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.44.2': + '@rollup/rollup-win32-x64-gnu@4.52.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.44.2': + '@rollup/rollup-win32-x64-msvc@4.52.3': optional: true '@standard-schema/spec@1.0.0': {} '@standard-schema/utils@0.3.0': {} - '@tailwindcss/node@4.1.11': + '@tailwindcss/node@4.1.13': dependencies: - '@ampproject/remapping': 2.3.0 - enhanced-resolve: 5.18.2 - jiti: 2.4.2 + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.6.0 lightningcss: 1.30.1 - magic-string: 0.30.17 + magic-string: 0.30.19 source-map-js: 1.2.1 - tailwindcss: 4.1.11 + tailwindcss: 4.1.13 - '@tailwindcss/oxide-android-arm64@4.1.11': + '@tailwindcss/oxide-android-arm64@4.1.13': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.11': + '@tailwindcss/oxide-darwin-arm64@4.1.13': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.11': + '@tailwindcss/oxide-darwin-x64@4.1.13': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.11': + '@tailwindcss/oxide-freebsd-x64@4.1.13': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.13': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + '@tailwindcss/oxide-linux-arm64-musl@4.1.13': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + '@tailwindcss/oxide-linux-x64-gnu@4.1.13': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.11': + '@tailwindcss/oxide-linux-x64-musl@4.1.13': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.11': + '@tailwindcss/oxide-wasm32-wasi@4.1.13': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.13': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + '@tailwindcss/oxide-win32-x64-msvc@4.1.13': optional: true - '@tailwindcss/oxide@4.1.11': + '@tailwindcss/oxide@4.1.13': dependencies: - detect-libc: 2.0.4 - tar: 7.4.3 + detect-libc: 2.1.1 + tar: 7.5.1 optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.11 - '@tailwindcss/oxide-darwin-arm64': 4.1.11 - '@tailwindcss/oxide-darwin-x64': 4.1.11 - '@tailwindcss/oxide-freebsd-x64': 4.1.11 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.11 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.11 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.11 - '@tailwindcss/oxide-linux-x64-musl': 4.1.11 - '@tailwindcss/oxide-wasm32-wasi': 4.1.11 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 - - '@tailwindcss/vite@4.1.11(vite@7.0.4(@types/node@24.0.12)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3))': - dependencies: - '@tailwindcss/node': 4.1.11 - '@tailwindcss/oxide': 4.1.11 - tailwindcss: 4.1.11 - vite: 7.0.4(@types/node@24.0.12)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3) - - '@tanstack/history@1.121.34': {} - - '@tanstack/query-core@5.85.3': {} - - '@tanstack/react-query@5.85.3(react@19.1.0)': - dependencies: - '@tanstack/query-core': 5.85.3 - react: 19.1.0 - - '@tanstack/react-router-devtools@1.125.6(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.125.4)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.7)(tiny-invariant@1.3.3)': - dependencies: - '@tanstack/react-router': 1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.125.4(@tanstack/router-core@1.125.4)(csstype@3.1.3)(solid-js@1.9.7)(tiny-invariant@1.3.3) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@tailwindcss/oxide-android-arm64': 4.1.13 + '@tailwindcss/oxide-darwin-arm64': 4.1.13 + '@tailwindcss/oxide-darwin-x64': 4.1.13 + '@tailwindcss/oxide-freebsd-x64': 4.1.13 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.13 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.13 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.13 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.13 + '@tailwindcss/oxide-linux-x64-musl': 4.1.13 + '@tailwindcss/oxide-wasm32-wasi': 4.1.13 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.13 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.13 + + '@tailwindcss/vite@4.1.13(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6))': + dependencies: + '@tailwindcss/node': 4.1.13 + '@tailwindcss/oxide': 4.1.13 + tailwindcss: 4.1.13 + vite: 7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6) + + '@tanstack/history@1.132.0': {} + + '@tanstack/query-core@5.90.2': {} + + '@tanstack/react-query@5.90.2(react@19.1.1)': + dependencies: + '@tanstack/query-core': 5.90.2 + react: 19.1.1 + + '@tanstack/react-router-devtools@1.132.17(@tanstack/react-router@1.132.17(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.132.17)(@types/node@24.5.2)(csstype@3.1.3)(jiti@2.6.0)(lightningcss@1.30.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)': + dependencies: + '@tanstack/react-router': 1.132.17(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@tanstack/router-devtools-core': 1.132.17(@tanstack/router-core@1.132.17)(@types/node@24.5.2)(csstype@3.1.3)(jiti@2.6.0)(lightningcss@1.30.1)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + vite: 7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6) transitivePeerDependencies: - '@tanstack/router-core' + - '@types/node' - csstype + - jiti + - less + - lightningcss + - sass + - sass-embedded - solid-js + - stylus + - sugarss + - terser - tiny-invariant + - tsx + - yaml - '@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-router@1.132.17(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@tanstack/history': 1.121.34 - '@tanstack/react-store': 0.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-core': 1.125.4 - isbot: 5.1.28 - jsesc: 3.1.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@tanstack/history': 1.132.0 + '@tanstack/react-store': 0.7.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@tanstack/router-core': 1.132.17 + isbot: 5.1.31 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-store@0.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-store@0.7.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@tanstack/store': 0.7.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - use-sync-external-store: 1.5.0(react@19.1.0) + '@tanstack/store': 0.7.7 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + use-sync-external-store: 1.5.0(react@19.1.1) - '@tanstack/router-core@1.125.4': + '@tanstack/router-core@1.132.17': dependencies: - '@tanstack/history': 1.121.34 - '@tanstack/store': 0.7.2 - cookie-es: 1.2.2 - jsesc: 3.1.0 + '@tanstack/history': 1.132.0 + '@tanstack/store': 0.7.7 + cookie-es: 2.0.0 + seroval: 1.3.2 + seroval-plugins: 1.3.3(seroval@1.3.2) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.125.4(@tanstack/router-core@1.125.4)(csstype@3.1.3)(solid-js@1.9.7)(tiny-invariant@1.3.3)': + '@tanstack/router-devtools-core@1.132.17(@tanstack/router-core@1.132.17)(@types/node@24.5.2)(csstype@3.1.3)(jiti@2.6.0)(lightningcss@1.30.1)(solid-js@1.9.9)(tiny-invariant@1.3.3)(tsx@4.20.6)': dependencies: - '@tanstack/router-core': 1.125.4 + '@tanstack/router-core': 1.132.17 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) - solid-js: 1.9.7 + solid-js: 1.9.9 tiny-invariant: 1.3.3 + vite: 7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6) optionalDependencies: csstype: 3.1.3 - - '@tanstack/router-generator@1.125.4': - dependencies: - '@tanstack/router-core': 1.125.4 - '@tanstack/router-utils': 1.121.21 - '@tanstack/virtual-file-routes': 1.121.21 + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + + '@tanstack/router-generator@1.132.17': + dependencies: + '@tanstack/router-core': 1.132.17 + '@tanstack/router-utils': 1.132.0 + '@tanstack/virtual-file-routes': 1.132.0 prettier: 3.6.2 recast: 0.23.11 - source-map: 0.7.4 - tsx: 4.20.3 + source-map: 0.7.6 + tsx: 4.20.6 zod: 3.25.76 transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.125.6(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.0.12)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3))': + '@tanstack/router-plugin@1.132.17(@tanstack/react-router@1.132.17(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6))': dependencies: - '@babel/core': 7.28.0 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 - '@tanstack/router-core': 1.125.4 - '@tanstack/router-generator': 1.125.4 - '@tanstack/router-utils': 1.121.21 - '@tanstack/virtual-file-routes': 1.121.21 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@tanstack/router-core': 1.132.17 + '@tanstack/router-generator': 1.132.17 + '@tanstack/router-utils': 1.132.0 + '@tanstack/virtual-file-routes': 1.132.0 babel-dead-code-elimination: 1.0.10 chokidar: 3.6.0 - unplugin: 2.3.5 + unplugin: 2.3.10 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.4(@types/node@24.0.12)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3) + '@tanstack/react-router': 1.132.17(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + vite: 7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6) transitivePeerDependencies: - supports-color - '@tanstack/router-utils@1.121.21': + '@tanstack/router-utils@1.132.0': dependencies: - '@babel/core': 7.28.0 - '@babel/generator': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/preset-typescript': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.4 + '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) ansis: 4.1.0 diff: 8.0.2 + fast-glob: 3.3.3 + pathe: 2.0.3 transitivePeerDependencies: - supports-color - '@tanstack/store@0.7.2': {} + '@tanstack/store@0.7.7': {} - '@tanstack/virtual-file-routes@1.121.21': {} + '@tanstack/virtual-file-routes@1.132.0': {} '@tweenjs/tween.js@23.1.3': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.7 + '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.4 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 - '@types/babel__traverse@7.20.7': + '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.4 - '@types/d3-array@3.2.1': {} + '@types/d3-array@3.2.2': {} '@types/d3-color@3.1.3': {} @@ -3872,25 +3903,25 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@24.0.12': + '@types/node@24.5.2': dependencies: - undici-types: 7.8.0 + undici-types: 7.12.0 '@types/offscreencanvas@2019.7.3': {} - '@types/react-dom@19.1.6(@types/react@19.1.8)': + '@types/react-dom@19.1.9(@types/react@19.1.14)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@types/react-reconciler@0.28.9(@types/react@19.1.8)': + '@types/react-reconciler@0.28.9(@types/react@19.1.14)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@types/react-reconciler@0.32.0(@types/react@19.1.8)': + '@types/react-reconciler@0.32.1(@types/react@19.1.14)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - '@types/react@19.1.8': + '@types/react@19.1.14': dependencies: csstype: 3.1.3 @@ -3901,24 +3932,24 @@ snapshots: '@dimforge/rapier3d-compat': 0.12.0 '@tweenjs/tween.js': 23.1.3 '@types/stats.js': 0.17.4 - '@types/webxr': 0.5.22 - '@webgpu/types': 0.1.64 + '@types/webxr': 0.5.23 + '@webgpu/types': 0.1.65 fflate: 0.8.2 meshoptimizer: 0.22.0 '@types/use-sync-external-store@0.0.6': {} - '@types/webxr@0.5.22': {} + '@types/webxr@0.5.23': {} - '@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3))(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.36.0 - '@typescript-eslint/type-utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.36.0 - eslint: 9.30.1(jiti@2.4.2) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.44.1 + eslint: 9.36.0(jiti@2.6.0) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -3927,56 +3958,57 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.36.0 - '@typescript-eslint/types': 8.36.0 - '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.36.0 - debug: 4.4.1 - eslint: 9.30.1(jiti@2.4.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.44.1 + debug: 4.4.3 + eslint: 9.36.0(jiti@2.6.0) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.36.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.44.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.36.0(typescript@5.8.3) - '@typescript-eslint/types': 8.36.0 - debug: 4.4.1 + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.8.3) + '@typescript-eslint/types': 8.44.1 + debug: 4.4.3 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.36.0': + '@typescript-eslint/scope-manager@8.44.1': dependencies: - '@typescript-eslint/types': 8.36.0 - '@typescript-eslint/visitor-keys': 8.36.0 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 - '@typescript-eslint/tsconfig-utils@8.36.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.1 - eslint: 9.30.1(jiti@2.4.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3) + debug: 4.4.3 + eslint: 9.36.0(jiti@2.6.0) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.36.0': {} + '@typescript-eslint/types@8.44.1': {} - '@typescript-eslint/typescript-estree@8.36.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.44.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.36.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.36.0(typescript@5.8.3) - '@typescript-eslint/types': 8.36.0 - '@typescript-eslint/visitor-keys': 8.36.0 - debug: 4.4.1 + '@typescript-eslint/project-service': 8.44.1(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.8.3) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -3986,42 +4018,42 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.36.0 - '@typescript-eslint/types': 8.36.0 - '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) - eslint: 9.30.1(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.8.3) + eslint: 9.36.0(jiti@2.6.0) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.36.0': + '@typescript-eslint/visitor-keys@8.44.1': dependencies: - '@typescript-eslint/types': 8.36.0 + '@typescript-eslint/types': 8.44.1 eslint-visitor-keys: 4.2.1 '@use-gesture/core@10.3.1': {} - '@use-gesture/react@10.3.1(react@19.1.0)': + '@use-gesture/react@10.3.1(react@19.1.1)': dependencies: '@use-gesture/core': 10.3.1 - react: 19.1.0 + react: 19.1.1 - '@vitejs/plugin-react@4.6.0(vite@7.0.4(@types/node@24.0.12)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3))': + '@vitejs/plugin-react@4.7.0(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6))': dependencies: - '@babel/core': 7.28.0 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.0) - '@rolldown/pluginutils': 1.0.0-beta.19 + '@babel/core': 7.28.4 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) + '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.0.4(@types/node@24.0.12)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3) + vite: 7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6) transitivePeerDependencies: - supports-color - '@webgpu/types@0.1.64': {} + '@webgpu/types@0.1.65': {} acorn-jsx@5.3.2(acorn@8.15.0): dependencies: @@ -4059,10 +4091,10 @@ snapshots: babel-dead-code-elimination@1.0.10: dependencies: - '@babel/core': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -4070,6 +4102,8 @@ snapshots: base64-js@1.5.1: {} + baseline-browser-mapping@2.8.8: {} + bidi-js@1.0.3: dependencies: require-from-string: 2.0.2 @@ -4089,12 +4123,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.25.1: + browserslist@4.26.2: dependencies: - caniuse-lite: 1.0.30001727 - electron-to-chromium: 1.5.181 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.1) + baseline-browser-mapping: 2.8.8 + caniuse-lite: 1.0.30001745 + electron-to-chromium: 1.5.227 + node-releases: 2.0.21 + update-browserslist-db: 1.1.3(browserslist@4.26.2) buffer@6.0.3: dependencies: @@ -4107,7 +4142,7 @@ snapshots: dependencies: three: 0.179.1 - caniuse-lite@1.0.30001727: {} + caniuse-lite@1.0.30001745: {} chalk@4.1.2: dependencies: @@ -4144,7 +4179,7 @@ snapshots: convert-source-map@2.0.0: {} - cookie-es@1.2.2: {} + cookie-es@2.0.0: {} cross-env@7.0.3: dependencies: @@ -4196,7 +4231,7 @@ snapshots: d3-timer@3.0.1: {} - debug@4.4.1: + debug@4.4.3: dependencies: ms: 2.1.3 @@ -4208,7 +4243,7 @@ snapshots: dependencies: webgl-constants: 1.1.1 - detect-libc@2.0.4: {} + detect-libc@2.1.1: {} detect-node-es@1.1.0: {} @@ -4216,55 +4251,55 @@ snapshots: draco3d@1.5.7: {} - electron-to-chromium@1.5.181: {} + electron-to-chromium@1.5.227: {} - enhanced-resolve@5.18.2: + enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.2 + tapable: 2.2.3 es-toolkit@1.39.10: {} - esbuild@0.25.6: + esbuild@0.25.10: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.6 - '@esbuild/android-arm': 0.25.6 - '@esbuild/android-arm64': 0.25.6 - '@esbuild/android-x64': 0.25.6 - '@esbuild/darwin-arm64': 0.25.6 - '@esbuild/darwin-x64': 0.25.6 - '@esbuild/freebsd-arm64': 0.25.6 - '@esbuild/freebsd-x64': 0.25.6 - '@esbuild/linux-arm': 0.25.6 - '@esbuild/linux-arm64': 0.25.6 - '@esbuild/linux-ia32': 0.25.6 - '@esbuild/linux-loong64': 0.25.6 - '@esbuild/linux-mips64el': 0.25.6 - '@esbuild/linux-ppc64': 0.25.6 - '@esbuild/linux-riscv64': 0.25.6 - '@esbuild/linux-s390x': 0.25.6 - '@esbuild/linux-x64': 0.25.6 - '@esbuild/netbsd-arm64': 0.25.6 - '@esbuild/netbsd-x64': 0.25.6 - '@esbuild/openbsd-arm64': 0.25.6 - '@esbuild/openbsd-x64': 0.25.6 - '@esbuild/openharmony-arm64': 0.25.6 - '@esbuild/sunos-x64': 0.25.6 - '@esbuild/win32-arm64': 0.25.6 - '@esbuild/win32-ia32': 0.25.6 - '@esbuild/win32-x64': 0.25.6 + '@esbuild/aix-ppc64': 0.25.10 + '@esbuild/android-arm': 0.25.10 + '@esbuild/android-arm64': 0.25.10 + '@esbuild/android-x64': 0.25.10 + '@esbuild/darwin-arm64': 0.25.10 + '@esbuild/darwin-x64': 0.25.10 + '@esbuild/freebsd-arm64': 0.25.10 + '@esbuild/freebsd-x64': 0.25.10 + '@esbuild/linux-arm': 0.25.10 + '@esbuild/linux-arm64': 0.25.10 + '@esbuild/linux-ia32': 0.25.10 + '@esbuild/linux-loong64': 0.25.10 + '@esbuild/linux-mips64el': 0.25.10 + '@esbuild/linux-ppc64': 0.25.10 + '@esbuild/linux-riscv64': 0.25.10 + '@esbuild/linux-s390x': 0.25.10 + '@esbuild/linux-x64': 0.25.10 + '@esbuild/netbsd-arm64': 0.25.10 + '@esbuild/netbsd-x64': 0.25.10 + '@esbuild/openbsd-arm64': 0.25.10 + '@esbuild/openbsd-x64': 0.25.10 + '@esbuild/openharmony-arm64': 0.25.10 + '@esbuild/sunos-x64': 0.25.10 + '@esbuild/win32-arm64': 0.25.10 + '@esbuild/win32-ia32': 0.25.10 + '@esbuild/win32-x64': 0.25.10 escalade@3.2.0: {} escape-string-regexp@4.0.0: {} - eslint-plugin-react-hooks@5.2.0(eslint@9.30.1(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.36.0(jiti@2.6.0)): dependencies: - eslint: 9.30.1(jiti@2.4.2) + eslint: 9.36.0(jiti@2.6.0) - eslint-plugin-react-refresh@0.4.20(eslint@9.30.1(jiti@2.4.2)): + eslint-plugin-react-refresh@0.4.22(eslint@9.36.0(jiti@2.6.0)): dependencies: - eslint: 9.30.1(jiti@2.4.2) + eslint: 9.36.0(jiti@2.6.0) eslint-scope@8.4.0: dependencies: @@ -4275,17 +4310,17 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.30.1(jiti@2.4.2): + eslint@9.36.0(jiti@2.6.0): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.0)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.14.0 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.30.1 - '@eslint/plugin-kit': 0.3.3 - '@humanfs/node': 0.16.6 + '@eslint/js': 9.36.0 + '@eslint/plugin-kit': 0.3.5 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 @@ -4293,7 +4328,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1 + debug: 4.4.3 escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -4313,7 +4348,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.4.2 + jiti: 2.6.0 transitivePeerDependencies: - supports-color @@ -4357,9 +4392,9 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.6(picomatch@4.0.2): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 fflate@0.6.10: {} @@ -4385,14 +4420,14 @@ snapshots: flatted@3.3.3: {} - framer-motion@12.23.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + framer-motion@12.23.22(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - motion-dom: 12.23.12 + motion-dom: 12.23.21 motion-utils: 12.23.6 tslib: 2.8.1 optionalDependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) fsevents@2.3.3: optional: true @@ -4415,7 +4450,7 @@ snapshots: globals@14.0.0: {} - globals@16.3.0: {} + globals@16.4.0: {} glsl-noise@0.0.0: {} @@ -4429,7 +4464,7 @@ snapshots: has-flag@4.0.0: {} - hls.js@1.6.10: {} + hls.js@1.6.13: {} ieee754@1.2.1: {} @@ -4448,10 +4483,10 @@ snapshots: imurmurhash@0.1.4: {} - input-otp@1.4.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + input-otp@1.4.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) internmap@2.0.3: {} @@ -4469,18 +4504,18 @@ snapshots: is-promise@2.2.2: {} - isbot@5.1.28: {} + isbot@5.1.31: {} isexe@2.0.0: {} - its-fine@2.0.0(@types/react@19.1.8)(react@19.1.0): + its-fine@2.0.0(@types/react@19.1.14)(react@19.1.1): dependencies: - '@types/react-reconciler': 0.28.9(@types/react@19.1.8) - react: 19.1.0 + '@types/react-reconciler': 0.28.9(@types/react@19.1.14) + react: 19.1.1 transitivePeerDependencies: - '@types/react' - jiti@2.4.2: {} + jiti@2.6.0: {} js-tokens@4.0.0: {} @@ -4543,7 +4578,7 @@ snapshots: lightningcss@1.30.1: dependencies: - detect-libc: 2.0.4 + detect-libc: 2.1.1 optionalDependencies: lightningcss-darwin-arm64: 1.30.1 lightningcss-darwin-x64: 1.30.1 @@ -4566,9 +4601,9 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-react@0.525.0(react@19.1.0): + lucide-react@0.525.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 maath@0.10.8(@types/three@0.179.0)(three@0.179.1): dependencies: @@ -4580,9 +4615,9 @@ snapshots: '@types/three': 0.179.0 three: 0.179.1 - magic-string@0.30.17: + magic-string@0.30.19: dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 merge2@1.4.1: {} @@ -4607,13 +4642,11 @@ snapshots: minipass@7.1.2: {} - minizlib@3.0.2: + minizlib@3.1.0: dependencies: minipass: 7.1.2 - mkdirp@3.0.1: {} - - motion-dom@12.23.12: + motion-dom@12.23.21: dependencies: motion-utils: 12.23.6 @@ -4621,21 +4654,21 @@ snapshots: ms@2.1.3: {} - n8ao@1.10.1(postprocessing@6.37.7(three@0.179.1))(three@0.179.1): + n8ao@1.10.1(postprocessing@6.37.8(three@0.179.1))(three@0.179.1): dependencies: - postprocessing: 6.37.7(three@0.179.1) + postprocessing: 6.37.8(three@0.179.1) three: 0.179.1 nanoid@3.3.11: {} natural-compare@1.4.0: {} - next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next-themes@0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) - node-releases@2.0.19: {} + node-releases@2.0.21: {} normalize-path@3.0.0: {} @@ -4664,11 +4697,13 @@ snapshots: path-key@3.1.1: {} + pathe@2.0.3: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} - picomatch@4.0.2: {} + picomatch@4.0.3: {} postcss@8.5.6: dependencies: @@ -4676,7 +4711,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postprocessing@6.37.7(three@0.179.1): + postprocessing@6.37.8(three@0.179.1): dependencies: three: 0.179.1 @@ -4695,71 +4730,71 @@ snapshots: queue-microtask@1.2.3: {} - react-dom@19.1.0(react@19.1.0): + react-dom@19.1.1(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 scheduler: 0.26.0 - react-hook-form@7.62.0(react@19.1.0): + react-hook-form@7.63.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 - react-icons@5.5.0(react@19.1.0): + react-icons@5.5.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 react-is@19.1.1: {} - react-reconciler@0.31.0(react@19.1.0): + react-reconciler@0.31.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 scheduler: 0.25.0 - react-redux@9.2.0(@types/react@19.1.8)(react@19.1.0)(redux@5.0.1): + react-redux@9.2.0(@types/react@19.1.14)(react@19.1.1)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 - react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) + react: 19.1.1 + use-sync-external-store: 1.5.0(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 redux: 5.0.1 react-refresh@0.17.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.1.8)(react@19.1.0): + react-remove-scroll-bar@2.3.8(@types/react@19.1.14)(react@19.1.1): dependencies: - react: 19.1.0 - react-style-singleton: 2.2.3(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-style-singleton: 2.2.3(@types/react@19.1.14)(react@19.1.1) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - react-remove-scroll@2.7.1(@types/react@19.1.8)(react@19.1.0): + react-remove-scroll@2.7.1(@types/react@19.1.14)(react@19.1.1): dependencies: - react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.8)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.14)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@19.1.14)(react@19.1.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.8)(react@19.1.0) - use-sidecar: 1.1.3(@types/react@19.1.8)(react@19.1.0) + use-callback-ref: 1.3.3(@types/react@19.1.14)(react@19.1.1) + use-sidecar: 1.1.3(@types/react@19.1.14)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - react-style-singleton@2.2.3(@types/react@19.1.8)(react@19.1.0): + react-style-singleton@2.2.3(@types/react@19.1.14)(react@19.1.1): dependencies: get-nonce: 1.0.1 - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - react-use-measure@2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-use-measure@2.1.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - react-dom: 19.1.0(react@19.1.0) + react-dom: 19.1.1(react@19.1.1) - react@19.1.0: {} + react@19.1.1: {} readdirp@3.6.0: dependencies: @@ -4773,21 +4808,21 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 - recharts@3.1.2(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react-is@19.1.1)(react@19.1.0)(redux@5.0.1): + recharts@3.2.1(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react-is@19.1.1)(react@19.1.1)(redux@5.0.1): dependencies: - '@reduxjs/toolkit': 2.9.0(react-redux@9.2.0(@types/react@19.1.8)(react@19.1.0)(redux@5.0.1))(react@19.1.0) + '@reduxjs/toolkit': 2.9.0(react-redux@9.2.0(@types/react@19.1.14)(react@19.1.1)(redux@5.0.1))(react@19.1.1) clsx: 2.1.1 decimal.js-light: 2.5.1 es-toolkit: 1.39.10 eventemitter3: 5.0.1 immer: 10.1.3 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) react-is: 19.1.1 - react-redux: 9.2.0(@types/react@19.1.8)(react@19.1.0)(redux@5.0.1) + react-redux: 9.2.0(@types/react@19.1.14)(react@19.1.1)(redux@5.0.1) reselect: 5.1.1 tiny-invariant: 1.3.3 - use-sync-external-store: 1.5.0(react@19.1.0) + use-sync-external-store: 1.5.0(react@19.1.1) victory-vendor: 37.3.6 transitivePeerDependencies: - '@types/react' @@ -4809,30 +4844,32 @@ snapshots: reusify@1.1.0: {} - rollup@4.44.2: + rollup@4.52.3: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.44.2 - '@rollup/rollup-android-arm64': 4.44.2 - '@rollup/rollup-darwin-arm64': 4.44.2 - '@rollup/rollup-darwin-x64': 4.44.2 - '@rollup/rollup-freebsd-arm64': 4.44.2 - '@rollup/rollup-freebsd-x64': 4.44.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.44.2 - '@rollup/rollup-linux-arm-musleabihf': 4.44.2 - '@rollup/rollup-linux-arm64-gnu': 4.44.2 - '@rollup/rollup-linux-arm64-musl': 4.44.2 - '@rollup/rollup-linux-loongarch64-gnu': 4.44.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.44.2 - '@rollup/rollup-linux-riscv64-gnu': 4.44.2 - '@rollup/rollup-linux-riscv64-musl': 4.44.2 - '@rollup/rollup-linux-s390x-gnu': 4.44.2 - '@rollup/rollup-linux-x64-gnu': 4.44.2 - '@rollup/rollup-linux-x64-musl': 4.44.2 - '@rollup/rollup-win32-arm64-msvc': 4.44.2 - '@rollup/rollup-win32-ia32-msvc': 4.44.2 - '@rollup/rollup-win32-x64-msvc': 4.44.2 + '@rollup/rollup-android-arm-eabi': 4.52.3 + '@rollup/rollup-android-arm64': 4.52.3 + '@rollup/rollup-darwin-arm64': 4.52.3 + '@rollup/rollup-darwin-x64': 4.52.3 + '@rollup/rollup-freebsd-arm64': 4.52.3 + '@rollup/rollup-freebsd-x64': 4.52.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.3 + '@rollup/rollup-linux-arm-musleabihf': 4.52.3 + '@rollup/rollup-linux-arm64-gnu': 4.52.3 + '@rollup/rollup-linux-arm64-musl': 4.52.3 + '@rollup/rollup-linux-loong64-gnu': 4.52.3 + '@rollup/rollup-linux-ppc64-gnu': 4.52.3 + '@rollup/rollup-linux-riscv64-gnu': 4.52.3 + '@rollup/rollup-linux-riscv64-musl': 4.52.3 + '@rollup/rollup-linux-s390x-gnu': 4.52.3 + '@rollup/rollup-linux-x64-gnu': 4.52.3 + '@rollup/rollup-linux-x64-musl': 4.52.3 + '@rollup/rollup-openharmony-arm64': 4.52.3 + '@rollup/rollup-win32-arm64-msvc': 4.52.3 + '@rollup/rollup-win32-ia32-msvc': 4.52.3 + '@rollup/rollup-win32-x64-gnu': 4.52.3 + '@rollup/rollup-win32-x64-msvc': 4.52.3 fsevents: 2.3.3 run-parallel@1.2.0: @@ -4847,7 +4884,7 @@ snapshots: semver@7.7.2: {} - seroval-plugins@1.3.2(seroval@1.3.2): + seroval-plugins@1.3.3(seroval@1.3.2): dependencies: seroval: 1.3.2 @@ -4859,22 +4896,22 @@ snapshots: shebang-regex@3.0.0: {} - solid-js@1.9.7: + solid-js@1.9.9: dependencies: csstype: 3.1.3 seroval: 1.3.2 - seroval-plugins: 1.3.2(seroval@1.3.2) + seroval-plugins: 1.3.3(seroval@1.3.2) - sonner@2.0.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + sonner@2.0.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) source-map-js@1.2.1: {} source-map@0.6.1: {} - source-map@0.7.4: {} + source-map@0.7.6: {} stats-gl@2.4.2(@types/three@0.179.0)(three@0.179.1): dependencies: @@ -4889,23 +4926,22 @@ snapshots: dependencies: has-flag: 4.0.0 - suspend-react@0.1.3(react@19.1.0): + suspend-react@0.1.3(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 tailwind-merge@3.3.1: {} - tailwindcss@4.1.11: {} + tailwindcss@4.1.13: {} - tapable@2.2.2: {} + tapable@2.2.3: {} - tar@7.4.3: + tar@7.5.1: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 minipass: 7.1.2 - minizlib: 3.0.2 - mkdirp: 3.0.1 + minizlib: 3.1.0 yallist: 5.0.0 three-mesh-bvh@0.8.3(three@0.179.1): @@ -4916,7 +4952,7 @@ snapshots: dependencies: '@types/draco3d': 1.4.10 '@types/offscreencanvas': 2019.7.3 - '@types/webxr': 0.5.22 + '@types/webxr': 0.5.23 draco3d: 1.5.7 fflate: 0.6.10 potpack: 1.0.2 @@ -4928,10 +4964,10 @@ snapshots: tiny-warning@1.0.3: {} - tinyglobby@0.2.14: + tinyglobby@0.2.15: dependencies: - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 to-regex-range@5.0.1: dependencies: @@ -4957,77 +4993,79 @@ snapshots: tslib@2.8.1: {} - tsx@4.20.3: + tsx@4.20.6: dependencies: - esbuild: 0.25.6 + esbuild: 0.25.10 get-tsconfig: 4.10.1 optionalDependencies: fsevents: 2.3.3 - tunnel-rat@0.1.2(@types/react@19.1.8)(immer@10.1.3)(react@19.1.0): + tunnel-rat@0.1.2(@types/react@19.1.14)(immer@10.1.3)(react@19.1.1): dependencies: - zustand: 4.5.7(@types/react@19.1.8)(immer@10.1.3)(react@19.1.0) + zustand: 4.5.7(@types/react@19.1.14)(immer@10.1.3)(react@19.1.1) transitivePeerDependencies: - '@types/react' - immer - react - turbo-darwin-64@2.5.4: + turbo-darwin-64@2.5.8: optional: true - turbo-darwin-arm64@2.5.4: + turbo-darwin-arm64@2.5.8: optional: true - turbo-linux-64@2.5.4: + turbo-linux-64@2.5.8: optional: true - turbo-linux-arm64@2.5.4: + turbo-linux-arm64@2.5.8: optional: true - turbo-windows-64@2.5.4: + turbo-windows-64@2.5.8: optional: true - turbo-windows-arm64@2.5.4: + turbo-windows-arm64@2.5.8: optional: true - turbo@2.5.4: + turbo@2.5.8: optionalDependencies: - turbo-darwin-64: 2.5.4 - turbo-darwin-arm64: 2.5.4 - turbo-linux-64: 2.5.4 - turbo-linux-arm64: 2.5.4 - turbo-windows-64: 2.5.4 - turbo-windows-arm64: 2.5.4 + turbo-darwin-64: 2.5.8 + turbo-darwin-arm64: 2.5.8 + turbo-linux-64: 2.5.8 + turbo-linux-arm64: 2.5.8 + turbo-windows-64: 2.5.8 + turbo-windows-arm64: 2.5.8 - tw-animate-css@1.3.5: {} + tw-animate-css@1.4.0: {} type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.30.1(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3))(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3) + '@typescript-eslint/parser': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.44.1(eslint@9.36.0(jiti@2.6.0))(typescript@5.8.3) + eslint: 9.36.0(jiti@2.6.0) typescript: 5.8.3 transitivePeerDependencies: - supports-color typescript@5.8.3: {} - undici-types@7.8.0: {} + undici-types@7.12.0: {} - unplugin@2.3.5: + unplugin@2.3.10: dependencies: + '@jridgewell/remapping': 2.3.5 acorn: 8.15.0 - picomatch: 4.0.2 + picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.1.3(browserslist@4.25.1): + update-browserslist-db@1.1.3(browserslist@4.26.2): dependencies: - browserslist: 4.25.1 + browserslist: 4.26.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -5035,30 +5073,30 @@ snapshots: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.3(@types/react@19.1.8)(react@19.1.0): + use-callback-ref@1.3.3(@types/react@19.1.14)(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - use-sidecar@1.1.3(@types/react@19.1.8)(react@19.1.0): + use-sidecar@1.1.3(@types/react@19.1.14)(react@19.1.1): dependencies: detect-node-es: 1.1.0 - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 - use-sync-external-store@1.5.0(react@19.1.0): + use-sync-external-store@1.5.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 utility-types@3.11.0: {} victory-vendor@37.3.6: dependencies: - '@types/d3-array': 3.2.1 + '@types/d3-array': 3.2.2 '@types/d3-ease': 3.0.2 '@types/d3-interpolate': 3.0.4 '@types/d3-scale': 4.0.9 @@ -5073,20 +5111,20 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite@7.0.4(@types/node@24.0.12)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3): + vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(lightningcss@1.30.1)(tsx@4.20.6): dependencies: - esbuild: 0.25.6 - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 + esbuild: 0.25.10 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.44.2 - tinyglobby: 0.2.14 + rollup: 4.52.3 + tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.0.12 + '@types/node': 24.5.2 fsevents: 2.3.3 - jiti: 2.4.2 + jiti: 2.6.0 lightningcss: 1.30.1 - tsx: 4.20.3 + tsx: 4.20.6 webgl-constants@1.1.1: {} @@ -5108,19 +5146,19 @@ snapshots: zod@3.25.76: {} - zod@4.0.14: {} + zod@4.1.11: {} - zustand@4.5.7(@types/react@19.1.8)(immer@10.1.3)(react@19.1.0): + zustand@4.5.7(@types/react@19.1.14)(immer@10.1.3)(react@19.1.1): dependencies: - use-sync-external-store: 1.5.0(react@19.1.0) + use-sync-external-store: 1.5.0(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 immer: 10.1.3 - react: 19.1.0 + react: 19.1.1 - zustand@5.0.8(@types/react@19.1.8)(immer@10.1.3)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)): + zustand@5.0.8(@types/react@19.1.14)(immer@10.1.3)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)): optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.14 immer: 10.1.3 - react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) + react: 19.1.1 + use-sync-external-store: 1.5.0(react@19.1.1) From 09cc27f8dc7f23c0b60e76bd3220041dc18a419c Mon Sep 17 00:00:00 2001 From: Badsha Laskar <43995221+Badsha1996@users.noreply.github.com> Date: Mon, 29 Sep 2025 22:19:22 +0530 Subject: [PATCH 2/6] DNG 58 feature/final fixes for phase 1 (#39) * exam paper * typescript fix --------- Co-authored-by: Badsha1996 --- .../frontend/src/components/pages/ExamPaperPage.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/frontend/src/components/pages/ExamPaperPage.tsx b/apps/frontend/src/components/pages/ExamPaperPage.tsx index 5e6d37f..df666f6 100644 --- a/apps/frontend/src/components/pages/ExamPaperPage.tsx +++ b/apps/frontend/src/components/pages/ExamPaperPage.tsx @@ -63,7 +63,18 @@ const ExamPaperPage = () => { isError: isExamPaperError, error: examPaperError, isSuccess, - } = useApi( + } = useApi< + { + data?: { + exam_paper?: { + exam?: any; + sections?: any[]; + }; + }; + }, + | { subject: string; year: number } + | { subject: string; board: string; paper: string; code: string; year: number } + >( { endpoint, method: "POST", From 9f6bc149b4061481879f1c751d704c2091e1bde8 Mon Sep 17 00:00:00 2001 From: Badsha1996 Date: Tue, 14 Oct 2025 13:34:58 +0530 Subject: [PATCH 3/6] readme and model ai update --- docker-compose.yml | 4 +- readme.md | 247 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 236 insertions(+), 15 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 4a912ea..07c3e6d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,7 +20,7 @@ services: - PYTHONPATH=/app/apps/backend/src - LLM_PROVIDER=ollama - OLLAMA_URL=http://ollama:11434 - - OLLAMA_MODEL=llama3:8b + - OLLAMA_MODEL=mistral:7b-instruct # UNCOMMNET BELOW LINE FOR PROD # - COHERE_API_KEY= # - VECTOR_MODEL=False @@ -69,7 +69,7 @@ services: restart: unless-stopped environment: - OLLAMA_ORIGINS=http://localhost:5173,http://localhost:8000 - - OLLAMA_MODEL=llama3:8b + - OLLAMA_MODEL=mistral:7b-instruct - OLLAMA_NUM_PREDICT=1024 - OLLAMA_CTX=4096 deploy: diff --git a/readme.md b/readme.md index 660783f..39f5eef 100644 --- a/readme.md +++ b/readme.md @@ -1,27 +1,248 @@ # DOCLIN NOTE GENERATOR -Doclin Note Generator is an AI powered note making, question and answer generator and study guider for both teachers and student for simplifying the study so students and teachers can focus on study rather than wasting time +Doclin Note Generator is an AI-powered platform for generating notes, question papers, and study guides. It is designed for students, teachers, and professionals to simplify the process of creating educational content, allowing users to focus on learning and teaching rather than manual preparation. -## Frontend Tech Stack +--- -- React Js - Free and open source JS library for building web and user interfaces +## Table of Contents -- Framer Motion- A modern library used to create animations in JS and React +- [Features](#features) +- [Tech Stack](#tech-stack) + - [Frontend](#frontend-tech-stack) + - [Backend](#backend-tech-stack) +- [Project Structure](#project-structure) +- [Getting Started](#getting-started) + - [Prerequisites](#prerequisites) + - [Environment Variables](#environment-variables) + - [Installation](#installation) + - [Running the Project](#running-the-project) + - [Docker Usage](#docker-usage) +- [Development](#development) +- [Testing](#testing) +- [Deployment](#deployment) +- [Contributing](#contributing) +- [License](#license) +- [Acknowledgements](#acknowledgements) -- Zod - A typescript validation library +--- -- Tanstack- Headless i.e. independent set of tools like tanstack table, tanstack virtual and tanstack router which has nested layouts, loaders and far better control than React +## Features -- Radix UI - A low-level UI component focuses on accessibility,customization and developer experience +- **AI Question Generator:** Generate contextual questions from any topic using advanced AI algorithms. +- **Smart Notes:** Create organized, searchable notes with automatic formatting and categorization. +- **Study Materials:** Transform your content into comprehensive study guides and flashcards. +- **Progress Analytics:** Track your learning journey with detailed analytics and insights. +- **Exam Paper Generation:** Generate exam papers for various boards (CBSE, ICSE, Custom) with customizable configuration. +- **User Authentication:** Secure login, registration, and OAuth (Google, Meta) support. +- **Admin Dashboard:** Manage users, models, and syllabus. +- **Feedback & Issue Reporting:** Users can submit feedback and report issues with attachments. +- **Responsive UI:** Modern, mobile-friendly interface with smooth animations. -- React Icons - Includes popular icons for React projects and utilizes ES6 imports +--- -- Next-themes - Provides straightforward and seamless theme switching ability for React JS +## Tech Stack -- Sonner - Designed to provide visually appealing and customizable toast component i.e. a brief non-disruptive temporary message +### Frontend Tech Stack -- Shadcn - A collection of reusable React components used to build web application or to create own component library +- **React.js** – UI library for building user interfaces. +- **TypeScript** – Type-safe JavaScript. +- **Framer Motion** – Animation library for React. +- **Zod** – TypeScript-first schema validation. +- **TanStack Router** – Powerful, type-safe routing for React. +- **TanStack Query** – Data fetching and caching. +- **Radix UI** – Accessible, customizable UI primitives. +- **React Icons** – Popular icon packs for React. +- **Next-themes** – Theme switching for React. +- **Sonner** – Customizable toast notifications. +- **Shadcn** – Reusable React component library. +- **TailwindCSS** – Utility-first CSS framework. +- **Vite** – Fast frontend build tool. +- **Docker** – Containerization for development and deployment. -- TailwindCSS - A revolutionary framework that helps to customise HTML element without leaving the current html file +### Backend Tech Stack -- CLSX - A faster and smaller replacement for classname module that are based on certain conditions +- **FastAPI** – High-performance Python web framework. +- **SQLAlchemy** – ORM for database management. +- **Alembic** – Database migrations. +- **PostgreSQL** – Relational database. +- **Pydantic** – Data validation and settings management. +- **Authlib** – OAuth & JWT handling. +- **python-jose** – JWT authentication. +- **passlib/bcrypt** – Password hashing. +- **httpx** – Async HTTP client. +- **pdfplumber** – PDF parsing. +- **Cohere, Google GenAI, LangChain** – AI/LLM integrations. +- **Docker** – Containerization for backend services. + +--- + +## Project Structure + +``` +apps/ + backend/ + src/ + config/ # Configuration and settings + core/ # Core entities, services, templates, repo interfaces + database/ # Database setup and models + infrastructure/ # Concrete repo implementations, providers, models + interfaces/ # API routes, schemas, dependencies + LLMs/ # LLM integration logic + prompts/ # Prompt templates for LLMs + utils/ # Utility functions and middleware + requirements.txt + requirements-prod.txt + .env + .example.env + main.py + frontend/ + src/ + components/ # React components (pages, UI, dashboard, etc.) + context/ # React context providers + hook/ # Custom React hooks + layouts/ # Layout components + lib/ # Utility libraries (data, motion, auth, etc.) + routes/ # Route definitions (TanStack Router) + types/ # TypeScript types and schemas + utils/ # Utility functions/constants + index.html + vite.config.ts + .env + .env.example + package.json +``` + +--- + +## Getting Started + +### Prerequisites + +- [Node.js](https://nodejs.org/) (v18+ recommended) +- [pnpm](https://pnpm.io/) (or npm/yarn) +- [Python](https://www.python.org/) (3.10+ recommended) +- [PostgreSQL](https://www.postgresql.org/) (if running locally) +- [Docker](https://www.docker.com/) (optional, for containerized setup) + +### Environment Variables + +#### Backend + +Copy `.example.env` to `.env` in `apps/backend/` and fill in the required values. + +#### Frontend + +Copy `.env.example` to `.env` in `apps/frontend/` and set the API base URL and OAuth credentials. + +### Installation + +#### Backend + +```sh +cd apps/backend +python -m venv venv +source venv/bin/activate # On Windows: venv\Scripts\activate +pip install -r requirements.txt +``` + +#### Frontend + +```sh +cd apps/frontend +pnpm install # or npm install / yarn install +``` + +### Running the Project + +#### Backend + +```sh +cd apps/backend +uvicorn src.main:app --reload --host 0.0.0.0 --port 8000 +``` + +#### Frontend + +```sh +cd apps/frontend +pnpm dev # or npm run dev / yarn dev +``` + +The frontend will be available at [http://localhost:5173](http://localhost:5173) and the backend at [http://localhost:8000](http://localhost:8000). + +### Docker Usage + +You can use Docker Compose for a full-stack setup (backend, frontend, and PostgreSQL): + +```sh +docker-compose up --build +``` + +- The backend will run on port 8000. +- The frontend will run on port 5173. +- PostgreSQL will be available as configured in `docker-compose.yml`. + +--- + +## Development + +- **Hot Reloading:** Both frontend and backend support hot reloading for rapid development. +- **Code Quality:** ESLint and Prettier are recommended for code formatting and linting. +- **Type Safety:** TypeScript and Zod schemas are used throughout the frontend for type safety. + +--- + +## Testing + +- **Frontend:** Add and run tests using your preferred React testing library (e.g., Jest, React Testing Library). +- **Backend:** Use `pytest` for Python backend tests. + +--- + +## Deployment + +- **Frontend:** Build with `pnpm build` and deploy the `dist/` folder to your preferred static hosting (Vercel, Netlify, etc.). +- **Backend:** Deploy using Docker, or any cloud provider supporting FastAPI (e.g., Azure, AWS, Heroku). + +--- + +## Contributing + +1. Fork the repository. +2. Create a new branch: `git checkout -b feature/your-feature-name` +3. Make your changes and commit: `git commit -m "Add your message"` +4. Push to your fork: `git push origin feature/your-feature-name` +5. Open a Pull Request describing your changes. + +**Guidelines:** +- Write clear, concise commit messages. +- Follow the existing code style. +- Add tests for new features. +- Document your code and update the README if necessary. + +--- + +## License + +This project is licensed under the MIT License. + +--- + +## Acknowledgements + +- [React](https://react.dev/) +- [FastAPI](https://fastapi.tiangolo.com/) +- [TailwindCSS](https://tailwindcss.com/) +- [TanStack](https://tanstack.com/) +- [Framer Motion](https://www.framer.com/motion/) +- [Zod](https://zod.dev/) +- [Radix UI](https://www.radix-ui.com/) +- [Sonner](https://sonner.emilkowal.ski/) +- [Shadcn](https://ui.shadcn.com/) +- [Cohere](https://cohere.com/) +- [Google GenAI](https://ai.google.dev/) +- [LangChain](https://www.langchain.com/) + +--- + +For any questions, issues, or feature requests, please use the [Contact](./apps/frontend/src/components/pages/ContactPage.tsx) page or open an issue on GitHub. From 0f57680666f05c3ad706108387493be0ec34aa6c Mon Sep 17 00:00:00 2001 From: Badsha Laskar <43995221+Badsha1996@users.noreply.github.com> Date: Thu, 16 Oct 2025 23:45:36 +0530 Subject: [PATCH 4/6] mobile fixes (#61) Co-authored-by: Badsha1996 --- .../src/components/pages/HomePage.tsx | 192 ++++--- .../frontend/src/layouts/BackgroundLayout.tsx | 485 +++++++----------- 2 files changed, 292 insertions(+), 385 deletions(-) diff --git a/apps/frontend/src/components/pages/HomePage.tsx b/apps/frontend/src/components/pages/HomePage.tsx index e86a71c..a06ff78 100644 --- a/apps/frontend/src/components/pages/HomePage.tsx +++ b/apps/frontend/src/components/pages/HomePage.tsx @@ -86,6 +86,7 @@ const features = [ "Study Material Creation", "Progress Tracking", ]; + const avatarPool = [ "https://api.dicebear.com/6.x/adventurer/svg?seed=anime1", "https://api.dicebear.com/6.x/adventurer/svg?seed=anime2", @@ -121,16 +122,8 @@ function HomePage() { useEffect(() => { const checkDevice = () => { const width = window.innerWidth; - const isMobileDevice = width < 768; - - // Check for low-end devices - const isLowEndDevice = - (navigator.hardwareConcurrency && navigator.hardwareConcurrency <= 4) || - /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( - navigator.userAgent - ); - - setIsMobile(isMobileDevice || isLowEndDevice); + const isMobileDevice = width < 1024; // Changed from 768 to 1024 + setIsMobile(isMobileDevice); }; checkDevice(); @@ -178,14 +171,16 @@ function HomePage() { })); }, [realTestimonials]); - // Handle WebGL context loss useEffect(() => { + if (isMobile) { + return; + } + const handleContextLost = (event: Event) => { event.preventDefault(); console.warn("WebGL context lost, attempting to restore..."); setWebglError(true); - // Attempt to restore after a delay setTimeout(() => { setCanvasKey((prev) => prev + 1); setWebglError(false); @@ -213,50 +208,69 @@ function HomePage() { ); } }; - }, [canvasKey]); + }, [canvasKey, isMobile]); - // Main page loading effect + // Reduced page loading time useEffect(() => { - const minLoadTime = setTimeout(() => { - setPageLoading(false); - }, 2000); + const minLoadTime = setTimeout( + () => { + setPageLoading(false); + }, + isMobile ? 1000 : 2000 + ); // Faster on mobile return () => clearTimeout(minLoadTime); - }, []); + }, [isMobile]); - // Content animations after loading + // Optimized content animations useEffect(() => { if (!pageLoading) { setIsVisible(true); const text = "A single AI-driven platform that transforms the way students and teachers prepare effective study materials"; - let index = 0; - const timer = setInterval(() => { - if (index <= text.length) { - setTypewriterText(text.slice(0, index)); - index++; - } else { - clearInterval(timer); - } - }, 50); - - const featureTimer = setInterval(() => { - setCurrentFeature((prev) => (prev + 1) % features.length); - }, 3000); - - const statsTimer = setTimeout(() => { - setStats({ users: 25000, questions: 500000, notes: 150000 }); - }, 1500); + + // Instant text on mobile, typewriter on desktop + if (isMobile) { + setTypewriterText(text); + } else { + let index = 0; + const timer = setInterval(() => { + if (index <= text.length) { + setTypewriterText(text.slice(0, index)); + index++; + } else { + clearInterval(timer); + } + }, 50); + + return () => clearInterval(timer); + } + + // Slower feature rotation on mobile + const featureTimer = setInterval( + () => { + setCurrentFeature((prev) => (prev + 1) % features.length); + }, + isMobile ? 5000 : 3000 + ); + + // Instant stats on mobile + const statsTimer = setTimeout( + () => { + setStats({ users: 25000, questions: 500000, notes: 150000 }); + }, + isMobile ? 500 : 1500 + ); return () => { - clearInterval(timer); clearInterval(featureTimer); clearTimeout(statsTimer); }; } - }, [pageLoading]); + }, [pageLoading, isMobile]); + // Optimized counter for mobile const AnimatedCounter: React.FC<{ end: number; duration?: number; @@ -266,6 +280,13 @@ function HomePage() { useEffect(() => { if (end === 0) return; + + // Instant on mobile + if (isMobile) { + setCount(end); + return; + } + let startTime: number; const animate = (timestamp: number) => { if (!startTime) startTime = timestamp; @@ -274,7 +295,7 @@ function HomePage() { if (progress < 1) requestAnimationFrame(animate); }; requestAnimationFrame(animate); - }, [end, duration]); + }, [end, duration, isMobile]); return ( @@ -302,41 +323,44 @@ function HomePage() { animate={{ opacity: 1 }} transition={{ duration: 0.5 }} > -
    -
    -
    -
    -
    + {/* Simplified floating blobs - static on mobile */} + {!isMobile && ( +
    +
    +
    +
    + )}
    -
    - {webglError && ( -
    -
    - Restoring 3D view... + {/* 3D Model - Desktop only */} + {!isMobile && ( +
    + {webglError && ( +
    +
    + Restoring 3D view... +
    -
    - )} + )} - {!modelLoaded && !webglError && !isMobile && ( - - )} + {!modelLoaded && !webglError && ( + + )} - {!isMobile && ( @@ -367,14 +391,14 @@ function HomePage() { - )} -
    +
    + )}

    - + DOCLIN NOTE @@ -385,38 +409,38 @@ function HomePage() {

    {typewriterText} - | + {!isMobile && ( + | + )}

    Currently featuring:{" "} - - {features[currentFeature]} - + {features[currentFeature]}

    + +
    + + + +
    + + {currentPage === 0 + ? "Cover" + : viewMode === "double" && currentPage + 1 <= totalPages + ? `${currentPage}-${currentPage + 1} / ${totalPages}` + : `${currentPage} / ${totalPages}`} + +
    + + +
    + + {/* Right controls */} +
    + + +
    + + + +
    + + {Math.round(zoom * 100)}% + +
    + + + +
    + + + + +
    +

    +
    +
    + +
    +

    + {currentPage === 0 + ? "Click 'Open Exam Paper' to begin • Use navigation controls above" + : "Use arrow keys (← →) or Space to navigate • Press ESC to exit fullscreen"} +

    +
    + + {/* PDF Viewer */} +
    + {currentPage === 0 ? ( + /* Cover Page */ +
    +
    +
    +
    +

    + {examData?.subject?.toUpperCase()} +

    +

    {examData?.paper_name}

    +
    + +
    +

    + Maximum Marks:{" "} + {examData?.maximum_marks} +

    +

    + Time allowed:{" "} + {examData?.time_allowed} +

    +
    +

    + Paper Code: {examData?.paper_code} • Year {examData?.year} +

    + + +
    +
    +
    + ) : ( + /* PDF Pages with Realistic Book Flip Animation */ +
    + {/* Left Page (Static) */} +
    +
    + +
    +
    + + {/* Right Page (Flipping) - Only in double mode */} + {viewMode === "double" && currentPage + 1 <= totalPages && ( +
    +
    + +
    +
    + )} + + {/* Center Spine Shadow */} +
    +
    + )} +
    + + +
    + ); +}; + +export default ExamPaperPDFViewer; diff --git a/apps/frontend/src/components/pages/ExamPaperPage.tsx b/apps/frontend/src/components/pages/ExamPaperPage.tsx index dab9dd5..09e3989 100644 --- a/apps/frontend/src/components/pages/ExamPaperPage.tsx +++ b/apps/frontend/src/components/pages/ExamPaperPage.tsx @@ -1,14 +1,17 @@ -import PageHeader from "@/components/common/PageHeader"; import { useApi } from "@/hook/useApi"; import { useLocation } from "@tanstack/react-router"; -import { useMemo, useRef } from "react"; -import { Button } from "../ui/button"; -import GlassDropdown from "../common/GlassDropdown"; +import { useMemo, useRef, useState, useCallback } from "react"; import GlassmorphicLoader from "../common/GlassLoader"; +import ExamPaperPDFViewer from "../common/ExamPaperPDFViewer"; +import PageHeader from "../common/PageHeader"; +import GlassLayout from "@/layouts/GlassLayout"; +import { motion, AnimatePresence } from "framer-motion"; const ExamPaperPage = () => { const location = useLocation(); + const [retryKey, setRetryKey] = useState(0); + // --- Parse search params --- const searchString = typeof location.search === "string" ? location.search @@ -30,6 +33,7 @@ const ExamPaperPage = () => { return { subject: searchParams.get("subject") ?? "", year: Number(searchParams.get("year")) || new Date().getFullYear(), + retryKey, // include retry key to re-trigger API }; } else { return { @@ -38,69 +42,46 @@ const ExamPaperPage = () => { paper: searchParams.get("paper") ?? "", code: searchParams.get("code") ?? "", year: Number(searchParams.get("year")) || new Date().getFullYear(), + retryKey, }; } - }, [location.search, prevShow]); + }, [location.search, prevShow, retryKey]); const endpoint = prevShow ? "/exam-paper/get/prev-exam-paper" : "/llm/gen-question-paper"; - // Create stable enabled condition based on payload values const isEnabled = useMemo(() => { - if (prevShow) { - // For prev=true, only need subject - return !!apiPayload.subject; - } else { - // For new generation, need more fields - return !!( - apiPayload.subject || - apiPayload.board || - apiPayload.paper || - apiPayload.code - ); - } - }, [ - prevShow, - apiPayload.subject, - apiPayload.board, - apiPayload.paper, - apiPayload.code, - ]); + if (prevShow) return !!apiPayload.subject; + return !!( + apiPayload.subject || + apiPayload.board || + apiPayload.paper || + apiPayload.code + ); + }, [prevShow, apiPayload]); - // Track successful API calls const hasSuccessfullyLoaded = useRef(false); - // Single API call with conditional endpoint - DISABLE SCHEMA VALIDATION TEMPORARILY const { data: examPaperData, - isLoading: isLoadingExamPaper, - isError: isExamPaperError, - error: examPaperError, + isLoading, + isError, + error, isSuccess, + refetch, } = useApi< { data?: { - exam_paper?: { - exam?: any; - sections?: any[]; - }; + exam_paper?: { exam?: any; sections?: any[] }; }; }, - | { subject: string; year: number } - | { - subject: string; - board: string; - paper: string; - code: string; - year: number; - } + any >( { endpoint, method: "POST", payload: apiPayload, - // responseSchema: examPaperResponseSchema, // COMMENTED OUT TO BYPASS VALIDATION }, { enabled: isEnabled, @@ -110,201 +91,62 @@ const ExamPaperPage = () => { } ); - // Mark as successfully loaded when we get data if (isSuccess && examPaperData && !hasSuccessfullyLoaded.current) { hasSuccessfullyLoaded.current = true; } - // Extract data from response - fix the data path const examPaperResponse = examPaperData?.data?.exam_paper; const examData = examPaperResponse?.exam; const sections = examPaperResponse?.sections; - /* ---------------------------------- */ - /* Helper Functions */ - /* ---------------------------------- */ - - // Helper function to extract question text from any nested structure - const getQuestionText = (questionPart: any): string => { - if (!questionPart) return ""; - - // Check main question field first - if (questionPart.question) return questionPart.question; - - // Check description field - if (questionPart.description) return questionPart.description; - - // Check if there are sub_parts with questions - if (questionPart.sub_parts && questionPart.sub_parts.length > 0) { - const firstSubPart = questionPart.sub_parts[0]; - if (firstSubPart.question) return firstSubPart.question; - } - return ""; - }; - - // Helper function to render all parts of a question - const renderQuestionParts = (parts: any[], level = 0) => { - return parts.map((part, index) => { - const questionText = getQuestionText(part); - const hasSubParts = part.sub_parts && part.sub_parts.length > 0; - - return ( -
    0 ? "ml-6" : ""}`} - > - {/* Question header with number/letter */} - {(part.number || part.letter) && questionText && ( -
    - - {level === 0 ? `(${part.number})` : part.letter}{" "} - - {questionText} - {part.marks && ( - [{part.marks}] - )} -
    - )} - - {/* Description only (when no direct question but has description) */} - {part.description && !questionText && ( -
    {part.description}
    - )} - - {/* Options for multiple choice */} - {part.options && part.options.length > 0 && ( -
    - {part.options.map((option: any, optIndex: number) => ( -
    - - {option.option_letter} - - {option.text} -
    - ))} -
    - )} - - {/* Constants given */} - {part.constants_given && - Object.keys(part.constants_given).length > 0 && ( -
    -
    Given:
    - {Object.entries(part.constants_given).map(([key, value]) => ( -
    - {key} = {String(value)} -
    - ))} -
    - )} - - {/* Equation template */} - {part.equation_template && ( -
    -
    Complete the equation:
    -
    - {part.equation_template} -
    -
    - )} - - {/* Diagram */} - {part.diagram && ( -
    -
    - Diagram: {part.diagram.description} -
    - {part.diagram.labels && part.diagram.labels.length > 0 && ( -
    - Labels: {part.diagram.labels.join(", ")} -
    - )} -
    - )} + const handleRetry = useCallback(() => { + hasSuccessfullyLoaded.current = false; + setRetryKey((prev) => prev + 1); + refetch?.(); + }, [refetch]); - {/* Recursively render sub-parts */} - {hasSubParts && renderQuestionParts(part.sub_parts, level + 1)} -
    - ); - }); - }; + // --- Reusable UI blocks --- + const LoaderOverlay = ({ message }: { message: string }) => ( + + ); - /* ---------------------------------- */ - /* UI Components */ - /* ---------------------------------- */ + const RetryButton = ({ label }: { label: string }) => ( + + {label} + + ); - const SimpleLoader = () => ( -
    -
    - + const ErrorState = () => ( +
    +
    +

    + {prevShow ? "Error Loading Exam Paper" : "Error Generating Paper"} +

    +

    + {error?.message || "An unexpected error occurred. Please try again."} +

    +
    ); - const ErrorState = () => { - hasSuccessfullyLoaded.current = false; - return ( -
    -
    -
    -
    - - - -
    -

    - {prevShow - ? "Error Loading Exam Paper" - : "Error Generating Exam Paper"} -

    -

    - {examPaperError?.message || - "An unexpected error occurred. Please try again."} -

    -
    - -
    -
    - ); - }; - const NoPayloadState = () => ( -
    -
    -
    - - - -
    -

    +
    +
    +

    No Configuration Found

    -

    +

    Please go back and configure your exam parameters.

    @@ -312,352 +154,47 @@ const ExamPaperPage = () => {
    ); - /* ---------------------------------- */ - /* Question Renderers */ - /* ---------------------------------- */ - - const renderMultipleChoiceQuestion = (question: any) => ( -
    -
    - Question {question.number}. - {question.instruction && ( - - {question.instruction} - - )} - [{question.total_marks} marks] -
    - - {renderQuestionParts(question.parts || [])} -
    - ); - - const renderShortAnswerQuestion = (question: any) => ( -
    -
    - Question {question.number}. - {question.instruction && ( - - {question.instruction} - - )} - [{question.total_marks} marks] -
    - - {/* Main question text if exists */} - {question.question_text && ( -
    - {question.question_text} -
    - )} - - {renderQuestionParts(question.parts || [])} -
    - ); - - const renderLongAnswerQuestion = (question: any) => ( -
    -
    - Question {question.number}. - {question.instruction && ( - - {question.instruction} - - )} - [{question.total_marks} marks] + const NoDataState = () => ( +
    +
    +

    + No Exam Paper Data +

    +

    + No valid exam paper data was found. Please try again. +

    +
    - - {/* Main question text if exists */} - {question.question_text && ( -
    - {question.question_text} -
    - )} - - {renderQuestionParts(question.parts || [])}
    ); - const renderQuestion = (question: any) => { - switch (question.type) { - case "multiple_choice": - return renderMultipleChoiceQuestion(question); - case "short_answer": - case "calculation": - case "diagram_based": - case "complete_equation": - return renderShortAnswerQuestion(question); - case "long_answer": - return renderLongAnswerQuestion(question); - default: - return renderShortAnswerQuestion(question); - } - }; - - /* ---------------------------------- */ - /* Main Render */ - /* ---------------------------------- */ - - // Loading state - if (isLoadingExamPaper) { - return ; - } - - // Error state - if (isExamPaperError) { - return ; - } - - // No payload state - if (!isEnabled) { - return ; - } - - // No data state - if (!examData || !sections || sections.length === 0) { - return ( -
    -
    -
    - - - -
    -

    - No Exam Paper Data -

    -

    - No valid exam paper data was found. Please try again. -

    - -
    -
    - ); - } - - // Success state - render ICSE style exam paper return ( -
    -
    - - - {/* Download buttons */} -
    -
    - - - -
    -
    - - {/* ICSE Style Exam Paper */} -
    - {/* Header Page - ICSE Style */} -
    - {/* Top Border */} -
    - {/* ICSE Header */} -
    -
    - {examData.board || - "COUNCIL FOR THE INDIAN SCHOOL CERTIFICATE EXAMINATIONS"} -
    -
    -
    - {examData.subject || "EXAMINATION PAPER"} -
    -
    -
    - Paper {examData.paper_code || "1"} -
    -
    - ({examData.paper_name || examData.subject}) -
    -
    - - {/* Exam Details Box */} -
    - - - - - - - - - {examData.reading_time && ( - - - - - )} - -
    Maximum Marks: - {examData.maximum_marks} - Time allowed: - {examData.time_allowed} -
    Reading Time: - {examData.reading_time} -
    -
    - - {/* Instructions */} -
    -
    INSTRUCTIONS
    -
    - • This paper consists of {sections.length} section - {sections.length > 1 ? "s" : ""}. -
    - {sections.map((section: any) => ( -
    - • {section.name}{" "} - {section.is_compulsory - ? "is compulsory" - : section.instruction}{" "} - [{section.marks} marks] -
    - ))} -
    - • The intended marks for questions or parts of questions are - given in brackets [ ]. -
    - {examData.additional_instructions?.map( - (instruction: string, idx: number) => ( -
    • {instruction}
    - ) - )} -
    - - {/* Year */} -
    - {examData.year} -
    -
    -
    - - {/* Question Sections - ICSE Style */} - {sections.map((section: any) => ( -
    -
    - {/* Section Header */} -
    -
    - {section.name} -
    - {section.instruction && - section.instruction !== "Follow the instructions" && ( -
    - ({section.instruction}) -
    - )} -
    - [{section.marks} marks] -
    -
    - - {/* Questions */} -
    - {section.questions?.map((question: any) => - renderQuestion(question) - )} -
    -
    -
    - ))} -
    -
    - - {/* ICSE Print Styles */} - -
    + + {isLoading && } + + {!isLoading && isError && } + {!isLoading && !isEnabled && } + {!isLoading && + !isError && + isEnabled && + (!examData || (sections?.length ?? 0) === 0) && } + + {!isLoading && isSuccess && examData && (sections?.length ?? 0) > 0 && ( + + + + + + + )} + ); };