From 8df6804dcffa3aa1794ace6be6df88975d5a9aa8 Mon Sep 17 00:00:00 2001 From: Yamen Ahmad Date: Sun, 26 Apr 2026 03:12:52 +0400 Subject: [PATCH] chore(release): sync frontend from monorepo v4 --- .env.development | 3 - Dockerfile | 14 +- e2e/login.spec.ts | 27 + index.html | 8 +- package-lock.json | 3704 +++++++++-------- package.json | 11 +- playwright.config.ts | 42 + public/apple-touch-icon.png | Bin 0 -> 4406 bytes public/favicon-16x16.png | Bin 0 -> 532 bytes public/favicon-32x32.png | Bin 0 -> 888 bytes public/favicon.ico | Bin 20373 -> 554 bytes public/logo-icon.png | Bin 0 -> 49453 bytes public/logo.svg | 12 + public/templates/students.csv | 2 + src/App.tsx | 377 +- src/components/AIFeedbackButtons.tsx | 164 + src/components/AdminLmsLayout.tsx | 376 +- src/components/AppLayout.tsx | 74 +- src/components/AppSidebar.tsx | 5 +- src/components/ErrorBoundary.tsx | 71 + src/components/LanguageToggle.tsx | 48 + src/components/MaterialViewer.tsx | 235 ++ src/components/NavLink.tsx | 36 +- src/components/NotificationDropdown.tsx | 35 +- src/components/QuickSetupWizard.tsx | 250 ++ src/components/RoleLayout.tsx | 108 +- src/components/StudentLayout.tsx | 54 +- src/components/TaxonomyCascade.tsx | 143 + src/components/TeacherLayout.tsx | 33 +- src/components/ThemeToggle.tsx | 71 + src/components/ai/AiAlertBanner.tsx | 31 +- src/components/ai/AiAssistantDrawer.tsx | 61 +- src/components/ai/AiBatchOptimizer.tsx | 57 +- src/components/ai/AiGeneratorModal.tsx | 32 +- src/components/ai/AiGradeExplainer.tsx | 4 +- src/components/ai/AiGradingAssistant.tsx | 7 +- src/components/ai/AiInsightsPanel.tsx | 63 +- src/components/ai/AiSearchBar.tsx | 76 +- src/components/ai/AiStudyCoach.tsx | 7 +- src/components/ai/AiTipBanner.tsx | 43 +- src/components/ai/AiWritingHelper.tsx | 29 +- .../coursePlan/LibraryPickerDialog.tsx | 214 + .../coursePlan/MaterialBookView.tsx | 78 + src/components/student/ExamPopup.tsx | 124 + src/components/ui/alert-dialog.tsx | 78 +- src/components/ui/badge.tsx | 9 +- src/components/ui/breadcrumb.tsx | 7 +- src/components/ui/calendar.tsx | 4 +- src/components/ui/carousel.tsx | 4 +- src/components/ui/context-menu.tsx | 2 +- src/components/ui/dialog.tsx | 98 +- src/components/ui/dropdown-menu.tsx | 2 +- src/components/ui/menubar.tsx | 2 +- src/components/ui/pagination.tsx | 8 +- src/components/ui/sheet.tsx | 66 +- src/components/ui/sidebar.tsx | 7 +- src/components/wizard/StepWizard.tsx | 234 ++ src/contexts/AuthContext.tsx | 57 +- src/hooks/queries/index.ts | 5 + src/hooks/queries/keys.ts | 208 +- src/hooks/queries/useAIFeedback.ts | 70 + src/hooks/queries/useAIPrompts.ts | 52 + src/hooks/queries/useAcademic.ts | 5 +- src/hooks/queries/useAdaptiveEngine.ts | 51 + src/hooks/queries/useAiCourse.ts | 101 + src/hooks/queries/useCourseGeneration.ts | 48 + src/hooks/queries/useCourseware.ts | 28 +- src/hooks/queries/useEntityOnboarding.ts | 57 + src/hooks/queries/useExamReview.ts | 47 + src/hooks/queries/useExamSession.ts | 35 + src/hooks/queries/useExamTemplates.ts | 85 + src/hooks/queries/useFees.ts | 6 +- src/hooks/queries/useGradebook.ts | 3 +- src/hooks/queries/useGrading.ts | 42 + src/hooks/queries/useLms.ts | 34 +- src/hooks/queries/usePlacement.ts | 54 + src/hooks/queries/useScoreRelease.ts | 41 + src/hooks/queries/useSignup.ts | 41 + src/hooks/queries/useStudentProgress.ts | 13 +- src/i18n/index.ts | 80 + src/i18n/locales/ar.ts | 1131 +++++ src/i18n/locales/en.ts | 1193 ++++++ src/index.css | 114 + src/lib/api-client.ts | 402 +- src/main.tsx | 1 + src/pages/AdminDashboard.tsx | 7 +- src/pages/ApprovalWorkflowsPage.tsx | 565 ++- src/pages/AssignmentsPage.tsx | 519 ++- src/pages/ClassroomsPage.tsx | 370 +- src/pages/EmailVerification.tsx | 191 + src/pages/EntitiesPage.tsx | 430 +- src/pages/ExamPage.tsx | 54 - src/pages/ExamStructuresPage.tsx | 1409 ++++++- src/pages/ExamsListPage.tsx | 176 +- src/pages/ForgotPassword.tsx | 2 +- src/pages/GenerationPage.tsx | 3171 +++++++++++++- src/pages/GrammarPage.tsx | 351 +- src/pages/Index.tsx | 14 - src/pages/Login.tsx | 65 +- src/pages/NotFound.tsx | 8 +- src/pages/OnboardingWizard.tsx | 572 +++ src/pages/PaymentRecordPage.tsx | 234 +- src/pages/PrivacyCenter.tsx | 173 + src/pages/ProfilePage.tsx | 75 - src/pages/RecordPage.tsx | 222 +- src/pages/Register.tsx | 387 +- src/pages/ResetPassword.tsx | 147 + src/pages/RubricsPage.tsx | 942 ++++- src/pages/ScoreVerification.tsx | 50 + src/pages/SettingsPage.tsx | 411 +- src/pages/StatsCorporatePage.tsx | 341 +- src/pages/StudentPerformancePage.tsx | 295 +- src/pages/TicketsPage.tsx | 2 +- src/pages/UsersPage.tsx | 577 +-- src/pages/VocabularyPage.tsx | 377 +- src/pages/admin/AIAgentsPanel.tsx | 842 ++++ src/pages/admin/AIFeedbackTriage.tsx | 348 ++ src/pages/admin/AIPromptEditor.tsx | 611 +++ src/pages/admin/AIProviderSettings.tsx | 704 ++++ src/pages/admin/AIToolsPanel.tsx | 179 + src/pages/admin/AcademicYearManager.tsx | 7 +- src/pages/admin/AdaptiveDashboard.tsx | 158 + src/pages/admin/AdaptiveStudentDetail.tsx | 105 + src/pages/admin/AdminActivities.tsx | 5 +- src/pages/admin/AdminBatchDetail.tsx | 2 +- src/pages/admin/AdminCoursePlanDetail.tsx | 1790 ++++++++ src/pages/admin/AdminCoursePlans.tsx | 175 + src/pages/admin/AdminCourses.tsx | 779 +++- src/pages/admin/AdminFacilities.tsx | 104 +- src/pages/admin/AdminFees.tsx | 334 +- src/pages/admin/AdminGradebook.tsx | 53 +- src/pages/admin/AdminLessons.tsx | 30 +- src/pages/admin/AdminLibrary.tsx | 51 +- src/pages/admin/AdminLmsDashboard.tsx | 103 +- src/pages/admin/AdminQuickSetup.tsx | 165 + src/pages/admin/AdminStudentLeave.tsx | 1 + src/pages/admin/AdminStudentProgress.tsx | 182 +- src/pages/admin/AdminTeachers.tsx | 4 +- src/pages/admin/AdmissionDetail.tsx | 2 +- src/pages/admin/AdmissionRegisterPage.tsx | 2 +- src/pages/admin/AiEnglishQuality.tsx | 136 + src/pages/admin/AiEnglishTaxonomy.tsx | 108 + src/pages/admin/AiIeltsValidation.tsx | 205 + src/pages/admin/ApprovalWorkflowConfig.tsx | 46 +- src/pages/admin/BulkStudentUpload.tsx | 218 + src/pages/admin/CourseConfig.tsx | 367 ++ src/pages/admin/CredentialDashboard.tsx | 206 + src/pages/admin/CustomExamCreate.tsx | 655 +++ src/pages/admin/ExamReviewDetail.tsx | 341 ++ src/pages/admin/ExamReviewQueue.tsx | 205 + src/pages/admin/ExamTemplateSelection.tsx | 209 + src/pages/admin/GradingQueue.tsx | 227 + src/pages/admin/IeltsContentPool.tsx | 353 ++ src/pages/admin/IeltsExamCreate.tsx | 426 ++ src/pages/admin/IeltsExamValidation.tsx | 246 ++ src/pages/admin/IeltsSkillConfig.tsx | 210 + src/pages/admin/LevelMappingConfig.tsx | 170 + src/pages/admin/MarksheetManager.tsx | 6 +- src/pages/admin/ModuleBuilder.tsx | 335 ++ src/pages/admin/ResourceManager.tsx | 714 +++- src/pages/admin/ScoreApprovalQueue.tsx | 195 + src/pages/admin/SmartWizardHub.tsx | 215 + src/pages/admin/TaxonomyManager.tsx | 357 +- src/pages/admin/WhiteLabelBranding.tsx | 285 ++ src/pages/admin/wizards/CoursePlanWizard.tsx | 819 ++++ src/pages/admin/wizards/CourseWizard.tsx | 271 ++ .../admin/wizards/ExamStructureWizard.tsx | 348 ++ src/pages/admin/wizards/RubricWizard.tsx | 320 ++ src/pages/student/AiEnglishCourse.tsx | 291 ++ src/pages/student/AiIeltsCourse.tsx | 316 ++ src/pages/student/CourseDelivery.tsx | 204 + src/pages/student/DiagnosticTest.tsx | 2 +- src/pages/student/ExamResults.tsx | 341 ++ src/pages/student/ExamSession.tsx | 653 +++ src/pages/student/ExamStatus.tsx | 111 + src/pages/student/GapAnalysis.tsx | 210 + src/pages/student/LearningPlan.tsx | 2 +- src/pages/student/PlacementAccess.tsx | 135 + src/pages/student/PlacementBriefing.tsx | 132 + src/pages/student/PlacementResults.tsx | 281 ++ src/pages/student/PlacementTest.tsx | 451 ++ src/pages/student/ProficiencyProfile.tsx | 2 +- src/pages/student/StudentAssignments.tsx | 48 +- src/pages/student/StudentAttendance.tsx | 2 +- src/pages/student/StudentChapterView.tsx | 48 +- src/pages/student/StudentCourseDetail.tsx | 175 +- src/pages/student/StudentCoursePlanDetail.tsx | 347 ++ src/pages/student/StudentCoursePlans.tsx | 147 + src/pages/student/StudentCourses.tsx | 82 +- src/pages/student/StudentDashboard.tsx | 106 +- src/pages/student/StudentDiscussionBoard.tsx | 4 +- src/pages/student/StudentGrades.tsx | 16 +- src/pages/student/StudentMessages.tsx | 4 +- src/pages/student/StudentTimetable.tsx | 18 +- src/pages/student/SubjectSelection.tsx | 4 +- src/pages/teacher/AdaptiveSettings.tsx | 198 + src/pages/teacher/AiWorkbench.tsx | 21 +- src/pages/teacher/ChapterDetail.tsx | 220 +- src/pages/teacher/CourseChapters.tsx | 160 +- src/pages/teacher/CourseProgress.tsx | 200 + src/pages/teacher/TeacherAnnouncements.tsx | 4 +- src/pages/teacher/TeacherAssignmentDetail.tsx | 2 +- src/pages/teacher/TeacherAssignments.tsx | 84 +- src/pages/teacher/TeacherCourses.tsx | 124 +- src/pages/teacher/TeacherDashboard.tsx | 61 +- src/pages/teacher/TeacherDiscussionBoard.tsx | 4 +- src/pages/teacher/TeacherLibrary.tsx | 522 +++ src/pages/teacher/TeacherQuickSetup.tsx | 109 + src/services/adaptive-engine.service.ts | 30 + src/services/ai-course.service.ts | 83 + src/services/ai-feedback.service.ts | 54 + src/services/ai-prompt.service.ts | 61 + src/services/aiAgent.service.ts | 53 + src/services/aiSettings.service.ts | 82 + src/services/analytics.service.ts | 69 +- src/services/approvals.service.ts | 54 +- src/services/assignments.service.ts | 41 +- src/services/auth.service.ts | 31 +- src/services/branding.service.ts | 29 + src/services/coaching.service.ts | 45 +- src/services/course-generation.service.ts | 37 + src/services/coursePlan.service.ts | 260 ++ src/services/courseware.service.ts | 40 + src/services/custom-exam.service.ts | 17 + src/services/entities.service.ts | 24 + src/services/entity-onboarding.service.ts | 36 + src/services/exam-review.service.ts | 57 + src/services/exam-session.service.ts | 20 + src/services/exam-template.service.ts | 17 + src/services/exams.service.ts | 33 + src/services/fees.service.ts | 41 +- src/services/gdpr.service.ts | 36 + src/services/generation.service.ts | 169 +- src/services/gradebook.service.ts | 2 +- src/services/grading.service.ts | 26 + src/services/ielts-exam.service.ts | 44 + src/services/level-mapping.service.ts | 13 + src/services/lms.service.ts | 109 +- src/services/media.service.ts | 22 +- src/services/payments.service.ts | 63 + src/services/placement.service.ts | 42 + src/services/platformSettings.service.ts | 59 + src/services/report.service.ts | 25 + src/services/reports.service.ts | 137 + src/services/resources.service.ts | 45 +- src/services/score-release.service.ts | 17 + src/services/signup.service.ts | 31 + src/services/stats.service.ts | 2 +- src/services/student-progress.service.ts | 13 +- src/services/taxonomy.service.ts | 24 +- src/services/training.service.ts | 116 +- src/services/users.service.ts | 5 +- src/services/verification.service.ts | 6 + src/types/adaptive.ts | 84 +- src/types/ai-course.ts | 86 + src/types/ai-feedback.ts | 55 + src/types/ai-prompt.ts | 32 + src/types/aiAgent.ts | 91 + src/types/assignment.ts | 57 + src/types/branding.ts | 15 + src/types/course-generation.ts | 86 + src/types/coursePlan.ts | 291 ++ src/types/courseware.ts | 5 + src/types/custom-exam.ts | 46 + src/types/entity-onboarding.ts | 52 + src/types/exam-review.ts | 64 + src/types/exam-session.ts | 73 + src/types/exam-template.ts | 53 + src/types/exam.ts | 73 + src/types/fees.ts | 25 +- src/types/grading.ts | 38 + src/types/ielts-exam.ts | 84 + src/types/index.ts | 17 + src/types/it.ts | 26 + src/types/lesson.ts | 7 + src/types/level-mapping.ts | 12 + src/types/lms.ts | 52 +- src/types/math.ts | 31 + src/types/placement.ts | 75 + src/types/score-release.ts | 17 + src/types/signup.ts | 52 + src/types/stats.ts | 10 +- src/types/student-progress.ts | 34 + src/types/taxonomy.ts | 5 + src/types/verification.ts | 7 + tailwind.config.ts | 9 +- vite.config.ts | 41 + 287 files changed, 43433 insertions(+), 4653 deletions(-) delete mode 100644 .env.development create mode 100644 e2e/login.spec.ts create mode 100644 playwright.config.ts create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon-16x16.png create mode 100644 public/favicon-32x32.png create mode 100644 public/logo-icon.png create mode 100644 public/logo.svg create mode 100644 public/templates/students.csv create mode 100644 src/components/AIFeedbackButtons.tsx create mode 100644 src/components/ErrorBoundary.tsx create mode 100644 src/components/LanguageToggle.tsx create mode 100644 src/components/MaterialViewer.tsx create mode 100644 src/components/QuickSetupWizard.tsx create mode 100644 src/components/TaxonomyCascade.tsx create mode 100644 src/components/ThemeToggle.tsx create mode 100644 src/components/coursePlan/LibraryPickerDialog.tsx create mode 100644 src/components/coursePlan/MaterialBookView.tsx create mode 100644 src/components/student/ExamPopup.tsx create mode 100644 src/components/wizard/StepWizard.tsx create mode 100644 src/hooks/queries/useAIFeedback.ts create mode 100644 src/hooks/queries/useAIPrompts.ts create mode 100644 src/hooks/queries/useAdaptiveEngine.ts create mode 100644 src/hooks/queries/useAiCourse.ts create mode 100644 src/hooks/queries/useCourseGeneration.ts create mode 100644 src/hooks/queries/useEntityOnboarding.ts create mode 100644 src/hooks/queries/useExamReview.ts create mode 100644 src/hooks/queries/useExamSession.ts create mode 100644 src/hooks/queries/useExamTemplates.ts create mode 100644 src/hooks/queries/useGrading.ts create mode 100644 src/hooks/queries/usePlacement.ts create mode 100644 src/hooks/queries/useScoreRelease.ts create mode 100644 src/hooks/queries/useSignup.ts create mode 100644 src/i18n/index.ts create mode 100644 src/i18n/locales/ar.ts create mode 100644 src/i18n/locales/en.ts create mode 100644 src/pages/EmailVerification.tsx delete mode 100644 src/pages/ExamPage.tsx delete mode 100644 src/pages/Index.tsx create mode 100644 src/pages/OnboardingWizard.tsx create mode 100644 src/pages/PrivacyCenter.tsx delete mode 100644 src/pages/ProfilePage.tsx create mode 100644 src/pages/ResetPassword.tsx create mode 100644 src/pages/ScoreVerification.tsx create mode 100644 src/pages/admin/AIAgentsPanel.tsx create mode 100644 src/pages/admin/AIFeedbackTriage.tsx create mode 100644 src/pages/admin/AIPromptEditor.tsx create mode 100644 src/pages/admin/AIProviderSettings.tsx create mode 100644 src/pages/admin/AIToolsPanel.tsx create mode 100644 src/pages/admin/AdaptiveDashboard.tsx create mode 100644 src/pages/admin/AdaptiveStudentDetail.tsx create mode 100644 src/pages/admin/AdminCoursePlanDetail.tsx create mode 100644 src/pages/admin/AdminCoursePlans.tsx create mode 100644 src/pages/admin/AdminQuickSetup.tsx create mode 100644 src/pages/admin/AiEnglishQuality.tsx create mode 100644 src/pages/admin/AiEnglishTaxonomy.tsx create mode 100644 src/pages/admin/AiIeltsValidation.tsx create mode 100644 src/pages/admin/BulkStudentUpload.tsx create mode 100644 src/pages/admin/CourseConfig.tsx create mode 100644 src/pages/admin/CredentialDashboard.tsx create mode 100644 src/pages/admin/CustomExamCreate.tsx create mode 100644 src/pages/admin/ExamReviewDetail.tsx create mode 100644 src/pages/admin/ExamReviewQueue.tsx create mode 100644 src/pages/admin/ExamTemplateSelection.tsx create mode 100644 src/pages/admin/GradingQueue.tsx create mode 100644 src/pages/admin/IeltsContentPool.tsx create mode 100644 src/pages/admin/IeltsExamCreate.tsx create mode 100644 src/pages/admin/IeltsExamValidation.tsx create mode 100644 src/pages/admin/IeltsSkillConfig.tsx create mode 100644 src/pages/admin/LevelMappingConfig.tsx create mode 100644 src/pages/admin/ModuleBuilder.tsx create mode 100644 src/pages/admin/ScoreApprovalQueue.tsx create mode 100644 src/pages/admin/SmartWizardHub.tsx create mode 100644 src/pages/admin/WhiteLabelBranding.tsx create mode 100644 src/pages/admin/wizards/CoursePlanWizard.tsx create mode 100644 src/pages/admin/wizards/CourseWizard.tsx create mode 100644 src/pages/admin/wizards/ExamStructureWizard.tsx create mode 100644 src/pages/admin/wizards/RubricWizard.tsx create mode 100644 src/pages/student/AiEnglishCourse.tsx create mode 100644 src/pages/student/AiIeltsCourse.tsx create mode 100644 src/pages/student/CourseDelivery.tsx create mode 100644 src/pages/student/ExamResults.tsx create mode 100644 src/pages/student/ExamSession.tsx create mode 100644 src/pages/student/ExamStatus.tsx create mode 100644 src/pages/student/GapAnalysis.tsx create mode 100644 src/pages/student/PlacementAccess.tsx create mode 100644 src/pages/student/PlacementBriefing.tsx create mode 100644 src/pages/student/PlacementResults.tsx create mode 100644 src/pages/student/PlacementTest.tsx create mode 100644 src/pages/student/StudentCoursePlanDetail.tsx create mode 100644 src/pages/student/StudentCoursePlans.tsx create mode 100644 src/pages/teacher/AdaptiveSettings.tsx create mode 100644 src/pages/teacher/CourseProgress.tsx create mode 100644 src/pages/teacher/TeacherLibrary.tsx create mode 100644 src/pages/teacher/TeacherQuickSetup.tsx create mode 100644 src/services/adaptive-engine.service.ts create mode 100644 src/services/ai-course.service.ts create mode 100644 src/services/ai-feedback.service.ts create mode 100644 src/services/ai-prompt.service.ts create mode 100644 src/services/aiAgent.service.ts create mode 100644 src/services/aiSettings.service.ts create mode 100644 src/services/branding.service.ts create mode 100644 src/services/course-generation.service.ts create mode 100644 src/services/coursePlan.service.ts create mode 100644 src/services/custom-exam.service.ts create mode 100644 src/services/entity-onboarding.service.ts create mode 100644 src/services/exam-review.service.ts create mode 100644 src/services/exam-session.service.ts create mode 100644 src/services/exam-template.service.ts create mode 100644 src/services/gdpr.service.ts create mode 100644 src/services/grading.service.ts create mode 100644 src/services/ielts-exam.service.ts create mode 100644 src/services/level-mapping.service.ts create mode 100644 src/services/payments.service.ts create mode 100644 src/services/placement.service.ts create mode 100644 src/services/platformSettings.service.ts create mode 100644 src/services/report.service.ts create mode 100644 src/services/reports.service.ts create mode 100644 src/services/score-release.service.ts create mode 100644 src/services/signup.service.ts create mode 100644 src/services/verification.service.ts create mode 100644 src/types/ai-course.ts create mode 100644 src/types/ai-feedback.ts create mode 100644 src/types/ai-prompt.ts create mode 100644 src/types/aiAgent.ts create mode 100644 src/types/branding.ts create mode 100644 src/types/course-generation.ts create mode 100644 src/types/coursePlan.ts create mode 100644 src/types/custom-exam.ts create mode 100644 src/types/entity-onboarding.ts create mode 100644 src/types/exam-review.ts create mode 100644 src/types/exam-session.ts create mode 100644 src/types/exam-template.ts create mode 100644 src/types/grading.ts create mode 100644 src/types/ielts-exam.ts create mode 100644 src/types/it.ts create mode 100644 src/types/level-mapping.ts create mode 100644 src/types/math.ts create mode 100644 src/types/placement.ts create mode 100644 src/types/score-release.ts create mode 100644 src/types/signup.ts create mode 100644 src/types/verification.ts diff --git a/.env.development b/.env.development deleted file mode 100644 index e8ed795..0000000 --- a/.env.development +++ /dev/null @@ -1,3 +0,0 @@ -# Relative URL: Vite proxies /api → Odoo :8069 (avoids "Failed to fetch" from CORS). -VITE_API_BASE_URL=/api -VITE_APP_NAME=EnCoach diff --git a/Dockerfile b/Dockerfile index 5545dd4..cae190b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,13 +18,25 @@ server { root /usr/share/nginx/html; index index.html; + # Default nginx body cap is 1 MB which causes HTTP 413 on: + # * resource uploads (PDF / audio / video) + # * /api/exam/generation/submit (whole exam with generated questions) + # * /api/approval-requests (attachments) + # Match Odoo's raised limit in odoo-docker.conf (128 MB). + client_max_body_size 128m; + client_body_buffer_size 1m; + location /api/ { proxy_pass http://backend:8069/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_read_timeout 300s; + # OpenAI streaming calls + multi-module AI generation can run >3 min. + # Keep read/send timeouts above Odoo's limit_time_real (900s). + proxy_read_timeout 900s; + proxy_send_timeout 900s; + proxy_request_buffering off; } location / { diff --git a/e2e/login.spec.ts b/e2e/login.spec.ts new file mode 100644 index 0000000..3be2f7c --- /dev/null +++ b/e2e/login.spec.ts @@ -0,0 +1,27 @@ +import { expect, test } from "@playwright/test"; + +/** + * Smoke test: the app loads, serves the login page, and the main form + * controls are present and reachable. We deliberately avoid hitting the + * real backend — this is a lightweight sanity check that catches broken + * routing / bundle / asset problems before they reach production. + */ +test("login page renders the sign-in form", async ({ page }) => { + await page.goto("/login"); + await expect( + page.getByRole("heading", { name: /sign in|login|welcome/i }), + ).toBeVisible({ timeout: 10_000 }); + + const email = page.getByLabel(/email/i); + const password = page.getByLabel(/password/i); + await expect(email).toBeVisible(); + await expect(password).toBeVisible(); + + await expect(page.getByRole("button", { name: /sign in|log in/i })).toBeVisible(); +}); + +test("root redirects to login for anonymous users", async ({ page }) => { + const response = await page.goto("/"); + expect(response?.ok()).toBeTruthy(); + await page.waitForURL(/\/login/i, { timeout: 10_000 }); +}); diff --git a/index.html b/index.html index c54f102..173935e 100644 --- a/index.html +++ b/index.html @@ -6,12 +6,18 @@ EnCoach — IELTS & English Learning Platform + + + + + + - +
diff --git a/package-lock.json b/package-lock.json index 341879b..0bd05df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,8 @@ "cmdk": "^1.1.1", "date-fns": "^3.6.0", "embla-carousel-react": "^8.6.0", + "i18next": "^26.0.6", + "i18next-browser-languagedetector": "^8.2.1", "input-otp": "^1.4.2", "lucide-react": "^0.462.0", "next-themes": "^0.3.0", @@ -49,6 +51,7 @@ "react-day-picker": "^8.10.1", "react-dom": "^18.3.1", "react-hook-form": "^7.61.1", + "react-i18next": "^17.0.4", "react-resizable-panels": "^2.1.9", "react-router-dom": "^6.30.1", "recharts": "^2.15.4", @@ -60,6 +63,7 @@ }, "devDependencies": { "@eslint/js": "^9.32.0", + "@playwright/test": "^1.59.1", "@tailwindcss/typography": "^0.5.16", "@testing-library/jest-dom": "^6.6.0", "@testing-library/react": "^16.0.0", @@ -76,6 +80,7 @@ "lovable-tagger": "^1.1.13", "postcss": "^8.5.6", "tailwindcss": "^3.4.17", + "tailwindcss-rtl": "^0.9.0", "typescript": "^5.8.3", "typescript-eslint": "^8.38.0", "vite": "^5.4.19", @@ -129,18 +134,18 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", - "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], @@ -151,13 +156,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], @@ -168,13 +173,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], @@ -185,13 +190,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], @@ -202,13 +207,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], @@ -219,13 +224,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" ], @@ -236,13 +241,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], @@ -253,13 +258,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" ], @@ -270,13 +275,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], @@ -287,13 +292,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], @@ -304,13 +309,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" ], @@ -321,13 +326,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], @@ -338,13 +343,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" ], @@ -355,13 +360,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" ], @@ -372,13 +377,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], @@ -389,13 +394,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], @@ -406,13 +411,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], @@ -423,13 +428,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", - "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ "arm64" ], @@ -444,9 +449,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], @@ -457,13 +462,13 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", - "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", "cpu": [ "arm64" ], @@ -478,9 +483,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], @@ -491,13 +496,30 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" ], @@ -508,13 +530,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], @@ -525,13 +547,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], @@ -542,13 +564,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], @@ -559,13 +581,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -595,9 +617,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -605,34 +627,37 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", - "minimatch": "^3.1.2" + "minimatch": "^3.1.5" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -643,20 +668,20 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, "engines": { @@ -680,9 +705,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", - "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", "dev": true, "license": "MIT", "engines": { @@ -693,9 +718,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -703,13 +728,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -717,31 +742,31 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz", - "integrity": "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.10" + "@floating-ui/utils": "^0.2.11" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.2.tgz", - "integrity": "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.2", - "@floating-ui/utils": "^0.2.10" + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.4.tgz", - "integrity": "sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.7.2" + "@floating-ui/dom": "^1.7.6" }, "peerDependencies": { "react": ">=16.8.0", @@ -749,9 +774,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", "license": "MIT" }, "node_modules/@hookform/resolvers": { @@ -774,33 +799,19 @@ } }, "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" + "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -829,35 +840,14 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -869,15 +859,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -885,9 +866,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -929,14 +910,20 @@ "node": ">= 8" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, + "node_modules/@playwright/test": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", + "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.59.1" + }, + "bin": { + "playwright": "cli.js" + }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/@radix-ui/number": { @@ -946,19 +933,19 @@ "license": "MIT" }, "node_modules/@radix-ui/primitive": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", - "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", "license": "MIT" }, "node_modules/@radix-ui/react-accordion": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.11.tgz", - "integrity": "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", + "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collapsible": "1.1.11", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", @@ -983,15 +970,15 @@ } }, "node_modules/@radix-ui/react-alert-dialog": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.14.tgz", - "integrity": "sha512-IOZfZ3nPvN6lXpJTBCunFQPRSvK8MDgSc1FB85xnIpUKOw9en0dJj8JmCAxV7BiZdtYlUpmrQjoTFkVYtdoWzQ==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dialog": "1.1.14", + "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, @@ -1010,6 +997,24 @@ } } }, + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-arrow": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", @@ -1034,12 +1039,35 @@ } }, "node_modules/@radix-ui/react-aspect-ratio": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz", - "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.8.tgz", + "integrity": "sha512-5nZrJTF7gH+e0nZS7/QxFz6tJV4VimhQb1avEgtsJxvvIp5JilL+c58HICsKzPxghdwaDt48hEfPM1au4zGy+w==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", @@ -1057,13 +1085,13 @@ } }, "node_modules/@radix-ui/react-avatar": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", - "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.11.tgz", + "integrity": "sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==", "license": "MIT", "dependencies": { - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-is-hydrated": "0.1.0", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -1083,16 +1111,54 @@ } } }, - "node_modules/@radix-ui/react-checkbox": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.2.tgz", - "integrity": "sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==", + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", + "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", @@ -1114,16 +1180,16 @@ } }, "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.11.tgz", - "integrity": "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -1169,6 +1235,24 @@ } } }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", @@ -1200,14 +1284,14 @@ } }, "node_modules/@radix-ui/react-context-menu": { - "version": "2.2.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.15.tgz", - "integrity": "sha512-UsQUMjcYTsBjTSXw0P3GO0werEQvUY2plgRQuKoCTtkNr45q1DiL51j4m7gxhABzZ0BadoXNsIbg7F3KwiUBbw==", + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz", + "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" @@ -1228,20 +1312,20 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz", - "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", @@ -1263,6 +1347,24 @@ } } }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", @@ -1279,12 +1381,12 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz", - "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", @@ -1306,16 +1408,16 @@ } }, "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.15.tgz", - "integrity": "sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==", + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, @@ -1335,9 +1437,9 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz", - "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -1375,18 +1477,18 @@ } }, "node_modules/@radix-ui/react-hover-card": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.14.tgz", - "integrity": "sha512-CPYZ24Mhirm+g6D8jArmLzjYu4Eyg3TTUHswR26QgzXBHBe64BO/RHOJKzmF/Dxb4y4f9PKyJdwm/O/AhNkb+Q==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", + "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, @@ -1424,12 +1526,35 @@ } }, "node_modules/@radix-ui/react-label": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", - "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", @@ -1447,25 +1572,25 @@ } }, "node_modules/@radix-ui/react-menu": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.15.tgz", - "integrity": "sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==", + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "aria-hidden": "^1.2.4", @@ -1486,21 +1611,39 @@ } } }, - "node_modules/@radix-ui/react-menubar": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.15.tgz", - "integrity": "sha512-Z71C7LGD+YDYo3TV81paUs8f3Zbmkvg6VLRQpKYfzioOE6n7fOhA3ApK/V/2Odolxjoc4ENk8AYCjohCNayd5A==", + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menubar": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz", + "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { @@ -1519,19 +1662,19 @@ } }, "node_modules/@radix-ui/react-navigation-menu": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.13.tgz", - "integrity": "sha512-WG8wWfDiJlSF5hELjwfjSGOXcBR/ZMhBFCGYe8vERpC39CQYZeq1PQ2kaYHdye3V95d06H89KGMsVCIE4LWo3g==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz", + "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", @@ -1555,21 +1698,21 @@ } }, "node_modules/@radix-ui/react-popover": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.14.tgz", - "integrity": "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", @@ -1591,10 +1734,28 @@ } } }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popper": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.7.tgz", - "integrity": "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", @@ -1648,9 +1809,9 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz", - "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", @@ -1694,14 +1855,70 @@ } } }, - "node_modules/@radix-ui/react-progress": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", - "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==", + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.8.tgz", + "integrity": "sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", + "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", @@ -1719,18 +1936,18 @@ } }, "node_modules/@radix-ui/react-radio-group": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.7.tgz", - "integrity": "sha512-9w5XhD0KPOrm92OTTE0SysH3sYzHsSTHNvZgUBo/VZ80VdYyB5RneDbc0dKpURS24IxkoFRu/hI0i4XyfFwY6g==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", + "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" @@ -1751,12 +1968,12 @@ } }, "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz", - "integrity": "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", @@ -1782,17 +1999,17 @@ } }, "node_modules/@radix-ui/react-scroll-area": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.9.tgz", - "integrity": "sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", "license": "MIT", "dependencies": { "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -1813,22 +2030,22 @@ } }, "node_modules/@radix-ui/react-select": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.5.tgz", - "integrity": "sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", "license": "MIT", "dependencies": { "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", @@ -1855,13 +2072,54 @@ } } }, - "node_modules/@radix-ui/react-separator": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", - "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.8.tgz", + "integrity": "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", @@ -1879,13 +2137,13 @@ } }, "node_modules/@radix-ui/react-slider": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.5.tgz", - "integrity": "sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", "license": "MIT", "dependencies": { "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", @@ -1912,9 +2170,9 @@ } }, "node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" @@ -1930,12 +2188,12 @@ } }, "node_modules/@radix-ui/react-switch": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.5.tgz", - "integrity": "sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", @@ -1959,18 +2217,18 @@ } }, "node_modules/@radix-ui/react-tabs": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.12.tgz", - "integrity": "sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { @@ -1989,18 +2247,18 @@ } }, "node_modules/@radix-ui/react-toast": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.14.tgz", - "integrity": "sha512-nAP5FBxBJGQ/YfUB+r+O6USFVkWq3gAInkxyEnmvEV5jtSbfDhfa4hwX8CraCnbjMLsE7XSf/K75l9xXY7joWg==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", + "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", @@ -2023,12 +2281,12 @@ } }, "node_modules/@radix-ui/react-toggle": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.9.tgz", - "integrity": "sha512-ZoFkBBz9zv9GWer7wIjvdRxmh2wyc2oKWw6C6CseWd6/yq1DK/l5lJ+wnsmFwJZbBYqr02mrf8A2q/CVCuM3ZA==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", + "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, @@ -2048,17 +2306,17 @@ } }, "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.10.tgz", - "integrity": "sha512-kiU694Km3WFLTC75DdqgM/3Jauf3rD9wxeS9XtyWFKsBUeZA337lC+6uUazT7I1DhanZ5gyD5Stf8uf2dbQxOQ==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", + "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", - "@radix-ui/react-toggle": "1.1.9", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-toggle": "1.1.10", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { @@ -2077,19 +2335,19 @@ } }, "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.7.tgz", - "integrity": "sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", @@ -2110,6 +2368,24 @@ } } }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-use-callback-ref": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", @@ -2294,9 +2570,9 @@ "license": "MIT" }, "node_modules/@remix-run/router": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz", - "integrity": "sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==", + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz", + "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -2310,9 +2586,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", - "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", "cpu": [ "arm" ], @@ -2324,9 +2600,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", - "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", "cpu": [ "arm64" ], @@ -2338,9 +2614,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", - "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", "cpu": [ "arm64" ], @@ -2352,9 +2628,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", - "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", "cpu": [ "x64" ], @@ -2365,10 +2641,38 @@ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", - "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", "cpu": [ "arm" ], @@ -2380,9 +2684,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", - "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", "cpu": [ "arm" ], @@ -2394,9 +2698,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", - "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", "cpu": [ "arm64" ], @@ -2408,9 +2712,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", - "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", "cpu": [ "arm64" ], @@ -2421,10 +2725,52 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", - "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", "cpu": [ "ppc64" ], @@ -2436,9 +2782,23 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", - "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", "cpu": [ "riscv64" ], @@ -2450,9 +2810,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", - "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", "cpu": [ "s390x" ], @@ -2464,9 +2824,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", - "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", "cpu": [ "x64" ], @@ -2478,9 +2838,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", - "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", "cpu": [ "x64" ], @@ -2491,10 +2851,38 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", - "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", "cpu": [ "arm64" ], @@ -2506,9 +2894,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", - "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", "cpu": [ "ia32" ], @@ -2519,10 +2907,24 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", - "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", "cpu": [ "x64" ], @@ -2534,15 +2936,15 @@ ] }, "node_modules/@swc/core": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.2.tgz", - "integrity": "sha512-YWqn+0IKXDhqVLKoac4v2tV6hJqB/wOh8/Br8zjqeqBkKa77Qb0Kw2i7LOFzjFNZbZaPH6AlMGlBwNrxaauaAg==", + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.24.tgz", + "integrity": "sha512-5Hj8aNasue7yusUt8LGCUe/AjM7RMAce8ZoyDyiFwx7Al+GbYKL+yE7g4sJk8vEr1dKIkTRARkNIJENc4CjkBQ==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.23" + "@swc/types": "^0.1.26" }, "engines": { "node": ">=10" @@ -2552,16 +2954,18 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.13.2", - "@swc/core-darwin-x64": "1.13.2", - "@swc/core-linux-arm-gnueabihf": "1.13.2", - "@swc/core-linux-arm64-gnu": "1.13.2", - "@swc/core-linux-arm64-musl": "1.13.2", - "@swc/core-linux-x64-gnu": "1.13.2", - "@swc/core-linux-x64-musl": "1.13.2", - "@swc/core-win32-arm64-msvc": "1.13.2", - "@swc/core-win32-ia32-msvc": "1.13.2", - "@swc/core-win32-x64-msvc": "1.13.2" + "@swc/core-darwin-arm64": "1.15.24", + "@swc/core-darwin-x64": "1.15.24", + "@swc/core-linux-arm-gnueabihf": "1.15.24", + "@swc/core-linux-arm64-gnu": "1.15.24", + "@swc/core-linux-arm64-musl": "1.15.24", + "@swc/core-linux-ppc64-gnu": "1.15.24", + "@swc/core-linux-s390x-gnu": "1.15.24", + "@swc/core-linux-x64-gnu": "1.15.24", + "@swc/core-linux-x64-musl": "1.15.24", + "@swc/core-win32-arm64-msvc": "1.15.24", + "@swc/core-win32-ia32-msvc": "1.15.24", + "@swc/core-win32-x64-msvc": "1.15.24" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -2573,9 +2977,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.2.tgz", - "integrity": "sha512-44p7ivuLSGFJ15Vly4ivLJjg3ARo4879LtEBAabcHhSZygpmkP8eyjyWxrH3OxkY1eRZSIJe8yRZPFw4kPXFPw==", + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.24.tgz", + "integrity": "sha512-uM5ZGfFXjtvtJ+fe448PVBEbn/CSxS3UAyLj3O9xOqKIWy3S6hPTXSPbszxkSsGDYKi+YFhzAsR4r/eXLxEQ0g==", "cpu": [ "arm64" ], @@ -2590,9 +2994,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.2.tgz", - "integrity": "sha512-Lb9EZi7X2XDAVmuUlBm2UvVAgSCbD3qKqDCxSI4jEOddzVOpNCnyZ/xEampdngUIyDDhhJLYU9duC+Mcsv5Y+A==", + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.24.tgz", + "integrity": "sha512-fMIb/Zfn929pw25VMBhV7Ji2Dl+lCWtUPNdYJQYOke+00E5fcQ9ynxtP8+qhUo/HZc+mYQb1gJxwHM9vty+lXg==", "cpu": [ "x64" ], @@ -2607,9 +3011,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.2.tgz", - "integrity": "sha512-9TDe/92ee1x57x+0OqL1huG4BeljVx0nWW4QOOxp8CCK67Rpc/HHl2wciJ0Kl9Dxf2NvpNtkPvqj9+BUmM9WVA==", + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.24.tgz", + "integrity": "sha512-vOkjsyjjxnoYx3hMEWcGxQrMgnNrRm6WAegBXrN8foHtDAR+zpdhpGF5a4lj1bNPgXAvmysjui8cM1ov/Clkaw==", "cpu": [ "arm" ], @@ -2624,9 +3028,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.2.tgz", - "integrity": "sha512-KJUSl56DBk7AWMAIEcU83zl5mg3vlQYhLELhjwRFkGFMvghQvdqQ3zFOYa4TexKA7noBZa3C8fb24rI5sw9Exg==", + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.24.tgz", + "integrity": "sha512-h/oNu+upkXJ6Cicnq7YGVj9PkdfarLCdQa8l/FlHYvfv8CEiMaeeTnpLU7gSBH/rGxosM6Qkfa/J9mThGF9CLA==", "cpu": [ "arm64" ], @@ -2641,9 +3045,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.2.tgz", - "integrity": "sha512-teU27iG1oyWpNh9CzcGQ48ClDRt/RCem7mYO7ehd2FY102UeTws2+OzLESS1TS1tEZipq/5xwx3FzbVgiolCiQ==", + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.24.tgz", + "integrity": "sha512-ZpF/pRe1guk6sKzQI9D1jAORtjTdNlyeXn9GDz8ophof/w2WhojRblvSDJaGe7rJjcPN8AaOkhwdRUh7q8oYIg==", "cpu": [ "arm64" ], @@ -2657,10 +3061,44 @@ "node": ">=10" } }, + "node_modules/@swc/core-linux-ppc64-gnu": { + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.24.tgz", + "integrity": "sha512-QZEsZfisHTSJlmyChgDFNmKPb3W6Lhbfo/O76HhIngfEdnQNmukS38/VSe1feho+xkV5A5hETyCbx3sALBZKAQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-s390x-gnu": { + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.24.tgz", + "integrity": "sha512-DLdJKVsJgglqQrJBuoUYNmzm3leI7kUZhLbZGHv42onfKsGf6JDS3+bzCUQfte/XOqDjh/tmmn1DR/CF/tCJFw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.2.tgz", - "integrity": "sha512-dRPsyPyqpLD0HMRCRpYALIh4kdOir8pPg4AhNQZLehKowigRd30RcLXGNVZcc31Ua8CiPI4QSgjOIxK+EQe4LQ==", + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.24.tgz", + "integrity": "sha512-IpLYfposPA/XLxYOKpRfeccl1p5dDa3+okZDHHTchBkXEaVCnq5MADPmIWwIYj1tudt7hORsEHccG5no6IUQRw==", "cpu": [ "x64" ], @@ -2675,9 +3113,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.2.tgz", - "integrity": "sha512-CCxETW+KkYEQDqz1SYC15YIWYheqFC+PJVOW76Maa/8yu8Biw+HTAcblKf2isrlUtK8RvrQN94v3UXkC2NzCEw==", + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.24.tgz", + "integrity": "sha512-JHy3fMSc0t/EPWgo74+OK5TGr51aElnzqfUPaiRf2qJ/BfX5CUCfMiWVBuhI7qmVMBnk1jTRnL/xZnOSHDPLYg==", "cpu": [ "x64" ], @@ -2692,9 +3130,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.2.tgz", - "integrity": "sha512-Wv/QTA6PjyRLlmKcN6AmSI4jwSMRl0VTLGs57PHTqYRwwfwd7y4s2fIPJVBNbAlXd795dOEP6d/bGSQSyhOX3A==", + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.24.tgz", + "integrity": "sha512-Txj+qUH1z2bUd1P3JvwByfjKFti3cptlAxhWgmunBUUxy/IW3CXLZ6l6Gk4liANadKkU71nIU1X30Z5vpMT3BA==", "cpu": [ "arm64" ], @@ -2709,9 +3147,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.2.tgz", - "integrity": "sha512-PuCdtNynEkUNbUXX/wsyUC+t4mamIU5y00lT5vJcAvco3/r16Iaxl5UCzhXYaWZSNVZMzPp9qN8NlSL8M5pPxw==", + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.24.tgz", + "integrity": "sha512-15D/nl3XwrhFpMv+MADFOiVwv3FvH9j8c6Rf8EXBT3Q5LoMh8YnDnSgPYqw1JzPnksvsBX6QPXLiPqmcR/Z4qQ==", "cpu": [ "ia32" ], @@ -2726,9 +3164,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.2.tgz", - "integrity": "sha512-qlmMkFZJus8cYuBURx1a3YAG2G7IW44i+FEYV5/32ylKkzGNAr9tDJSA53XNnNXkAB5EXSPsOz7bn5C3JlEtdQ==", + "version": "1.15.24", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.24.tgz", + "integrity": "sha512-PR0PlTlPra2JbaDphrOAzm6s0v9rA0F17YzB+XbWD95B4g2cWcZY9LAeTa4xll70VLw9Jr7xBrlohqlQmelMFQ==", "cpu": [ "x64" ], @@ -2750,9 +3188,9 @@ "license": "Apache-2.0" }, "node_modules/@swc/types": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz", - "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==", + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.26.tgz", + "integrity": "sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2760,38 +3198,22 @@ } }, "node_modules/@tailwindcss/typography": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", - "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", "dev": true, "license": "MIT", "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, - "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@tanstack/query-core": { - "version": "5.83.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.83.0.tgz", - "integrity": "sha512-0M8dA+amXUkyz5cVUm/B+zSk3xkQAcuXuz5/Q/LveT4ots2rBpPTZOzd7yJa2Utsf8D2Upl5KyjhHRY+9lB/XA==", + "version": "5.97.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.97.0.tgz", + "integrity": "sha512-QdpLP5VzVMgo4VtaPppRA2W04UFjIqX+bxke/ZJhE5cfd5UPkRzqIAJQt9uXkQJjqE8LBOMbKv7f8HCsZltXlg==", "license": "MIT", "funding": { "type": "github", @@ -2799,12 +3221,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.83.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.83.0.tgz", - "integrity": "sha512-/XGYhZ3foc5H0VM2jLSD/NyBRIOK4q9kfeml4+0x2DlL6xVuAcVEW+hTlTapAmejObg0i3eNqhkr2dT+eciwoQ==", + "version": "5.97.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.97.0.tgz", + "integrity": "sha512-y4So4eGcQoK2WVMAcDNZE9ofB/p5v1OlKvtc1F3uqHwrtifobT7q+ZnXk2mRkc8E84HKYSlAE9z6HXl2V0+ySQ==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.83.0" + "@tanstack/query-core": "5.97.0" }, "funding": { "type": "github", @@ -2920,9 +3342,9 @@ } }, "node_modules/@types/d3-array": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", - "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", "license": "MIT" }, "node_modules/@types/d3-color": { @@ -2947,33 +3369,33 @@ } }, "node_modules/@types/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", "license": "MIT" }, "node_modules/@types/d3-scale": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", - "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", "license": "MIT", "dependencies": { "@types/d3-time": "*" } }, "node_modules/@types/d3-shape": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", - "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", "license": "MIT", "dependencies": { "@types/d3-path": "*" } }, "node_modules/@types/d3-time": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", - "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", "license": "MIT" }, "node_modules/@types/d3-timer": { @@ -2990,9 +3412,9 @@ "license": "MIT" }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, @@ -3004,9 +3426,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", - "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", + "version": "22.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.17.tgz", + "integrity": "sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3014,21 +3436,21 @@ } }, "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", "devOptional": true, "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", - "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", + "version": "18.3.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz", + "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", "devOptional": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { @@ -3042,21 +3464,20 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", - "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.1.tgz", + "integrity": "sha512-eSkwoemjo76bdXl2MYqtxg51HNwUSkWfODUOQ3PaTLZGh9uIWWFZIjyjaJnex7wXDu+TRx+ATsnSxdN9YWfRTQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/type-utils": "8.38.0", - "@typescript-eslint/utils": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.58.1", + "@typescript-eslint/type-utils": "8.58.1", + "@typescript-eslint/utils": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3066,9 +3487,9 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.38.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "@typescript-eslint/parser": "^8.58.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { @@ -3082,17 +3503,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", - "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.1.tgz", + "integrity": "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.58.1", + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3102,20 +3523,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", - "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.1.tgz", + "integrity": "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.38.0", - "@typescript-eslint/types": "^8.38.0", - "debug": "^4.3.4" + "@typescript-eslint/tsconfig-utils": "^8.58.1", + "@typescript-eslint/types": "^8.58.1", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3125,18 +3546,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", - "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.1.tgz", + "integrity": "sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0" + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3147,9 +3568,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", - "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.1.tgz", + "integrity": "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw==", "dev": true, "license": "MIT", "engines": { @@ -3160,21 +3581,21 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", - "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.1.tgz", + "integrity": "sha512-HUFxvTJVroT+0rXVJC7eD5zol6ID+Sn5npVPWoFuHGg9Ncq5Q4EYstqR+UOqaNRFXi5TYkpXXkLhoCHe3G0+7w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/utils": "8.38.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1", + "@typescript-eslint/utils": "8.58.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3184,14 +3605,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.1.tgz", + "integrity": "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw==", "dev": true, "license": "MIT", "engines": { @@ -3203,22 +3624,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", - "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.1.tgz", + "integrity": "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.38.0", - "@typescript-eslint/tsconfig-utils": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/project-service": "8.58.1", + "@typescript-eslint/tsconfig-utils": "8.58.1", + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3228,46 +3648,59 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.5" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", - "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.1.tgz", + "integrity": "sha512-Ln8R0tmWC7pTtLOzgJzYTXSCjJ9rDNHAqTaVONF4FEi2qwce8mD9iSOxOpLFFvWp/wBFlew0mjM1L1ihYWfBdQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.58.1", + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3277,19 +3710,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", - "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.1.tgz", + "integrity": "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.58.1", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3299,6 +3732,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@vitejs/plugin-react-swc": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz", @@ -3437,9 +3883,9 @@ "license": "BSD-3-Clause" }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "bin": { @@ -3497,9 +3943,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -3514,21 +3960,21 @@ } }, "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3573,9 +4019,9 @@ "license": "Python-2.0" }, "node_modules/aria-hidden": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", - "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" @@ -3612,9 +4058,9 @@ "license": "MIT" }, "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", "dev": true, "funding": [ { @@ -3632,10 +4078,9 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, @@ -3653,8 +4098,22 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.17", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.17.tgz", + "integrity": "sha512-HdrkN8eVG2CXxeifv/VdJ4A4RSra1DTW8dc/hdxzhGHN8QePs6gKaWM9pHPcpCoxYZJuOZ8drHmbdpLHjCYjLA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -3668,9 +4127,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -3691,9 +4150,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "dev": true, "funding": [ { @@ -3711,10 +4170,11 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -3767,9 +4227,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001727", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", - "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "version": "1.0.30001787", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz", + "integrity": "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==", "dev": true, "funding": [ { @@ -3871,6 +4331,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", "dependencies": { "clsx": "^2.1.1" }, @@ -3907,6 +4368,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -3919,6 +4381,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/combined-stream": { @@ -3954,6 +4417,8 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4010,9 +4475,9 @@ "license": "MIT" }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, "node_modules/d3-array": { @@ -4046,9 +4511,9 @@ } }, "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", "license": "ISC", "engines": { "node": ">=12" @@ -4294,16 +4759,10 @@ "node": ">= 0.4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, "node_modules/electron-to-chromium": { - "version": "1.5.192", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.192.tgz", - "integrity": "sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg==", + "version": "1.5.334", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.334.tgz", + "integrity": "sha512-mgjZAz7Jyx1SRCwEpy9wefDS7GvNPazLthHg8eQMJ76wBdGQQDW33TCrUTvQ4wzpmOrv2zrFoD3oNufMdyMpog==", "dev": true, "license": "ISC" }, @@ -4335,12 +4794,6 @@ "embla-carousel": "8.6.0" } }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, "node_modules/entities": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", @@ -4411,9 +4864,9 @@ } }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -4421,32 +4874,35 @@ "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/escalade": { @@ -4495,26 +4951,25 @@ } }, "node_modules/eslint": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", - "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.32.0", - "@eslint/plugin-kit": "^0.3.4", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", + "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", @@ -4533,7 +4988,7 @@ "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -4569,9 +5024,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", - "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -4641,9 +5096,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -4720,25 +5175,25 @@ "license": "MIT" }, "node_modules/fast-equals": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", - "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz", + "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==", "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -4771,9 +5226,9 @@ "license": "MIT" }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -4836,28 +5291,12 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/form-data": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", @@ -4876,16 +5315,16 @@ } }, "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "dev": true, "license": "MIT", "engines": { "node": "*" }, "funding": { - "type": "patreon", + "type": "github", "url": "https://github.com/sponsors/rawify" } }, @@ -4960,26 +5399,6 @@ "node": ">= 0.4" } }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -4992,30 +5411,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/globals": { "version": "15.15.0", "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", @@ -5042,13 +5437,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -5113,6 +5501,15 @@ "node": ">=12" } }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "license": "MIT", + "dependencies": { + "void-elements": "3.1.0" + } + }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -5142,6 +5539,46 @@ "node": ">= 6" } }, + "node_modules/i18next": { + "version": "26.0.6", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.0.6.tgz", + "integrity": "sha512-A4U6eCXodIbrhf8EarRurB9/4ebyaurH4+fu4gig9bqxmpSt+fCAFm/GpRQDcN1Xzu/LdFCx4nYHsnM1edIIbg==", + "funding": [ + { + "type": "individual", + "url": "https://www.locize.com/i18next" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + }, + { + "type": "individual", + "url": "https://www.locize.com" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2" + }, + "peerDependencies": { + "typescript": "^5 || ^6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/i18next-browser-languagedetector": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.2.1.tgz", + "integrity": "sha512-bZg8+4bdmaOiApD7N7BPT9W8MLZG+nPTOFlLiJiT8uzKXFjhxw4v2ierCXOwB5sFDMtuA5G4kgYZ0AznZxQ/cw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -5234,9 +5671,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -5257,15 +5694,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -5298,27 +5726,13 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -5331,9 +5745,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -5469,23 +5883,11 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -5526,448 +5928,11 @@ "vite": ">=5.0.0 <8.0.0" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", - "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/android-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", - "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/android-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", - "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/android-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", - "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", - "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/darwin-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", - "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", - "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", - "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", - "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", - "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", - "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-loong64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", - "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", - "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", - "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", - "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-s390x": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", - "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", - "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", - "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", - "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/sunos-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", - "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/win32-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", - "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/win32-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", - "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/@esbuild/win32-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", - "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/lovable-tagger/node_modules/esbuild": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", - "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.0", - "@esbuild/android-arm": "0.25.0", - "@esbuild/android-arm64": "0.25.0", - "@esbuild/android-x64": "0.25.0", - "@esbuild/darwin-arm64": "0.25.0", - "@esbuild/darwin-x64": "0.25.0", - "@esbuild/freebsd-arm64": "0.25.0", - "@esbuild/freebsd-x64": "0.25.0", - "@esbuild/linux-arm": "0.25.0", - "@esbuild/linux-arm64": "0.25.0", - "@esbuild/linux-ia32": "0.25.0", - "@esbuild/linux-loong64": "0.25.0", - "@esbuild/linux-mips64el": "0.25.0", - "@esbuild/linux-ppc64": "0.25.0", - "@esbuild/linux-riscv64": "0.25.0", - "@esbuild/linux-s390x": "0.25.0", - "@esbuild/linux-x64": "0.25.0", - "@esbuild/netbsd-arm64": "0.25.0", - "@esbuild/netbsd-x64": "0.25.0", - "@esbuild/openbsd-arm64": "0.25.0", - "@esbuild/openbsd-x64": "0.25.0", - "@esbuild/sunos-x64": "0.25.0", - "@esbuild/win32-arm64": "0.25.0", - "@esbuild/win32-ia32": "0.25.0", - "@esbuild/win32-x64": "0.25.0" - } - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, "node_modules/lucide-react": { "version": "0.462.0", "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.462.0.tgz", "integrity": "sha512-NTL7EbAao9IFtuSivSZgrAh4fZd09Lr+6MTkqIxuHaH2nnYiYIzXPo06cOxHg9wKLdj6LL8TByG4qpePqwgx/g==", + "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" } @@ -6059,9 +6024,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -6071,15 +6036,6 @@ "node": "*" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -6134,9 +6090,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", "dev": true, "license": "MIT" }, @@ -6149,16 +6105,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/nwsapi": { "version": "2.2.23", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", @@ -6234,12 +6180,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6280,6 +6220,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6291,22 +6232,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "license": "MIT" }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -6331,9 +6256,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -6352,18 +6277,65 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "license": "MIT", "engines": { "node": ">= 6" } }, + "node_modules/playwright": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", + "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.59.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", + "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz", + "integrity": "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==", "funding": [ { "type": "opencollective", @@ -6406,28 +6378,9 @@ } }, "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", "funding": [ { "type": "opencollective", @@ -6440,21 +6393,53 @@ ], "license": "MIT", "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" + "camelcase-css": "^2.0.1" }, "engines": { - "node": ">= 14" + "node": "^12 || ^14 || >= 16" }, "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { + "jiti": { + "optional": true + }, "postcss": { "optional": true }, - "ts-node": { + "tsx": { + "optional": true + }, + "yaml": { "optional": true } } @@ -6484,7 +6469,7 @@ "postcss": "^8.2.14" } }, - "node_modules/postcss-selector-parser": { + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", @@ -6497,6 +6482,20 @@ "node": ">=4" } }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -6529,17 +6528,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -6554,14 +6542,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -6669,9 +6649,9 @@ } }, "node_modules/react-hook-form": { - "version": "7.61.1", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.61.1.tgz", - "integrity": "sha512-2vbXUFDYgqEgM2RcXcAT2PwDW/80QARi+PKmHy5q2KhuKvOlG8iIYgf7eIlIANR5trW9fJbP4r5aub3a4egsew==", + "version": "7.72.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.72.1.tgz", + "integrity": "sha512-RhwBoy2ygeVZje+C+bwJ8g0NjTdBmDlJvAUHTxRjTmSUKPYsKfMphkS2sgEMotsY03bP358yEYlnUeZy//D9Ig==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -6684,16 +6664,45 @@ "react": "^16.8.0 || ^17 || ^18 || ^19" } }, + "node_modules/react-i18next": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-17.0.4.tgz", + "integrity": "sha512-hQipmK4EF0y6RO6tt6WuqnmWpWYEXmQUUzecmMBuNsIgYd3smXcG4GtYPWhvgxn0pqMOItKlEO8H24HCs5hc3g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2", + "html-parse-stringify": "^3.0.1", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "i18next": ">= 26.0.1", + "react": ">= 16.8.0", + "typescript": "^5 || ^6" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/react-remove-scroll": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", "license": "MIT", "dependencies": { "react-remove-scroll-bar": "^2.3.7", @@ -6748,12 +6757,12 @@ } }, "node_modules/react-router": { - "version": "6.30.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.1.tgz", - "integrity": "sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==", + "version": "6.30.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.3.tgz", + "integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.23.0" + "@remix-run/router": "1.23.2" }, "engines": { "node": ">=14.0.0" @@ -6763,13 +6772,13 @@ } }, "node_modules/react-router-dom": { - "version": "6.30.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.1.tgz", - "integrity": "sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==", + "version": "6.30.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz", + "integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.23.0", - "react-router": "6.30.1" + "@remix-run/router": "1.23.2", + "react-router": "6.30.3" }, "engines": { "node": ">=14.0.0" @@ -6885,6 +6894,12 @@ "decimal.js-light": "^2.4.1" } }, + "node_modules/recharts/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -6907,18 +6922,21 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6934,9 +6952,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -6944,13 +6962,13 @@ } }, "node_modules/rollup": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", - "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -6960,22 +6978,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.0", - "@rollup/rollup-android-arm64": "4.24.0", - "@rollup/rollup-darwin-arm64": "4.24.0", - "@rollup/rollup-darwin-x64": "4.24.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", - "@rollup/rollup-linux-arm-musleabihf": "4.24.0", - "@rollup/rollup-linux-arm64-gnu": "4.24.0", - "@rollup/rollup-linux-arm64-musl": "4.24.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", - "@rollup/rollup-linux-riscv64-gnu": "4.24.0", - "@rollup/rollup-linux-s390x-gnu": "4.24.0", - "@rollup/rollup-linux-x64-gnu": "4.24.0", - "@rollup/rollup-linux-x64-musl": "4.24.0", - "@rollup/rollup-win32-arm64-msvc": "4.24.0", - "@rollup/rollup-win32-ia32-msvc": "4.24.0", - "@rollup/rollup-win32-x64-msvc": "4.24.0", + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", "fsevents": "~2.3.2" } }, @@ -7032,9 +7059,9 @@ } }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -7048,6 +7075,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -7060,6 +7088,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7072,18 +7101,6 @@ "dev": true, "license": "ISC" }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/sonner": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.4.tgz", @@ -7128,102 +7145,6 @@ "dev": true, "license": "MIT" }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -7271,17 +7192,17 @@ "license": "MIT" }, "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { @@ -7325,9 +7246,9 @@ "license": "MIT" }, "node_modules/tailwind-merge": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", - "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.1.tgz", + "integrity": "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==", "license": "MIT", "funding": { "type": "github", @@ -7335,9 +7256,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", - "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -7348,7 +7269,7 @@ "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.6", + "jiti": "^1.21.7", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", @@ -7357,7 +7278,7 @@ "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", @@ -7380,6 +7301,26 @@ "tailwindcss": ">=3.0.0 || insiders" } }, + "node_modules/tailwindcss-rtl": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/tailwindcss-rtl/-/tailwindcss-rtl-0.9.0.tgz", + "integrity": "sha512-y7yC8QXjluDBEFMSX33tV6xMYrf0B3sa+tOB5JSQb6/G6laBU313a+Z+qxu55M1Qyn8tDMttjomsA8IsJD+k+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -7422,14 +7363,13 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -7442,7 +7382,6 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -7460,7 +7399,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -7541,9 +7479,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, "license": "MIT", "engines": { @@ -7560,9 +7498,9 @@ "license": "Apache-2.0" }, "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/type-check": { @@ -7579,10 +7517,10 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -7593,16 +7531,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", - "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.58.1.tgz", + "integrity": "sha512-gf6/oHChByg9HJvhMO1iBexJh12AqqTfnuxscMDOVqfJW3htsdRJI/GfPpHTTcyeB8cSTUY2JcZmVgoyPqcrDg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.38.0", - "@typescript-eslint/parser": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/utils": "8.38.0" + "@typescript-eslint/eslint-plugin": "8.58.1", + "@typescript-eslint/parser": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1", + "@typescript-eslint/utils": "8.58.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7612,8 +7550,8 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/undici-types": { @@ -7634,9 +7572,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -7729,9 +7667,9 @@ } }, "node_modules/use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -7779,9 +7717,9 @@ } }, "node_modules/vite": { - "version": "5.4.19", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", - "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -7861,6 +7799,436 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, "node_modules/vitest": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", @@ -7947,6 +8315,15 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -8012,6 +8389,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -8050,94 +8428,6 @@ "node": ">=0.10.0" } }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/ws": { "version": "8.20.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", @@ -8177,18 +8467,6 @@ "dev": true, "license": "MIT" }, - "node_modules/yaml": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", - "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 04b2365..eac4bdb 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "lint": "eslint .", "preview": "vite preview", "test": "vitest run", - "test:watch": "vitest" + "test:watch": "vitest", + "test:e2e": "playwright test", + "test:e2e:install": "playwright install --with-deps chromium" }, "dependencies": { "@hookform/resolvers": "^3.10.0", @@ -47,6 +49,8 @@ "cmdk": "^1.1.1", "date-fns": "^3.6.0", "embla-carousel-react": "^8.6.0", + "i18next": "^26.0.6", + "i18next-browser-languagedetector": "^8.2.1", "input-otp": "^1.4.2", "lucide-react": "^0.462.0", "next-themes": "^0.3.0", @@ -54,6 +58,7 @@ "react-day-picker": "^8.10.1", "react-dom": "^18.3.1", "react-hook-form": "^7.61.1", + "react-i18next": "^17.0.4", "react-resizable-panels": "^2.1.9", "react-router-dom": "^6.30.1", "recharts": "^2.15.4", @@ -65,9 +70,10 @@ }, "devDependencies": { "@eslint/js": "^9.32.0", + "@playwright/test": "^1.59.1", + "@tailwindcss/typography": "^0.5.16", "@testing-library/jest-dom": "^6.6.0", "@testing-library/react": "^16.0.0", - "@tailwindcss/typography": "^0.5.16", "@types/node": "^22.16.5", "@types/react": "^18.3.23", "@types/react-dom": "^18.3.7", @@ -81,6 +87,7 @@ "lovable-tagger": "^1.1.13", "postcss": "^8.5.6", "tailwindcss": "^3.4.17", + "tailwindcss-rtl": "^0.9.0", "typescript": "^5.8.3", "typescript-eslint": "^8.38.0", "vite": "^5.4.19", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..66b3b3a --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,42 @@ +import { defineConfig, devices } from "@playwright/test"; + +/** + * Playwright configuration for EnCoach frontend smoke tests. + * + * By default we run against a Vite preview server on localhost:4173. In CI + * this is started by the `playwright` step in .github/workflows/ci.yml after + * `npm run build`. + * + * Override the base URL with `PLAYWRIGHT_BASE_URL=https://... npx playwright + * test` to run against a deployed environment. + */ +const baseURL = process.env.PLAYWRIGHT_BASE_URL || "http://localhost:4173"; + +export default defineConfig({ + testDir: "./e2e", + timeout: 30_000, + expect: { timeout: 5_000 }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + reporter: process.env.CI ? [["github"], ["list"]] : [["list"]], + use: { + baseURL, + trace: "on-first-retry", + screenshot: "only-on-failure", + }, + webServer: process.env.PLAYWRIGHT_SKIP_WEBSERVER + ? undefined + : { + command: "npm run preview -- --host 127.0.0.1 --port 4173", + url: baseURL, + reuseExistingServer: !process.env.CI, + timeout: 60_000, + }, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + ], +}); diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..398952a92aa732f858af7bd64cc93704107c7291 GIT binary patch literal 4406 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 NP*>JQR6el|`5(fdcP;<` literal 0 HcmV?d00001 diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..9943934bf0bffe52af72e21a224daa02c96961e5 GIT binary patch literal 532 zcmV+v0_**WP)Dh-5S-b6+p!}YL}7sdAzF~AkSRk=LxBth5=azKQ6Wn7`jVQC4(LcjO+`iRCZeJM z3j{&L4oHrj|GPnVjL+YJVeeaHBlu|U|CDjmyO3yKT;A&s!HJd!#l44Tp+kB$mW@xM?!)E zJi)r4ZUNj(ja0jRzj@_MaqmZ2UX(Bbu%d~$c#`l9)4(7XQ}P3vovdN+RC;Uu_DU}) zpZ9iob!X2?4;T>C&eQ|2p=r>nx%d0?giD9gl#W&#XKl>3!GAI07y-Y~9HS6d3$a?I zMgo#4Ls~i-i2^`f!K%Nzy(BA2Lp1gP%7bGG-|+99(a*(vx|r}fbcC=47cAU=75EJ> z9k8Cvzn(ua2sH)NC=uicG>ZVCIU(Q#y!&b6!iS2beqB21UazGZII|-ZPM}hLjR2uI zfIRzTJ8uUzsu&oSIi;0kq7|KP^%1&HzD3gPZiD%YVLFz%Dm^}rSbh-wTB@+t$)+QC zK!_HkH;#{+*E*f;&8>4}o)4o3UcLpO=D;Fl_$V`jW-DL+x!0000CPRy=5(>sZXm=A`b=e?@$tLl37YJmSc zIBtXao-7-?uNLy$Sh=hT%QATOuioIyK#eL=eEQN&=~7$?faR0xI;X-ID_ymzrZ zQh*Io-dbJdOHa+8HPcrC%n~$%XYk+{+7h=3d@*-?^FuU0Q;^u3;w&TcT$i7mKL@jO zB&SK1fGL4E$)~a7w*{>l%-3}nb8|0XZeTWSd8K1a@j z8Hh}p&1T5+Jf2#9>*XHwV>jwXTB$NssOP?(06*V_*>txj^G6QZwHdLEks=02TCJ9z zJb88wv3wUm55Ojg!*rSSoS`-XSUTxOAxn)zacdm8!)w6O*gIz662NUUrjs5wKf)xm zR7~}h4X=kf0#HWG04A7__;2A-2DLF(fKcl9=bA9<2S4sL2>xZrLjm|l;0>?ux>gZB zcz6qcScLx(0m-OEe|b7di>hp>fJLtaZ?U^q%R%tTem;h0W>H6t%LIGTj9>l!pEuu2}qwm!VjKX=zSMK2`YZ8io%uvye6<8 z7q7QheGb_xfUt%b*Y2>muol|wf>CNr&v%3DzqyM)PknXk+m)-k*Vo@U^Euc_*lI=Z z5qkuXU`J`6{1pCJFQ|*D$w9*R(bvD0=gUVvZ8pQ@#YK6x-5y@c{L5JGV($^4Mvq>u zZKLQYY&J0#6W)_s3iT+nEVJV)D?!h zEOr#s`MWfl+9#1xqiojM-ETy~6ZgeADh-5S-b6+p!}YL}7sdAzF~AkSRk=LxBth5=azKQ6Wn7`jVQC4(Lcj zO+`iRCZeJM3j{&L4oHrj|GPnVjBnw_j+ z?^Jqg{q{;PDWCUtd39&cN)H$i)Xvlcu%T(tf2z6n`}2fLhtiaeRvTw+%(lUQG2$2j zzt9|`5LXMaTBSw;k|{%4IvR-rKwZJAzq`F8D@sE&_5jL*V+r5z@14=l#eBM$@H%va zumu+^+z#?V%C^Lg*D_{bu-}kP6 iePhFggpfxse*x4D%mIWIakl^f002ov22Mn-LSTX*d+aU% literal 20373 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 diff --git a/public/logo-icon.png b/public/logo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5e9d9051e719ef5da398b6cab50ae0217af026 GIT binary patch literal 49453 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 GJ^eqn(uAP^ literal 0 HcmV?d00001 diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 0000000..d832f1d --- /dev/null +++ b/public/logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/templates/students.csv b/public/templates/students.csv new file mode 100644 index 0000000..d5a129a --- /dev/null +++ b/public/templates/students.csv @@ -0,0 +1,2 @@ +name,email +Jane Doe,jane@example.com diff --git a/src/App.tsx b/src/App.tsx index 536d970..6977187 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,126 +1,233 @@ +import { lazy, Suspense } from "react"; +import { ThemeProvider } from "next-themes"; import { Toaster } from "@/components/ui/toaster"; import { Toaster as Sonner } from "@/components/ui/sonner"; import { TooltipProvider } from "@/components/ui/tooltip"; import { QueryClientProvider } from "@tanstack/react-query"; -import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom"; +import { BrowserRouter, Routes, Route, Navigate, useNavigate } from "react-router-dom"; import { AuthProvider } from "@/contexts/AuthContext"; import ProtectedRoute from "@/components/ProtectedRoute"; import StudentLayout from "@/components/StudentLayout"; import TeacherLayout from "@/components/TeacherLayout"; import AdminLmsLayout from "@/components/AdminLmsLayout"; -import Login from "@/pages/Login"; -import Register from "@/pages/Register"; -import ForgotPassword from "@/pages/ForgotPassword"; -// Original platform pages -import AdminDashboard from "@/pages/AdminDashboard"; -import UsersPage from "@/pages/UsersPage"; -import EntitiesPage from "@/pages/EntitiesPage"; -import AssignmentsPage from "@/pages/AssignmentsPage"; -import ExamsListPage from "@/pages/ExamsListPage"; -import ExamStructuresPage from "@/pages/ExamStructuresPage"; -import RubricsPage from "@/pages/RubricsPage"; -import GenerationPage from "@/pages/GenerationPage"; -import ApprovalWorkflowsPage from "@/pages/ApprovalWorkflowsPage"; -import ClassroomsPage from "@/pages/ClassroomsPage"; -import StudentPerformancePage from "@/pages/StudentPerformancePage"; -import StatsCorporatePage from "@/pages/StatsCorporatePage"; -import RecordPage from "@/pages/RecordPage"; -import VocabularyPage from "@/pages/VocabularyPage"; -import GrammarPage from "@/pages/GrammarPage"; -import PaymentRecordPage from "@/pages/PaymentRecordPage"; -import TicketsPage from "@/pages/TicketsPage"; -import SettingsPage from "@/pages/SettingsPage"; -import ProfilePage from "@/pages/ProfilePage"; -import ExamPage from "@/pages/ExamPage"; -// Student pages -import StudentDashboard from "@/pages/student/StudentDashboard"; -import StudentCourses from "@/pages/student/StudentCourses"; -import StudentCourseDetail from "@/pages/student/StudentCourseDetail"; -import StudentAssignments from "@/pages/student/StudentAssignments"; -import StudentGrades from "@/pages/student/StudentGrades"; -import StudentAttendance from "@/pages/student/StudentAttendance"; -import StudentTimetable from "@/pages/student/StudentTimetable"; -import StudentProfile from "@/pages/student/StudentProfile"; -// Adaptive learning pages -import SubjectSelection from "@/pages/student/SubjectSelection"; -import DiagnosticTest from "@/pages/student/DiagnosticTest"; -import ProficiencyProfile from "@/pages/student/ProficiencyProfile"; -import LearningPlanPage from "@/pages/student/LearningPlan"; -import TopicLearning from "@/pages/student/TopicLearning"; -// Teacher pages -import TeacherDashboard from "@/pages/teacher/TeacherDashboard"; -import TeacherCourses from "@/pages/teacher/TeacherCourses"; -import CourseBuilder from "@/pages/teacher/CourseBuilder"; -import TeacherAssignments from "@/pages/teacher/TeacherAssignments"; -import TeacherAssignmentDetail from "@/pages/teacher/TeacherAssignmentDetail"; -import TeacherAttendance from "@/pages/teacher/TeacherAttendance"; -import TeacherStudents from "@/pages/teacher/TeacherStudents"; -import TeacherTimetable from "@/pages/teacher/TeacherTimetable"; -import TeacherProfile from "@/pages/teacher/TeacherProfile"; -// Admin LMS pages -import AdminLmsDashboard from "@/pages/admin/AdminLmsDashboard"; -import AdminCourses from "@/pages/admin/AdminCourses"; -import AdminStudents from "@/pages/admin/AdminStudents"; -import AdminTeachers from "@/pages/admin/AdminTeachers"; -import AdminBatches from "@/pages/admin/AdminBatches"; -import AdminBatchDetail from "@/pages/admin/AdminBatchDetail"; -import AdminTimetable from "@/pages/admin/AdminTimetable"; -import AdminReports from "@/pages/admin/AdminReports"; -import AdminSettings from "@/pages/admin/AdminSettings"; -import AdminProfileLms from "@/pages/admin/AdminProfile"; -import TaxonomyManager from "@/pages/admin/TaxonomyManager"; -import ResourceManager from "@/pages/admin/ResourceManager"; -import AcademicYearManager from "@/pages/admin/AcademicYearManager"; -import DepartmentManager from "@/pages/admin/DepartmentManager"; -import AdmissionList from "@/pages/admin/AdmissionList"; -import AdmissionDetail from "@/pages/admin/AdmissionDetail"; -import AdmissionRegisterPage from "@/pages/admin/AdmissionRegisterPage"; -import InstitutionalExamSessions from "@/pages/admin/InstitutionalExamSessions"; -import MarksheetManager from "@/pages/admin/MarksheetManager"; -import AdminStudentLeave from "@/pages/admin/AdminStudentLeave"; -import AdminFees from "@/pages/admin/AdminFees"; -import AdminLessons from "@/pages/admin/AdminLessons"; -import AdminGradebook from "@/pages/admin/AdminGradebook"; -import AdminStudentProgress from "@/pages/admin/AdminStudentProgress"; -import AdminLibrary from "@/pages/admin/AdminLibrary"; -import AdminActivities from "@/pages/admin/AdminActivities"; -import AdminFacilities from "@/pages/admin/AdminFacilities"; -import AdmissionApplication from "@/pages/AdmissionApplication"; -import SubjectRegistrationPage from "@/pages/student/SubjectRegistrationPage"; -// Courseware pages -import CourseChapters from "@/pages/teacher/CourseChapters"; -import ChapterDetail from "@/pages/teacher/ChapterDetail"; -import AiWorkbench from "@/pages/teacher/AiWorkbench"; -import TeacherDiscussionBoard from "@/pages/teacher/TeacherDiscussionBoard"; -import TeacherAnnouncements from "@/pages/teacher/TeacherAnnouncements"; -import StudentChapterView from "@/pages/student/StudentChapterView"; -import StudentDiscussionBoard from "@/pages/student/StudentDiscussionBoard"; -import StudentAnnouncements from "@/pages/student/StudentAnnouncements"; -import StudentMessages from "@/pages/student/StudentMessages"; -import StudentJourney from "@/pages/student/StudentJourney"; -import FaqManager from "@/pages/admin/FaqManager"; -import NotificationRules from "@/pages/admin/NotificationRules"; -import ApprovalWorkflowConfig from "@/pages/admin/ApprovalWorkflowConfig"; -import RolesPermissions from "@/pages/admin/RolesPermissions"; -import AuthorityMatrix from "@/pages/admin/AuthorityMatrix"; -import UserRoles from "@/pages/admin/UserRoles"; -import OfficialExamAccess from "@/pages/OfficialExamAccess"; -import FaqPage from "@/pages/FaqPage"; -import NotFound from "@/pages/NotFound"; import { queryClient } from "@/lib/query-client"; +import { Button } from "@/components/ui/button"; +import { ErrorBoundary } from "@/components/ErrorBoundary"; + +// ----------------------------------------------------------------------------- +// Lazy-loaded route pages +// ----------------------------------------------------------------------------- +// Keeping the initial bundle small matters on slow networks / modest hardware +// (many teachers/students open the app from school Wi-Fi). Each page below is +// split into its own chunk and only fetched when the user hits the matching +// route. The shell (layouts, providers, router) is still eagerly imported so +// the first paint stays snappy. + +// Auth +const Login = lazy(() => import("@/pages/Login")); +const Register = lazy(() => import("@/pages/Register")); +const EmailVerification = lazy(() => import("@/pages/EmailVerification")); +const OnboardingWizard = lazy(() => import("@/pages/OnboardingWizard")); +const ForgotPassword = lazy(() => import("@/pages/ForgotPassword")); +const ResetPassword = lazy(() => import("@/pages/ResetPassword")); +const ScoreVerification = lazy(() => import("@/pages/ScoreVerification")); + +// Original platform pages +const AdminDashboard = lazy(() => import("@/pages/AdminDashboard")); +const UsersPage = lazy(() => import("@/pages/UsersPage")); +const EntitiesPage = lazy(() => import("@/pages/EntitiesPage")); +const AssignmentsPage = lazy(() => import("@/pages/AssignmentsPage")); +const ExamsListPage = lazy(() => import("@/pages/ExamsListPage")); +const ExamStructuresPage = lazy(() => import("@/pages/ExamStructuresPage")); +const RubricsPage = lazy(() => import("@/pages/RubricsPage")); +const GenerationPage = lazy(() => import("@/pages/GenerationPage")); +const ApprovalWorkflowsPage = lazy(() => import("@/pages/ApprovalWorkflowsPage")); +const ClassroomsPage = lazy(() => import("@/pages/ClassroomsPage")); +const StudentPerformancePage = lazy(() => import("@/pages/StudentPerformancePage")); +const StatsCorporatePage = lazy(() => import("@/pages/StatsCorporatePage")); +const RecordPage = lazy(() => import("@/pages/RecordPage")); +const VocabularyPage = lazy(() => import("@/pages/VocabularyPage")); +const GrammarPage = lazy(() => import("@/pages/GrammarPage")); +const PaymentRecordPage = lazy(() => import("@/pages/PaymentRecordPage")); +const TicketsPage = lazy(() => import("@/pages/TicketsPage")); +const SettingsPage = lazy(() => import("@/pages/SettingsPage")); + +// Student pages +const StudentDashboard = lazy(() => import("@/pages/student/StudentDashboard")); +const StudentCourses = lazy(() => import("@/pages/student/StudentCourses")); +const StudentCourseDetail = lazy(() => import("@/pages/student/StudentCourseDetail")); +const StudentAssignments = lazy(() => import("@/pages/student/StudentAssignments")); +const StudentGrades = lazy(() => import("@/pages/student/StudentGrades")); +const StudentAttendance = lazy(() => import("@/pages/student/StudentAttendance")); +const StudentTimetable = lazy(() => import("@/pages/student/StudentTimetable")); +const StudentProfile = lazy(() => import("@/pages/student/StudentProfile")); + +// Adaptive learning pages +const SubjectSelection = lazy(() => import("@/pages/student/SubjectSelection")); +const DiagnosticTest = lazy(() => import("@/pages/student/DiagnosticTest")); +const ProficiencyProfile = lazy(() => import("@/pages/student/ProficiencyProfile")); +const LearningPlanPage = lazy(() => import("@/pages/student/LearningPlan")); +const TopicLearning = lazy(() => import("@/pages/student/TopicLearning")); + +// Teacher pages +const TeacherDashboard = lazy(() => import("@/pages/teacher/TeacherDashboard")); +const TeacherQuickSetup = lazy(() => import("@/pages/teacher/TeacherQuickSetup")); +const TeacherCourses = lazy(() => import("@/pages/teacher/TeacherCourses")); +const CourseBuilder = lazy(() => import("@/pages/teacher/CourseBuilder")); +const TeacherAssignments = lazy(() => import("@/pages/teacher/TeacherAssignments")); +const TeacherAssignmentDetail = lazy(() => import("@/pages/teacher/TeacherAssignmentDetail")); +const TeacherAttendance = lazy(() => import("@/pages/teacher/TeacherAttendance")); +const TeacherStudents = lazy(() => import("@/pages/teacher/TeacherStudents")); +const TeacherTimetable = lazy(() => import("@/pages/teacher/TeacherTimetable")); +const TeacherProfile = lazy(() => import("@/pages/teacher/TeacherProfile")); +const TeacherLibrary = lazy(() => import("@/pages/teacher/TeacherLibrary")); +const AdaptiveSettings = lazy(() => import("@/pages/teacher/AdaptiveSettings")); + +// Admin LMS pages +const AdminLmsDashboard = lazy(() => import("@/pages/admin/AdminLmsDashboard")); +const AdminQuickSetup = lazy(() => import("@/pages/admin/AdminQuickSetup")); +const SmartWizardHub = lazy(() => import("@/pages/admin/SmartWizardHub")); +const RubricWizard = lazy(() => import("@/pages/admin/wizards/RubricWizard")); +const ExamStructureWizard = lazy(() => import("@/pages/admin/wizards/ExamStructureWizard")); +const CourseWizard = lazy(() => import("@/pages/admin/wizards/CourseWizard")); +const CoursePlanWizard = lazy(() => import("@/pages/admin/wizards/CoursePlanWizard")); +const AdminCoursePlans = lazy(() => import("@/pages/admin/AdminCoursePlans")); +const AdminCoursePlanDetail = lazy(() => import("@/pages/admin/AdminCoursePlanDetail")); +const AdminCourses = lazy(() => import("@/pages/admin/AdminCourses")); +const AdminStudents = lazy(() => import("@/pages/admin/AdminStudents")); +const AdminTeachers = lazy(() => import("@/pages/admin/AdminTeachers")); +const AdminBatches = lazy(() => import("@/pages/admin/AdminBatches")); +const AdminBatchDetail = lazy(() => import("@/pages/admin/AdminBatchDetail")); +const AdminTimetable = lazy(() => import("@/pages/admin/AdminTimetable")); +const AdminReports = lazy(() => import("@/pages/admin/AdminReports")); +const AdminSettings = lazy(() => import("@/pages/admin/AdminSettings")); +const AdminProfileLms = lazy(() => import("@/pages/admin/AdminProfile")); +const TaxonomyManager = lazy(() => import("@/pages/admin/TaxonomyManager")); +const ResourceManager = lazy(() => import("@/pages/admin/ResourceManager")); +const AcademicYearManager = lazy(() => import("@/pages/admin/AcademicYearManager")); +const DepartmentManager = lazy(() => import("@/pages/admin/DepartmentManager")); +const AdmissionList = lazy(() => import("@/pages/admin/AdmissionList")); +const AdmissionDetail = lazy(() => import("@/pages/admin/AdmissionDetail")); +const AdmissionRegisterPage = lazy(() => import("@/pages/admin/AdmissionRegisterPage")); +const InstitutionalExamSessions = lazy(() => import("@/pages/admin/InstitutionalExamSessions")); +const MarksheetManager = lazy(() => import("@/pages/admin/MarksheetManager")); +const AdminStudentLeave = lazy(() => import("@/pages/admin/AdminStudentLeave")); +const AdminFees = lazy(() => import("@/pages/admin/AdminFees")); +const AdminLessons = lazy(() => import("@/pages/admin/AdminLessons")); +const AdminGradebook = lazy(() => import("@/pages/admin/AdminGradebook")); +const AdminStudentProgress = lazy(() => import("@/pages/admin/AdminStudentProgress")); +const AdminLibrary = lazy(() => import("@/pages/admin/AdminLibrary")); +const AdminActivities = lazy(() => import("@/pages/admin/AdminActivities")); +const AdminFacilities = lazy(() => import("@/pages/admin/AdminFacilities")); +const AdmissionApplication = lazy(() => import("@/pages/AdmissionApplication")); +const SubjectRegistrationPage = lazy(() => import("@/pages/student/SubjectRegistrationPage")); + +// Courseware pages +const CourseChapters = lazy(() => import("@/pages/teacher/CourseChapters")); +const ChapterDetail = lazy(() => import("@/pages/teacher/ChapterDetail")); +const AiWorkbench = lazy(() => import("@/pages/teacher/AiWorkbench")); +const TeacherDiscussionBoard = lazy(() => import("@/pages/teacher/TeacherDiscussionBoard")); +const TeacherAnnouncements = lazy(() => import("@/pages/teacher/TeacherAnnouncements")); +const StudentChapterView = lazy(() => import("@/pages/student/StudentChapterView")); +const StudentDiscussionBoard = lazy(() => import("@/pages/student/StudentDiscussionBoard")); +const StudentAnnouncements = lazy(() => import("@/pages/student/StudentAnnouncements")); +const StudentMessages = lazy(() => import("@/pages/student/StudentMessages")); +const StudentJourney = lazy(() => import("@/pages/student/StudentJourney")); +const StudentCoursePlans = lazy(() => import("@/pages/student/StudentCoursePlans")); +const StudentCoursePlanDetail = lazy(() => import("@/pages/student/StudentCoursePlanDetail")); +const AiEnglishCourse = lazy(() => import("@/pages/student/AiEnglishCourse")); +const AiIeltsCourse = lazy(() => import("@/pages/student/AiIeltsCourse")); +const ExamSession = lazy(() => import("@/pages/student/ExamSession")); +const ExamStatus = lazy(() => import("@/pages/student/ExamStatus")); +const ExamResults = lazy(() => import("@/pages/student/ExamResults")); +const GapAnalysis = lazy(() => import("@/pages/student/GapAnalysis")); +const CourseDelivery = lazy(() => import("@/pages/student/CourseDelivery")); +const GradingQueue = lazy(() => import("@/pages/admin/GradingQueue")); +const CourseConfig = lazy(() => import("@/pages/admin/CourseConfig")); +const ModuleBuilder = lazy(() => import("@/pages/admin/ModuleBuilder")); +const CourseProgress = lazy(() => import("@/pages/teacher/CourseProgress")); +const PlacementBriefing = lazy(() => import("@/pages/student/PlacementBriefing")); +const PlacementTest = lazy(() => import("@/pages/student/PlacementTest")); +const PlacementResults = lazy(() => import("@/pages/student/PlacementResults")); +const PlacementAccess = lazy(() => import("@/pages/student/PlacementAccess")); +const FaqManager = lazy(() => import("@/pages/admin/FaqManager")); +const NotificationRules = lazy(() => import("@/pages/admin/NotificationRules")); +const ApprovalWorkflowConfig = lazy(() => import("@/pages/admin/ApprovalWorkflowConfig")); +const RolesPermissions = lazy(() => import("@/pages/admin/RolesPermissions")); +const AuthorityMatrix = lazy(() => import("@/pages/admin/AuthorityMatrix")); +const UserRoles = lazy(() => import("@/pages/admin/UserRoles")); +const BulkStudentUpload = lazy(() => import("@/pages/admin/BulkStudentUpload")); +const CredentialDashboard = lazy(() => import("@/pages/admin/CredentialDashboard")); +const AiEnglishQuality = lazy(() => import("@/pages/admin/AiEnglishQuality")); +const AiEnglishTaxonomy = lazy(() => import("@/pages/admin/AiEnglishTaxonomy")); +const AiIeltsValidation = lazy(() => import("@/pages/admin/AiIeltsValidation")); +const AdaptiveDashboard = lazy(() => import("@/pages/admin/AdaptiveDashboard")); +const AdaptiveStudentDetail = lazy(() => import("@/pages/admin/AdaptiveStudentDetail")); +const LevelMappingConfig = lazy(() => import("@/pages/admin/LevelMappingConfig")); +const WhiteLabelBranding = lazy(() => import("@/pages/admin/WhiteLabelBranding")); +const ScoreApprovalQueue = lazy(() => import("@/pages/admin/ScoreApprovalQueue")); +const ExamTemplateSelection = lazy(() => import("@/pages/admin/ExamTemplateSelection")); +const IeltsExamCreate = lazy(() => import("@/pages/admin/IeltsExamCreate")); +const IeltsSkillConfig = lazy(() => import("@/pages/admin/IeltsSkillConfig")); +const IeltsContentPool = lazy(() => import("@/pages/admin/IeltsContentPool")); +const IeltsExamValidation = lazy(() => import("@/pages/admin/IeltsExamValidation")); +const CustomExamCreate = lazy(() => import("@/pages/admin/CustomExamCreate")); +const ExamReviewQueue = lazy(() => import("@/pages/admin/ExamReviewQueue")); +const ExamReviewDetail = lazy(() => import("@/pages/admin/ExamReviewDetail")); +const AIPromptEditor = lazy(() => import("@/pages/admin/AIPromptEditor")); +const AIFeedbackTriage = lazy(() => import("@/pages/admin/AIFeedbackTriage")); +const PrivacyCenter = lazy(() => import("@/pages/PrivacyCenter")); +const OfficialExamAccess = lazy(() => import("@/pages/OfficialExamAccess")); +const FaqPage = lazy(() => import("@/pages/FaqPage")); +const NotFound = lazy(() => import("@/pages/NotFound")); + +function StudentSubscriptionPlaceholder() { + const navigate = useNavigate(); + return ( +
+

Subscription checkout will be available here.

+ +
+ ); +} + +function RouteFallback() { + return ( +
+
+
+ ); +} const App = () => ( + + - + + }> {/* Auth routes */} } /> } /> + } /> } /> + } /> + } /> {/* Public pages */} } /> } /> @@ -128,8 +235,16 @@ const App = () => ( } /> } /> + }> + } /> + + {/* Student routes */} }> + } /> + } /> + } /> + } /> }> } /> } /> @@ -139,6 +254,7 @@ const App = () => ( } /> } /> } /> + } /> } /> } /> } /> @@ -150,14 +266,26 @@ const App = () => ( } /> } /> } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> {/* Teacher routes */} - }> + }> }> } /> + } /> } /> + } /> } /> } /> } /> @@ -165,12 +293,15 @@ const App = () => ( } /> } /> } /> - } /> - } /> - } /> + } /> + } /> + } /> } /> } /> } /> + } /> + } /> + } /> @@ -179,6 +310,14 @@ const App = () => ( }> {/* LMS Dashboard */} } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> {/* Original platform dashboard */} } /> {/* LMS pages */} @@ -191,6 +330,7 @@ const App = () => ( } /> } /> } /> + } /> {/* Original academic pages */} } /> } /> @@ -213,7 +353,16 @@ const App = () => ( } /> } /> } /> - } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> } /> } /> {/* Institutional LMS pages */} @@ -239,6 +388,19 @@ const App = () => ( } /> } /> } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> @@ -249,10 +411,13 @@ const App = () => ( } /> } /> + + + ); export default App; diff --git a/src/components/AIFeedbackButtons.tsx b/src/components/AIFeedbackButtons.tsx new file mode 100644 index 0000000..b96e851 --- /dev/null +++ b/src/components/AIFeedbackButtons.tsx @@ -0,0 +1,164 @@ +import { useEffect, useState } from "react"; +import { ThumbsDown, ThumbsUp } from "lucide-react"; +import { toast } from "sonner"; + +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { Textarea } from "@/components/ui/textarea"; +import { + useAIFeedbackSummary, + useSubmitAIFeedback, +} from "@/hooks/queries/useAIFeedback"; +import { cn } from "@/lib/utils"; +import type { + AIFeedbackRating, + AIFeedbackSubjectType, +} from "@/types/ai-feedback"; + +export interface AIFeedbackButtonsProps { + subjectType: AIFeedbackSubjectType; + subjectId: number; + promptKey?: string; + promptVersion?: number; + aiLogId?: number; + entityId?: number; + courseId?: number; + size?: "sm" | "md"; + className?: string; +} + +/** Thumbs up/down widget for any AI-generated artefact. + * + * Always renders the same UI regardless of whether the user has rated the + * artefact before — a previous rating will show as highlighted. Clicking the + * same button again is a no-op; clicking the opposite button updates the + * server-side row in place. A thumbs-down always prompts the user for a short + * comment (required by the backend). + */ +export function AIFeedbackButtons({ + subjectType, + subjectId, + promptKey, + promptVersion, + aiLogId, + entityId, + courseId, + size = "sm", + className, +}: AIFeedbackButtonsProps) { + const summary = useAIFeedbackSummary(subjectType, subjectId); + const submit = useSubmitAIFeedback(); + + const [downOpen, setDownOpen] = useState(false); + const [comment, setComment] = useState(""); + + useEffect(() => { + if (downOpen) { + setComment(summary.data?.my_comment ?? ""); + } + }, [downOpen, summary.data?.my_comment]); + + const myRating: AIFeedbackRating | null = summary.data?.my_rating ?? null; + + const submitUp = async () => { + if (myRating === "up") return; + try { + await submit.mutateAsync({ + subject_type: subjectType, + subject_id: subjectId, + rating: "up", + prompt_key: promptKey, + prompt_version: promptVersion, + ai_log_id: aiLogId, + entity_id: entityId, + course_id: courseId, + }); + } catch (err) { + toast.error(err instanceof Error ? err.message : "Failed to submit"); + } + }; + + const submitDown = async () => { + if (!comment.trim()) { + toast.error("Please tell us what was wrong."); + return; + } + try { + await submit.mutateAsync({ + subject_type: subjectType, + subject_id: subjectId, + rating: "down", + comment: comment.trim(), + prompt_key: promptKey, + prompt_version: promptVersion, + ai_log_id: aiLogId, + entity_id: entityId, + course_id: courseId, + }); + setDownOpen(false); + } catch (err) { + toast.error(err instanceof Error ? err.message : "Failed to submit"); + } + }; + + const btnSize = size === "sm" ? "sm" : "default"; + const iconCls = size === "sm" ? "h-3.5 w-3.5" : "h-4 w-4"; + + return ( +
+ + + + + + + What went wrong? + +