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/4] 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/4] 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/4] 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/4] 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]}